Loading drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +19 −23 Original line number Diff line number Diff line Loading @@ -1016,9 +1016,7 @@ static int ethqos_phy_intr_enable(struct qcom_ethqos *ethqos) ethqos->phy_intr); return ret; } #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Phy IRQ interrupt enabled"); #endif phy_intr_en = true; return ret; } Loading Loading @@ -1481,10 +1479,6 @@ static void qcom_ethqos_bringup_iface(struct work_struct *work) if (dev_change_flags(ndev, ndev->flags | IFF_UP) < 0) ETHQOSINFO("ERROR\n"); #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Device flag changed to UP "); #endif rtnl_unlock(); ETHQOSINFO("exit\n"); Loading @@ -1493,24 +1487,23 @@ static void qcom_ethqos_bringup_iface(struct work_struct *work) void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) { struct qcom_ethqos *ethqos = plat->bsp_priv; struct platform_device *pdev = ethqos->pdev; struct net_device *ndev = platform_get_drvdata(pdev); struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos); ethqos->phy_wol_supported = 0; ethqos->phy_wol_wolopts = 0; /* Check if phydev is valid*/ /* Check and enable Wake-on-LAN functionality in PHY*/ if (ndev->phydev) { if (priv->phydev) { struct ethtool_wolinfo wol = {.cmd = ETHTOOL_GWOL}; wol.supported = 0; wol.wolopts = 0; ETHQOSINFO("phydev addr: 0x%pK\n", ndev->phydev); phy_ethtool_get_wol(ndev->phydev, &wol); ETHQOSINFO("phydev addr: 0x%pK\n", priv->phydev); phy_ethtool_get_wol(priv->phydev, &wol); ethqos->phy_wol_supported = wol.supported; ETHQOSINFO("Get WoL[0x%x] in %s\n", wol.supported, ndev->phydev->drv->name); priv->phydev->drv->name); /* Try to enable supported Wake-on-LAN features in PHY*/ if (wol.supported) { Loading @@ -1519,7 +1512,7 @@ void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) wol.cmd = ETHTOOL_SWOL; wol.wolopts = wol.supported; if (!phy_ethtool_set_wol(ndev->phydev, &wol)) { if (!phy_ethtool_set_wol(priv->phydev, &wol)) { ethqos->phy_wol_wolopts = wol.wolopts; enable_irq_wake(ethqos->phy_intr); Loading @@ -1527,11 +1520,11 @@ void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) ETHQOSINFO("Enabled WoL[0x%x] in %s\n", wol.wolopts, ndev->phydev->drv->name); priv->phydev->drv->name); } else { ETHQOSINFO("Disabled WoL[0x%x] in %s\n", wol.wolopts, ndev->phydev->drv->name); priv->phydev->drv->name); } } } Loading Loading @@ -1643,7 +1636,6 @@ static int qcom_ethqos_probe(struct platform_device *pdev) struct net_device *ndev; struct stmmac_priv *priv; int ret; struct phy_device *phydev; #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Ethernet probe start"); Loading Loading @@ -1798,13 +1790,13 @@ static int qcom_ethqos_probe(struct platform_device *pdev) ndev = dev_get_drvdata(ðqos->pdev->dev); priv = netdev_priv(ndev); phydev = mdiobus_get_phy(priv->mii, priv->plat->phy_addr); if (phydev && phydev->drv && phydev->drv->config_intr && !phydev->drv->config_intr(phydev)) { if (priv->phydev && priv->phydev->drv && priv->phydev->drv->config_intr && !priv->phydev->drv->config_intr(priv->phydev)) { qcom_ethqos_request_phy_wol(priv->plat); phydev->irq = PHY_IGNORE_INTERRUPT; phydev->interrupts = PHY_INTERRUPT_ENABLED; priv->phydev->irq = PHY_IGNORE_INTERRUPT; priv->phydev->interrupts = PHY_INTERRUPT_ENABLED; } else { ETHQOSERR("config_phy_intr configuration failed"); } Loading @@ -1824,6 +1816,10 @@ static int qcom_ethqos_probe(struct platform_device *pdev) ethqos_ipa_offload_event_handler(ethqos, EV_PROBE_INIT); priv->hw->mac->map_mtl_to_dma(priv->hw, 0, 1); //change #endif #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Ethernet probe end"); #endif return ret; err_clk: Loading drivers/net/ethernet/stmicro/stmmac/stmmac.h +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ struct stmmac_priv { struct net_device *dev; struct device *device; struct mac_device_info *hw; struct phy_device *phydev; /* Mutex lock */ struct mutex lock; Loading drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +38 −30 Original line number Diff line number Diff line Loading @@ -949,6 +949,8 @@ static int stmmac_init_phy(struct net_device *dev) struct stmmac_priv *priv = netdev_priv(dev); u32 tx_cnt = priv->plat->tx_queues_to_use; struct phy_device *phydev; char phy_id_fmt[MII_BUS_ID_SIZE + 3]; char bus_id[MII_BUS_ID_SIZE]; int interface = priv->plat->interface; int max_speed = priv->plat->max_speed; int ret = 0; Loading @@ -957,8 +959,38 @@ static int stmmac_init_phy(struct net_device *dev) priv->speed = SPEED_UNKNOWN; priv->oldduplex = DUPLEX_UNKNOWN; phydev = mdiobus_get_phy(priv->mii, priv->plat->phy_addr); if (priv->plat->early_eth && priv->phydev) { phydev = priv->phydev; phydev->skip_sw_reset = true; ret = phy_connect_direct(dev, phydev, &stmmac_adjust_link, interface); if (ret) { pr_info("phy_connect_direct failed\n"); return ret; } } else { if (priv->plat->phy_node) { phydev = of_phy_connect(dev, priv->plat->phy_node, &stmmac_adjust_link, 0, interface); } else { snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", priv->plat->bus_id); snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, priv->plat->phy_addr); netdev_dbg(priv->dev, "%s: trying to attach to %s\n", __func__, phy_id_fmt); phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link, interface); } if (IS_ERR_OR_NULL(phydev)) { netdev_err(priv->dev, "Could not attach to PHY\n"); Loading @@ -967,25 +999,8 @@ static int stmmac_init_phy(struct net_device *dev) return PTR_ERR(phydev); } phydev->skip_sw_reset = true; ret = phy_connect_direct(dev, phydev, &stmmac_adjust_link, interface); if (ret) { pr_info("phy_connect_direct failed\n"); return ret; } /* Broken HW is sometimes missing the pull-up resistor on the * MDIO line, which results in reads to non-existent devices returning * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent * device as well. * Note: phydev->phy_id is the result of reading the UID PHY registers. */ if (!priv->plat->phy_node && phydev->phy_id == 0) { phy_disconnect(phydev); return -ENODEV; } pr_info(" qcom-ethqos: %s early eth setting stmmac init\n", __func__); Loading @@ -1005,9 +1020,6 @@ static int stmmac_init_phy(struct net_device *dev) SUPPORTED_100baseT_Half | SUPPORTED_10baseT_Half); #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Init Phy device"); #endif /* Early ethernet settings to bring up link in 100M, * Auto neg Off with full duplex link. */ Loading Loading @@ -2695,10 +2707,6 @@ static int stmmac_open(struct net_device *dev) struct stmmac_priv *priv = netdev_priv(dev); int ret; #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Stmmac open called"); #endif if (priv->hw->pcs != STMMAC_PCS_RGMII && priv->hw->pcs != STMMAC_PCS_TBI && priv->hw->pcs != STMMAC_PCS_RTBI) { Loading drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +1 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,7 @@ int stmmac_mdio_register(struct net_device *ndev) if (priv->plat->phy_addr == -1) priv->plat->phy_addr = addr; priv->phydev = phydev; phy_attached_info(phydev); found = 1; } Loading Loading
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c +19 −23 Original line number Diff line number Diff line Loading @@ -1016,9 +1016,7 @@ static int ethqos_phy_intr_enable(struct qcom_ethqos *ethqos) ethqos->phy_intr); return ret; } #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Phy IRQ interrupt enabled"); #endif phy_intr_en = true; return ret; } Loading Loading @@ -1481,10 +1479,6 @@ static void qcom_ethqos_bringup_iface(struct work_struct *work) if (dev_change_flags(ndev, ndev->flags | IFF_UP) < 0) ETHQOSINFO("ERROR\n"); #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Device flag changed to UP "); #endif rtnl_unlock(); ETHQOSINFO("exit\n"); Loading @@ -1493,24 +1487,23 @@ static void qcom_ethqos_bringup_iface(struct work_struct *work) void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) { struct qcom_ethqos *ethqos = plat->bsp_priv; struct platform_device *pdev = ethqos->pdev; struct net_device *ndev = platform_get_drvdata(pdev); struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos); ethqos->phy_wol_supported = 0; ethqos->phy_wol_wolopts = 0; /* Check if phydev is valid*/ /* Check and enable Wake-on-LAN functionality in PHY*/ if (ndev->phydev) { if (priv->phydev) { struct ethtool_wolinfo wol = {.cmd = ETHTOOL_GWOL}; wol.supported = 0; wol.wolopts = 0; ETHQOSINFO("phydev addr: 0x%pK\n", ndev->phydev); phy_ethtool_get_wol(ndev->phydev, &wol); ETHQOSINFO("phydev addr: 0x%pK\n", priv->phydev); phy_ethtool_get_wol(priv->phydev, &wol); ethqos->phy_wol_supported = wol.supported; ETHQOSINFO("Get WoL[0x%x] in %s\n", wol.supported, ndev->phydev->drv->name); priv->phydev->drv->name); /* Try to enable supported Wake-on-LAN features in PHY*/ if (wol.supported) { Loading @@ -1519,7 +1512,7 @@ void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) wol.cmd = ETHTOOL_SWOL; wol.wolopts = wol.supported; if (!phy_ethtool_set_wol(ndev->phydev, &wol)) { if (!phy_ethtool_set_wol(priv->phydev, &wol)) { ethqos->phy_wol_wolopts = wol.wolopts; enable_irq_wake(ethqos->phy_intr); Loading @@ -1527,11 +1520,11 @@ void qcom_ethqos_request_phy_wol(struct plat_stmmacenet_data *plat) ETHQOSINFO("Enabled WoL[0x%x] in %s\n", wol.wolopts, ndev->phydev->drv->name); priv->phydev->drv->name); } else { ETHQOSINFO("Disabled WoL[0x%x] in %s\n", wol.wolopts, ndev->phydev->drv->name); priv->phydev->drv->name); } } } Loading Loading @@ -1643,7 +1636,6 @@ static int qcom_ethqos_probe(struct platform_device *pdev) struct net_device *ndev; struct stmmac_priv *priv; int ret; struct phy_device *phydev; #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Ethernet probe start"); Loading Loading @@ -1798,13 +1790,13 @@ static int qcom_ethqos_probe(struct platform_device *pdev) ndev = dev_get_drvdata(ðqos->pdev->dev); priv = netdev_priv(ndev); phydev = mdiobus_get_phy(priv->mii, priv->plat->phy_addr); if (phydev && phydev->drv && phydev->drv->config_intr && !phydev->drv->config_intr(phydev)) { if (priv->phydev && priv->phydev->drv && priv->phydev->drv->config_intr && !priv->phydev->drv->config_intr(priv->phydev)) { qcom_ethqos_request_phy_wol(priv->plat); phydev->irq = PHY_IGNORE_INTERRUPT; phydev->interrupts = PHY_INTERRUPT_ENABLED; priv->phydev->irq = PHY_IGNORE_INTERRUPT; priv->phydev->interrupts = PHY_INTERRUPT_ENABLED; } else { ETHQOSERR("config_phy_intr configuration failed"); } Loading @@ -1824,6 +1816,10 @@ static int qcom_ethqos_probe(struct platform_device *pdev) ethqos_ipa_offload_event_handler(ethqos, EV_PROBE_INIT); priv->hw->mac->map_mtl_to_dma(priv->hw, 0, 1); //change #endif #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Ethernet probe end"); #endif return ret; err_clk: Loading
drivers/net/ethernet/stmicro/stmmac/stmmac.h +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ struct stmmac_priv { struct net_device *dev; struct device *device; struct mac_device_info *hw; struct phy_device *phydev; /* Mutex lock */ struct mutex lock; Loading
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +38 −30 Original line number Diff line number Diff line Loading @@ -949,6 +949,8 @@ static int stmmac_init_phy(struct net_device *dev) struct stmmac_priv *priv = netdev_priv(dev); u32 tx_cnt = priv->plat->tx_queues_to_use; struct phy_device *phydev; char phy_id_fmt[MII_BUS_ID_SIZE + 3]; char bus_id[MII_BUS_ID_SIZE]; int interface = priv->plat->interface; int max_speed = priv->plat->max_speed; int ret = 0; Loading @@ -957,8 +959,38 @@ static int stmmac_init_phy(struct net_device *dev) priv->speed = SPEED_UNKNOWN; priv->oldduplex = DUPLEX_UNKNOWN; phydev = mdiobus_get_phy(priv->mii, priv->plat->phy_addr); if (priv->plat->early_eth && priv->phydev) { phydev = priv->phydev; phydev->skip_sw_reset = true; ret = phy_connect_direct(dev, phydev, &stmmac_adjust_link, interface); if (ret) { pr_info("phy_connect_direct failed\n"); return ret; } } else { if (priv->plat->phy_node) { phydev = of_phy_connect(dev, priv->plat->phy_node, &stmmac_adjust_link, 0, interface); } else { snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x", priv->plat->bus_id); snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, priv->plat->phy_addr); netdev_dbg(priv->dev, "%s: trying to attach to %s\n", __func__, phy_id_fmt); phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link, interface); } if (IS_ERR_OR_NULL(phydev)) { netdev_err(priv->dev, "Could not attach to PHY\n"); Loading @@ -967,25 +999,8 @@ static int stmmac_init_phy(struct net_device *dev) return PTR_ERR(phydev); } phydev->skip_sw_reset = true; ret = phy_connect_direct(dev, phydev, &stmmac_adjust_link, interface); if (ret) { pr_info("phy_connect_direct failed\n"); return ret; } /* Broken HW is sometimes missing the pull-up resistor on the * MDIO line, which results in reads to non-existent devices returning * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent * device as well. * Note: phydev->phy_id is the result of reading the UID PHY registers. */ if (!priv->plat->phy_node && phydev->phy_id == 0) { phy_disconnect(phydev); return -ENODEV; } pr_info(" qcom-ethqos: %s early eth setting stmmac init\n", __func__); Loading @@ -1005,9 +1020,6 @@ static int stmmac_init_phy(struct net_device *dev) SUPPORTED_100baseT_Half | SUPPORTED_10baseT_Half); #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Init Phy device"); #endif /* Early ethernet settings to bring up link in 100M, * Auto neg Off with full duplex link. */ Loading Loading @@ -2695,10 +2707,6 @@ static int stmmac_open(struct net_device *dev) struct stmmac_priv *priv = netdev_priv(dev); int ret; #ifdef CONFIG_MSM_BOOT_TIME_MARKER place_marker("M - Stmmac open called"); #endif if (priv->hw->pcs != STMMAC_PCS_RGMII && priv->hw->pcs != STMMAC_PCS_TBI && priv->hw->pcs != STMMAC_PCS_RTBI) { Loading
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c +1 −0 Original line number Diff line number Diff line Loading @@ -271,6 +271,7 @@ int stmmac_mdio_register(struct net_device *ndev) if (priv->plat->phy_addr == -1) priv->plat->phy_addr = addr; priv->phydev = phydev; phy_attached_info(phydev); found = 1; } Loading