mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
net: sparx5: ops out functions for getting certain array values
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>
This commit is contained in:
parent
20f8bc8755
commit
beb36b5071
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user