net: sparx5: ops out functions for getting certain array values
authorDaniel Machon <daniel.machon@microchip.com>
Fri, 4 Oct 2024 13:19:36 +0000 (15:19 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 8 Oct 2024 10:07:01 +0000 (12:07 +0200)
Add getters for getting values in arrays: sdlb_groups and
sparx5_hsch_max_group_rate and ops out the getters, as these arrays will
differ on lan969x.

Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
drivers/net/ethernet/microchip/sparx5/sparx5_qos.h
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c

index 10074b02a8d2831f2ba09ba5213e64b3a8cd3324..4fe672cd3b46fe8f06d066efd17f92bd210655d7 100644 (file)
@@ -990,6 +990,8 @@ static const struct sparx5_ops sparx5_ops = {
        .is_port_25g             = &sparx5_port_is_25g,
        .get_port_dev_index      = &sparx5_port_dev_mapping,
        .get_port_dev_bit        = &sparx5_port_dev_mapping,
+       .get_hsch_max_group_rate = &sparx5_get_hsch_max_group_rate,
+       .get_sdlb_group          = &sparx5_get_sdlb_group,
 };
 
 static const struct sparx5_match_data sparx5_desc = {
index f7e1b7d18f816c323f6e68d7f1098289ba06049f..b6abbae119c251b2f3aefa7f398e610fc56d1721 100644 (file)
@@ -265,6 +265,8 @@ struct sparx5_ops {
        bool (*is_port_25g)(int portno);
        u32  (*get_port_dev_index)(struct sparx5 *sparx5, int port);
        u32  (*get_port_dev_bit)(struct sparx5 *sparx5, int port);
+       u32  (*get_hsch_max_group_rate)(int grp);
+       struct sparx5_sdlb_group *(*get_sdlb_group)(int idx);
 };
 
 struct sparx5_main_io_resource {
@@ -501,6 +503,7 @@ struct sparx5_sdlb_group {
 };
 
 extern struct sparx5_sdlb_group sdlb_groups[SPX5_SDLB_GROUP_CNT];
+struct sparx5_sdlb_group *sparx5_get_sdlb_group(int idx);
 int sparx5_sdlb_pup_token_get(struct sparx5 *sparx5, u32 pup_interval,
                              u64 rate);
 
index 8ada5cee134216cbc7578974ac46620d6ed7f6cd..c88820e83812c1ea7b27f615988f99028c951ab7 100644 (file)
@@ -11,10 +11,11 @@ static int sparx5_policer_service_conf_set(struct sparx5 *sparx5,
                                           struct sparx5_policer *pol)
 {
        u32 idx, pup_tokens, max_pup_tokens, burst, thres;
+       const struct sparx5_ops *ops = sparx5->data->ops;
        struct sparx5_sdlb_group *g;
        u64 rate;
 
-       g = &sdlb_groups[pol->group];
+       g = ops->get_sdlb_group(pol->group);
        idx = pol->idx;
 
        rate = pol->rate * 1000;
index fa6cc052bf8119992d7b647fe3fcde48a668e430..cd4f42c3f7ebff82fb56fb19e57f2c8e3c9909b1 100644 (file)
@@ -319,11 +319,12 @@ int sparx5_psfp_fm_del(struct sparx5 *sparx5, u32 id)
 
 void sparx5_psfp_init(struct sparx5 *sparx5)
 {
+       const struct sparx5_ops *ops = sparx5->data->ops;
        const struct sparx5_sdlb_group *group;
        int i;
 
        for (i = 0; i < sparx5->data->consts->n_lb_groups; i++) {
-               group = &sdlb_groups[i];
+               group = ops->get_sdlb_group(i);
                sparx5_sdlb_group_init(sparx5, group->max_rate,
                                       group->min_burst, group->frame_size, i);
        }
index 5f34febaee6b8a2f531d0cba14479561d1d0670d..d065f8c40d370821e617c3855d21dc157fcd9277 100644 (file)
@@ -74,6 +74,11 @@ static const u32 spx5_hsch_max_group_rate[SPX5_HSCH_LEAK_GRP_CNT] = {
        26214200 /* 26.214 Gbps */
 };
 
+u32 sparx5_get_hsch_max_group_rate(int grp)
+{
+       return spx5_hsch_max_group_rate[grp];
+}
+
 static struct sparx5_layer layers[SPX5_HSCH_LAYER_CNT];
 
 static u32 sparx5_lg_get_leak_time(struct sparx5 *sparx5, u32 layer, u32 group)
@@ -385,6 +390,7 @@ static int sparx5_dwrr_conf_set(struct sparx5_port *port,
 
 static int sparx5_leak_groups_init(struct sparx5 *sparx5)
 {
+       const struct sparx5_ops *ops = sparx5->data->ops;
        struct sparx5_layer *layer;
        u32 sys_clk_per_100ps;
        struct sparx5_lg *lg;
@@ -397,7 +403,7 @@ static int sparx5_leak_groups_init(struct sparx5 *sparx5)
                layer = &layers[i];
                for (ii = 0; ii < SPX5_HSCH_LEAK_GRP_CNT; ii++) {
                        lg = &layer->leak_groups[ii];
-                       lg->max_rate = spx5_hsch_max_group_rate[ii];
+                       lg->max_rate = ops->get_hsch_max_group_rate(i);
 
                        /* Calculate the leak time in us, to serve a maximum
                         * rate of 'max_rate' for this group
index ced35033a6c5ddbb0e7ca75553527fe5d3d03984..1231a80335d7b1ab13ed40b9430299424fd53df5 100644 (file)
@@ -79,4 +79,6 @@ int sparx5_tc_ets_add(struct sparx5_port *port,
 
 int sparx5_tc_ets_del(struct sparx5_port *port);
 
+u32 sparx5_get_hsch_max_group_rate(int grp);
+
 #endif /* __SPARX5_QOS_H__ */
index f79130293c4ed4850db02832a9800cfae8a04465..df1d15600aad05eb4a25d2d61c073b41fe5325f3 100644 (file)
@@ -20,6 +20,11 @@ struct sparx5_sdlb_group sdlb_groups[SPX5_SDLB_GROUP_CNT] = {
        {     5000000ULL,              8192 / 8, 64 }  /*   5 M */
 };
 
+struct sparx5_sdlb_group *sparx5_get_sdlb_group(int idx)
+{
+       return &sdlb_groups[idx];
+}
+
 int sparx5_sdlb_clk_hz_get(struct sparx5 *sparx5)
 {
        u32 clk_per_100ps;
@@ -178,6 +183,7 @@ static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group)
 
 int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst)
 {
+       const struct sparx5_ops *ops = sparx5->data->ops;
        const struct sparx5_sdlb_group *group;
        u64 rate_bps;
        int i, count;
@@ -185,7 +191,7 @@ int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst)
        rate_bps = rate * 1000;
 
        for (i = sparx5->data->consts->n_lb_groups - 1; i >= 0; i--) {
-               group = &sdlb_groups[i];
+               group = ops->get_sdlb_group(i);
 
                count = sparx5_sdlb_group_get_count(sparx5, i);
 
@@ -303,11 +309,12 @@ int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx)
 void sparx5_sdlb_group_init(struct sparx5 *sparx5, u64 max_rate, u32 min_burst,
                            u32 frame_size, u32 idx)
 {
+       const struct sparx5_ops *ops = sparx5->data->ops;
        u32 thres_shift, mask = 0x01, power = 0;
        struct sparx5_sdlb_group *group;
        u64 max_token;
 
-       group = &sdlb_groups[idx];
+       group = ops->get_sdlb_group(idx);
 
        /* Number of positions to right-shift LB's threshold value. */
        while ((min_burst & mask) == 0) {