Lines Matching full:group

60 static void sparx5_sdlb_group_disable(struct sparx5 *sparx5, u32 group)  in sparx5_sdlb_group_disable()  argument
64 ANA_AC_SDLB_PUP_CTRL(group)); in sparx5_sdlb_group_disable()
67 static void sparx5_sdlb_group_enable(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_enable() argument
71 ANA_AC_SDLB_PUP_CTRL(group)); in sparx5_sdlb_group_enable()
74 static u32 sparx5_sdlb_group_get_first(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_get_first() argument
78 val = spx5_rd(sparx5, ANA_AC_SDLB_XLB_START(group)); in sparx5_sdlb_group_get_first()
83 static u32 sparx5_sdlb_group_get_next(struct sparx5 *sparx5, u32 group, in sparx5_sdlb_group_get_next() argument
93 static bool sparx5_sdlb_group_is_first(struct sparx5 *sparx5, u32 group, in sparx5_sdlb_group_is_first() argument
96 return lb == sparx5_sdlb_group_get_first(sparx5, group); in sparx5_sdlb_group_is_first()
99 static bool sparx5_sdlb_group_is_last(struct sparx5 *sparx5, u32 group, in sparx5_sdlb_group_is_last() argument
102 return lb == sparx5_sdlb_group_get_next(sparx5, group, lb); in sparx5_sdlb_group_is_last()
105 static bool sparx5_sdlb_group_is_empty(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_is_empty() argument
109 val = spx5_rd(sparx5, ANA_AC_SDLB_PUP_CTRL(group)); in sparx5_sdlb_group_is_empty()
114 static u32 sparx5_sdlb_group_get_last(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_get_last() argument
118 itr = sparx5_sdlb_group_get_first(sparx5, group); in sparx5_sdlb_group_get_last()
121 next = sparx5_sdlb_group_get_next(sparx5, group, itr); in sparx5_sdlb_group_get_last()
129 static bool sparx5_sdlb_group_is_singular(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_is_singular() argument
131 if (sparx5_sdlb_group_is_empty(sparx5, group)) in sparx5_sdlb_group_is_singular()
134 return sparx5_sdlb_group_get_first(sparx5, group) == in sparx5_sdlb_group_is_singular()
135 sparx5_sdlb_group_get_last(sparx5, group); in sparx5_sdlb_group_is_singular()
138 static int sparx5_sdlb_group_get_adjacent(struct sparx5 *sparx5, u32 group, in sparx5_sdlb_group_get_adjacent() argument
144 *first = sparx5_sdlb_group_get_first(sparx5, group); in sparx5_sdlb_group_get_adjacent()
150 *next = sparx5_sdlb_group_get_next(sparx5, group, itr); in sparx5_sdlb_group_get_adjacent()
163 static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group) in sparx5_sdlb_group_get_count() argument
168 itr = sparx5_sdlb_group_get_first(sparx5, group); in sparx5_sdlb_group_get_count()
171 next = sparx5_sdlb_group_get_next(sparx5, group, itr); in sparx5_sdlb_group_get_count()
183 const struct sparx5_sdlb_group *group; in sparx5_sdlb_group_get_by_rate() local
190 group = ops->get_sdlb_group(i); in sparx5_sdlb_group_get_by_rate()
194 /* Check that this group is not full. in sparx5_sdlb_group_get_by_rate()
195 * According to LB group configuration rules: the number of XLBs in sparx5_sdlb_group_get_by_rate()
196 * in a group must not exceed PUP_INTERVAL/4 - 1. in sparx5_sdlb_group_get_by_rate()
198 if (count > ((group->pup_interval / 4) - 1)) in sparx5_sdlb_group_get_by_rate()
201 if (rate_bps < group->max_rate) in sparx5_sdlb_group_get_by_rate()
208 int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group) in sparx5_sdlb_group_get_by_index() argument
223 *group = i; in sparx5_sdlb_group_get_by_index()
236 static int sparx5_sdlb_group_link(struct sparx5 *sparx5, u32 group, u32 idx, in sparx5_sdlb_group_link() argument
240 sparx5_sdlb_group_disable(sparx5, group); in sparx5_sdlb_group_link()
247 ANA_AC_SDLB_XLB_NEXT_LBGRP_SET(group), in sparx5_sdlb_group_link()
252 ANA_AC_SDLB_XLB_START(group)); in sparx5_sdlb_group_link()
255 sparx5_sdlb_group_enable(sparx5, group); in sparx5_sdlb_group_link()
260 int sparx5_sdlb_group_add(struct sparx5 *sparx5, u32 group, u32 idx) in sparx5_sdlb_group_add() argument
267 if (sparx5_sdlb_group_is_empty(sparx5, group)) in sparx5_sdlb_group_add()
270 next = sparx5_sdlb_group_get_first(sparx5, group); in sparx5_sdlb_group_add()
272 return sparx5_sdlb_group_link(sparx5, group, idx, first, next, false); in sparx5_sdlb_group_add()
275 int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx) in sparx5_sdlb_group_del() argument
280 if (sparx5_sdlb_group_get_adjacent(sparx5, group, idx, &prev, &next, in sparx5_sdlb_group_del()
282 pr_err("%s:%d Could not find idx: %d in group: %d", __func__, in sparx5_sdlb_group_del()
283 __LINE__, idx, group); in sparx5_sdlb_group_del()
287 if (sparx5_sdlb_group_is_singular(sparx5, group)) { in sparx5_sdlb_group_del()
289 } else if (sparx5_sdlb_group_is_last(sparx5, group, idx)) { in sparx5_sdlb_group_del()
293 } else if (sparx5_sdlb_group_is_first(sparx5, group, idx)) { in sparx5_sdlb_group_del()
302 return sparx5_sdlb_group_link(sparx5, group, idx, first, next, empty); in sparx5_sdlb_group_del()
310 struct sparx5_sdlb_group *group; in sparx5_sdlb_group_init() local
313 group = ops->get_sdlb_group(idx); in sparx5_sdlb_group_init()
325 group->pup_interval = in sparx5_sdlb_group_init()
328 group->frame_size = frame_size; in sparx5_sdlb_group_init()
330 spx5_wr(ANA_AC_SDLB_PUP_INTERVAL_PUP_INTERVAL_SET(group->pup_interval), in sparx5_sdlb_group_init()