]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: pcs: bring PLL definitions into shape
authorJonas Jelonek <jelonek.jonas@gmail.com>
Mon, 23 Feb 2026 21:17:51 +0000 (21:17 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 14 Mar 2026 19:24:32 +0000 (20:24 +0100)
Bring the PLL definitions into a proper shape. While there was already a
definition for the PLL type, a generic PLL speed definition was missing.
Introduce such a definition and adjust the naming of the existing PLL
type definition to have a better distinction and avoid conflicts. The
definitions can and should be used to make the CMU/PLL configuration
more generic and reduce the need for variant-specific definitions.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22198
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c

index 9a83d3fae9dff194e51e7942b58b411e99e44d0d..119ec66e1a4b07ea805f11895ee11deaf1ff4fd3 100644 (file)
@@ -153,9 +153,16 @@ enum rtpcs_port_media {
 };
 
 enum rtpcs_sds_pll_type {
-       RTPCS_SDS_PLL_RING,
-       RTPCS_SDS_PLL_LC,
-       RTPCS_SDS_PLL_END,
+       RTPCS_SDS_PLL_TYPE_RING,
+       RTPCS_SDS_PLL_TYPE_LC,
+       RTPCS_SDS_PLL_TYPE_END,
+};
+
+enum rtpcs_sds_pll_speed {
+       RTPCS_SDS_PLL_SPD_1000,
+       RTPCS_SDS_PLL_SPD_2500,
+       RTPCS_SDS_PLL_SPD_10000,
+       RTPCS_SDS_PLL_SPD_END,
 };
 
 enum rtpcs_chip_version {
@@ -1251,9 +1258,9 @@ static void rtpcs_930x_sds_get_pll_data(struct rtpcs_serdes *sds, enum rtpcs_sds
         */
 
        pll_val = rtpcs_sds_read_bits(even_sds, 0x20, 0x12, pbit + 1, pbit);
-       *pll = pll_val == RTPCS_930X_PLL_LC ? RTPCS_SDS_PLL_LC : RTPCS_SDS_PLL_RING;
+       *pll = pll_val == RTPCS_930X_PLL_LC ? RTPCS_SDS_PLL_TYPE_LC : RTPCS_SDS_PLL_TYPE_RING;
 
-       sbit = *pll == RTPCS_SDS_PLL_LC ? 8 : 12;
+       sbit = *pll == RTPCS_SDS_PLL_TYPE_LC ? 8 : 12;
        *speed = rtpcs_sds_read_bits(even_sds, 0x20, 0x12, sbit + 3, sbit);
 }
 
@@ -1261,7 +1268,7 @@ static int rtpcs_930x_sds_set_pll_data(struct rtpcs_serdes *sds, enum rtpcs_sds_
                                       int speed)
 {
        struct rtpcs_serdes *even_sds = rtpcs_sds_get_even(sds);
-       int sbit = pll == RTPCS_SDS_PLL_LC ? 8 : 12;
+       int sbit = pll == RTPCS_SDS_PLL_TYPE_LC ? 8 : 12;
        int pbit = (sds == even_sds) ? 4 : 6;
        int pll_val;
 
@@ -1270,10 +1277,10 @@ static int rtpcs_930x_sds_set_pll_data(struct rtpcs_serdes *sds, enum rtpcs_sds_
            (speed != RTSDS_930X_PLL_10000))
                return -EINVAL;
 
-       if (pll >= RTPCS_SDS_PLL_END)
+       if (pll >= RTPCS_SDS_PLL_TYPE_END)
                return -EINVAL;
 
-       if ((pll == RTPCS_SDS_PLL_RING) && (speed == RTSDS_930X_PLL_10000))
+       if ((pll == RTPCS_SDS_PLL_TYPE_RING) && (speed == RTSDS_930X_PLL_10000))
                return -EINVAL;
 
        /*
@@ -1282,7 +1289,7 @@ static int rtpcs_930x_sds_set_pll_data(struct rtpcs_serdes *sds, enum rtpcs_sds_
         * always activate both.
         */
 
-       pll_val = pll == RTPCS_SDS_PLL_LC ? RTPCS_930X_PLL_LC : RTPCS_930X_PLL_RING;
+       pll_val = pll == RTPCS_SDS_PLL_TYPE_LC ? RTPCS_930X_PLL_LC : RTPCS_930X_PLL_RING;
        rtpcs_sds_write_bits(even_sds, 0x20, 0x12, 3, 0, 0xf);
        rtpcs_sds_write_bits(even_sds, 0x20, 0x12, pbit + 1, pbit, pll_val);
        rtpcs_sds_write_bits(even_sds, 0x20, 0x12, sbit + 3, sbit, speed);
@@ -1304,7 +1311,7 @@ static void rtpcs_930x_sds_reset_cmu(struct rtpcs_serdes *sds)
         */
 
        rtpcs_930x_sds_get_pll_data(sds, &pll, &speed);
-       bit = pll == RTPCS_SDS_PLL_LC ? 2 : 0;
+       bit = pll == RTPCS_SDS_PLL_TYPE_LC ? 2 : 0;
 
        for (i = 0; i < ARRAY_SIZE(reset_sequence); i++)
                rtpcs_sds_write_bits(even_sds, 0x21, 0x0b, bit + 1, bit,
@@ -1418,19 +1425,20 @@ static int rtpcs_930x_sds_config_pll(struct rtpcs_serdes *sds,
                return -ENOTSUPP;
 
        if (!neighbor_mode)
-               pll = speed == RTSDS_930X_PLL_10000 ? RTPCS_SDS_PLL_LC : RTPCS_SDS_PLL_RING;
+               pll = speed == RTSDS_930X_PLL_10000 ? RTPCS_SDS_PLL_TYPE_LC
+                                                   : RTPCS_SDS_PLL_TYPE_RING;
        else if (speed == neighbor_speed) {
                speed_changed = false;
                pll = neighbor_pll;
-       } else if (neighbor_pll == RTPCS_SDS_PLL_RING)
-               pll = RTPCS_SDS_PLL_LC;
+       } else if (neighbor_pll == RTPCS_SDS_PLL_TYPE_RING)
+               pll = RTPCS_SDS_PLL_TYPE_LC;
        else if (speed == RTSDS_930X_PLL_10000) {
                pr_info("%s: SDS %d needs LC PLL, reconfigure SDS %d to use ring PLL\n",
                        __func__, sds->id, nb_sds->id);
-               rtpcs_930x_sds_reconfigure_pll(nb_sds, RTPCS_SDS_PLL_RING);
-               pll = RTPCS_SDS_PLL_LC;
+               rtpcs_930x_sds_reconfigure_pll(nb_sds, RTPCS_SDS_PLL_TYPE_RING);
+               pll = RTPCS_SDS_PLL_TYPE_LC;
        } else
-               pll = RTPCS_SDS_PLL_RING;
+               pll = RTPCS_SDS_PLL_TYPE_RING;
 
        rtpcs_930x_sds_set_pll_data(sds, pll, speed);
 
@@ -1438,7 +1446,7 @@ static int rtpcs_930x_sds_config_pll(struct rtpcs_serdes *sds,
                rtpcs_930x_sds_reset_cmu(sds);
 
        pr_info("%s: SDS %d using %s PLL for mode %d\n", __func__, sds->id,
-               pll == RTPCS_SDS_PLL_LC ? "LC" : "ring", hw_mode);
+               pll == RTPCS_SDS_PLL_TYPE_LC ? "LC" : "ring", hw_mode);
 
        return 0;
 }
@@ -3363,27 +3371,27 @@ static int rtpcs_931x_sds_config_cmu(struct rtpcs_serdes *sds, enum rtpcs_sds_mo
                return 0;
 
        case RTPCS_SDS_MODE_QSGMII:
-               pll_type = RTPCS_SDS_PLL_RING;
+               pll_type = RTPCS_SDS_PLL_TYPE_RING;
                force_pll_spd = false;
                break;
 
        case RTPCS_SDS_MODE_1000BASEX:
-               pll_type = RTPCS_SDS_PLL_RING;
+               pll_type = RTPCS_SDS_PLL_TYPE_RING;
                force_pll_spd = false;
                break;
 
 /*     case MII_1000BX100BX_AUTO:
-               pll_type = RTPCS_SDS_PLL_RING;
+               pll_type = RTPCS_SDS_PLL_TYPE_RING;
                force_pll_spd = false;
                break; */
 
        case RTPCS_SDS_MODE_SGMII:
-               pll_type = RTPCS_SDS_PLL_RING;
+               pll_type = RTPCS_SDS_PLL_TYPE_RING;
                force_pll_spd = false;
                break;
 
        case RTPCS_SDS_MODE_2500BASEX:
-               pll_type = RTPCS_SDS_PLL_RING;
+               pll_type = RTPCS_SDS_PLL_TYPE_RING;
                force_pll_spd = true;
                break;
 
@@ -3405,10 +3413,10 @@ static int rtpcs_931x_sds_config_cmu(struct rtpcs_serdes *sds, enum rtpcs_sds_mo
        }
 
        pr_info("%s: pll_type %s cmu_page %x force_pll_spd %d even_sds %d sds %d\n",
-               __func__, pll_type == RTPCS_SDS_PLL_LC ? "LC" : "ring", cmu_page, force_pll_spd,
-               even_sds->id, sds->id);
+               __func__, pll_type == RTPCS_SDS_PLL_TYPE_LC ? "LC" : "ring", cmu_page,
+               force_pll_spd, even_sds->id, sds->id);
 
-       if (pll_type == RTPCS_SDS_PLL_RING) {
+       if (pll_type == RTPCS_SDS_PLL_TYPE_RING) {
                rtpcs_sds_write_bits(sds, cmu_page, 0x7, 15, 15, 0x0);
 
                rtpcs_sds_write_bits(even_sds, 0x20, 0x12, 3, 2, 0x3);
@@ -3418,7 +3426,7 @@ static int rtpcs_931x_sds_config_cmu(struct rtpcs_serdes *sds, enum rtpcs_sds_mo
                                     force_lc_mode_val_bit, 0x0);
                rtpcs_sds_write_bits(even_sds, 0x20, 0x12, 12, 12, 0x1);
                rtpcs_sds_write_bits(even_sds, 0x20, 0x12, 15, 13, force_pll_spd ? 0x1 : 0x0);
-       } else if (pll_type == RTPCS_SDS_PLL_LC) {
+       } else if (pll_type == RTPCS_SDS_PLL_TYPE_LC) {
                rtpcs_sds_write_bits(sds, cmu_page, 0x7, 15, 15, 0x1);
 
                rtpcs_sds_write_bits(even_sds, 0x20, 0x12, 1, 0, 0x3);