From: Samuel Mendoza-Jonas <s...@mendozajonas.com>

Update the ftgmac100 driver to support NC-SI instead of an mdio phy
where available. This is a common setup for Aspeed AST2x00 platforms.

NC-SI mode is determined from the device-tree if either phy-mode sets it
or the use-ncsi property exists. If set then normal mdio setup is
skipped in favour of the NC-SI phy.

Signed-off-by: Samuel Mendoza-Jonas <s...@mendozajonas.com>
Signed-off-by: Joel Stanley <j...@jms.id.au>
---
v3:
 - Simplify ncsi enable by re-using pdata->phy_interface parsing.
   use-ncsi still overrides this value.
 - Fix up freeing in remove callback per Joe's review

 drivers/net/ftgmac100.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ftgmac100.c b/drivers/net/ftgmac100.c
index 78779d7d60b9..69370ea5cca2 100644
--- a/drivers/net/ftgmac100.c
+++ b/drivers/net/ftgmac100.c
@@ -188,7 +188,7 @@ static int ftgmac100_phy_adjust_link(struct ftgmac100_data 
*priv)
        struct phy_device *phydev = priv->phydev;
        u32 maccr;
 
-       if (!phydev->link) {
+       if (!phydev->link && priv->phy_mode != PHY_INTERFACE_MODE_NCSI) {
                dev_err(phydev->dev, "No link\n");
                return -EREMOTEIO;
        }
@@ -228,7 +228,8 @@ static int ftgmac100_phy_init(struct udevice *dev)
        if (!phydev)
                return -ENODEV;
 
-       phydev->supported &= PHY_GBIT_FEATURES;
+       if (priv->phy_mode != PHY_INTERFACE_MODE_NCSI)
+               phydev->supported &= PHY_GBIT_FEATURES;
        if (priv->max_speed) {
                ret = phy_set_supported(phydev, priv->max_speed);
                if (ret)
@@ -308,7 +309,8 @@ static void ftgmac100_stop(struct udevice *dev)
 
        writel(0, &ftgmac100->maccr);
 
-       phy_shutdown(priv->phydev);
+       if (priv->phy_mode != PHY_INTERFACE_MODE_NCSI)
+               phy_shutdown(priv->phydev);
 }
 
 static int ftgmac100_start(struct udevice *dev)
@@ -580,6 +582,9 @@ static int ftgmac100_probe(struct udevice *dev)
        priv->max_speed = pdata->max_speed;
        priv->phy_addr = 0;
 
+       if (dev_read_bool(dev, "use-ncsi"))
+               priv->phy_mode = PHY_INTERFACE_MODE_NCSI;
+
 #ifdef CONFIG_PHY_ADDR
        priv->phy_addr = CONFIG_PHY_ADDR;
 #endif
@@ -592,7 +597,8 @@ static int ftgmac100_probe(struct udevice *dev)
         * If DM MDIO is enabled, the MDIO bus will be initialized later in
         * dm_eth_phy_connect
         */
-       if (!IS_ENABLED(CONFIG_DM_MDIO)) {
+       if (priv->phy_mode != PHY_INTERFACE_MODE_NCSI &&
+           !IS_ENABLED(CONFIG_DM_MDIO)) {
                ret = ftgmac100_mdio_init(dev);
                if (ret) {
                        dev_err(dev, "Failed to initialize mdiobus: %d\n", ret);
-- 
2.35.1

Reply via email to