Lines Matching full:sparx5
2 /* Microchip Sparx5 Switch driver
37 static u32 sparx5_target_bandwidth(struct sparx5 *sparx5) in sparx5_target_bandwidth() argument
39 switch (sparx5->target_ct) { in sparx5_target_bandwidth()
118 enum sparx5_cal_bw sparx5_get_port_cal_speed(struct sparx5 *sparx5, u32 portno) in sparx5_get_port_cal_speed() argument
122 if (portno >= sparx5->data->consts->n_ports) { in sparx5_get_port_cal_speed()
125 sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_0) || in sparx5_get_port_cal_speed()
127 sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_1)) { in sparx5_get_port_cal_speed()
131 sparx5_get_internal_port(sparx5, SPX5_PORT_VD0)) { in sparx5_get_port_cal_speed()
135 sparx5_get_internal_port(sparx5, SPX5_PORT_VD1)) { in sparx5_get_port_cal_speed()
139 sparx5_get_internal_port(sparx5, SPX5_PORT_VD2)) { in sparx5_get_port_cal_speed()
147 port = sparx5->ports[portno]; in sparx5_get_port_cal_speed()
154 int sparx5_config_auto_calendar(struct sparx5 *sparx5) in sparx5_config_auto_calendar() argument
156 const struct sparx5_consts *consts = sparx5->data->consts; in sparx5_config_auto_calendar()
165 max_core_bw = sparx5_clk_to_bandwidth(sparx5->coreclock); in sparx5_config_auto_calendar()
167 dev_err(sparx5->dev, "Core clock not supported"); in sparx5_config_auto_calendar()
175 spd = sparx5_get_port_cal_speed(sparx5, portno); in sparx5_config_auto_calendar()
191 if (used_port_bw > sparx5_target_bandwidth(sparx5)) { in sparx5_config_auto_calendar()
192 dev_err(sparx5->dev, in sparx5_config_auto_calendar()
194 used_port_bw, sparx5_target_bandwidth(sparx5)); in sparx5_config_auto_calendar()
199 dev_err(sparx5->dev, in sparx5_config_auto_calendar()
206 if (is_sparx5(sparx5)) in sparx5_config_auto_calendar()
209 sparx5, QSYS_CAL_CTRL); in sparx5_config_auto_calendar()
213 spx5_wr(cal[idx], sparx5, QSYS_CAL_AUTO(idx)); in sparx5_config_auto_calendar()
220 sparx5, in sparx5_config_auto_calendar()
226 sparx5, in sparx5_config_auto_calendar()
232 sparx5, QSYS_CAL_CTRL); in sparx5_config_auto_calendar()
235 value = spx5_rd(sparx5, QSYS_CAL_CTRL); in sparx5_config_auto_calendar()
237 dev_err(sparx5->dev, "QSYS calendar error\n"); in sparx5_config_auto_calendar()
277 int sparx5_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi, in sparx5_dsm_calendar_calc() argument
285 clk_period_ps = sparx5_clk_period(sparx5->coreclock); in sparx5_dsm_calendar_calc()
303 if (portno < sparx5->data->consts->n_ports_all) { in sparx5_dsm_calendar_calc()
305 (sparx5_get_port_cal_speed(sparx5, portno)); in sparx5_dsm_calendar_calc()
329 dev_err(sparx5->dev, in sparx5_dsm_calendar_calc()
368 dev_err(sparx5->dev, in sparx5_dsm_calendar_calc()
376 dev_err(sparx5->dev, in sparx5_dsm_calendar_calc()
454 dev_err(sparx5->dev, in sparx5_dsm_calendar_calc()
473 static int sparx5_dsm_calendar_check(struct sparx5 *sparx5, in sparx5_dsm_calendar_check() argument
523 dev_err(sparx5->dev, in sparx5_dsm_calendar_check()
529 static int sparx5_dsm_calendar_update(struct sparx5 *sparx5, u32 taxi, in sparx5_dsm_calendar_update() argument
534 if (!is_sparx5(sparx5)) { in sparx5_dsm_calendar_update()
537 val = spx5_rd(sparx5, DSM_TAXI_CAL_CFG(taxi)); in sparx5_dsm_calendar_update()
542 sparx5, DSM_TAXI_CAL_CFG(taxi)); in sparx5_dsm_calendar_update()
547 sparx5, in sparx5_dsm_calendar_update()
552 sparx5, in sparx5_dsm_calendar_update()
556 sparx5, in sparx5_dsm_calendar_update()
561 sparx5, in sparx5_dsm_calendar_update()
563 len = DSM_TAXI_CAL_CFG_CAL_CUR_LEN_GET(spx5_rd(sparx5, in sparx5_dsm_calendar_update()
568 if (!is_sparx5(sparx5)) { in sparx5_dsm_calendar_update()
571 sparx5, DSM_TAXI_CAL_CFG(taxi)); in sparx5_dsm_calendar_update()
576 dev_err(sparx5->dev, "Incorrect calendar length: %u\n", len); in sparx5_dsm_calendar_update()
581 int sparx5_config_dsm_calendar(struct sparx5 *sparx5) in sparx5_config_dsm_calendar() argument
583 const struct sparx5_ops *ops = sparx5->data->ops; in sparx5_config_dsm_calendar()
592 for (taxi = 0; taxi < sparx5->data->consts->n_dsm_cal_taxis; ++taxi) { in sparx5_config_dsm_calendar()
593 err = ops->dsm_calendar_calc(sparx5, taxi, data); in sparx5_config_dsm_calendar()
595 dev_err(sparx5->dev, "DSM calendar calculation failed\n"); in sparx5_config_dsm_calendar()
598 err = sparx5_dsm_calendar_check(sparx5, data); in sparx5_config_dsm_calendar()
600 dev_err(sparx5->dev, "DSM calendar check failed\n"); in sparx5_config_dsm_calendar()
603 err = sparx5_dsm_calendar_update(sparx5, taxi, data); in sparx5_config_dsm_calendar()
605 dev_err(sparx5->dev, "DSM calendar update failed\n"); in sparx5_config_dsm_calendar()