Lines Matching full:macro
659 static int sparx5_sd10g25_get_mode_preset(struct sparx5_serdes_macro *macro, in sparx5_sd10g25_get_mode_preset() argument
662 switch (macro->serdesmode) { in sparx5_sd10g25_get_mode_preset()
664 if (macro->speed == SPEED_25000) in sparx5_sd10g25_get_mode_preset()
666 else if (macro->speed == SPEED_10000) in sparx5_sd10g25_get_mode_preset()
668 else if (macro->speed == SPEED_5000) in sparx5_sd10g25_get_mode_preset()
687 static int sparx5_sd10g28_get_mode_preset(struct sparx5_serdes_macro *macro, in sparx5_sd10g28_get_mode_preset() argument
691 switch (macro->serdesmode) { in sparx5_sd10g28_get_mode_preset()
693 if (macro->speed == SPEED_10000) { in sparx5_sd10g28_get_mode_preset()
695 } else if (macro->speed == SPEED_5000) { in sparx5_sd10g28_get_mode_preset()
701 dev_err(macro->priv->dev, "%s: Illegal speed: %02u, sidx: %02u, mode (%u)", in sparx5_sd10g28_get_mode_preset()
702 __func__, macro->speed, macro->sidx, in sparx5_sd10g28_get_mode_preset()
703 macro->serdesmode); in sparx5_sd10g28_get_mode_preset()
724 static void sparx5_sd25g28_get_params(struct sparx5_serdes_macro *macro, in sparx5_sd25g28_get_params() argument
730 u8 iw = sd25g28_get_iw_setting(macro->priv->dev, mode->bitwidth); in sparx5_sd25g28_get_params()
834 static void sparx5_sd10g28_get_params(struct sparx5_serdes_macro *macro, in sparx5_sd10g28_get_params() argument
840 u8 iw = sd10g28_get_iw_setting(macro->priv->dev, mode->bwidth); in sparx5_sd10g28_get_params()
850 .fx_100 = macro->serdesmode == SPX5_SD_MODE_100FX, in sparx5_sd10g28_get_params()
1191 static int sparx5_sd25g28_apply_params(struct sparx5_serdes_macro *macro, in sparx5_sd25g28_apply_params() argument
1194 struct sparx5_serdes_private *priv = macro->priv; in sparx5_sd25g28_apply_params()
1197 u32 sd_index = macro->stpidx; in sparx5_sd25g28_apply_params()
1665 static int sparx5_sd10g28_apply_params(struct sparx5_serdes_macro *macro, in sparx5_sd10g28_apply_params() argument
1668 struct sparx5_serdes_private *priv = macro->priv; in sparx5_sd10g28_apply_params()
1671 u32 lane_index = macro->sidx; in sparx5_sd10g28_apply_params()
1672 u32 sd_index = macro->stpidx; in sparx5_sd10g28_apply_params()
1681 cmu_idx = priv->data->ops.serdes_cmu_get(params->cmu_sel, macro->sidx); in sparx5_sd10g28_apply_params()
2113 static int sparx5_sd25g28_config(struct sparx5_serdes_macro *macro, bool reset) in sparx5_sd25g28_config() argument
2115 struct sparx5_sd25g28_media_preset media = media_presets_25g[macro->media]; in sparx5_sd25g28_config()
2127 err = sparx5_sd10g25_get_mode_preset(macro, &mode); in sparx5_sd25g28_config()
2130 sparx5_sd25g28_get_params(macro, &media, &mode, &args, ¶ms); in sparx5_sd25g28_config()
2131 sparx5_sd25g28_reset(macro->priv->regs, ¶ms, macro->stpidx); in sparx5_sd25g28_config()
2132 return sparx5_sd25g28_apply_params(macro, ¶ms); in sparx5_sd25g28_config()
2135 static int sparx5_sd10g28_config(struct sparx5_serdes_macro *macro, bool reset) in sparx5_sd10g28_config() argument
2137 struct sparx5_sd10g28_media_preset media = media_presets_10g[macro->media]; in sparx5_sd10g28_config()
2141 .is_6g = (macro->serdestype == SPX5_SDT_6G), in sparx5_sd10g28_config()
2150 err = sparx5_sd10g28_get_mode_preset(macro, &mode, &args); in sparx5_sd10g28_config()
2153 sparx5_sd10g28_get_params(macro, &media, &mode, &args, ¶ms); in sparx5_sd10g28_config()
2154 sparx5_sd10g28_reset(macro->priv->regs, macro->sidx); in sparx5_sd10g28_config()
2155 return sparx5_sd10g28_apply_params(macro, ¶ms); in sparx5_sd10g28_config()
2159 static int sparx5_serdes_power_save(struct sparx5_serdes_macro *macro, u32 pwdn) in sparx5_serdes_power_save() argument
2161 struct sparx5_serdes_private *priv = macro->priv; in sparx5_serdes_power_save()
2164 if (macro->serdestype == SPX5_SDT_6G) in sparx5_serdes_power_save()
2165 sd_inst = sdx5_inst_get(priv, TARGET_SD6G_LANE, macro->stpidx); in sparx5_serdes_power_save()
2166 else if (macro->serdestype == SPX5_SDT_10G) in sparx5_serdes_power_save()
2167 sd_inst = sdx5_inst_get(priv, TARGET_SD10G_LANE, macro->stpidx); in sparx5_serdes_power_save()
2169 sd_inst = sdx5_inst_get(priv, TARGET_SD25G_LANE, macro->stpidx); in sparx5_serdes_power_save()
2171 if (macro->serdestype == SPX5_SDT_25G) { in sparx5_serdes_power_save()
2173 macro->stpidx); in sparx5_serdes_power_save()
2190 sd_lane_inst = sdx5_inst_get(priv, TARGET_SD_LANE, macro->sidx); in sparx5_serdes_power_save()
2210 static int sparx5_serdes_clock_config(struct sparx5_serdes_macro *macro) in sparx5_serdes_clock_config() argument
2212 struct sparx5_serdes_private *priv = macro->priv; in sparx5_serdes_clock_config()
2218 if (macro->serdesmode == SPX5_SD_MODE_100FX) { in sparx5_serdes_clock_config()
2225 SD_LANE_MISC(macro->sidx)); in sparx5_serdes_clock_config()
2252 static int sparx5_serdes_config(struct sparx5_serdes_macro *macro) in sparx5_serdes_config() argument
2254 struct device *dev = macro->priv->dev; in sparx5_serdes_config()
2258 serdesmode = sparx5_serdes_get_serdesmode(macro->portmode, macro->speed); in sparx5_serdes_config()
2261 macro->sidx, in sparx5_serdes_config()
2262 phy_modes(macro->portmode)); in sparx5_serdes_config()
2265 macro->serdesmode = serdesmode; in sparx5_serdes_config()
2267 sparx5_serdes_clock_config(macro); in sparx5_serdes_config()
2269 if (macro->serdestype == SPX5_SDT_25G) in sparx5_serdes_config()
2270 err = sparx5_sd25g28_config(macro, false); in sparx5_serdes_config()
2272 err = sparx5_sd10g28_config(macro, false); in sparx5_serdes_config()
2275 macro->sidx, err); in sparx5_serdes_config()
2282 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_power_on() local
2284 return sparx5_serdes_power_save(macro, false); in sparx5_serdes_power_on()
2289 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_power_off() local
2291 return sparx5_serdes_power_save(macro, true); in sparx5_serdes_power_off()
2296 struct sparx5_serdes_macro *macro; in sparx5_serdes_set_mode() local
2307 macro = phy_get_drvdata(phy); in sparx5_serdes_set_mode()
2308 macro->portmode = submode; in sparx5_serdes_set_mode()
2309 sparx5_serdes_config(macro); in sparx5_serdes_set_mode()
2318 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_set_media() local
2320 if (media != macro->media) { in sparx5_serdes_set_media()
2321 macro->media = media; in sparx5_serdes_set_media()
2322 if (macro->serdesmode != SPX5_SD_MODE_NONE) in sparx5_serdes_set_media()
2323 sparx5_serdes_config(macro); in sparx5_serdes_set_media()
2330 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_set_speed() local
2332 if (macro->priv->data->type == SPX5_TARGET_SPARX5) { in sparx5_serdes_set_speed()
2333 if (macro->sidx < SPX5_SERDES_10G_START && speed > SPEED_5000) in sparx5_serdes_set_speed()
2335 if (macro->sidx < SPX5_SERDES_25G_START && speed > SPEED_10000) in sparx5_serdes_set_speed()
2338 if (speed != macro->speed) { in sparx5_serdes_set_speed()
2339 macro->speed = speed; in sparx5_serdes_set_speed()
2340 if (macro->serdesmode != SPX5_SD_MODE_NONE) in sparx5_serdes_set_speed()
2341 sparx5_serdes_config(macro); in sparx5_serdes_set_speed()
2348 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_reset() local
2351 if (macro->serdestype == SPX5_SDT_25G) in sparx5_serdes_reset()
2352 err = sparx5_sd25g28_config(macro, true); in sparx5_serdes_reset()
2354 err = sparx5_sd10g28_config(macro, true); in sparx5_serdes_reset()
2357 macro->sidx, err); in sparx5_serdes_reset()
2366 struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); in sparx5_serdes_validate() local
2371 if (macro->speed == 0) in sparx5_serdes_validate()
2374 if (macro->priv->data->type == SPX5_TARGET_SPARX5) { in sparx5_serdes_validate()
2375 if (macro->sidx < SPX5_SERDES_10G_START && in sparx5_serdes_validate()
2376 macro->speed > SPEED_5000) in sparx5_serdes_validate()
2378 if (macro->sidx < SPX5_SERDES_25G_START && in sparx5_serdes_validate()
2379 macro->speed > SPEED_10000) in sparx5_serdes_validate()
2384 if (macro->speed != SPEED_100 && /* This is for 100BASE-FX */ in sparx5_serdes_validate()
2385 macro->speed != SPEED_1000) in sparx5_serdes_validate()
2391 if (macro->speed >= SPEED_5000) in sparx5_serdes_validate()
2395 if (macro->speed < SPEED_5000) in sparx5_serdes_validate()
2415 static void sparx5_serdes_type_set(struct sparx5_serdes_macro *macro, int sidx) in sparx5_serdes_type_set() argument
2418 macro->serdestype = SPX5_SDT_6G; in sparx5_serdes_type_set()
2419 macro->stpidx = macro->sidx; in sparx5_serdes_type_set()
2421 macro->serdestype = SPX5_SDT_10G; in sparx5_serdes_type_set()
2422 macro->stpidx = macro->sidx - SPX5_SERDES_10G_START; in sparx5_serdes_type_set()
2424 macro->serdestype = SPX5_SDT_25G; in sparx5_serdes_type_set()
2425 macro->stpidx = macro->sidx - SPX5_SERDES_25G_START; in sparx5_serdes_type_set()
2429 static void lan969x_serdes_type_set(struct sparx5_serdes_macro *macro, int sidx) in lan969x_serdes_type_set() argument
2431 macro->serdestype = SPX5_SDT_10G; in lan969x_serdes_type_set()
2432 macro->stpidx = macro->sidx; in lan969x_serdes_type_set()
2438 struct sparx5_serdes_macro *macro; in sparx5_phy_create() local
2444 macro = devm_kzalloc(priv->dev, sizeof(*macro), GFP_KERNEL); in sparx5_phy_create()
2445 if (!macro) in sparx5_phy_create()
2448 macro->sidx = idx; in sparx5_phy_create()
2449 macro->priv = priv; in sparx5_phy_create()
2450 macro->speed = SPEED_UNKNOWN; in sparx5_phy_create()
2452 priv->data->ops.serdes_type_set(macro, idx); in sparx5_phy_create()
2454 phy_set_drvdata(*phy, macro); in sparx5_phy_create()
2639 struct sparx5_serdes_macro *macro = in sparx5_serdes_xlate() local
2642 if (sidx != macro->sidx) in sparx5_serdes_xlate()