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 */
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 {
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;
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)
{
/*
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;
}
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;
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
*
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;
.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,
};
.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 = {
.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,
};
.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 = {
.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,
.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 = {
.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,
};
.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[] = {