diff options
author | David S. Miller <davem@davemloft.net> | 2017-01-08 22:01:22 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-08 22:01:22 -0500 |
commit | 03430fa10b99e95e3a15eb7c00978fb1652f3b24 (patch) | |
tree | 431a83e3fd514e6fc2d8bbbe672f514c2e6bd85f | |
parent | a2cd64f30140c5aebd9359f66c00c19d5c6bece6 (diff) | |
parent | 2cfe8f8290bd28cf1ee67db914a6e76cf8e6437b (diff) |
Merge branch 'bcm_sf2-fixes'
Florian Fainelli says:
====================
net: dsa: bcm_sf2: Couple fixes
Here are a couple of fixes for bcm_sf2, please queue these up for -stable
as well, thank you very much!
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/dsa/bcm_sf2.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 9ec33b51a0ed..2ce7ae97ac91 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c | |||
@@ -393,7 +393,7 @@ static int bcm_sf2_sw_mdio_read(struct mii_bus *bus, int addr, int regnum) | |||
393 | if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr)) | 393 | if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr)) |
394 | return bcm_sf2_sw_indir_rw(priv, 1, addr, regnum, 0); | 394 | return bcm_sf2_sw_indir_rw(priv, 1, addr, regnum, 0); |
395 | else | 395 | else |
396 | return mdiobus_read(priv->master_mii_bus, addr, regnum); | 396 | return mdiobus_read_nested(priv->master_mii_bus, addr, regnum); |
397 | } | 397 | } |
398 | 398 | ||
399 | static int bcm_sf2_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, | 399 | static int bcm_sf2_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, |
@@ -407,7 +407,7 @@ static int bcm_sf2_sw_mdio_write(struct mii_bus *bus, int addr, int regnum, | |||
407 | if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr)) | 407 | if (addr == BRCM_PSEUDO_PHY_ADDR && priv->indir_phy_mask & BIT(addr)) |
408 | bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val); | 408 | bcm_sf2_sw_indir_rw(priv, 0, addr, regnum, val); |
409 | else | 409 | else |
410 | mdiobus_write(priv->master_mii_bus, addr, regnum, val); | 410 | mdiobus_write_nested(priv->master_mii_bus, addr, regnum, val); |
411 | 411 | ||
412 | return 0; | 412 | return 0; |
413 | } | 413 | } |
@@ -982,6 +982,7 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
982 | const char *reg_names[BCM_SF2_REGS_NUM] = BCM_SF2_REGS_NAME; | 982 | const char *reg_names[BCM_SF2_REGS_NUM] = BCM_SF2_REGS_NAME; |
983 | struct device_node *dn = pdev->dev.of_node; | 983 | struct device_node *dn = pdev->dev.of_node; |
984 | struct b53_platform_data *pdata; | 984 | struct b53_platform_data *pdata; |
985 | struct dsa_switch_ops *ops; | ||
985 | struct bcm_sf2_priv *priv; | 986 | struct bcm_sf2_priv *priv; |
986 | struct b53_device *dev; | 987 | struct b53_device *dev; |
987 | struct dsa_switch *ds; | 988 | struct dsa_switch *ds; |
@@ -995,6 +996,10 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
995 | if (!priv) | 996 | if (!priv) |
996 | return -ENOMEM; | 997 | return -ENOMEM; |
997 | 998 | ||
999 | ops = devm_kzalloc(&pdev->dev, sizeof(*ops), GFP_KERNEL); | ||
1000 | if (!ops) | ||
1001 | return -ENOMEM; | ||
1002 | |||
998 | dev = b53_switch_alloc(&pdev->dev, &bcm_sf2_io_ops, priv); | 1003 | dev = b53_switch_alloc(&pdev->dev, &bcm_sf2_io_ops, priv); |
999 | if (!dev) | 1004 | if (!dev) |
1000 | return -ENOMEM; | 1005 | return -ENOMEM; |
@@ -1014,6 +1019,8 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) | |||
1014 | ds = dev->ds; | 1019 | ds = dev->ds; |
1015 | 1020 | ||
1016 | /* Override the parts that are non-standard wrt. normal b53 devices */ | 1021 | /* Override the parts that are non-standard wrt. normal b53 devices */ |
1022 | memcpy(ops, ds->ops, sizeof(*ops)); | ||
1023 | ds->ops = ops; | ||
1017 | ds->ops->get_tag_protocol = bcm_sf2_sw_get_tag_protocol; | 1024 | ds->ops->get_tag_protocol = bcm_sf2_sw_get_tag_protocol; |
1018 | ds->ops->setup = bcm_sf2_sw_setup; | 1025 | ds->ops->setup = bcm_sf2_sw_setup; |
1019 | ds->ops->get_phy_flags = bcm_sf2_sw_get_phy_flags; | 1026 | ds->ops->get_phy_flags = bcm_sf2_sw_get_phy_flags; |