]> Git Repo - J-u-boot.git/blobdiff - drivers/net/phy/aquantia.c
net: phy: Replace PHY_ANEG_TIMEOUT with Kconfig symbol
[J-u-boot.git] / drivers / net / phy / aquantia.c
index 8ece926dd376992a8d6b3f1b0ff000cf792bc928..d2db8d9f79213961c9f4045d43c8498293e1254f 100644 (file)
@@ -3,12 +3,15 @@
  * Aquantia PHY drivers
  *
  * Copyright 2014 Freescale Semiconductor, Inc.
- * Copyright 2018 NXP
+ * Copyright 2018, 2021 NXP
  */
 #include <config.h>
-#include <common.h>
 #include <dm.h>
+#include <log.h>
+#include <net.h>
 #include <phy.h>
+#include <linux/bitops.h>
+#include <linux/delay.h>
 #include <u-boot/crc.h>
 #include <malloc.h>
 #include <asm/byteorder.h>
@@ -132,7 +135,7 @@ static int aquantia_read_fw(u8 **fw_addr, size_t *fw_length)
 
        *fw_addr = NULL;
        *fw_length = 0;
-       debug("Loading Acquantia microcode from %s %s\n",
+       debug("Loading Aquantia microcode from %s %s\n",
              CONFIG_PHY_AQUANTIA_FW_PART, CONFIG_PHY_AQUANTIA_FW_NAME);
        ret = fs_set_blk_dev("mmc", CONFIG_PHY_AQUANTIA_FW_PART, FS_TYPE_ANY);
        if (ret < 0)
@@ -159,7 +162,7 @@ static int aquantia_read_fw(u8 **fw_addr, size_t *fw_length)
 
        *fw_addr = addr;
        *fw_length = length;
-       debug("Found Acquantia microcode.\n");
+       debug("Found Aquantia microcode.\n");
 
 cleanup:
        if (ret < 0) {
@@ -253,7 +256,7 @@ static int aquantia_upload_firmware(struct phy_device *phydev)
 
        strlcpy(version, (char *)&addr[dram_offset + VERSION_STRING_OFFSET],
                VERSION_STRING_SIZE);
-       printf("%s loading firmare version '%s'\n", phydev->dev->name, version);
+       printf("%s loading firmware version '%s'\n", phydev->dev->name, version);
 
        /* stall the microcprocessor */
        phy_write(phydev, MDIO_MMD_VEND1, UP_CONTROL,
@@ -284,7 +287,7 @@ static int aquantia_upload_firmware(struct phy_device *phydev)
 
        phy_write(phydev, MDIO_MMD_VEND1, UP_CONTROL, UP_RUN_STALL_OVERRIDE);
 
-       printf("%s firmare loading done.\n", phydev->dev->name);
+       printf("%s firmware loading done.\n", phydev->dev->name);
 done:
        free(addr);
        return ret;
@@ -301,12 +304,12 @@ struct {
        u16 syscfg;
        int cnt;
        u16 start_rate;
-} aquantia_syscfg[PHY_INTERFACE_MODE_COUNT] = {
+} aquantia_syscfg[PHY_INTERFACE_MODE_MAX] = {
        [PHY_INTERFACE_MODE_SGMII] =      {0x04b, AQUANTIA_VND1_GSYSCFG_1G,
                                           AQUANTIA_VND1_GSTART_RATE_1G},
-       [PHY_INTERFACE_MODE_SGMII_2500] = {0x144, AQUANTIA_VND1_GSYSCFG_2_5G,
+       [PHY_INTERFACE_MODE_2500BASEX]  = {0x144, AQUANTIA_VND1_GSYSCFG_2_5G,
                                           AQUANTIA_VND1_GSTART_RATE_2_5G},
-       [PHY_INTERFACE_MODE_XFI] =        {0x100, AQUANTIA_VND1_GSYSCFG_10G,
+       [PHY_INTERFACE_MODE_10GBASER] =   {0x100, AQUANTIA_VND1_GSYSCFG_10G,
                                           AQUANTIA_VND1_GSTART_RATE_10G},
        [PHY_INTERFACE_MODE_USXGMII] =    {0x080, AQUANTIA_VND1_GSYSCFG_10G,
                                           AQUANTIA_VND1_GSTART_RATE_10G},
@@ -334,7 +337,6 @@ static int aquantia_set_proto(struct phy_device *phydev,
 
 static int aquantia_dts_config(struct phy_device *phydev)
 {
-#ifdef CONFIG_DM_ETH
        ofnode node = phydev->node;
        u32 prop;
        u16 reg;
@@ -370,7 +372,6 @@ static int aquantia_dts_config(struct phy_device *phydev)
                          (u16)(prop << 1));
        }
 
-#endif
        return 0;
 }
 
@@ -439,18 +440,18 @@ int aquantia_config(struct phy_device *phydev)
                        return ret;
        }
        /*
-        * for backward compatibility convert XGMII into either XFI or USX based
-        * on FW config
+        * for backward compatibility convert XGMII into either 10GBase-R or
+        * USXGMII based on FW config
         */
        if (interface == PHY_INTERFACE_MODE_XGMII) {
-               debug("use XFI or USXGMII SI protos, XGMII is not valid\n");
+               debug("use 10GBase-R or USXGMII SI protos, XGMII is not valid\n");
 
                reg_val1 = phy_read(phydev, MDIO_MMD_PHYXS,
                                    AQUANTIA_SYSTEM_INTERFACE_SR);
                if ((reg_val1 & AQUANTIA_SI_IN_USE_MASK) == AQUANTIA_SI_USXGMII)
                        interface = PHY_INTERFACE_MODE_USXGMII;
                else
-                       interface = PHY_INTERFACE_MODE_XFI;
+                       interface = PHY_INTERFACE_MODE_10GBASER;
        }
 
        /*
@@ -490,7 +491,7 @@ int aquantia_config(struct phy_device *phydev)
        case PHY_INTERFACE_MODE_USXGMII:
                usx_an = 1;
                /* FALLTHROUGH */
-       case PHY_INTERFACE_MODE_XFI:
+       case PHY_INTERFACE_MODE_10GBASER:
                /* 10GBASE-T mode */
                phydev->advertising = SUPPORTED_10000baseT_Full;
                phydev->supported = phydev->advertising;
@@ -511,14 +512,14 @@ int aquantia_config(struct phy_device *phydev)
                              phydev->dev->name);
                } else {
                        reg_val1 &= ~AQUANTIA_USX_AUTONEG_CONTROL_ENA;
-                       debug("%s: system interface XFI\n",
+                       debug("%s: system interface 10GBase-R\n",
                              phydev->dev->name);
                }
 
                phy_write(phydev, MDIO_MMD_PHYXS,
                          AQUANTIA_VENDOR_PROVISIONING_REG, reg_val1);
                break;
-       case PHY_INTERFACE_MODE_SGMII_2500:
+       case PHY_INTERFACE_MODE_2500BASEX:
                /* 2.5GBASE-T mode */
                phydev->advertising = SUPPORTED_1000baseT_Full;
                phydev->supported = phydev->advertising;
@@ -550,8 +551,9 @@ int aquantia_config(struct phy_device *phydev)
 
 int aquantia_startup(struct phy_device *phydev)
 {
-       u32 reg, speed;
+       u32 speed;
        int i = 0;
+       int reg;
 
        phydev->duplex = DUPLEX_FULL;
 
@@ -564,9 +566,9 @@ int aquantia_startup(struct phy_device *phydev)
                        if ((i++ % 500) == 0)
                                printf(".");
                } while (!aquantia_link_is_up(phydev) &&
-                        i < (4 * PHY_ANEG_TIMEOUT));
+                        i < (4 * CONFIG_PHY_ANEG_TIMEOUT));
 
-               if (i > PHY_ANEG_TIMEOUT)
+               if (i > CONFIG_PHY_ANEG_TIMEOUT)
                        printf(" TIMEOUT !\n");
        }
 
@@ -595,7 +597,7 @@ int aquantia_startup(struct phy_device *phydev)
        return 0;
 }
 
-struct phy_driver aq1202_driver = {
+U_BOOT_PHY_DRIVER(aq1202) = {
        .name = "Aquantia AQ1202",
        .uid = 0x3a1b445,
        .mask = 0xfffffff0,
@@ -608,7 +610,7 @@ struct phy_driver aq1202_driver = {
        .shutdown = &gen10g_shutdown,
 };
 
-struct phy_driver aq2104_driver = {
+U_BOOT_PHY_DRIVER(aq2104) = {
        .name = "Aquantia AQ2104",
        .uid = 0x3a1b460,
        .mask = 0xfffffff0,
@@ -621,7 +623,7 @@ struct phy_driver aq2104_driver = {
        .shutdown = &gen10g_shutdown,
 };
 
-struct phy_driver aqr105_driver = {
+U_BOOT_PHY_DRIVER(aqr105) = {
        .name = "Aquantia AQR105",
        .uid = 0x3a1b4a2,
        .mask = 0xfffffff0,
@@ -635,7 +637,7 @@ struct phy_driver aqr105_driver = {
        .data = AQUANTIA_GEN1,
 };
 
-struct phy_driver aqr106_driver = {
+U_BOOT_PHY_DRIVER(aqr106) = {
        .name = "Aquantia AQR106",
        .uid = 0x3a1b4d0,
        .mask = 0xfffffff0,
@@ -648,7 +650,7 @@ struct phy_driver aqr106_driver = {
        .shutdown = &gen10g_shutdown,
 };
 
-struct phy_driver aqr107_driver = {
+U_BOOT_PHY_DRIVER(aqr107) = {
        .name = "Aquantia AQR107",
        .uid = 0x3a1b4e0,
        .mask = 0xfffffff0,
@@ -662,7 +664,7 @@ struct phy_driver aqr107_driver = {
        .data = AQUANTIA_GEN2,
 };
 
-struct phy_driver aqr112_driver = {
+U_BOOT_PHY_DRIVER(aqr112) = {
        .name = "Aquantia AQR112",
        .uid = 0x3a1b660,
        .mask = 0xfffffff0,
@@ -676,7 +678,21 @@ struct phy_driver aqr112_driver = {
        .data = AQUANTIA_GEN3,
 };
 
-struct phy_driver aqr405_driver = {
+U_BOOT_PHY_DRIVER(aqr113c) = {
+       .name = "Aquantia AQR113C",
+       .uid = 0x31c31c12,
+       .mask = 0xfffffff0,
+       .features = PHY_10G_FEATURES,
+       .mmds = (MDIO_MMD_PMAPMD | MDIO_MMD_PCS |
+                MDIO_MMD_PHYXS | MDIO_MMD_AN |
+                MDIO_MMD_VEND1),
+       .config = &aquantia_config,
+       .startup = &aquantia_startup,
+       .shutdown = &gen10g_shutdown,
+       .data = AQUANTIA_GEN3,
+};
+
+U_BOOT_PHY_DRIVER(aqr405) = {
        .name = "Aquantia AQR405",
        .uid = 0x3a1b4b2,
        .mask = 0xfffffff0,
@@ -690,7 +706,7 @@ struct phy_driver aqr405_driver = {
        .data = AQUANTIA_GEN1,
 };
 
-struct phy_driver aqr412_driver = {
+U_BOOT_PHY_DRIVER(aqr412) = {
        .name = "Aquantia AQR412",
        .uid = 0x3a1b710,
        .mask = 0xfffffff0,
@@ -703,17 +719,3 @@ struct phy_driver aqr412_driver = {
        .shutdown = &gen10g_shutdown,
        .data = AQUANTIA_GEN3,
 };
-
-int phy_aquantia_init(void)
-{
-       phy_register(&aq1202_driver);
-       phy_register(&aq2104_driver);
-       phy_register(&aqr105_driver);
-       phy_register(&aqr106_driver);
-       phy_register(&aqr107_driver);
-       phy_register(&aqr112_driver);
-       phy_register(&aqr405_driver);
-       phy_register(&aqr412_driver);
-
-       return 0;
-}
This page took 0.036436 seconds and 4 git commands to generate.