Lines Matching refs:sparx5
28 u64 sparx5_sdlb_clk_hz_get(struct sparx5 *sparx5)
33 (sparx5_clk_period(sparx5->coreclock) / 100);
38 static int sparx5_sdlb_pup_interval_get(struct sparx5 *sparx5, u32 max_token,
43 clk_hz = sparx5_sdlb_clk_hz_get(sparx5);
48 int sparx5_sdlb_pup_token_get(struct sparx5 *sparx5, u32 pup_interval, u64 rate)
55 clk_hz = sparx5_sdlb_clk_hz_get(sparx5);
60 static void sparx5_sdlb_group_disable(struct sparx5 *sparx5, u32 group)
63 ANA_AC_SDLB_PUP_CTRL_PUP_ENA, sparx5,
67 static void sparx5_sdlb_group_enable(struct sparx5 *sparx5, u32 group)
70 ANA_AC_SDLB_PUP_CTRL_PUP_ENA, sparx5,
74 static u32 sparx5_sdlb_group_get_first(struct sparx5 *sparx5, u32 group)
78 val = spx5_rd(sparx5, ANA_AC_SDLB_XLB_START(group));
83 static u32 sparx5_sdlb_group_get_next(struct sparx5 *sparx5, u32 group,
88 val = spx5_rd(sparx5, ANA_AC_SDLB_XLB_NEXT(lb));
93 static bool sparx5_sdlb_group_is_first(struct sparx5 *sparx5, u32 group,
96 return lb == sparx5_sdlb_group_get_first(sparx5, group);
99 static bool sparx5_sdlb_group_is_last(struct sparx5 *sparx5, u32 group,
102 return lb == sparx5_sdlb_group_get_next(sparx5, group, lb);
105 static bool sparx5_sdlb_group_is_empty(struct sparx5 *sparx5, u32 group)
109 val = spx5_rd(sparx5, ANA_AC_SDLB_PUP_CTRL(group));
114 static u32 sparx5_sdlb_group_get_last(struct sparx5 *sparx5, u32 group)
118 itr = sparx5_sdlb_group_get_first(sparx5, group);
121 next = sparx5_sdlb_group_get_next(sparx5, group, itr);
129 static bool sparx5_sdlb_group_is_singular(struct sparx5 *sparx5, u32 group)
131 if (sparx5_sdlb_group_is_empty(sparx5, group))
134 return sparx5_sdlb_group_get_first(sparx5, group) ==
135 sparx5_sdlb_group_get_last(sparx5, group);
138 static int sparx5_sdlb_group_get_adjacent(struct sparx5 *sparx5, u32 group,
144 *first = sparx5_sdlb_group_get_first(sparx5, group);
150 *next = sparx5_sdlb_group_get_next(sparx5, group, itr);
163 static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group)
168 itr = sparx5_sdlb_group_get_first(sparx5, group);
171 next = sparx5_sdlb_group_get_next(sparx5, group, itr);
180 int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst)
182 const struct sparx5_ops *ops = sparx5->data->ops;
189 for (i = sparx5->data->consts->n_lb_groups - 1; i >= 0; i--) {
192 count = sparx5_sdlb_group_get_count(sparx5, i);
208 int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group)
213 for (i = 0; i < sparx5->data->consts->n_lb_groups; i++) {
214 if (sparx5_sdlb_group_is_empty(sparx5, i))
217 itr = sparx5_sdlb_group_get_first(sparx5, i);
220 next = sparx5_sdlb_group_get_next(sparx5, i, itr);
236 static int sparx5_sdlb_group_link(struct sparx5 *sparx5, u32 group, u32 idx,
240 sparx5_sdlb_group_disable(sparx5, group);
248 sparx5, ANA_AC_SDLB_XLB_NEXT(idx));
251 spx5_wr(ANA_AC_SDLB_XLB_START_LBSET_START_SET(first), sparx5,
255 sparx5_sdlb_group_enable(sparx5, group);
260 int sparx5_sdlb_group_add(struct sparx5 *sparx5, u32 group, u32 idx)
267 if (sparx5_sdlb_group_is_empty(sparx5, group))
270 next = sparx5_sdlb_group_get_first(sparx5, group);
272 return sparx5_sdlb_group_link(sparx5, group, idx, first, next, false);
275 int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx)
280 if (sparx5_sdlb_group_get_adjacent(sparx5, group, idx, &prev, &next,
287 if (sparx5_sdlb_group_is_singular(sparx5, group)) {
289 } else if (sparx5_sdlb_group_is_last(sparx5, group, idx)) {
293 } else if (sparx5_sdlb_group_is_first(sparx5, group, idx)) {
302 return sparx5_sdlb_group_link(sparx5, group, idx, first, next, empty);
305 void sparx5_sdlb_group_init(struct sparx5 *sparx5, u64 max_rate, u32 min_burst,
308 const struct sparx5_ops *ops = sparx5->data->ops;
326 sparx5_sdlb_pup_interval_get(sparx5, max_token, max_rate);
331 sparx5, ANA_AC_SDLB_PUP_INTERVAL(idx));
334 sparx5, ANA_AC_SDLB_FRM_RATE_TOKENS(idx));
336 spx5_wr(ANA_AC_SDLB_LBGRP_MISC_THRES_SHIFT_SET(thres_shift), sparx5,