Lines Matching +full:speed +full:- +full:map
1 // SPDX-License-Identifier: GPL-2.0+
20 /* Each entry in the following struct defines properties for a given speed
24 /* Number of devices that requires this speed. */
27 /* Array of devices that requires this speed. */
30 /* Number of slots required for one device running this speed. */
33 /* Gap between two slots for one device running this speed. */
49 return -EINVAL; in lan969x_dsm_cal_idx_get()
58 return -ENOENT; in lan969x_dsm_cal_idx_get()
61 static enum lan969x_dsm_cal_dev lan969x_dsm_cal_get_dev(int speed) in lan969x_dsm_cal_get_dev() argument
63 return (speed == 10000 ? DSM_CAL_DEV_10G : in lan969x_dsm_cal_get_dev()
64 speed == 5000 ? DSM_CAL_DEV_5G : in lan969x_dsm_cal_get_dev()
65 speed == 2500 ? DSM_CAL_DEV_2G5 : in lan969x_dsm_cal_get_dev()
82 struct lan969x_dsm_cal_dev_speed *speed; in lan969x_dsm_calendar_calc() local
86 taxi_bw = (128 * 1000000) / sparx5_clk_period(sparx5->coreclock); in lan969x_dsm_calendar_calc()
88 memcpy(data->taxi_ports, &lan969x_taxi_ports[taxi], in lan969x_dsm_calendar_calc()
92 u32 portno = data->taxi_ports[i]; in lan969x_dsm_calendar_calc()
97 if (portno < sparx5->data->consts->n_ports_all) in lan969x_dsm_calendar_calc()
98 data->taxi_speeds[i] = sparx5_cal_speed_to_value(bw); in lan969x_dsm_calendar_calc()
100 data->taxi_speeds[i] = 0; in lan969x_dsm_calendar_calc()
104 * this taxi map. in lan969x_dsm_calendar_calc()
107 u32 taxi_speed = data->taxi_speeds[i]; in lan969x_dsm_calendar_calc()
116 speed = &dev_speeds[dev]; in lan969x_dsm_calendar_calc()
117 speed->devs[speed->n_devs++] = i; in lan969x_dsm_calendar_calc()
124 return -EINVAL; in lan969x_dsm_calendar_calc()
128 data->schedule[0] = SPX5_DSM_CAL_EMPTY; in lan969x_dsm_calendar_calc()
141 speed = &dev_speeds[i]; in lan969x_dsm_calendar_calc()
143 if (speed->n_devs == 0) in lan969x_dsm_calendar_calc()
147 speed->n_slots = DIV_ROUND_UP(required_bw, bw_per_slot); in lan969x_dsm_calendar_calc()
149 if (speed->n_slots) in lan969x_dsm_calendar_calc()
150 speed->gap = DIV_ROUND_UP(cal_len, in lan969x_dsm_calendar_calc()
151 speed->n_slots); in lan969x_dsm_calendar_calc()
153 speed->gap = 0; in lan969x_dsm_calendar_calc()
155 n_slots += speed->n_slots * speed->n_devs; in lan969x_dsm_calendar_calc()
167 return -EINVAL; in lan969x_dsm_calendar_calc()
171 data->schedule[i] = SPX5_DSM_CAL_EMPTY; in lan969x_dsm_calendar_calc()
175 speed = &dev_speeds[i]; in lan969x_dsm_calendar_calc()
176 for (u32 dev = 0; dev < speed->n_devs; dev++) { in lan969x_dsm_calendar_calc()
179 for (n_slots = 0; n_slots < speed->n_slots; n_slots++) { in lan969x_dsm_calendar_calc()
180 err = lan969x_dsm_cal_idx_get(data->schedule, in lan969x_dsm_calendar_calc()
184 data->schedule[idx] = speed->devs[dev]; in lan969x_dsm_calendar_calc()
185 idx += speed->gap; in lan969x_dsm_calendar_calc()