]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
phy: sparx5-serdes: add function for getting the CMU index
authorDaniel Machon <daniel.machon@microchip.com>
Mon, 9 Sep 2024 15:14:45 +0000 (17:14 +0200)
committerVinod Koul <vkoul@kernel.org>
Mon, 21 Oct 2024 18:32:03 +0000 (00:02 +0530)
The SERDES to CMU mapping is different on Sparx5 and lan969x. Therefore
create a function for getting the CMU index on Sparx5.

Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com>
Link: https://lore.kernel.org/r/20240909-sparx5-lan969x-serdes-driver-v2-5-d695bcb57b84@microchip.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/phy/microchip/sparx5_serdes.c
drivers/phy/microchip/sparx5_serdes.h

index b1376a142b147511634d9e21de173e2789ca6172..5b918a2716dd10931e100e0ee479530e396aacc5 100644 (file)
 /* Optimal power settings from GUC */
 #define SPX5_SERDES_QUIET_MODE_VAL 0x01ef4e0c
 
-enum sparx5_10g28cmu_mode {
-       SPX5_SD10G28_CMU_MAIN = 0,
-       SPX5_SD10G28_CMU_AUX1 = 1,
-       SPX5_SD10G28_CMU_AUX2 = 3,
-       SPX5_SD10G28_CMU_NONE = 4,
-       SPX5_SD10G28_CMU_MAX,
-};
-
 enum sparx5_sd25g28_mode_preset_type {
        SPX5_SD25G28_MODE_PRESET_25000,
        SPX5_SD25G28_MODE_PRESET_10000,
@@ -1648,7 +1640,7 @@ static int sparx5_sd10g28_apply_params(struct sparx5_serdes_macro *macro,
        if (params->skip_cmu_cfg)
                return 0;
 
-       cmu_idx = sparx5_serdes_cmu_get(params->cmu_sel, lane_index);
+       cmu_idx = priv->data->ops.serdes_cmu_get(params->cmu_sel, macro->sidx);
        err = sparx5_cmu_cfg(priv, cmu_idx);
        if (err)
                return err;
@@ -2520,6 +2512,7 @@ static const struct sparx5_serdes_match_data sparx5_desc = {
        },
        .ops = {
                .serdes_type_set      = &sparx5_serdes_type_set,
+               .serdes_cmu_get       = &sparx5_serdes_cmu_get,
        },
 };
 
index 785c7fe0bbebef272d217518631c860494b31fca..a7e92c1330e9261d233e53fb9479861e9a275fdd 100644 (file)
@@ -26,6 +26,14 @@ enum sparx5_serdes_mode {
        SPX5_SD_MODE_SFI,
 };
 
+enum sparx5_10g28cmu_mode {
+       SPX5_SD10G28_CMU_MAIN = 0,
+       SPX5_SD10G28_CMU_AUX1 = 1,
+       SPX5_SD10G28_CMU_AUX2 = 3,
+       SPX5_SD10G28_CMU_NONE = 4,
+       SPX5_SD10G28_CMU_MAX,
+};
+
 struct sparx5_serdes_macro {
        struct sparx5_serdes_private *priv;
        u32 sidx;
@@ -44,6 +52,7 @@ struct sparx5_serdes_consts {
 
 struct sparx5_serdes_ops {
        void (*serdes_type_set)(struct sparx5_serdes_macro *macro, int sidx);
+       int (*serdes_cmu_get)(enum sparx5_10g28cmu_mode mode, int sd_index);
 };
 
 struct sparx5_serdes_match_data {