diff options
author | David S. Miller <davem@davemloft.net> | 2017-02-15 13:20:57 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-15 13:20:57 -0500 |
commit | 6a553b4894264eb880fe07c2ac6be54eea1d7abb (patch) | |
tree | ca6d1690943b85df1dbdb4bcd5d770b67d666df8 | |
parent | 36a4a50f4048f21b7c2694b37804dfc1d9890ab4 (diff) | |
parent | c80151ec4b65c08dac6a653a849ec5e50d94708f (diff) |
Merge branch 'stmmac-misc'
Corentin Labbe says:
====================
stmmac: misc patchs
This is a follow up of my previous stmmac serie which address some comment
done in v2.
====================
Acked-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 18 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 40 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 82 |
3 files changed, 71 insertions, 69 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c index aab895d9257e..5ff6bc4eb8f1 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | |||
@@ -442,24 +442,24 @@ static void stmmac_ethtool_gregs(struct net_device *dev, | |||
442 | 442 | ||
443 | memset(reg_space, 0x0, REG_SPACE_SIZE); | 443 | memset(reg_space, 0x0, REG_SPACE_SIZE); |
444 | 444 | ||
445 | if (!(priv->plat->has_gmac || priv->plat->has_gmac4)) { | 445 | if (priv->plat->has_gmac || priv->plat->has_gmac4) { |
446 | /* MAC registers */ | 446 | /* MAC registers */ |
447 | for (i = 0; i < 12; i++) | 447 | for (i = 0; i < 55; i++) |
448 | reg_space[i] = readl(priv->ioaddr + (i * 4)); | 448 | reg_space[i] = readl(priv->ioaddr + (i * 4)); |
449 | /* DMA registers */ | 449 | /* DMA registers */ |
450 | for (i = 0; i < 9; i++) | 450 | for (i = 0; i < 22; i++) |
451 | reg_space[i + 12] = | 451 | reg_space[i + 55] = |
452 | readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4))); | 452 | readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4))); |
453 | reg_space[22] = readl(priv->ioaddr + DMA_CUR_TX_BUF_ADDR); | ||
454 | reg_space[23] = readl(priv->ioaddr + DMA_CUR_RX_BUF_ADDR); | ||
455 | } else { | 453 | } else { |
456 | /* MAC registers */ | 454 | /* MAC registers */ |
457 | for (i = 0; i < 55; i++) | 455 | for (i = 0; i < 12; i++) |
458 | reg_space[i] = readl(priv->ioaddr + (i * 4)); | 456 | reg_space[i] = readl(priv->ioaddr + (i * 4)); |
459 | /* DMA registers */ | 457 | /* DMA registers */ |
460 | for (i = 0; i < 22; i++) | 458 | for (i = 0; i < 9; i++) |
461 | reg_space[i + 55] = | 459 | reg_space[i + 12] = |
462 | readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4))); | 460 | readl(priv->ioaddr + (DMA_BUS_MODE + (i * 4))); |
461 | reg_space[22] = readl(priv->ioaddr + DMA_CUR_TX_BUF_ADDR); | ||
462 | reg_space[23] = readl(priv->ioaddr + DMA_CUR_RX_BUF_ADDR); | ||
463 | } | 463 | } |
464 | } | 464 | } |
465 | 465 | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 7251871eaa32..3cbe09682afe 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -716,32 +716,36 @@ static void stmmac_adjust_link(struct net_device *dev) | |||
716 | new_state = 1; | 716 | new_state = 1; |
717 | switch (phydev->speed) { | 717 | switch (phydev->speed) { |
718 | case 1000: | 718 | case 1000: |
719 | if (likely((priv->plat->has_gmac) || | 719 | if (priv->plat->has_gmac || |
720 | (priv->plat->has_gmac4))) | 720 | priv->plat->has_gmac4) |
721 | ctrl &= ~priv->hw->link.port; | 721 | ctrl &= ~priv->hw->link.port; |
722 | stmmac_hw_fix_mac_speed(priv); | ||
723 | break; | 722 | break; |
724 | case 100: | 723 | case 100: |
724 | if (priv->plat->has_gmac || | ||
725 | priv->plat->has_gmac4) { | ||
726 | ctrl |= priv->hw->link.port; | ||
727 | ctrl |= priv->hw->link.speed; | ||
728 | } else { | ||
729 | ctrl &= ~priv->hw->link.port; | ||
730 | } | ||
731 | break; | ||
725 | case 10: | 732 | case 10: |
726 | if (likely((priv->plat->has_gmac) || | 733 | if (priv->plat->has_gmac || |
727 | (priv->plat->has_gmac4))) { | 734 | priv->plat->has_gmac4) { |
728 | ctrl |= priv->hw->link.port; | 735 | ctrl |= priv->hw->link.port; |
729 | if (phydev->speed == SPEED_100) { | 736 | ctrl &= ~(priv->hw->link.speed); |
730 | ctrl |= priv->hw->link.speed; | ||
731 | } else { | ||
732 | ctrl &= ~(priv->hw->link.speed); | ||
733 | } | ||
734 | } else { | 737 | } else { |
735 | ctrl &= ~priv->hw->link.port; | 738 | ctrl &= ~priv->hw->link.port; |
736 | } | 739 | } |
737 | stmmac_hw_fix_mac_speed(priv); | ||
738 | break; | 740 | break; |
739 | default: | 741 | default: |
740 | netif_warn(priv, link, priv->dev, | 742 | netif_warn(priv, link, priv->dev, |
741 | "broken speed: %d\n", phydev->speed); | 743 | "broken speed: %d\n", phydev->speed); |
744 | phydev->speed = SPEED_UNKNOWN; | ||
742 | break; | 745 | break; |
743 | } | 746 | } |
744 | 747 | if (phydev->speed != SPEED_UNKNOWN) | |
748 | stmmac_hw_fix_mac_speed(priv); | ||
745 | priv->speed = phydev->speed; | 749 | priv->speed = phydev->speed; |
746 | } | 750 | } |
747 | 751 | ||
@@ -754,8 +758,8 @@ static void stmmac_adjust_link(struct net_device *dev) | |||
754 | } else if (priv->oldlink) { | 758 | } else if (priv->oldlink) { |
755 | new_state = 1; | 759 | new_state = 1; |
756 | priv->oldlink = 0; | 760 | priv->oldlink = 0; |
757 | priv->speed = 0; | 761 | priv->speed = SPEED_UNKNOWN; |
758 | priv->oldduplex = -1; | 762 | priv->oldduplex = DUPLEX_UNKNOWN; |
759 | } | 763 | } |
760 | 764 | ||
761 | if (new_state && netif_msg_link(priv)) | 765 | if (new_state && netif_msg_link(priv)) |
@@ -817,8 +821,8 @@ static int stmmac_init_phy(struct net_device *dev) | |||
817 | int interface = priv->plat->interface; | 821 | int interface = priv->plat->interface; |
818 | int max_speed = priv->plat->max_speed; | 822 | int max_speed = priv->plat->max_speed; |
819 | priv->oldlink = 0; | 823 | priv->oldlink = 0; |
820 | priv->speed = 0; | 824 | priv->speed = SPEED_UNKNOWN; |
821 | priv->oldduplex = -1; | 825 | priv->oldduplex = DUPLEX_UNKNOWN; |
822 | 826 | ||
823 | if (priv->plat->phy_node) { | 827 | if (priv->plat->phy_node) { |
824 | phydev = of_phy_connect(dev, priv->plat->phy_node, | 828 | phydev = of_phy_connect(dev, priv->plat->phy_node, |
@@ -3434,8 +3438,8 @@ int stmmac_suspend(struct device *dev) | |||
3434 | spin_unlock_irqrestore(&priv->lock, flags); | 3438 | spin_unlock_irqrestore(&priv->lock, flags); |
3435 | 3439 | ||
3436 | priv->oldlink = 0; | 3440 | priv->oldlink = 0; |
3437 | priv->speed = 0; | 3441 | priv->speed = SPEED_UNKNOWN; |
3438 | priv->oldduplex = -1; | 3442 | priv->oldduplex = DUPLEX_UNKNOWN; |
3439 | return 0; | 3443 | return 0; |
3440 | } | 3444 | } |
3441 | EXPORT_SYMBOL_GPL(stmmac_suspend); | 3445 | EXPORT_SYMBOL_GPL(stmmac_suspend); |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c index d9893cf05695..db157a47000c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | |||
@@ -247,50 +247,48 @@ int stmmac_mdio_register(struct net_device *ndev) | |||
247 | found = 0; | 247 | found = 0; |
248 | for (addr = 0; addr < PHY_MAX_ADDR; addr++) { | 248 | for (addr = 0; addr < PHY_MAX_ADDR; addr++) { |
249 | struct phy_device *phydev = mdiobus_get_phy(new_bus, addr); | 249 | struct phy_device *phydev = mdiobus_get_phy(new_bus, addr); |
250 | int act = 0; | ||
251 | char irq_num[4]; | ||
252 | char *irq_str; | ||
253 | |||
254 | if (!phydev) | ||
255 | continue; | ||
256 | |||
257 | /* | ||
258 | * If an IRQ was provided to be assigned after | ||
259 | * the bus probe, do it here. | ||
260 | */ | ||
261 | if (!mdio_bus_data->irqs && | ||
262 | (mdio_bus_data->probed_phy_irq > 0)) { | ||
263 | new_bus->irq[addr] = mdio_bus_data->probed_phy_irq; | ||
264 | phydev->irq = mdio_bus_data->probed_phy_irq; | ||
265 | } | ||
250 | 266 | ||
251 | if (phydev) { | 267 | /* |
252 | int act = 0; | 268 | * If we're going to bind the MAC to this PHY bus, |
253 | char irq_num[4]; | 269 | * and no PHY number was provided to the MAC, |
254 | char *irq_str; | 270 | * use the one probed here. |
255 | 271 | */ | |
256 | /* | 272 | if (priv->plat->phy_addr == -1) |
257 | * If an IRQ was provided to be assigned after | 273 | priv->plat->phy_addr = addr; |
258 | * the bus probe, do it here. | 274 | |
259 | */ | 275 | act = (priv->plat->phy_addr == addr); |
260 | if ((!mdio_bus_data->irqs) && | 276 | switch (phydev->irq) { |
261 | (mdio_bus_data->probed_phy_irq > 0)) { | 277 | case PHY_POLL: |
262 | new_bus->irq[addr] = | 278 | irq_str = "POLL"; |
263 | mdio_bus_data->probed_phy_irq; | 279 | break; |
264 | phydev->irq = mdio_bus_data->probed_phy_irq; | 280 | case PHY_IGNORE_INTERRUPT: |
265 | } | 281 | irq_str = "IGNORE"; |
266 | 282 | break; | |
267 | /* | 283 | default: |
268 | * If we're going to bind the MAC to this PHY bus, | 284 | sprintf(irq_num, "%d", phydev->irq); |
269 | * and no PHY number was provided to the MAC, | 285 | irq_str = irq_num; |
270 | * use the one probed here. | 286 | break; |
271 | */ | ||
272 | if (priv->plat->phy_addr == -1) | ||
273 | priv->plat->phy_addr = addr; | ||
274 | |||
275 | act = (priv->plat->phy_addr == addr); | ||
276 | switch (phydev->irq) { | ||
277 | case PHY_POLL: | ||
278 | irq_str = "POLL"; | ||
279 | break; | ||
280 | case PHY_IGNORE_INTERRUPT: | ||
281 | irq_str = "IGNORE"; | ||
282 | break; | ||
283 | default: | ||
284 | sprintf(irq_num, "%d", phydev->irq); | ||
285 | irq_str = irq_num; | ||
286 | break; | ||
287 | } | ||
288 | netdev_info(ndev, "PHY ID %08x at %d IRQ %s (%s)%s\n", | ||
289 | phydev->phy_id, addr, | ||
290 | irq_str, phydev_name(phydev), | ||
291 | act ? " active" : ""); | ||
292 | found = 1; | ||
293 | } | 287 | } |
288 | netdev_info(ndev, "PHY ID %08x at %d IRQ %s (%s)%s\n", | ||
289 | phydev->phy_id, addr, irq_str, phydev_name(phydev), | ||
290 | act ? " active" : ""); | ||
291 | found = 1; | ||
294 | } | 292 | } |
295 | 293 | ||
296 | if (!found && !mdio_node) { | 294 | if (!found && !mdio_node) { |