Lines Matching full:sparx5
2 /* Microchip Sparx5 Switch driver
23 static int sparx5_psfp_sf_get(struct sparx5 *sparx5, u32 *id) in sparx5_psfp_sf_get() argument
26 sparx5->data->consts->n_filters, id); in sparx5_psfp_sf_get()
29 static int sparx5_psfp_sf_put(struct sparx5 *sparx5, u32 id) in sparx5_psfp_sf_put() argument
32 sparx5->data->consts->n_filters, id); in sparx5_psfp_sf_put()
35 static int sparx5_psfp_sg_get(struct sparx5 *sparx5, u32 idx, u32 *id) in sparx5_psfp_sg_get() argument
38 sparx5->data->consts->n_gates, idx, id); in sparx5_psfp_sg_get()
41 static int sparx5_psfp_sg_put(struct sparx5 *sparx5, u32 id) in sparx5_psfp_sg_put() argument
44 sparx5->data->consts->n_gates, id); in sparx5_psfp_sg_put()
47 static int sparx5_psfp_fm_get(struct sparx5 *sparx5, u32 idx, u32 *id) in sparx5_psfp_fm_get() argument
50 sparx5->data->consts->n_sdlbs, idx, id); in sparx5_psfp_fm_get()
53 static int sparx5_psfp_fm_put(struct sparx5 *sparx5, u32 id) in sparx5_psfp_fm_put() argument
56 sparx5->data->consts->n_sdlbs, id); in sparx5_psfp_fm_put()
59 u32 sparx5_psfp_isdx_get_sf(struct sparx5 *sparx5, u32 isdx) in sparx5_psfp_isdx_get_sf() argument
61 return ANA_L2_TSN_CFG_TSN_SFID_GET(spx5_rd(sparx5, in sparx5_psfp_isdx_get_sf()
65 u32 sparx5_psfp_isdx_get_fm(struct sparx5 *sparx5, u32 isdx) in sparx5_psfp_isdx_get_fm() argument
67 return ANA_L2_DLB_CFG_DLB_IDX_GET(spx5_rd(sparx5, in sparx5_psfp_isdx_get_fm()
71 u32 sparx5_psfp_sf_get_sg(struct sparx5 *sparx5, u32 sfid) in sparx5_psfp_sf_get_sg() argument
73 return ANA_AC_TSN_SF_CFG_TSN_SGID_GET(spx5_rd(sparx5, in sparx5_psfp_sf_get_sg()
77 void sparx5_isdx_conf_set(struct sparx5 *sparx5, u32 isdx, u32 sfid, u32 fmid) in sparx5_isdx_conf_set() argument
80 sparx5, ANA_L2_TSN_CFG(isdx)); in sparx5_isdx_conf_set()
83 sparx5, ANA_L2_DLB_CFG(isdx)); in sparx5_isdx_conf_set()
92 static int sparx5_psfp_sgid_get_status(struct sparx5 *sparx5) in sparx5_psfp_sgid_get_status() argument
94 return spx5_rd(sparx5, ANA_AC_SG_ACCESS_CTRL); in sparx5_psfp_sgid_get_status()
97 static int sparx5_psfp_sgid_wait_for_completion(struct sparx5 *sparx5) in sparx5_psfp_sgid_wait_for_completion() argument
101 return readx_poll_timeout(sparx5_psfp_sgid_get_status, sparx5, val, in sparx5_psfp_sgid_wait_for_completion()
107 static void sparx5_psfp_sg_config_change(struct sparx5 *sparx5, u32 id) in sparx5_psfp_sg_config_change() argument
109 spx5_wr(ANA_AC_SG_ACCESS_CTRL_SGID_SET(id), sparx5, in sparx5_psfp_sg_config_change()
114 sparx5, ANA_AC_SG_ACCESS_CTRL); in sparx5_psfp_sg_config_change()
116 if (sparx5_psfp_sgid_wait_for_completion(sparx5) < 0) in sparx5_psfp_sg_config_change()
121 static void sparx5_psfp_sf_set(struct sparx5 *sparx5, u32 id, in sparx5_psfp_sf_set() argument
132 sparx5, ANA_AC_TSN_SF_CFG(id)); in sparx5_psfp_sf_set()
135 static int sparx5_psfp_sg_set(struct sparx5 *sparx5, u32 id, in sparx5_psfp_sg_set() argument
147 spx5_wr(ANA_AC_SG_ACCESS_CTRL_SGID_SET(id), sparx5, in sparx5_psfp_sg_set()
151 spx5_wr(sg->basetime.tv_nsec, sparx5, ANA_AC_SG_CONFIG_REG_1); in sparx5_psfp_sg_set()
152 spx5_wr(base_lsb, sparx5, ANA_AC_SG_CONFIG_REG_2); in sparx5_psfp_sg_set()
164 sparx5, ANA_AC_SG_CONFIG_REG_3); in sparx5_psfp_sg_set()
166 spx5_wr(sg->cycletime, sparx5, ANA_AC_SG_CONFIG_REG_4); in sparx5_psfp_sg_set()
167 spx5_wr(sg->cycletimeext, sparx5, ANA_AC_SG_CONFIG_REG_5); in sparx5_psfp_sg_set()
178 sparx5, ANA_AC_SG_GCL_GS_CONFIG(i)); in sparx5_psfp_sg_set()
181 spx5_wr(accum_time_interval, sparx5, in sparx5_psfp_sg_set()
185 spx5_wr(gce->maxoctets, sparx5, ANA_AC_SG_GCL_OCT_CONFIG(i)); in sparx5_psfp_sg_set()
191 static int sparx5_sdlb_conf_set(struct sparx5 *sparx5, in sparx5_sdlb_conf_set() argument
194 int (*sparx5_sdlb_group_action)(struct sparx5 *sparx5, u32 group, in sparx5_sdlb_conf_set()
202 sparx5_policer_conf_set(sparx5, &fm->pol); in sparx5_sdlb_conf_set()
204 return sparx5_sdlb_group_action(sparx5, fm->pol.group, fm->pol.idx); in sparx5_sdlb_conf_set()
207 int sparx5_psfp_sf_add(struct sparx5 *sparx5, const struct sparx5_psfp_sf *sf, in sparx5_psfp_sf_add() argument
212 ret = sparx5_psfp_sf_get(sparx5, id); in sparx5_psfp_sf_add()
216 sparx5_psfp_sf_set(sparx5, *id, sf); in sparx5_psfp_sf_add()
221 int sparx5_psfp_sf_del(struct sparx5 *sparx5, u32 id) in sparx5_psfp_sf_del() argument
225 sparx5_psfp_sf_set(sparx5, id, &sf); in sparx5_psfp_sf_del()
227 return sparx5_psfp_sf_put(sparx5, id); in sparx5_psfp_sf_del()
230 int sparx5_psfp_sg_add(struct sparx5 *sparx5, u32 uidx, in sparx5_psfp_sg_add() argument
236 ret = sparx5_psfp_sg_get(sparx5, uidx, id); in sparx5_psfp_sg_add()
244 sparx5_new_base_time(sparx5, sg->cycletime, 0, &basetime); in sparx5_psfp_sg_add()
247 sparx5_psfp_sg_set(sparx5, *id, sg); in sparx5_psfp_sg_add()
250 sparx5_psfp_sg_config_change(sparx5, *id); in sparx5_psfp_sg_add()
255 int sparx5_psfp_sg_del(struct sparx5 *sparx5, u32 id) in sparx5_psfp_sg_del() argument
260 ret = sparx5_psfp_sg_put(sparx5, id); in sparx5_psfp_sg_del()
267 return sparx5_psfp_sg_set(sparx5, id, &sg); in sparx5_psfp_sg_del()
270 int sparx5_psfp_fm_add(struct sparx5 *sparx5, u32 uidx, in sparx5_psfp_fm_add() argument
277 ret = sparx5_psfp_fm_get(sparx5, uidx, &fm->pol.idx); in sparx5_psfp_fm_add()
284 ret = sparx5_sdlb_group_get_by_rate(sparx5, pol->rate, pol->burst); in sparx5_psfp_fm_add()
290 ret = sparx5_sdlb_conf_set(sparx5, fm); in sparx5_psfp_fm_add()
299 int sparx5_psfp_fm_del(struct sparx5 *sparx5, u32 id) in sparx5_psfp_fm_del() argument
306 ret = sparx5_sdlb_group_get_by_index(sparx5, id, &fm.pol.group); in sparx5_psfp_fm_del()
310 ret = sparx5_psfp_fm_put(sparx5, id); in sparx5_psfp_fm_del()
317 return sparx5_sdlb_conf_set(sparx5, &fm); in sparx5_psfp_fm_del()
320 void sparx5_psfp_init(struct sparx5 *sparx5) in sparx5_psfp_init() argument
322 const struct sparx5_ops *ops = sparx5->data->ops; in sparx5_psfp_init()
326 for (i = 0; i < sparx5->data->consts->n_lb_groups; i++) { in sparx5_psfp_init()
328 sparx5_sdlb_group_init(sparx5, group->max_rate, in sparx5_psfp_init()
333 sparx5, ANA_AC_SG_CYCLETIME_UPDATE_PERIOD); in sparx5_psfp_init()
336 ANA_L2_FWD_CFG_ISDX_LOOKUP_ENA, sparx5, ANA_L2_FWD_CFG); in sparx5_psfp_init()