Add NC-SI to the usual phy handling. This makes two notable changes:
- Somewhat similar to a fixed phy, phy_connect() will create an NC-SI
phy if CONFIG_PHY_NCSI is defined.
- An early return is added to phy_read() and phy_write() to handle a
case like the NC-SI phy which does not define a bus.

Signed-off-by: Samuel Mendoza-Jonas <s...@mendozajonas.com>
---
 drivers/net/phy/phy.c   |  8 ++++++++
 include/phy.h           | 11 +++++++++++
 include/phy_interface.h |  2 ++
 3 files changed, 21 insertions(+)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index cda4caa803..c2bc57c45d 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -527,6 +527,9 @@ int phy_init(void)
 #endif
 #ifdef CONFIG_PHY_FIXED
        phy_fixed_init();
+#endif
+#ifdef CONFIG_PHY_NCSI
+       phy_ncsi_init();
 #endif
        return 0;
 }
@@ -902,6 +905,11 @@ struct phy_device *phy_connect(struct mii_dev *bus, int 
addr,
                sn = fdt_next_subnode(gd->fdt_blob, sn);
        }
 #endif
+
+#ifdef CONFIG_PHY_NCSI
+       phydev = phy_device_create(bus, 0, PHY_NCSI_ID, interface);
+#endif
+
        if (!phydev)
                phydev = phy_find_by_mask(bus, 1 << addr, interface);
 
diff --git a/include/phy.h b/include/phy.h
index f0c9df46c6..e1d546a81f 100644
--- a/include/phy.h
+++ b/include/phy.h
@@ -154,6 +154,11 @@ static inline int phy_read(struct phy_device *phydev, int 
devad, int regnum)
 {
        struct mii_dev *bus = phydev->bus;
 
+       if (!bus || !bus->read) {
+               debug("%s: No bus configured\n", __func__);
+               return -1;
+       }
+
        return bus->read(bus, phydev->addr, devad, regnum);
 }
 
@@ -162,6 +167,11 @@ static inline int phy_write(struct phy_device *phydev, int 
devad, int regnum,
 {
        struct mii_dev *bus = phydev->bus;
 
+       if (!bus || !bus->read) {
+               debug("%s: No bus configured\n", __func__);
+               return -1;
+       }
+
        return bus->write(bus, phydev->addr, devad, regnum, val);
 }
 
@@ -241,6 +251,7 @@ int phy_vitesse_init(void);
 int phy_xilinx_init(void);
 int phy_mscc_init(void);
 int phy_fixed_init(void);
+int phy_ncsi_init(void);
 
 int board_phy_config(struct phy_device *phydev);
 int get_phy_id(struct mii_dev *bus, int addr, int devad, u32 *phy_id);
diff --git a/include/phy_interface.h b/include/phy_interface.h
index c6823189f8..9e334bb47d 100644
--- a/include/phy_interface.h
+++ b/include/phy_interface.h
@@ -31,6 +31,7 @@ typedef enum {
        PHY_INTERFACE_MODE_XLAUI,
        PHY_INTERFACE_MODE_CAUI2,
        PHY_INTERFACE_MODE_CAUI4,
+       PHY_INTERFACE_MODE_NCSI,
        PHY_INTERFACE_MODE_NONE,        /* Must be last */
 
        PHY_INTERFACE_MODE_COUNT,
@@ -58,6 +59,7 @@ static const char * const phy_interface_strings[] = {
        [PHY_INTERFACE_MODE_XLAUI]              = "xlaui4",
        [PHY_INTERFACE_MODE_CAUI2]              = "caui2",
        [PHY_INTERFACE_MODE_CAUI4]              = "caui4",
+       [PHY_INTERFACE_MODE_NCSI]               = "NC-SI",
        [PHY_INTERFACE_MODE_NONE]               = "",
 };
 
-- 
2.21.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to