]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
phy: mscc: Use PHY_ID_MATCH_EXACT for VSC8584, VSC8582, VSC8575, VSC856X
authorHoratiu Vultur <horatiu.vultur@microchip.com>
Thu, 23 Oct 2025 19:13:49 +0000 (21:13 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 28 Oct 2025 00:58:01 +0000 (17:58 -0700)
As the PHYs VSC8584, VSC8582, VSC8575 and VSC856X exists only as rev B,
we can use PHY_ID_MATCH_EXACT to match exactly on revision B of the PHY.
Because of this change then there is not need the check if it is a
different revision than rev B in the function vsc8584_probe() as we
already know that this will never happen.
These changes are a preparation for the next patch because in that patch
we will make the PHYs VSC8574 and VSC8572 to use vsc8584_probe() and
these PHYs have multiple revision.

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Link: https://patch.msgid.link/20251023191350.190940-2-horatiu.vultur@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/mscc/mscc.h
drivers/net/phy/mscc/mscc_main.c

index 2d8eca54c40a290e9ff1de3a5b8f787a0282563c..2eef5956b9cc595decc88b9f50c568600f5c10a3 100644 (file)
@@ -289,12 +289,12 @@ enum rgmii_clock_delay {
 #define PHY_ID_VSC8540                   0x00070760
 #define PHY_ID_VSC8541                   0x00070770
 #define PHY_ID_VSC8552                   0x000704e0
-#define PHY_ID_VSC856X                   0x000707e0
+#define PHY_ID_VSC856X                   0x000707e1
 #define PHY_ID_VSC8572                   0x000704d0
 #define PHY_ID_VSC8574                   0x000704a0
-#define PHY_ID_VSC8575                   0x000707d0
-#define PHY_ID_VSC8582                   0x000707b0
-#define PHY_ID_VSC8584                   0x000707c0
+#define PHY_ID_VSC8575                   0x000707d1
+#define PHY_ID_VSC8582                   0x000707b1
+#define PHY_ID_VSC8584                   0x000707c1
 #define PHY_VENDOR_MSCC                        0x00070400
 
 #define MSCC_VDDMAC_1500                 1500
index ef0ef1570d39234d8aeea829dc0a97150236bf51..9343ed3b000d404d6fdca0287b441370825ff7df 100644 (file)
@@ -1724,12 +1724,6 @@ static int vsc8584_config_init(struct phy_device *phydev)
         * in this pre-init function.
         */
        if (phy_package_init_once(phydev)) {
-               /* The following switch statement assumes that the lowest
-                * nibble of the phy_id_mask is always 0. This works because
-                * the lowest nibble of the PHY_ID's below are also 0.
-                */
-               WARN_ON(phydev->drv->phy_id_mask & 0xf);
-
                switch (phydev->phy_id & phydev->drv->phy_id_mask) {
                case PHY_ID_VSC8504:
                case PHY_ID_VSC8552:
@@ -2290,11 +2284,6 @@ static int vsc8584_probe(struct phy_device *phydev)
           VSC8531_DUPLEX_COLLISION};
        int ret;
 
-       if ((phydev->phy_id & MSCC_DEV_REV_MASK) != VSC8584_REVB) {
-               dev_err(&phydev->mdio.dev, "Only VSC8584 revB is supported.\n");
-               return -ENOTSUPP;
-       }
-
        vsc8531 = devm_kzalloc(&phydev->mdio.dev, sizeof(*vsc8531), GFP_KERNEL);
        if (!vsc8531)
                return -ENOMEM;
@@ -2587,9 +2576,8 @@ static struct phy_driver vsc85xx_driver[] = {
        .config_inband  = vsc85xx_config_inband,
 },
 {
-       .phy_id         = PHY_ID_VSC856X,
+       PHY_ID_MATCH_EXACT(PHY_ID_VSC856X),
        .name           = "Microsemi GE VSC856X SyncE",
-       .phy_id_mask    = 0xfffffff0,
        /* PHY_GBIT_FEATURES */
        .soft_reset     = &genphy_soft_reset,
        .config_init    = &vsc8584_config_init,
@@ -2667,9 +2655,8 @@ static struct phy_driver vsc85xx_driver[] = {
        .config_inband  = vsc85xx_config_inband,
 },
 {
-       .phy_id         = PHY_ID_VSC8575,
+       PHY_ID_MATCH_EXACT(PHY_ID_VSC8575),
        .name           = "Microsemi GE VSC8575 SyncE",
-       .phy_id_mask    = 0xfffffff0,
        /* PHY_GBIT_FEATURES */
        .soft_reset     = &genphy_soft_reset,
        .config_init    = &vsc8584_config_init,
@@ -2693,9 +2680,8 @@ static struct phy_driver vsc85xx_driver[] = {
        .config_inband  = vsc85xx_config_inband,
 },
 {
-       .phy_id         = PHY_ID_VSC8582,
+       PHY_ID_MATCH_EXACT(PHY_ID_VSC8582),
        .name           = "Microsemi GE VSC8582 SyncE",
-       .phy_id_mask    = 0xfffffff0,
        /* PHY_GBIT_FEATURES */
        .soft_reset     = &genphy_soft_reset,
        .config_init    = &vsc8584_config_init,
@@ -2719,9 +2705,8 @@ static struct phy_driver vsc85xx_driver[] = {
        .config_inband  = vsc85xx_config_inband,
 },
 {
-       .phy_id         = PHY_ID_VSC8584,
+       PHY_ID_MATCH_EXACT(PHY_ID_VSC8584),
        .name           = "Microsemi GE VSC8584 SyncE",
-       .phy_id_mask    = 0xfffffff0,
        /* PHY_GBIT_FEATURES */
        .soft_reset     = &genphy_soft_reset,
        .config_init    = &vsc8584_config_init,