]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: pcs: drop setup_serdes 23861/head
authorJonas Jelonek <jelonek.jonas@gmail.com>
Thu, 18 Jun 2026 07:46:12 +0000 (07:46 +0000)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Thu, 18 Jun 2026 20:23:31 +0000 (22:23 +0200)
Introducing the setup_serdes hook in the PCS driver was always intended
to be only a temporary solution. It was needed to be able to collect all
scattered code in the PCS driver first. Later, refactoring can be done
to bring everything into a proper shape.

Now we've reached the point where the setup of all variants has been
refactored in such a way that all share the same high-level sequence.
This is fully orchestrated in pcs_config now. Thus, the setup_serdes hook
is no longer needed. Move the last piece out of it into another SerDes
op hook, then drop setup_serdes.

Link: https://github.com/openwrt/openwrt/pull/23861
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/realtek/files-6.18/drivers/net/pcs/pcs-rtl-otto.c

index 4a24fe39ced4d53652e755712a585816fa0d9b29..d03bc7770741873de0e7fb4011209ac5b158f145 100644 (file)
@@ -199,6 +199,8 @@ struct rtpcs_sds_ops {
        int (*deactivate)(struct rtpcs_serdes *sds);
        /* required: power back up */
        int (*activate)(struct rtpcs_serdes *sds);
+       /* required: configure SerDes for hardware mode */
+       int (*config_hw_mode)(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode);
        /* required: set hardware mode */
        int (*set_hw_mode)(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode);
        /* optional: configure media-specific parameters */
@@ -278,7 +280,6 @@ struct rtpcs_config {
 
        int (*init)(struct rtpcs_ctrl *ctrl);
        int (*sds_probe)(struct rtpcs_serdes *sds);
-       int (*setup_serdes)(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode);
 };
 
 struct rtpcs_sds_config {
@@ -843,8 +844,7 @@ static int rtpcs_838x_sds_set_mode(struct rtpcs_serdes *sds, enum rtpcs_sds_mode
                                 0x7 << int_mode_shift, int_mode_val << int_mode_shift);
 }
 
-static int rtpcs_838x_sds_patch(struct rtpcs_serdes *sds,
-                               enum rtpcs_sds_mode hw_mode)
+static int rtpcs_838x_sds_config_hw_mode(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode)
 {
        struct rtpcs_ctrl *ctrl = sds->ctrl;
        u8 sds_id = sds->id;
@@ -917,12 +917,6 @@ static int rtpcs_838x_init(struct rtpcs_ctrl *ctrl)
        return 0;
 }
 
-static int rtpcs_838x_setup_serdes(struct rtpcs_serdes *sds,
-                                  enum rtpcs_sds_mode hw_mode)
-{
-       return rtpcs_838x_sds_patch(sds, hw_mode);
-}
-
 static int rtpcs_838x_sds_post_config(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode)
 {
        /*
@@ -1172,8 +1166,11 @@ static int rtpcs_839x_sds_activate(struct rtpcs_serdes *sds)
        return 0;
 }
 
-static int rtpcs_839x_setup_serdes(struct rtpcs_serdes *sds,
-                                  enum rtpcs_sds_mode hw_mode)
+/*
+ * Keep this as a no-op stub until RTL839x is extended to do proper configuration
+ * here. E.g., the still missing SGMII, 100BASEX and 1000BASEX setup should go here.
+ */
+static int rtpcs_839x_sds_config_hw_mode(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode)
 {
        return 0;
 }
@@ -3083,21 +3080,6 @@ static int rtpcs_930x_sds_config_media(struct rtpcs_serdes *sds, enum rtpcs_sds_
        return 0;
 }
 
-static int rtpcs_930x_setup_serdes(struct rtpcs_serdes *sds,
-                                  enum rtpcs_sds_mode hw_mode)
-{
-       int ret;
-
-       /* Apply configuration for a hardware mode to SerDes */
-       ret = rtpcs_930x_sds_config_hw_mode(sds, hw_mode);
-       if (ret < 0)
-               return ret;
-
-       /* Maybe use dal_longan_sds_init */
-
-       return 0;
-}
-
 static int rtpcs_930x_sds_post_config(struct rtpcs_serdes *sds, enum rtpcs_sds_mode hw_mode)
 {
        int calib_tries = 0;
@@ -3855,18 +3837,6 @@ static int rtpcs_931x_sds_config_hw_mode(struct rtpcs_serdes *sds,
        return rtpcs_93xx_sds_config_cmu(sds, hw_mode);
 }
 
-static int rtpcs_931x_setup_serdes(struct rtpcs_serdes *sds,
-                                  enum rtpcs_sds_mode hw_mode)
-{
-       int ret;
-
-       ret = rtpcs_931x_sds_config_hw_mode(sds, hw_mode);
-       if (ret < 0)
-               return ret;
-
-       return 0;
-}
-
 /**
  * rtpcs_931x_init_mac_groups - Initialize MAC groups
  *
@@ -4093,7 +4063,7 @@ static int rtpcs_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
                        if (ret < 0)
                                return ret;
 
-                       ret = ctrl->cfg->setup_serdes(sds, hw_mode);
+                       ret = sds->ops->config_hw_mode(sds, hw_mode);
                        if (ret < 0)
                                return ret;
 
@@ -4402,6 +4372,7 @@ static const struct rtpcs_sds_ops rtpcs_838x_sds_ops = {
        .restart_autoneg        = rtpcs_generic_sds_restart_autoneg,
        .deactivate             = rtpcs_838x_sds_deactivate,
        .activate               = rtpcs_838x_sds_activate,
+       .config_hw_mode         = rtpcs_838x_sds_config_hw_mode,
        .set_hw_mode            = rtpcs_838x_sds_set_mode,
        .post_config            = rtpcs_838x_sds_post_config,
 };
@@ -4427,7 +4398,6 @@ static const struct rtpcs_config rtpcs_838x_cfg = {
        .sds_hw_mode_vals       = rtpcs_838x_sds_hw_mode_vals,
        .init                   = rtpcs_838x_init,
        .sds_probe              = rtpcs_838x_sds_probe,
-       .setup_serdes           = rtpcs_838x_setup_serdes,
 };
 
 static const struct phylink_pcs_ops rtpcs_839x_pcs_ops = {
@@ -4443,6 +4413,7 @@ static const struct rtpcs_sds_ops rtpcs_839x_sds_ops = {
        .restart_autoneg        = rtpcs_generic_sds_restart_autoneg,
        .deactivate             = rtpcs_839x_sds_deactivate,
        .activate               = rtpcs_839x_sds_activate,
+       .config_hw_mode         = rtpcs_839x_sds_config_hw_mode,
        .set_hw_mode            = rtpcs_sds_set_mac_mode,
 };
 
@@ -4467,7 +4438,6 @@ static const struct rtpcs_config rtpcs_839x_cfg = {
        .sds_hw_mode_vals       = rtpcs_839x_sds_hw_mode_vals,
        .init                   = rtpcs_839x_init,
        .sds_probe              = rtpcs_839x_sds_probe,
-       .setup_serdes           = rtpcs_839x_setup_serdes,
 };
 
 static const struct phylink_pcs_ops rtpcs_930x_pcs_ops = {
@@ -4489,6 +4459,7 @@ static const struct rtpcs_sds_ops rtpcs_930x_sds_ops = {
        .config_polarity        = rtpcs_930x_sds_config_polarity,
        .deactivate             = rtpcs_930x_sds_deactivate,
        .activate               = rtpcs_930x_sds_activate,
+       .config_hw_mode         = rtpcs_930x_sds_config_hw_mode,
        .set_hw_mode            = rtpcs_930x_sds_set_mode,
        .config_media           = rtpcs_930x_sds_config_media,
        .post_config            = rtpcs_930x_sds_post_config,
@@ -4515,7 +4486,6 @@ static const struct rtpcs_config rtpcs_930x_cfg = {
        .sds_hw_mode_vals       = rtpcs_93xx_sds_hw_mode_vals,
        .init                   = rtpcs_93xx_init,
        .sds_probe              = rtpcs_930x_sds_probe,
-       .setup_serdes           = rtpcs_930x_setup_serdes,
 };
 
 static const struct phylink_pcs_ops rtpcs_931x_pcs_ops = {
@@ -4536,6 +4506,7 @@ static const struct rtpcs_sds_ops rtpcs_931x_sds_ops = {
        .config_polarity        = rtpcs_931x_sds_config_polarity,
        .deactivate             = rtpcs_931x_sds_deactivate,
        .activate               = rtpcs_931x_sds_activate,
+       .config_hw_mode         = rtpcs_931x_sds_config_hw_mode,
        .set_hw_mode            = rtpcs_931x_sds_set_mode,
        .config_media           = rtpcs_931x_sds_config_media,
 };
@@ -4561,7 +4532,6 @@ static const struct rtpcs_config rtpcs_931x_cfg = {
        .sds_hw_mode_vals       = rtpcs_93xx_sds_hw_mode_vals,
        .init                   = rtpcs_931x_init,
        .sds_probe              = rtpcs_931x_sds_probe,
-       .setup_serdes           = rtpcs_931x_setup_serdes,
 };
 
 static const struct of_device_id rtpcs_of_match[] = {