Commit beb36b50 authored by Daniel Machon's avatar Daniel Machon Committed by Paolo Abeni
Browse files

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: default avatarSteen Hegelund <Steen.Hegelund@microchip.com>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarDaniel Machon <daniel.machon@microchip.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 20f8bc87
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 = {
+3 −0
Original line number Diff line number Diff line
@@ -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);

+2 −1
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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);
	}
+7 −1
Original line number Diff line number Diff line
@@ -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
Loading