board: gateworks: gw_ventana: add support for GPY111 PHY
authorTim Harvey <tharvey@gateworks.com>
Fri, 29 Apr 2022 20:51:02 +0000 (13:51 -0700)
committerStefano Babic <sbabic@denx.de>
Fri, 20 May 2022 07:30:28 +0000 (09:30 +0200)
The MaxLinear GPY111 PHY is being used on some boards due to part
availability. Add support for this PHY which requires a longer reset
post-delay and RGMII delay configuration.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
12 files changed:
arch/arm/dts/imx6qdl-gw51xx.dtsi
arch/arm/dts/imx6qdl-gw52xx.dtsi
arch/arm/dts/imx6qdl-gw53xx.dtsi
arch/arm/dts/imx6qdl-gw54xx.dtsi
arch/arm/dts/imx6qdl-gw560x.dtsi
arch/arm/dts/imx6qdl-gw5903.dtsi
arch/arm/dts/imx6qdl-gw5904.dtsi
arch/arm/dts/imx6qdl-gw5907.dtsi
arch/arm/dts/imx6qdl-gw5910.dtsi
arch/arm/dts/imx6qdl-gw5912.dtsi
arch/arm/dts/imx6qdl-gw5913.dtsi
board/gateworks/gw_ventana/gw_ventana.c

index 812acf7..139ffe0 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 81a9ce3..1b5c836 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 77ac103..e5e9e0c 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 98c81e9..2f41f09 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 1e95267..6586d87 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 6ebf6ae..1df3fab 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 286c7a9..381f605 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 
        fixed-link {
index a36b6e7..68585f8 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 446c104..594468d 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index 8fd8fdb..f51ec3d 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index c2c1c2b..44d347f 100644 (file)
        phy-mode = "rgmii-id";
        phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
        phy-reset-duration = <10>;
-       phy-reset-post-delay = <100>;
+       phy-reset-post-delay = <300>;
        status = "okay";
 };
 
index c06630a..99f52b9 100644 (file)
@@ -32,9 +32,10 @@ DECLARE_GLOBAL_DATA_PTR;
 int board_phy_config(struct phy_device *phydev)
 {
        unsigned short val;
+       ofnode node;
 
-       /* Marvel 88E1510 */
-       if (phydev->phy_id == 0x1410dd1) {
+       switch (phydev->phy_id) {
+       case 0x1410dd1:
                puts("MV88E1510");
                /*
                 * Page 3, Register 16: LED[2:0] Function Control Register
@@ -47,10 +48,8 @@ int board_phy_config(struct phy_device *phydev)
                val |= 0x0017;
                phy_write(phydev, MDIO_DEVAD_NONE, 16, val);
                phy_write(phydev, MDIO_DEVAD_NONE, 22, 0);
-       }
-
-       /* TI DP83867 */
-       else if (phydev->phy_id == 0x2000a231) {
+               break;
+       case 0x2000a231:
                puts("TIDP83867 ");
                /* LED configuration */
                val = 0;
@@ -66,6 +65,22 @@ int board_phy_config(struct phy_device *phydev)
                val &= ~0x1f00;
                val |= 0x0b00; /* chD tx clock*/
                phy_write(phydev, MDIO_DEVAD_NONE, 14, val);
+               break;
+       case 0xd565a401:
+               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)