board: gateworks venice: add support for GPY111 phy
authorTim Harvey <tharvey@gateworks.com>
Tue, 8 Mar 2022 18:47:44 +0000 (10:47 -0800)
committerStefano Babic <sbabic@denx.de>
Tue, 12 Apr 2022 19:08:22 +0000 (21:08 +0200)
The TI DP83867 phy has been replaced with the MaxLinear GPY111 phy due
to part availability.

Add support for it by adding LED config and dt-prop based internal delay
config tx-delay/rx-delay per PHY ID.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
Acked-by: Peng Fan <peng.fan@nxp.com>
board/gateworks/venice/venice.c

index 5334500..425c690 100644 (file)
@@ -63,6 +63,7 @@ static int setup_fec(void)
 int board_phy_config(struct phy_device *phydev)
 {
        unsigned short val;
+       ofnode node;
 
        switch (phydev->phy_id) {
        case 0x2000a231: /* TI DP83867 GbE PHY */
@@ -73,6 +74,21 @@ int board_phy_config(struct phy_device *phydev)
                val |= 0xb << 8; /* LED2(Green;Link/Act): blink for TX/RX act */
                phy_write(phydev, MDIO_DEVAD_NONE, 24, val);
                break;
+       case 0xd565a401: /* MaxLinear GPY111 */
+               puts("GPY111 ");
+               node = phy_get_ofnode(phydev);
+               if (ofnode_valid(node)) {
+                       u32 rx_delay, tx_delay;
+
+                       rx_delay = ofnode_read_u32_default(node, "rx-internal-delay-ps", 2000);
+                       tx_delay = ofnode_read_u32_default(node, "tx-internal-delay-ps", 2000);
+                       val = phy_read(phydev, MDIO_DEVAD_NONE, 0x17);
+                       val &= ~((0x7 << 12) | (0x7 << 8));
+                       val |= (rx_delay / 500) << 12;
+                       val |= (tx_delay / 500) << 8;
+                       phy_write(phydev, MDIO_DEVAD_NONE, 0x17, val);
+               }
+               break;
        }
 
        if (phydev->drv->config)