diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/701-net-0314-staging-fsl_ppfe-eth-support-single-interface-initia.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/701-net-0314-staging-fsl_ppfe-eth-support-single-interface-initia.patch | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/target/linux/layerscape/patches-5.4/701-net-0314-staging-fsl_ppfe-eth-support-single-interface-initia.patch b/target/linux/layerscape/patches-5.4/701-net-0314-staging-fsl_ppfe-eth-support-single-interface-initia.patch deleted file mode 100644 index fefe863647..0000000000 --- a/target/linux/layerscape/patches-5.4/701-net-0314-staging-fsl_ppfe-eth-support-single-interface-initia.patch +++ /dev/null @@ -1,271 +0,0 @@ -From dff5fdd84a9ace2d9b8b56659c0855542829148a Mon Sep 17 00:00:00 2001 -From: Calvin Johnson <calvin.johnson@nxp.com> -Date: Fri, 23 Nov 2018 23:58:28 +0530 -Subject: [PATCH] staging: fsl_ppfe/eth: support single interface - initialization - -- arrange members of struct mii_bus in sequence matching phy.h -- if mdio node is defined, use of_mdiobus_register to register - child nodes (phy devices) available on the mdio bus. -- remove of_phy_register_fixed_link from pfe_phy_init as it is being - handled in pfe_get_gemac_if_properties -- remove mdio enabled check -- skip phy init, if no PHY or fixed-link - -Signed-off-by: Calvin Johnson <calvin.johnson@nxp.com> ---- - drivers/staging/fsl_ppfe/pfe_eth.c | 110 +++++++++++++----------- - drivers/staging/fsl_ppfe/pfe_ls1012a_platform.c | 4 + - 2 files changed, 66 insertions(+), 48 deletions(-) - ---- a/drivers/staging/fsl_ppfe/pfe_eth.c -+++ b/drivers/staging/fsl_ppfe/pfe_eth.c -@@ -47,6 +47,7 @@ - - #define LS1012A_REV_1_0 0x87040010 - -+bool pfe_use_old_dts_phy; - bool pfe_errata_a010897; - - static void *cbus_emac_base[3]; -@@ -950,7 +951,8 @@ static int pfe_eth_mdio_init(struct pfe_ - struct ls1012a_mdio_platform_data *minfo) - { - struct mii_bus *bus; -- int rc, ii; -+ struct device_node *mdio_node; -+ int rc = 0, ii; - struct phy_device *phydev; - - netif_info(priv, drv, priv->ndev, "%s\n", __func__); -@@ -964,25 +966,30 @@ static int pfe_eth_mdio_init(struct pfe_ - } - - bus->name = "ls1012a MDIO Bus"; -+ snprintf(bus->id, MII_BUS_ID_SIZE, "ls1012a-%x", priv->id); -+ -+ bus->priv = priv; - bus->read = &pfe_eth_mdio_read; - bus->write = &pfe_eth_mdio_write; - bus->reset = &pfe_eth_mdio_reset; -- snprintf(bus->id, MII_BUS_ID_SIZE, "ls1012a-%x", priv->id); -- bus->priv = priv; -- -+ bus->parent = priv->pfe->dev; - bus->phy_mask = minfo->phy_mask; -- priv->mdc_div = minfo->mdc_div; -+ bus->irq[0] = minfo->irq[0]; - -+ priv->mdc_div = minfo->mdc_div; - if (!priv->mdc_div) - priv->mdc_div = 64; -- -- bus->irq[0] = minfo->irq[0]; -- -- bus->parent = priv->pfe->dev; -- - netif_info(priv, drv, priv->ndev, "%s: mdc_div: %d, phy_mask: %x\n", - __func__, priv->mdc_div, bus->phy_mask); -- rc = mdiobus_register(bus); -+ -+ mdio_node = of_get_child_by_name(priv->pfe->dev->of_node, "mdio"); -+ if (mdio_node) { -+ rc = of_mdiobus_register(bus, mdio_node); -+ of_node_put(mdio_node); -+ } else { -+ rc = mdiobus_register(bus); -+ } -+ - if (rc) { - netdev_err(priv->ndev, "mdiobus_register(%s) failed\n", - bus->name); -@@ -995,7 +1002,6 @@ static int pfe_eth_mdio_init(struct pfe_ - * 3rd argument as true and then register the phy device - * via phy_device_register() - */ -- - if (priv->einfo->mii_config == PHY_INTERFACE_MODE_2500SGMII) { - for (ii = 0; ii < NUM_GEMAC_SUPPORT; ii++) { - phydev = get_phy_device(priv->mii_bus, -@@ -1268,8 +1274,6 @@ static int pfe_phy_init(struct net_devic - char phy_id[MII_BUS_ID_SIZE + 3]; - char bus_id[MII_BUS_ID_SIZE]; - phy_interface_t interface; -- struct device_node *phy_node; -- int rc; - - priv->oldlink = 0; - priv->oldspeed = 0; -@@ -1278,7 +1282,6 @@ static int pfe_phy_init(struct net_devic - snprintf(bus_id, MII_BUS_ID_SIZE, "ls1012a-%d", 0); - snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id, - priv->einfo->phy_id); -- - netif_info(priv, drv, ndev, "%s: %s\n", __func__, phy_id); - interface = priv->einfo->mii_config; - if ((interface == PHY_INTERFACE_MODE_SGMII) || -@@ -1301,23 +1304,22 @@ static int pfe_phy_init(struct net_devic - priv->oldduplex = -1; - pr_info("%s interface %x\n", __func__, interface); - -- if (of_phy_is_fixed_link(priv->phy_node)) { -- rc = of_phy_register_fixed_link(priv->phy_node); -- if (rc) -- return rc; -- phy_node = of_node_get(priv->phy_node); -- phydev = of_phy_connect(ndev, phy_node, pfe_eth_adjust_link, 0, -+ if (priv->phy_node) { -+ phydev = of_phy_connect(ndev, priv->phy_node, -+ pfe_eth_adjust_link, 0, - priv->einfo->mii_config); -- of_node_put(phy_node); -+ if (!(phydev)) { -+ netdev_err(ndev, "Unable to connect to phy\n"); -+ return -ENODEV; -+ } - - } else { - phydev = phy_connect(ndev, phy_id, - &pfe_eth_adjust_link, interface); -- } -- -- if (IS_ERR(phydev)) { -- netdev_err(ndev, "phy_connect() failed\n"); -- return PTR_ERR(phydev); -+ if (IS_ERR(phydev)) { -+ netdev_err(ndev, "Unable to connect to phy\n"); -+ return PTR_ERR(phydev); -+ } - } - - priv->phydev = phydev; -@@ -2411,13 +2413,10 @@ static int pfe_eth_init_one(struct pfe * - memcpy(ndev->dev_addr, einfo[id].mac_addr, ETH_ALEN); - - /* Initialize mdio */ -- if (minfo[id].enabled) { -- err = pfe_eth_mdio_init(priv, &minfo[id]); -- if (err) { -- netdev_err(ndev, "%s: pfe_eth_mdio_init() failed\n", -- __func__); -- goto err2; -- } -+ err = pfe_eth_mdio_init(priv, &minfo[id]); -+ if (err) { -+ netdev_err(ndev, "%s: pfe_eth_mdio_init() failed\n", __func__); -+ goto err1; - } - - if (us) -@@ -2462,22 +2461,26 @@ static int pfe_eth_init_one(struct pfe * - HIF_RX_POLL_WEIGHT - 16); - - err = register_netdev(ndev); -- - if (err) { - netdev_err(ndev, "register_netdev() failed\n"); -- goto err3; -+ goto err2; -+ } -+ -+ if ((!(pfe_use_old_dts_phy) && !(priv->phy_node)) || -+ ((pfe_use_old_dts_phy) && -+ (priv->einfo->phy_flags & GEMAC_NO_PHY))) { -+ pr_info("%s: No PHY or fixed-link\n", __func__); -+ goto skip_phy_init; - } - - phy_init: - device_init_wakeup(&ndev->dev, WAKE_MAGIC); - -- if (!(priv->einfo->phy_flags & GEMAC_NO_PHY)) { -- err = pfe_phy_init(ndev); -- if (err) { -- netdev_err(ndev, "%s: pfe_phy_init() failed\n", -- __func__); -- goto err4; -- } -+ err = pfe_phy_init(ndev); -+ if (err) { -+ netdev_err(ndev, "%s: pfe_phy_init() failed\n", -+ __func__); -+ goto err3; - } - - if (us) { -@@ -2488,6 +2491,7 @@ phy_init: - - netif_carrier_on(ndev); - -+skip_phy_init: - /* Create all the sysfs files */ - if (pfe_eth_sysfs_init(ndev)) - goto err4; -@@ -2496,13 +2500,16 @@ phy_init: - __func__, priv->EMAC_baseaddr); - - return 0; -+ - err4: -+ pfe_phy_exit(priv->ndev); -+err3: - if (us) -- goto err3; -+ goto err2; - unregister_netdev(ndev); --err3: -- pfe_eth_mdio_exit(priv->mii_bus); - err2: -+ pfe_eth_mdio_exit(priv->mii_bus); -+err1: - free_netdev(priv->ndev); - err0: - return err; -@@ -2553,9 +2560,16 @@ static void pfe_eth_exit_one(struct pfe_ - if (!us) - pfe_eth_sysfs_exit(priv->ndev); - -- if (!(priv->einfo->phy_flags & GEMAC_NO_PHY)) -- pfe_phy_exit(priv->ndev); -+ if ((!(pfe_use_old_dts_phy) && !(priv->phy_node)) || -+ ((pfe_use_old_dts_phy) && -+ (priv->einfo->phy_flags & GEMAC_NO_PHY))) { -+ pr_info("%s: No PHY or fixed-link\n", __func__); -+ goto skip_phy_exit; -+ } -+ -+ pfe_phy_exit(priv->ndev); - -+skip_phy_exit: - if (!us) - unregister_netdev(priv->ndev); - ---- a/drivers/staging/fsl_ppfe/pfe_ls1012a_platform.c -+++ b/drivers/staging/fsl_ppfe/pfe_ls1012a_platform.c -@@ -18,6 +18,7 @@ - - #include "pfe_mod.h" - -+extern bool pfe_use_old_dts_phy; - struct ls1012a_pfe_platform_data pfe_platform_data; - - static int pfe_get_gemac_if_properties(struct device_node *parent, int port, int -@@ -59,8 +60,10 @@ static int pfe_get_gemac_if_properties(s - phy_node = of_parse_phandle(gem, "phy-handle", 0); - pdata->ls1012a_eth_pdata[port].phy_node = phy_node; - if (phy_node) { -+ pfe_use_old_dts_phy = false; - goto process_phynode; - } else if (of_phy_is_fixed_link(gem)) { -+ pfe_use_old_dts_phy = false; - if (of_phy_register_fixed_link(gem) < 0) { - pr_err("broken fixed-link specification\n"); - goto err; -@@ -68,6 +71,7 @@ static int pfe_get_gemac_if_properties(s - phy_node = of_node_get(gem); - pdata->ls1012a_eth_pdata[port].phy_node = phy_node; - } else if (of_get_property(gem, "fsl,pfe-phy-if-flags", &size)) { -+ pfe_use_old_dts_phy = true; - /* Use old dts properties for phy handling */ - addr = of_get_property(gem, "fsl,pfe-phy-if-flags", &size); - pdata->ls1012a_eth_pdata[port].phy_flags = be32_to_cpup(addr); |