Lines Matching refs:sparx5

24 void sparx5_new_base_time(struct sparx5 *sparx5, const u32 cycle_time,
35 sparx5_ptp_gettime64(&sparx5->phc[SPARX5_PHC_PORT].info, &ts);
84 static u32 sparx5_lg_get_leak_time(struct sparx5 *sparx5, u32 layer, u32 group)
88 value = spx5_rd(sparx5, HSCH_HSCH_TIMER_CFG(layer, group));
92 static void sparx5_lg_set_leak_time(struct sparx5 *sparx5, u32 layer, u32 group,
95 spx5_wr(HSCH_HSCH_TIMER_CFG_LEAK_TIME_SET(leak_time), sparx5,
99 static u32 sparx5_lg_get_first(struct sparx5 *sparx5, u32 layer, u32 group)
103 value = spx5_rd(sparx5, HSCH_HSCH_LEAK_CFG(layer, group));
107 static u32 sparx5_lg_get_next(struct sparx5 *sparx5, u32 layer, u32 group,
113 value = spx5_rd(sparx5, HSCH_SE_CONNECT(idx));
117 static u32 sparx5_lg_get_last(struct sparx5 *sparx5, u32 layer, u32 group)
121 itr = sparx5_lg_get_first(sparx5, layer, group);
124 next = sparx5_lg_get_next(sparx5, layer, group, itr);
132 static bool sparx5_lg_is_last(struct sparx5 *sparx5, u32 layer, u32 group,
135 return idx == sparx5_lg_get_next(sparx5, layer, group, idx);
138 static bool sparx5_lg_is_first(struct sparx5 *sparx5, u32 layer, u32 group,
141 return idx == sparx5_lg_get_first(sparx5, layer, group);
144 static bool sparx5_lg_is_empty(struct sparx5 *sparx5, u32 layer, u32 group)
146 return sparx5_lg_get_leak_time(sparx5, layer, group) == 0;
149 static bool sparx5_lg_is_singular(struct sparx5 *sparx5, u32 layer, u32 group)
151 if (sparx5_lg_is_empty(sparx5, layer, group))
154 return sparx5_lg_get_first(sparx5, layer, group) ==
155 sparx5_lg_get_last(sparx5, layer, group);
158 static void sparx5_lg_enable(struct sparx5 *sparx5, u32 layer, u32 group,
161 sparx5_lg_set_leak_time(sparx5, layer, group, leak_time);
164 static void sparx5_lg_disable(struct sparx5 *sparx5, u32 layer, u32 group)
166 sparx5_lg_set_leak_time(sparx5, layer, group, 0);
169 static int sparx5_lg_get_group_by_index(struct sparx5 *sparx5, u32 layer,
176 if (sparx5_lg_is_empty(sparx5, layer, i))
179 itr = sparx5_lg_get_first(sparx5, layer, i);
182 next = sparx5_lg_get_next(sparx5, layer, i, itr);
215 static int sparx5_lg_get_adjacent(struct sparx5 *sparx5, u32 layer, u32 group,
220 *first = sparx5_lg_get_first(sparx5, layer, group);
226 *next = sparx5_lg_get_next(sparx5, layer, group, itr);
241 static int sparx5_lg_conf_set(struct sparx5 *sparx5, u32 layer, u32 group,
247 sparx5_lg_disable(sparx5, layer, group);
254 HSCH_HSCH_CFG_CFG_HSCH_LAYER, sparx5, HSCH_HSCH_CFG_CFG);
257 spx5_wr(HSCH_SE_CONNECT_SE_LEAK_LINK_SET(idx_next), sparx5,
262 HSCH_HSCH_LEAK_CFG_LEAK_FIRST, sparx5,
266 sparx5_lg_enable(sparx5, layer, group, leak_time);
271 static int sparx5_lg_del(struct sparx5 *sparx5, u32 layer, u32 group, u32 idx)
277 WARN_ON(sparx5_lg_get_adjacent(sparx5, layer, group, idx, &prev, &next,
280 if (sparx5_lg_is_singular(sparx5, layer, group)) {
282 } else if (sparx5_lg_is_last(sparx5, layer, group, idx)) {
286 } else if (sparx5_lg_is_first(sparx5, layer, group, idx)) {
295 return sparx5_lg_conf_set(sparx5, layer, group, first, idx, next,
299 static int sparx5_lg_add(struct sparx5 *sparx5, u32 layer, u32 new_group,
308 if (sparx5_lg_get_group_by_index(sparx5, layer, idx, &old_group) >= 0) {
311 sparx5_lg_del(sparx5, layer, old_group, idx);
321 if (sparx5_lg_is_empty(sparx5, layer, new_group))
324 next = sparx5_lg_get_first(sparx5, layer, new_group);
326 return sparx5_lg_conf_set(sparx5, layer, new_group, first, idx, next,
334 int (*sparx5_lg_action)(struct sparx5 *, u32, u32, u32);
335 struct sparx5 *sparx5 = port->sparx5;
344 HSCH_HSCH_CFG_CFG_HSCH_LAYER, sparx5, HSCH_HSCH_CFG_CFG);
348 sparx5, HSCH_SE_CFG(idx));
353 sparx5, HSCH_CIR_CFG(idx));
356 sparx5_lg_action(sparx5, layer, group, idx);
370 u32 layer = is_sparx5(port->sparx5) ? 2 : 1;
376 port->sparx5, HSCH_HSCH_CFG_CFG);
380 HSCH_SE_CFG_SE_DWRR_CNT, port->sparx5,
385 HSCH_DWRR_ENTRY_DWRR_COST, port->sparx5,
392 static int sparx5_leak_groups_init(struct sparx5 *sparx5)
394 const struct sparx5_ops *ops = sparx5->data->ops;
401 sys_clk_per_100ps = spx5_rd(sparx5, HSCH_SYS_CLK_PER);
441 sparx5_lg_disable(sparx5, i, ii);
448 int sparx5_qos_init(struct sparx5 *sparx5)
452 ret = sparx5_leak_groups_init(sparx5);
456 ret = sparx5_dcb_init(sparx5);
460 sparx5_psfp_init(sparx5);
537 sparx5_lg_get_group_by_index(port->sparx5, layer, idx, &group);
564 /* On the sparx5, bands with higher indexes are preferred and