return container_of(pcs, struct rtpcs_link, pcs);
}
-__maybe_unused
static int rtpcs_sds_determine_hw_mode(struct rtpcs_serdes *sds,
phy_interface_t if_mode,
enum rtpcs_sds_mode *hw_mode)
struct rtpcs_serdes *even_sds = rtpcs_sds_get_even(sds);
struct rtpcs_ctrl *ctrl = sds->ctrl;
u32 band, ori, model_info, val;
+ enum rtpcs_sds_mode hw_mode;
u32 sds_id = sds->id;
int ret, chiptype = 0;
/* this was in rtl931x_phylink_mac_config in dsa/rtl83xx/dsa.c before */
band = rtpcs_931x_sds_cmu_band_get(sds, mode);
+ ret = rtpcs_sds_determine_hw_mode(sds, mode, &hw_mode);
+ if (ret < 0) {
+ dev_err(ctrl->dev, "SerDes %u doesn't support %s mode\n", sds_id,
+ phy_modes(mode));
+ return -ENOTSUPP;
+ }
+
ret = rtpcs_931x_sds_config_mode(sds, mode, chiptype);
if (ret < 0)
return ret;
else
rtpcs_931x_sds_fiber_mode_set(sds, mode);
}
+ sds->hw_mode = hw_mode;
return 0;
}