Symbol: sparx5
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
123
static u32 lan969x_get_dev_mode_bit(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
143
static u32 lan969x_port_dev_mapping(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
187
static int lan969x_port_mux_set(struct sparx5 *sparx5, struct sparx5_port *port,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
199
spx5_rmw(BIT(inst), BIT(inst), sparx5, PORT_CONF_QSGMII_ENA);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
210
struct sparx5 *sparx5 = args;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
221
val = spx5_rd(sparx5, PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
236
port = sparx5->ports[txport];
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
239
delay = spx5_rd(sparx5, PTP_TWOSTEP_STAMP_NSEC);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
247
sparx5, PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
249
val = spx5_rd(sparx5, PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
256
id = spx5_rd(sparx5, PTP_TWOSTEP_STAMP_NSEC);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
258
id |= spx5_rd(sparx5, PTP_TWOSTEP_STAMP_SUBNS);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
274
sparx5, PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
279
spin_lock_irqsave(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
280
sparx5->ptp_skbs--;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
281
spin_unlock_irqrestore(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
284
sparx5_get_hwtimestamp(sparx5, &ts, delay);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.h
68
int lan969x_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.h
76
int lan969x_fdma_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.h
77
int lan969x_fdma_deinit(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.h
79
int lan969x_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_calendar.c
77
int lan969x_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_calendar.c
86
taxi_bw = (128 * 1000000) / sparx5_clk_period(sparx5->coreclock);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_calendar.c
95
bw = sparx5_get_port_cal_speed(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_calendar.c
97
if (portno < sparx5->data->consts->n_ports_all)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
100
static struct sk_buff *lan969x_fdma_rx_get_frame(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
103
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
114
sparx5_ifh_parse(sparx5, page_address(page), &fi);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
115
port = fi.src_port < consts->n_ports ? sparx5->ports[fi.src_port] :
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
133
sparx5_ptp_rxtstamp(sparx5, skb, fi.timestamp);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
136
if (test_bit(port->portno, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
15
#define FDMA_PRIV(fdma) ((struct sparx5 *)((fdma)->priv))
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
150
static int lan969x_fdma_rx_alloc(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
152
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
161
.dev = sparx5->dev,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
172
err = fdma_alloc_coherent(sparx5->dev, fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
183
static int lan969x_fdma_tx_alloc(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
185
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
193
err = fdma_alloc_coherent(sparx5->dev, fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
206
static void lan969x_fdma_rx_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
208
struct fdma *fdma = &sparx5->rx.fdma;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
213
fdma->priv = sparx5;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
220
for (int idx = 0; idx < sparx5->data->consts->n_ports; ++idx) {
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
221
struct sparx5_port *port = sparx5->ports[idx];
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
224
sparx5->rx.ndev = port->ndev;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
230
static void lan969x_fdma_tx_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
232
struct fdma *fdma = &sparx5->tx.fdma;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
237
fdma->priv = sparx5;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
247
struct sparx5 *sparx5 = container_of(rx, struct sparx5, rx);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
254
lan969x_fdma_tx_clear_buf(sparx5, weight);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
261
skb = lan969x_fdma_rx_get_frame(sparx5, rx);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
289
sparx5_fdma_reload(sparx5, fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
293
spx5_wr(0xff, sparx5, FDMA_INTR_DB_ENA);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
298
int lan969x_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
302
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
325
db_buf->dma_addr = dma_map_single(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
329
if (dma_mapping_error(sparx5->dev, db_buf->dma_addr))
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
350
sparx5_fdma_reload(sparx5, fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
355
int lan969x_fdma_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
357
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
360
lan969x_fdma_rx_init(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
361
lan969x_fdma_tx_init(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
362
sparx5_fdma_injection_mode(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
364
err = dma_set_mask_and_coherent(sparx5->dev, DMA_BIT_MASK(64));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
366
dev_err(sparx5->dev, "Failed to set 64-bit FDMA mask");
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
370
err = lan969x_fdma_rx_alloc(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
372
dev_err(sparx5->dev, "Failed to allocate RX buffers: %d\n",
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
377
err = lan969x_fdma_tx_alloc(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
379
fdma_free_coherent(sparx5->dev, &rx->fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
380
dev_err(sparx5->dev, "Failed to allocate TX buffers: %d\n",
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
386
spx5_wr(FDMA_CTRL_NRESET_SET(0), sparx5, FDMA_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
387
spx5_wr(FDMA_CTRL_NRESET_SET(1), sparx5, FDMA_CTRL);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
392
int lan969x_fdma_deinit(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
394
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
395
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
397
sparx5_fdma_stop(sparx5);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
398
fdma_free_coherent(sparx5->dev, &tx->fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
399
fdma_free_coherent(sparx5->dev, &rx->fdma);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
53
static void lan969x_fdma_tx_clear_buf(struct sparx5 *sparx5, int weight)
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
55
struct fdma *fdma = &sparx5->tx.fdma;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
60
spin_lock_irqsave(&sparx5->tx_lock, flags);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
63
db = &sparx5->tx.dbs[i];
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
73
sparx5->tx.packets++;
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
75
dma_unmap_single(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_fdma.c
86
spin_unlock_irqrestore(&sparx5->tx_lock, flags);
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
101
port->sparx5, HSIO_WRAP_RGMII_CFG(idx));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
123
port->sparx5, DEVRGMII_MAC_ENA_CFG(idx));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
129
port->sparx5, DEVRGMII_MAC_IFG_CFG(idx));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
133
port->sparx5, DEVRGMII_DEV_RST_CTRL(idx));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
140
port->sparx5,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
184
port->sparx5, HSIO_WRAP_DLL_CFG(idx, 0));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
195
port->sparx5, HSIO_WRAP_DLL_CFG(idx, 1));
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
206
spx5_wr(HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG_SET(1), port->sparx5,
drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_rgmii.c
78
dev_err(port->sparx5->dev, "Invalid RGMII delay: %u", delay_ps);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
118
enum sparx5_cal_bw sparx5_get_port_cal_speed(struct sparx5 *sparx5, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
122
if (portno >= sparx5->data->consts->n_ports) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
125
sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_0) ||
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
127
sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_1)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
131
sparx5_get_internal_port(sparx5, SPX5_PORT_VD0)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
135
sparx5_get_internal_port(sparx5, SPX5_PORT_VD1)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
139
sparx5_get_internal_port(sparx5, SPX5_PORT_VD2)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
147
port = sparx5->ports[portno];
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
154
int sparx5_config_auto_calendar(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
156
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
165
max_core_bw = sparx5_clk_to_bandwidth(sparx5->coreclock);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
167
dev_err(sparx5->dev, "Core clock not supported");
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
175
spd = sparx5_get_port_cal_speed(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
191
if (used_port_bw > sparx5_target_bandwidth(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
192
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
194
used_port_bw, sparx5_target_bandwidth(sparx5));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
199
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
206
if (is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
209
sparx5, QSYS_CAL_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
213
spx5_wr(cal[idx], sparx5, QSYS_CAL_AUTO(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
220
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
226
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
232
sparx5, QSYS_CAL_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
235
value = spx5_rd(sparx5, QSYS_CAL_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
237
dev_err(sparx5->dev, "QSYS calendar error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
277
int sparx5_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
285
clk_period_ps = sparx5_clk_period(sparx5->coreclock);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
303
if (portno < sparx5->data->consts->n_ports_all) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
305
(sparx5_get_port_cal_speed(sparx5, portno));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
329
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
368
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
37
static u32 sparx5_target_bandwidth(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
376
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
39
switch (sparx5->target_ct) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
454
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
473
static int sparx5_dsm_calendar_check(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
523
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
529
static int sparx5_dsm_calendar_update(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
534
if (!is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
537
val = spx5_rd(sparx5, DSM_TAXI_CAL_CFG(taxi));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
542
sparx5, DSM_TAXI_CAL_CFG(taxi));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
547
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
552
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
556
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
561
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
563
len = DSM_TAXI_CAL_CFG_CAL_CUR_LEN_GET(spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
568
if (!is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
571
sparx5, DSM_TAXI_CAL_CFG(taxi));
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
576
dev_err(sparx5->dev, "Incorrect calendar length: %u\n", len);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
581
int sparx5_config_dsm_calendar(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
583
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
592
for (taxi = 0; taxi < sparx5->data->consts->n_dsm_cal_taxis; ++taxi) {
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
593
err = ops->dsm_calendar_calc(sparx5, taxi, data);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
595
dev_err(sparx5->dev, "DSM calendar calculation failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
598
err = sparx5_dsm_calendar_check(sparx5, data);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
600
dev_err(sparx5->dev, "DSM calendar check failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
603
err = sparx5_dsm_calendar_update(sparx5, taxi, data);
drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c
605
dev_err(sparx5->dev, "DSM calendar update failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
237
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
241
for (i = 0; i < sparx5->data->consts->n_ports; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
242
port_itr = port->sparx5->ports[i];
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
385
int sparx5_dcb_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
390
for (i = 0; i < sparx5->data->consts->n_ports; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c
391
port = sparx5->ports[i];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1002
return sparx5->num_ethtool_stats;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1008
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1014
for (idx = 0; idx < sparx5->num_ethtool_stats; idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1015
ethtool_puts(&data, sparx5->stats_layout[idx]);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1022
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1028
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1030
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1031
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1033
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1036
inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1039
sparx5_get_ana_ac_stats_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1040
sparx5_get_queue_sys_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1044
sparx5->num_ethtool_stats; idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1052
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1056
if (!sparx5->stats)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1059
portstats = &sparx5->stats[port->portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1111
static void sparx5_update_port_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1113
if (sparx5_is_baser(sparx5->ports[portno]->conf.portmode))
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1114
sparx5_get_device_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1116
sparx5_get_asm_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1117
sparx5_get_ana_ac_stats_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1118
sparx5_get_queue_sys_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1121
static void sparx5_update_stats(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1125
for (idx = 0; idx < sparx5->data->consts->n_ports; idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1126
if (sparx5->ports[idx])
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1127
sparx5_update_port_stats(sparx5, idx);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1133
struct sparx5 *sparx5 = container_of(dwork,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1134
struct sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1137
sparx5_update_stats(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1139
queue_delayed_work(sparx5->stats_queue, &sparx5->stats_work,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1159
static void sparx5_config_stats(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1164
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1168
static void sparx5_config_port_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1172
XQS_STAT_CFG_STAT_CLEAR_SHOT_SET(3), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1182
sparx5, ANA_AC_PORT_STAT_CFG(portno, SPX5_PORT_POLICER_DROPS));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1189
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1192
if (!sparx5->ptp && is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1195
phc = &sparx5->phc[SPARX5_PHC_PORT];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1247
int sparx_stats_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1249
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1253
sparx5->stats_layout = sparx5_stats_layout;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1254
sparx5->num_stats = spx5_stats_count;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1255
sparx5->num_ethtool_stats = ARRAY_SIZE(sparx5_stats_layout);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1256
sparx5->stats = devm_kcalloc(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1258
sparx5->num_stats,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1260
if (!sparx5->stats)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1263
mutex_init(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1264
sparx5_config_stats(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1266
if (sparx5->ports[portno])
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1267
sparx5_config_port_stats(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1270
dev_name(sparx5->dev));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1271
sparx5->stats_queue = create_singlethread_workqueue(queue_name);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1272
if (!sparx5->stats_queue)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1275
INIT_DELAYED_WORK(&sparx5->stats_work, sparx5_check_stats_work);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
1276
queue_delayed_work(sparx5->stats_queue, &sparx5->stats_work,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
201
static void sparx5_get_queue_sys_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
208
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
209
mutex_lock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
210
spx5_wr(XQS_STAT_CFG_STAT_VIEW_SET(portno), sparx5, XQS_STAT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
214
sparx5_update_counter(stats, spx5_rd(sparx5, XQS_CNT(addr)));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
218
sparx5_update_counter(stats, spx5_rd(sparx5, XQS_CNT(addr)));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
222
sparx5_update_counter(stats, spx5_rd(sparx5, XQS_CNT(addr)));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
224
spx5_rd(sparx5, XQS_CNT(32)));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
226
spx5_rd(sparx5, XQS_CNT(272)));
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
227
mutex_unlock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
230
static void sparx5_get_ana_ac_stats_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
232
u64 *portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
235
spx5_rd(sparx5, ANA_AC_PORT_STAT_LSB_CNT(portno,
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
505
static void sparx5_get_device_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
507
u64 *portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
508
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
509
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
512
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
788
static void sparx5_get_asm_stats(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
790
u64 *portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
791
void __iomem *inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
815
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
820
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
822
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
823
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
825
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
828
inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
840
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
845
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
847
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
848
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
850
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
853
inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
908
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
913
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
915
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
916
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
918
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
921
inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
940
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
945
portstats = &sparx5->stats[portno * sparx5->num_stats];
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
947
u32 tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
948
u32 dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
950
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
953
inst = spx5_inst_get(sparx5, TARGET_ASM, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
998
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
102
static void sparx5_fdma_tx_activate(struct sparx5 *sparx5, struct sparx5_tx *tx)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
107
spx5_wr(((u64)fdma->dma) & GENMASK(31, 0), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
109
spx5_wr(((u64)fdma->dma) >> 32, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
116
sparx5, FDMA_CH_CFG(fdma->channel_id));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
120
sparx5, FDMA_PORT_CTRL(0));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
123
spx5_wr(BIT(fdma->channel_id), sparx5, FDMA_CH_ACTIVATE);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
126
static void sparx5_fdma_tx_deactivate(struct sparx5 *sparx5, struct sparx5_tx *tx)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
130
sparx5, FDMA_CH_ACTIVATE);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
133
void sparx5_fdma_reload(struct sparx5 *sparx5, struct fdma *fdma)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
136
spx5_wr(BIT(fdma->channel_id), sparx5, FDMA_CH_RELOAD);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
139
static bool sparx5_fdma_rx_get_frame(struct sparx5 *sparx5, struct sparx5_rx *rx)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
154
sparx5_ifh_parse(sparx5, (u32 *)skb->data, &fi);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
156
port = fi.src_port < sparx5->data->consts->n_ports ?
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
157
sparx5->ports[fi.src_port] :
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
160
dev_err(sparx5->dev, "Data on inactive port %d\n", fi.src_port);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
161
sparx5_xtr_flush(sparx5, XTR_QUEUE);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
169
sparx5_ptp_rxtstamp(sparx5, skb, fi.timestamp);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
174
if (test_bit(port->portno, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
186
struct sparx5 *sparx5 = container_of(rx, struct sparx5, rx);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
190
while (counter < weight && sparx5_fdma_rx_get_frame(sparx5, rx)) {
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
206
sparx5, FDMA_INTR_DB_ENA);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
209
sparx5_fdma_reload(sparx5, fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
213
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
216
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
238
sparx5_fdma_reload(sparx5, fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
243
static int sparx5_fdma_rx_alloc(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
245
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
259
static int sparx5_fdma_tx_alloc(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
261
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
275
static void sparx5_fdma_rx_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
284
fdma->priv = sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
286
fdma->size = fdma_get_size(&sparx5->rx.fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
290
for (idx = 0; idx < sparx5->data->consts->n_ports; ++idx) {
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
291
struct sparx5_port *port = sparx5->ports[idx];
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
300
static void sparx5_fdma_tx_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
308
fdma->priv = sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
310
fdma->size = fdma_get_size_contiguous(&sparx5->tx.fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
317
struct sparx5 *sparx5 = args;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
320
db = spx5_rd(sparx5, FDMA_INTR_DB);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
321
err = spx5_rd(sparx5, FDMA_INTR_ERR);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
324
spx5_wr(0, sparx5, FDMA_INTR_DB_ENA);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
325
spx5_wr(db, sparx5, FDMA_INTR_DB);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
326
napi_schedule(&sparx5->rx.napi);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
329
u32 err_type = spx5_rd(sparx5, FDMA_ERRORS);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
331
dev_err_ratelimited(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
334
spx5_wr(err, sparx5, FDMA_INTR_ERR);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
335
spx5_wr(err_type, sparx5, FDMA_ERRORS);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
340
void sparx5_fdma_injection_mode(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
350
sparx5, QS_XTR_GRP_CFG(XTR_QUEUE));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
353
sparx5, QS_INJ_GRP_CFG(INJ_QUEUE));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
356
for (portno = sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_0);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
357
portno <= sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_1);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
36
struct sparx5 *sparx5 = fdma->priv;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
363
sparx5, ASM_PORT_CFG(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
368
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
37
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
374
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
378
urgency = sparx5_port_fwd_urg(sparx5, SPEED_2500);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
383
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
391
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
397
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
402
int sparx5_fdma_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
407
spx5_wr(FDMA_CTRL_NRESET_SET(0), sparx5, FDMA_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
408
spx5_wr(FDMA_CTRL_NRESET_SET(1), sparx5, FDMA_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
417
sparx5, CPU_PROC_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
419
sparx5_fdma_injection_mode(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
420
sparx5_fdma_rx_init(sparx5, &sparx5->rx, FDMA_XTR_CHANNEL);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
421
sparx5_fdma_tx_init(sparx5, &sparx5->tx, FDMA_INJ_CHANNEL);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
422
err = sparx5_fdma_rx_alloc(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
424
dev_err(sparx5->dev, "Could not allocate RX buffers: %d\n", err);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
427
err = sparx5_fdma_tx_alloc(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
429
dev_err(sparx5->dev, "Could not allocate TX buffers: %d\n", err);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
435
int sparx5_fdma_deinit(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
437
sparx5_fdma_stop(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
438
fdma_free_phys(&sparx5->rx.fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
439
fdma_free_phys(&sparx5->tx.fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
444
static u32 sparx5_fdma_port_ctrl(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
446
return spx5_rd(sparx5, FDMA_PORT_CTRL(0));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
449
int sparx5_fdma_start(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
451
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
452
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
453
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
462
sparx5_fdma_rx_activate(sparx5, rx);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
463
sparx5_fdma_tx_activate(sparx5, tx);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
468
int sparx5_fdma_stop(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
470
struct sparx5_rx *rx = &sparx5->rx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
471
struct sparx5_tx *tx = &sparx5->tx;
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
477
sparx5_fdma_rx_deactivate(sparx5, rx);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
478
sparx5_fdma_tx_deactivate(sparx5, tx);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
483
500, 10000, 0, sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
51
static void sparx5_fdma_rx_activate(struct sparx5 *sparx5, struct sparx5_rx *rx)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
56
spx5_wr(((u64)fdma->dma) & GENMASK(31, 0), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
58
spx5_wr(((u64)fdma->dma) >> 32, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
65
sparx5, FDMA_CH_CFG(fdma->channel_id));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
69
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
74
sparx5, FDMA_PORT_CTRL(0));
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
79
sparx5, FDMA_INTR_DB_ENA);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
82
spx5_wr(BIT(fdma->channel_id), sparx5, FDMA_CH_ACTIVATE);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
85
static void sparx5_fdma_rx_deactivate(struct sparx5 *sparx5, struct sparx5_rx *rx)
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
91
sparx5, FDMA_CH_ACTIVATE);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
95
sparx5, FDMA_INTR_DB_ENA);
drivers/net/ethernet/microchip/sparx5/sparx5_fdma.c
99
sparx5, FDMA_PORT_CTRL(0));
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
104
sparx5, LRN_MAC_ACCESS_CFG_2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
105
spx5_wr(0, sparx5, LRN_MAC_ACCESS_CFG_3);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
110
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
112
ret = sparx5_mact_wait_for_completion(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
114
mutex_unlock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
122
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
124
return sparx5_mact_forget(sparx5, addr, port->pvid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
130
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
132
return sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU),
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
136
static int sparx5_mact_get(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
143
cfg2 = spx5_rd(sparx5, LRN_MAC_ACCESS_CFG_2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
145
mach = spx5_rd(sparx5, LRN_MAC_ACCESS_CFG_0);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
146
macl = spx5_rd(sparx5, LRN_MAC_ACCESS_CFG_1);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
161
bool sparx5_mact_getnext(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
167
mutex_lock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
169
sparx5_mact_select(sparx5, mac, *vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
173
sparx5, LRN_SCAN_NEXT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
177
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
179
ret = sparx5_mact_wait_for_completion(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
181
ret = sparx5_mact_get(sparx5, mac, vid, &cfg2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
186
mutex_unlock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
191
int sparx5_mact_find(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
197
mutex_lock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
199
sparx5_mact_select(sparx5, mac, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
204
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
206
ret = sparx5_mact_wait_for_completion(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
208
cfg2 = spx5_rd(sparx5, LRN_MAC_ACCESS_CFG_2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
215
mutex_unlock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
220
int sparx5_mact_forget(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
225
mutex_lock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
227
sparx5_mact_select(sparx5, mac, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
232
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
234
ret = sparx5_mact_wait_for_completion(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
236
mutex_unlock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
241
static struct sparx5_mact_entry *alloc_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
247
mact_entry = devm_kzalloc(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
258
static struct sparx5_mact_entry *find_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
265
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
266
list_for_each_entry(mact_entry, &sparx5->mact_entries, list) {
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
274
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
291
int sparx5_add_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
300
ret = sparx5_mact_find(sparx5, addr, vid, &cfg2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
310
mact_entry = find_mact_entry(sparx5, addr, vid, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
317
mact_entry = alloc_mact_entry(sparx5, addr, vid, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
321
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
322
list_add_tail(&mact_entry->list, &sparx5->mact_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
323
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
326
ret = sparx5_mact_learn(sparx5, portno, addr, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
338
int sparx5_del_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
347
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
348
list_for_each_entry_safe(mact_entry, tmp, &sparx5->mact_entries,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
352
sparx5_mact_forget(sparx5, addr, mact_entry->vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
355
devm_kfree(sparx5->dev, mact_entry);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
358
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
363
static void sparx5_mact_handle_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
376
if (port >= sparx5->data->consts->n_ports)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
379
if (!test_bit(port, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
382
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
383
list_for_each_entry(mact_entry, &sparx5->mact_entries, list) {
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
389
dev_warn(sparx5->dev, "Entry move: %d -> %d\n",
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
398
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
406
mact_entry = alloc_mact_entry(sparx5, mac, vid, port);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
411
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
412
list_add_tail(&mact_entry->list, &sparx5->mact_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
413
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
418
mac, vid, sparx5->ports[port]->ndev,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
425
struct sparx5 *sparx5 = container_of(del_work, struct sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
434
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
435
list_for_each_entry(mact_entry, &sparx5->mact_entries, list)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
437
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
44
static int sparx5_mact_get_status(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
443
mutex_lock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
444
sparx5_mact_select(sparx5, mac, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
446
sparx5, LRN_SCAN_NEXT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
450
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
451
ret = sparx5_mact_wait_for_completion(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
453
ret = sparx5_mact_get(sparx5, mac, &vid, &cfg2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
454
mutex_unlock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
456
sparx5_mact_handle_entry(sparx5, mac, vid, cfg2);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
459
mutex_lock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
46
return spx5_rd(sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
460
list_for_each_entry_safe(mact_entry, tmp, &sparx5->mact_entries,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
468
sparx5->ports[mact_entry->port]->ndev,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
472
devm_kfree(sparx5->dev, mact_entry);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
474
mutex_unlock(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
476
queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
480
void sparx5_set_ageing(struct sparx5 *sparx5, int msecs)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
488
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
49
static int sparx5_mact_wait_for_completion(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
492
void sparx5_mact_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
494
mutex_init(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
499
sparx5, LRN_COMMON_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
501
if (sparx5_mact_wait_for_completion(sparx5) != 0)
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
502
dev_warn(sparx5->dev, "MAC flush error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
504
sparx5_set_ageing(sparx5, BR_DEFAULT_AGEING_TIME / HZ * 1000);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
54
sparx5, val,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
59
static void sparx5_mact_select(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
76
spx5_wr(mach, sparx5, LRN_MAC_ACCESS_CFG_0);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
77
spx5_wr(macl, sparx5, LRN_MAC_ACCESS_CFG_1);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
80
int sparx5_mact_learn(struct sparx5 *sparx5, int pgid,
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
83
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
95
mutex_lock(&sparx5->lock);
drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c
97
sparx5_mact_select(sparx5, mac, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1002
err = sparx5_start(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1004
dev_err(sparx5->dev, "Start failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1008
err = sparx5_qos_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1010
dev_err(sparx5->dev, "Failed to initialize QoS\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1014
err = sparx5_ptp_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1016
dev_err(sparx5->dev, "PTP failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1020
INIT_LIST_HEAD(&sparx5->mall_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1025
sparx5_cleanup_ports(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1026
if (sparx5->mact_queue)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1027
destroy_workqueue(sparx5->mact_queue);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1037
struct sparx5 *sparx5 = platform_get_drvdata(pdev);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1038
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1040
debugfs_remove_recursive(sparx5->debugfs_root);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1041
if (sparx5->xtr_irq) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1042
disable_irq(sparx5->xtr_irq);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1043
sparx5->xtr_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1045
if (sparx5->fdma_irq) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1046
disable_irq(sparx5->fdma_irq);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1047
sparx5->fdma_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1049
sparx5_ptp_deinit(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1050
ops->fdma_deinit(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1051
sparx5_cleanup_ports(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1052
sparx5_vcap_destroy(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1054
sparx5_unregister_notifier_blocks(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
1055
destroy_workqueue(sparx5->mact_queue);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
215
bool is_sparx5(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
217
switch (sparx5->target_ct) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
234
static void sparx5_init_features(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
236
switch (sparx5->target_ct) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
256
sparx5->features = (SPX5_FEATURE_PSFP | SPX5_FEATURE_PTP);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
263
bool sparx5_has_feature(struct sparx5 *sparx5, enum sparx5_feature feature)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
265
return sparx5->features & feature;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
268
static int sparx5_create_targets(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
270
const struct sparx5_main_io_resource *iomap = sparx5->data->iomap;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
271
int iomap_size = sparx5->data->iomap_size;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
272
int ioranges = sparx5->data->ioranges;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
288
iores[idx] = platform_get_resource(sparx5->pdev, IORESOURCE_MEM,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
291
dev_err(sparx5->dev, "Invalid resource\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
294
iomem[idx] = devm_ioremap(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
298
dev_err(sparx5->dev, "Unable to get switch registers: %s\n",
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
307
sparx5->regs[io->id] = begin[io->range] + io->offset;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
312
static int sparx5_create_port(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
321
ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
323
ndev = sparx5_create_netdev(sparx5, config->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
325
dev_err(sparx5->dev, "Could not create net device: %02u\n",
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
343
sparx5->ports[config->portno] = spx5_port;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
345
err = sparx5_port_init(sparx5, spx5_port, &config->conf);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
347
dev_err(sparx5->dev, "port init failed\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
353
sparx5_vlan_port_setup(sparx5, spx5_port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
403
static int sparx5_init_ram(struct sparx5 *s5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
447
static int sparx5_init_switchcore(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
454
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
459
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
463
value = spx5_rd(sparx5, HSCH_RESET_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
465
err = sparx5_init_ram(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
471
spx5_wr(ANA_AC_STAT_RESET_RESET_SET(1), sparx5, ANA_AC_STAT_RESET);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
472
spx5_wr(ASM_STAT_CFG_STAT_CNT_CLR_SHOT_SET(1), sparx5, ASM_STAT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
475
spx5_wr(HSCH_RESET_CFG_CORE_ENA_SET(1), sparx5, HSCH_RESET_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
480
static int sparx5_init_coreclock(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
482
enum sparx5_core_clockfreq freq = sparx5->coreclock;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
489
switch (sparx5->target_ct) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
491
if (sparx5->coreclock == SPX5_CORE_CLOCK_DEFAULT)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
493
else if (sparx5->coreclock != SPX5_CORE_CLOCK_250MHZ)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
499
if (sparx5->coreclock == SPX5_CORE_CLOCK_DEFAULT)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
501
else if (sparx5->coreclock != SPX5_CORE_CLOCK_500MHZ)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
506
if (sparx5->coreclock == SPX5_CORE_CLOCK_DEFAULT)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
508
else if (sparx5->coreclock != SPX5_CORE_CLOCK_625MHZ)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
512
if (sparx5->coreclock == SPX5_CORE_CLOCK_DEFAULT)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
518
if (sparx5->coreclock == SPX5_CORE_CLOCK_DEFAULT)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
520
else if (sparx5->coreclock == SPX5_CORE_CLOCK_250MHZ)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
538
dev_err(sparx5->dev, "Target (%#04x) not supported\n",
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
539
sparx5->target_ct);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
543
if (is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
558
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
560
sparx5->coreclock, sparx5->target_ct);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
577
sparx5, CLKGEN_LCPLL1_CORE_CLK_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
583
sparx5->coreclock = freq;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
586
if (is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
589
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
594
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
599
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
604
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
607
for (idx = 0; idx < sparx5->data->consts->n_sio_clks; idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
610
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
616
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
621
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
627
static u32 qlim_wm(struct sparx5 *sparx5, int fraction)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
629
return (sparx5->data->consts->buf_size / SPX5_BUFFER_CELL_SZ - 100) *
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
633
static int sparx5_qlim_set(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
635
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
640
spx5_wr(0xFFF, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
646
spx5_wr(0xFFF, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
653
spx5_wr(qlim_wm(sparx5, 80), sparx5, XQS_QLIMIT_SHR_QLIM_CFG(0));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
654
spx5_wr(qlim_wm(sparx5, 90), sparx5, XQS_QLIMIT_SHR_CTOP_CFG(0));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
655
spx5_wr(qlim_wm(sparx5, 95), sparx5, XQS_QLIMIT_SHR_ATOP_CFG(0));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
656
spx5_wr(qlim_wm(sparx5, 100), sparx5, XQS_QLIMIT_SHR_TOP_CFG(0));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
664
static void sparx5_board_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
668
if (!sparx5->sd_sgpio_remapping)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
674
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
678
for (idx = 0; idx < sparx5->data->consts->n_ports; idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
679
if (sparx5->ports[idx])
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
680
if (sparx5->ports[idx]->conf.sd_sgpio != ~0)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
681
spx5_wr(sparx5->ports[idx]->conf.sd_sgpio,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
682
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
686
static int sparx5_start(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
689
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
690
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
697
spx5_wr(idx, sparx5, ANA_AC_OWN_UPSID(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
698
spx5_wr(idx, sparx5, ANA_CL_OWN_UPSID(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
699
spx5_wr(idx, sparx5, ANA_L2_OWN_UPSID(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
700
spx5_wr(idx, sparx5, REW_OWN_UPSID(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
707
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
711
sparx5_update_fwd(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
714
for (int pgid = sparx5_get_pgid(sparx5, PGID_UC_FLOOD);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
715
pgid <= sparx5_get_pgid(sparx5, PGID_BCAST); pgid++)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
716
sparx5_pgid_clear(sparx5, pgid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
719
spx5_wr(ANA_AC_PGID_MISC_CFG_PGID_CPU_COPY_ENA_SET(1), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
720
ANA_AC_PGID_MISC_CFG(sparx5_get_pgid(sparx5, PGID_CPU)));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
721
spx5_wr(ANA_AC_PGID_MISC_CFG_PGID_CPU_COPY_ENA_SET(1), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
722
ANA_AC_PGID_MISC_CFG(sparx5_get_pgid(sparx5, PGID_BCAST)));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
725
for (idx = sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_0);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
726
idx <= sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_1); idx++)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
729
sparx5, ANA_CL_FILTER_CTRL(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
732
sparx5_mact_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
735
sparx5_pgid_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
738
sparx5_vlan_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
741
sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU), broadcast,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
745
sparx5_qlim_set(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
747
err = sparx5_config_auto_calendar(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
751
err = sparx5_config_dsm_calendar(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
756
err = sparx_stats_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
761
mutex_init(&sparx5->mact_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
762
INIT_LIST_HEAD(&sparx5->mact_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
764
dev_name(sparx5->dev));
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
765
sparx5->mact_queue = create_singlethread_workqueue(queue_name);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
766
if (!sparx5->mact_queue)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
769
INIT_DELAYED_WORK(&sparx5->mact_work, sparx5_mact_pull_work);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
770
queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
773
mutex_init(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
774
INIT_LIST_HEAD(&sparx5->mdb_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
776
err = sparx5_register_netdevs(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
780
sparx5_board_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
781
err = sparx5_register_notifier_blocks(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
785
err = sparx5_vcap_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
787
sparx5_unregister_notifier_blocks(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
793
if (sparx5->fdma_irq >= 0) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
794
if (GCB_CHIP_ID_REV_ID_GET(sparx5->chip_id) > 0 ||
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
795
!is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
796
err = devm_request_irq(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
797
sparx5->fdma_irq,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
800
"sparx5-fdma", sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
802
err = ops->fdma_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
804
sparx5_fdma_start(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
807
sparx5->fdma_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
809
sparx5->fdma_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
811
if (err && sparx5->xtr_irq >= 0) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
812
err = devm_request_irq(sparx5->dev, sparx5->xtr_irq,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
814
"sparx5-xtr", sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
816
err = sparx5_manual_injection_mode(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
818
sparx5->xtr_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
820
sparx5->xtr_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
823
if (sparx5->ptp_irq >= 0 &&
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
824
sparx5_has_feature(sparx5, SPX5_FEATURE_PTP)) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
825
err = devm_request_threaded_irq(sparx5->dev, sparx5->ptp_irq,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
828
sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
830
sparx5->ptp_irq = -ENXIO;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
832
sparx5->ptp = 1;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
838
static void sparx5_cleanup_ports(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
840
sparx5_unregister_netdevs(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
841
sparx5_destroy_netdevs(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
851
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
857
sparx5 = devm_kzalloc(&pdev->dev, sizeof(*sparx5), GFP_KERNEL);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
858
if (!sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
861
platform_set_drvdata(pdev, sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
862
sparx5->pdev = pdev;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
863
sparx5->dev = &pdev->dev;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
864
spin_lock_init(&sparx5->tx_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
866
sparx5->data = device_get_match_data(sparx5->dev);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
867
if (!sparx5->data)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
870
regs = sparx5->data->regs;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
871
ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
881
sparx5->coreclock = SPX5_CORE_CLOCK_DEFAULT;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
883
sparx5->debugfs_root = debugfs_create_dir("sparx5", NULL);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
887
dev_err(sparx5->dev, "no ethernet-ports child node found\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
890
sparx5->port_count = of_get_child_count(ports);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
892
configs = kzalloc_objs(struct initial_port_config, sparx5->port_count);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
905
dev_err(sparx5->dev, "port reg property error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
914
dev_err(sparx5->dev, "port %u: missing phy-mode\n",
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
921
dev_err(sparx5->dev, "port %u: missing bandwidth\n",
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
929
sparx5->sd_sgpio_remapping = true;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
932
serdes = devm_of_phy_get(sparx5->dev, portnp, NULL);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
934
err = dev_err_probe(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
953
err = sparx5_create_targets(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
957
if (of_get_mac_address(np, sparx5->base_mac)) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
958
dev_info(sparx5->dev, "MAC addr was not set, use random MAC\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
959
eth_random_addr(sparx5->base_mac);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
960
sparx5->base_mac[5] = 0;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
963
sparx5->fdma_irq = platform_get_irq_byname(sparx5->pdev, "fdma");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
964
sparx5->xtr_irq = platform_get_irq_byname(sparx5->pdev, "xtr");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
965
sparx5->ptp_irq = platform_get_irq_byname(sparx5->pdev, "ptp");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
968
sparx5->chip_id = spx5_rd(sparx5, GCB_CHIP_ID);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
970
sparx5->target_ct = (enum spx5_target_chiptype)
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
971
GCB_CHIP_ID_PART_ID_GET(sparx5->chip_id);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
974
sparx5_init_features(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
977
err = sparx5_init_switchcore(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
979
dev_err(sparx5->dev, "Switchcore initialization error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
984
err = sparx5_init_coreclock(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
986
dev_err(sparx5->dev, "LC-PLL initialization error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
990
for (idx = 0; idx < sparx5->port_count; ++idx) {
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
995
err = sparx5_create_port(sparx5, config);
drivers/net/ethernet/microchip/sparx5/sparx5_main.c
997
dev_err(sparx5->dev, "port create error\n");
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
139
struct sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
211
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
253
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
334
u32 (*get_port_dev_index)(struct sparx5 *sparx5, int port);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
335
u32 (*get_port_dev_bit)(struct sparx5 *sparx5, int port);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
338
int (*set_port_mux)(struct sparx5 *sparx5, struct sparx5_port *port,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
342
int (*dsm_calendar_calc)(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
346
int (*fdma_init)(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
347
int (*fdma_deinit)(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
349
int (*fdma_xmit)(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
440
bool is_sparx5(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
441
bool sparx5_has_feature(struct sparx5 *sparx5, enum sparx5_feature feature);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
444
int sparx5_register_notifier_blocks(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
445
void sparx5_unregister_notifier_blocks(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
453
void sparx5_xtr_flush(struct sparx5 *sparx5, u8 grp);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
454
void sparx5_ifh_parse(struct sparx5 *sparx5, u32 *ifh, struct frame_info *info);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
457
int sparx5_manual_injection_mode(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
461
int sparx5_fdma_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
462
int sparx5_fdma_deinit(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
463
int sparx5_fdma_start(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
464
int sparx5_fdma_stop(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
466
int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
469
void sparx5_fdma_reload(struct sparx5 *sparx5, struct fdma *fdma);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
470
void sparx5_fdma_injection_mode(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
474
int sparx5_mact_learn(struct sparx5 *sparx5, int port,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
476
bool sparx5_mact_getnext(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
478
int sparx5_mact_find(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
480
int sparx5_mact_forget(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
482
int sparx5_add_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
486
int sparx5_del_mact_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
491
void sparx5_set_ageing(struct sparx5 *sparx5, int msecs);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
492
void sparx5_mact_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
496
void sparx5_pgid_clear(struct sparx5 *spx5, int pgid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
497
void sparx5_pgid_read_mask(struct sparx5 *sparx5, int pgid, u32 portmask[3]);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
498
void sparx5_update_fwd(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
499
void sparx5_vlan_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
500
void sparx5_vlan_port_setup(struct sparx5 *sparx5, int portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
504
void sparx5_vlan_port_apply(struct sparx5 *sparx5, struct sparx5_port *port);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
507
int sparx5_config_auto_calendar(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
508
int sparx5_config_dsm_calendar(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
509
int sparx5_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
512
enum sparx5_cal_bw sparx5_get_port_cal_speed(struct sparx5 *sparx5, u32 portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
517
int sparx_stats_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
521
int sparx5_dcb_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
523
static inline int sparx5_dcb_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
530
void sparx5_set_port_ifh_timestamp(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
533
void sparx5_set_port_ifh_pdu_type(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
535
void sparx5_set_port_ifh_pdu_w16_offset(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
537
void sparx5_set_port_ifh(struct sparx5 *sparx5, void *ifh_hdr, u16 portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
539
struct net_device *sparx5_create_netdev(struct sparx5 *sparx5, u32 portno);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
540
int sparx5_register_netdevs(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
541
void sparx5_destroy_netdevs(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
542
void sparx5_unregister_netdevs(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
545
int sparx5_ptp_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
546
void sparx5_ptp_deinit(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
552
void sparx5_ptp_rxtstamp(struct sparx5 *sparx5, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
560
void sparx5_get_hwtimestamp(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
565
int sparx5_vcap_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
566
void sparx5_vcap_destroy(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
575
void sparx5_pgid_init(struct sparx5 *spx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
576
int sparx5_pgid_alloc_mcast(struct sparx5 *spx5, u16 *idx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
577
int sparx5_pgid_free(struct sparx5 *spx5, u16 idx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
578
int sparx5_get_pgid(struct sparx5 *sparx5, int pgid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
593
int sparx5_port_mux_set(struct sparx5 *sparx5, struct sparx5_port *port,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
595
int sparx5_get_internal_port(struct sparx5 *sparx5, int port);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
616
int sparx5_sdlb_pup_token_get(struct sparx5 *sparx5, u32 pup_interval,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
619
u64 sparx5_sdlb_clk_hz_get(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
620
int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
621
int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
623
int sparx5_sdlb_group_add(struct sparx5 *sparx5, u32 group, u32 idx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
624
int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
626
void sparx5_sdlb_group_init(struct sparx5 *sparx5, u64 max_rate, u32 min_burst,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
644
int sparx5_policer_conf_set(struct sparx5 *sparx5, struct sparx5_policer *pol);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
686
int sparx5_psfp_fm_add(struct sparx5 *sparx5, u32 uidx,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
688
int sparx5_psfp_fm_del(struct sparx5 *sparx5, u32 id);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
690
int sparx5_psfp_sg_add(struct sparx5 *sparx5, u32 uidx,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
692
int sparx5_psfp_sg_del(struct sparx5 *sparx5, u32 id);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
694
int sparx5_psfp_sf_add(struct sparx5 *sparx5, const struct sparx5_psfp_sf *sf,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
696
int sparx5_psfp_sf_del(struct sparx5 *sparx5, u32 id);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
698
u32 sparx5_psfp_isdx_get_sf(struct sparx5 *sparx5, u32 isdx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
699
u32 sparx5_psfp_isdx_get_fm(struct sparx5 *sparx5, u32 isdx);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
700
u32 sparx5_psfp_sf_get_sg(struct sparx5 *sparx5, u32 sfid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
701
void sparx5_isdx_conf_set(struct sparx5 *sparx5, u32 isdx, u32 sfid, u32 fmid);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
703
void sparx5_psfp_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
706
void sparx5_new_base_time(struct sparx5 *sparx5, const u32 cycle_time,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
788
static inline u32 spx5_rd(struct sparx5 *sparx5, int id, int tinst, int tcnt,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
792
return readl(spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
804
static inline void spx5_wr(u32 val, struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
809
writel(val, spx5_addr(sparx5->regs, id, tinst, tcnt,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
824
static inline void spx5_rmw(u32 val, u32 mask, struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
831
nval = readl(spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
834
writel(nval, spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
852
static inline void __iomem *spx5_inst_get(struct sparx5 *sparx5, int id, int tinst)
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
854
return sparx5->regs[id + tinst];
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
857
static inline void __iomem *spx5_reg_get(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_main.h
862
return spx5_addr(sparx5->regs, id, tinst, tcnt,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
102
static u32 sparx5_mirror_monitor_get(struct sparx5 *sparx5, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
104
u32 val = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
111
static bool sparx5_mirror_has_monitor(struct sparx5 *sparx5, u32 idx,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
114
return sparx5_mirror_monitor_get(sparx5, idx) == portno;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
121
struct sparx5 *sparx5 = sport->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
126
if (sparx5_mirror_has_monitor(sparx5, i, sport->portno))
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
133
if (sparx5_mirror_dir_get(sparx5, i) == dir &&
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
134
sparx5_mirror_has_monitor(sparx5, i, mport->portno)) {
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
142
if (sparx5_mirror_is_empty(sparx5, i)) {
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
155
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
162
sparx5 = sport->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
171
if (sparx5_mirror_contains(sparx5, mirror_idx, sport->portno))
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
175
sparx5_mirror_port_add(sparx5, mirror_idx, sport->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
178
sparx5_mirror_dir_set(sparx5, mirror_idx, dir);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
181
sparx5_mirror_monitor_set(sparx5, mirror_idx, mport->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
191
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
194
sparx5_mirror_port_del(sparx5, mirror_idx, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
195
if (!sparx5_mirror_is_empty(sparx5, mirror_idx))
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
198
sparx5_mirror_dir_set(sparx5, mirror_idx, SPX5_MIRROR_DISABLED);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
200
sparx5_mirror_monitor_set(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
202
sparx5->data->consts->n_ports);
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
24
static u64 sparx5_mirror_port_get(struct sparx5 *sparx5, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
28
val = spx5_rd(sparx5, ANA_AC_PROBE_PORT_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
30
if (is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
31
val |= (u64)spx5_rd(sparx5, ANA_AC_PROBE_PORT_CFG1(idx)) << 32;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
37
static void sparx5_mirror_port_add(struct sparx5 *sparx5, u32 idx, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
45
return spx5_rmw(val, val, sparx5, ANA_AC_PROBE_PORT_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
47
return spx5_rmw(val, val, sparx5, ANA_AC_PROBE_PORT_CFG1(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
51
static void sparx5_mirror_port_del(struct sparx5 *sparx5, u32 idx, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
59
return spx5_rmw(0, val, sparx5, ANA_AC_PROBE_PORT_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
61
return spx5_rmw(0, val, sparx5, ANA_AC_PROBE_PORT_CFG1(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
65
static bool sparx5_mirror_contains(struct sparx5 *sparx5, u32 idx, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
67
return (sparx5_mirror_port_get(sparx5, idx) & BIT_ULL(portno)) != 0;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
71
static bool sparx5_mirror_is_empty(struct sparx5 *sparx5, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
73
return sparx5_mirror_port_get(sparx5, idx) == 0;
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
77
static u32 sparx5_mirror_dir_get(struct sparx5 *sparx5, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
79
u32 val = spx5_rd(sparx5, ANA_AC_PROBE_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
85
static void sparx5_mirror_dir_set(struct sparx5 *sparx5, u32 idx, u32 dir)
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
88
ANA_AC_PROBE_CFG_PROBE_DIRECTION, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
93
static void sparx5_mirror_monitor_set(struct sparx5 *sparx5, u32 idx,
drivers/net/ethernet/microchip/sparx5/sparx5_mirror.c
97
QFWD_FRAME_COPY_CFG_FRMC_PORT_VAL, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
102
is_sparx5(sparx5) ? 40 : 38);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
123
err = sparx5_serdes_set(port->sparx5, port, &port->conf);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
156
err = sparx5_serdes_set(port->sparx5, port, &port->conf);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
168
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
170
if (!test_bit(port->portno, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
190
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
197
sparx5_mact_forget(sparx5, dev->dev_addr, port->pvid);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
200
sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU),
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
213
struct sparx5 *sparx5 = sparx5_port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
215
ppid->id_len = sizeof(sparx5->base_mac);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
216
memcpy(&ppid->id, &sparx5->base_mac, ppid->id_len);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
225
struct sparx5 *sparx5 = sparx5_port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
227
if (!sparx5->ptp)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
240
struct sparx5 *sparx5 = sparx5_port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
242
if (!sparx5->ptp)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
269
struct net_device *sparx5_create_netdev(struct sparx5 *sparx5, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
274
ndev = devm_alloc_etherdev_mqs(sparx5->dev, sizeof(struct sparx5_port),
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
282
SET_NETDEV_DEV(ndev, sparx5->dev);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
285
spx5_port->sparx5 = sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
291
eth_hw_addr_gen(ndev, sparx5->base_mac, portno + 1);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
296
int sparx5_register_netdevs(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
301
for (portno = 0; portno < sparx5->data->consts->n_ports; portno++)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
302
if (sparx5->ports[portno]) {
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
303
err = register_netdev(sparx5->ports[portno]->ndev);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
305
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
310
sparx5_port_inj_timer_setup(sparx5->ports[portno]);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
315
void sparx5_destroy_netdevs(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
320
for (portno = 0; portno < sparx5->data->consts->n_ports; portno++) {
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
321
port = sparx5->ports[portno];
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
334
void sparx5_unregister_netdevs(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
338
for (portno = 0; portno < sparx5->data->consts->n_ports; portno++)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
339
if (sparx5->ports[portno])
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
340
unregister_netdev(sparx5->ports[portno]->ndev);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
58
void sparx5_set_port_ifh(struct sparx5 *sparx5, void *ifh_hdr, u16 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
67
ifh_encode_bitfield(ifh_hdr, is_sparx5(sparx5) ? 16 : 17, 37, 5);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
71
ifh_encode_bitfield(ifh_hdr, sparx5_get_pgid(sparx5, SPX5_PORT_CPU_0),
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
72
46, is_sparx5(sparx5) ? 7 : 6);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
74
ifh_encode_bitfield(ifh_hdr, 124, is_sparx5(sparx5) ? 57 : 56, 7);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
76
ifh_encode_bitfield(ifh_hdr, 1, is_sparx5(sparx5) ? 67 : 66, 1);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
84
void sparx5_set_port_ifh_pdu_type(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
87
ifh_encode_bitfield(ifh_hdr, pdu_type, is_sparx5(sparx5) ? 191 : 190,
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
91
void sparx5_set_port_ifh_pdu_w16_offset(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
95
is_sparx5(sparx5) ? 195 : 194, 6);
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
98
void sparx5_set_port_ifh_timestamp(struct sparx5 *sparx5, void *ifh_hdr,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
100
u32 val = spx5_rd(sparx5, QS_XTR_RD(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
132
*rxbuf = spx5_rd(sparx5, QS_XTR_RD(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
154
if (test_bit(port->portno, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
160
sparx5_ptp_rxtstamp(sparx5, skb, fi.timestamp);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
167
static int sparx5_inject(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
176
val = spx5_rd(sparx5, QS_INJ_STATUS);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
186
sparx5, QS_INJ_CTRL(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
190
spx5_wr(ifh[w], sparx5, QS_INJ_WR(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
197
spx5_wr(val, sparx5, QS_INJ_WR(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
202
spx5_wr(0, sparx5, QS_INJ_WR(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
210
sparx5, QS_INJ_CTRL(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
213
spx5_wr(0, sparx5, QS_INJ_WR(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
216
val = spx5_rd(sparx5, QS_INJ_STATUS);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
23
void sparx5_xtr_flush(struct sparx5 *sparx5, u8 grp)
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
234
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
239
ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
242
sparx5_set_port_ifh(sparx5, ifh, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
244
if (sparx5->ptp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
249
sparx5_set_port_ifh_pdu_type(sparx5, ifh,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
251
sparx5_set_port_ifh_pdu_w16_offset(sparx5, ifh,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
253
sparx5_set_port_ifh_timestamp(sparx5, ifh,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
258
spin_lock(&sparx5->tx_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
259
if (sparx5->fdma_irq > 0)
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
26
spx5_wr(QS_XTR_FLUSH_FLUSH_SET(BIT(grp)), sparx5, QS_XTR_FLUSH);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
260
ret = ops->fdma_xmit(sparx5, ifh, skb, dev);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
262
ret = sparx5_inject(sparx5, ifh, skb, dev);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
263
spin_unlock(&sparx5->tx_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
270
if (!is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
278
sparx5->tx.packets++;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
288
sparx5->tx.dropped++;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
305
val = spx5_rd(port->sparx5, QS_INJ_STATUS);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
311
port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
318
int sparx5_manual_injection_mode(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
32
spx5_wr(0, sparx5, QS_XTR_FLUSH);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
327
sparx5, QS_XTR_GRP_CFG(XTR_QUEUE));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
330
sparx5, QS_INJ_GRP_CFG(INJ_QUEUE));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
333
for (portno = sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_0);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
334
portno <= sparx5_get_internal_port(sparx5, SPX5_PORT_CPU_1);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
340
sparx5, ASM_PORT_CFG(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
345
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
35
void sparx5_ifh_parse(struct sparx5 *sparx5, u32 *ifh, struct frame_info *info)
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
351
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
358
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
366
struct sparx5 *s5 = _sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
46
info->src_port = spx5_field_get(GENMASK(is_sparx5(sparx5) ? 7 : 6, 1),
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
60
static void sparx5_xtr_grp(struct sparx5 *sparx5, u8 grp, bool byte_swap)
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
73
ifh[i] = spx5_rd(sparx5, QS_XTR_RD(grp));
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
76
sparx5_ifh_parse(sparx5, ifh, &fi);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
79
port = fi.src_port < sparx5->data->consts->n_ports ?
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
80
sparx5->ports[fi.src_port] : NULL;
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
82
dev_err(sparx5->dev, "Data on inactive port %d\n", fi.src_port);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
83
sparx5_xtr_flush(sparx5, grp);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
91
sparx5_xtr_flush(sparx5, grp);
drivers/net/ethernet/microchip/sparx5/sparx5_packet.c
92
dev_err(sparx5->dev, "No skb allocated\n");
drivers/net/ethernet/microchip/sparx5/sparx5_pgid.c
18
int sparx5_pgid_alloc_mcast(struct sparx5 *spx5, u16 *idx)
drivers/net/ethernet/microchip/sparx5/sparx5_pgid.c
37
int sparx5_pgid_free(struct sparx5 *spx5, u16 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_pgid.c
4
void sparx5_pgid_init(struct sparx5 *spx5)
drivers/net/ethernet/microchip/sparx5/sparx5_pgid.c
50
int sparx5_get_pgid(struct sparx5 *sparx5, int pgid)
drivers/net/ethernet/microchip/sparx5/sparx5_pgid.c
52
return sparx5->data->consts->n_ports + pgid;
drivers/net/ethernet/microchip/sparx5/sparx5_phylink.c
135
ret = sparx5_port_pcs_set(port->sparx5, port, &conf);
drivers/net/ethernet/microchip/sparx5/sparx5_phylink.c
75
err = sparx5_port_config(port->sparx5, port, &conf);
drivers/net/ethernet/microchip/sparx5/sparx5_phylink.c
98
sparx5_get_port_status(port->sparx5, port, &status);
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
10
static int sparx5_policer_service_conf_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
14
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
24
pup_tokens = sparx5_sdlb_pup_token_get(sparx5, g->pup_interval, rate);
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
26
sparx5_sdlb_pup_token_get(sparx5, g->pup_interval, g->max_rate);
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
30
spx5_wr(ANA_AC_SDLB_PUP_TOKENS_PUP_TOKENS_SET(pup_tokens), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
34
ANA_AC_SDLB_INH_CTRL_PUP_TOKENS_MAX, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
38
sparx5, ANA_AC_SDLB_THRES(idx, 0));
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
43
int sparx5_policer_conf_set(struct sparx5 *sparx5, struct sparx5_policer *pol)
drivers/net/ethernet/microchip/sparx5/sparx5_police.c
48
return sparx5_policer_service_conf_set(sparx5, pol);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1002
int sparx5_port_config(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1008
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1011
err = sparx5_port_verify_speed(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1023
sparx5_port_config_low_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1026
err = sparx5_port_fc_setup(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1030
if (!is_sparx5(sparx5) && ops->is_port_10g(port->portno) &&
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1034
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1038
stop_wm = sparx5_port_fifo_sz(sparx5, port->portno, conf->speed);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1041
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1045
urgency = sparx5_port_fwd_urg(sparx5, conf->speed);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
105
value = spx5_rd(sparx5, DEV2G5_PCS1G_ANEG_STATUS(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1050
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1060
int sparx5_port_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1066
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1067
u32 devhigh = sparx5_to_high_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1068
u32 pix = sparx5_port_dev_index(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1069
u32 pcs = sparx5_to_pcs_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1078
devinst = spx5_inst_get(sparx5, devhigh, pix);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1079
pcsinst = spx5_inst_get(sparx5, pcs, pix);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1082
err = ops->set_port_mux(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1093
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1098
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1102
spx5_wr(PAUSE_DISCARD, sparx5, ANA_CL_CAPTURE_BPDU_CFG(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1107
sparx5, ANA_CL_FILTER_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1113
err = sparx5_port_max_tags_set(sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1120
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1127
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
113
value = spx5_rd(sparx5, DEV2G5_PCS1G_ANEG_CFG(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1132
err = sparx5_serdes_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1140
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1143
sparx5_dev_switch(sparx5, port->portno, false);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1149
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1156
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1167
sparx5_dev_switch(sparx5, port->portno, true);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1187
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1191
if (!is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1196
dev = sparx5_to_high_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1197
tinst = sparx5_port_dev_index(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1198
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1203
dev = sparx5_to_high_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1204
tinst = sparx5_port_dev_index(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1205
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
121
static int sparx5_get_sfi_status(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1217
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1222
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1242
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1255
port->sparx5, REW_TAG_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1274
REW_PCP_MAP_DE1_PCP_DE1, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1278
REW_DEI_MAP_DE1_DEI_DE1, port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1282
REW_PCP_MAP_DE0_PCP_DE0, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1286
REW_DEI_MAP_DE0_DEI_DE0, port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1297
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1306
sparx5, ANA_CL_QOS_CFG(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1315
ANA_CL_PCP_DEI_MAP_CFG_PCP_DEI_DP_VAL, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1326
ANA_CL_QOS_CFG_DSCP_REWR_MODE_SEL, port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1333
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1345
REW_DSCP_MAP_DSCP_UPDATE_ENA, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
135
dev = sparx5_to_high_dev(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1354
ANA_CL_QOS_MAP_CFG_DSCP_REWR_VAL, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
136
tinst = sparx5_port_dev_index(sparx5, portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1364
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
137
inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1375
ANA_CL_QOS_CFG_DSCP_KEEP_ENA, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1383
ANA_CL_DSCP_CFG_DSCP_DP_VAL, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1391
ANA_CL_DSCP_CFG_DSCP_TRUST_ENA, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1402
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1409
sparx5, ANA_CL_QOS_CFG(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1416
sparx5, ANA_CL_VLAN_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1421
int sparx5_get_internal_port(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
1423
return sparx5->data->consts->n_ports + port;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
160
int sparx5_get_port_status(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
175
return sparx5_get_dev2g5_status(sparx5, port, status);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
179
return sparx5_get_sfi_status(sparx5, port, status);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
212
static int sparx5_port_verify_speed(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
216
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
275
static bool sparx5_dev_change(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
283
static int sparx5_port_flush_poll(struct sparx5 *sparx5, u32 portno)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
302
value = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
316
dev_err(sparx5->dev,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
327
static int sparx5_port_disable(struct sparx5 *sparx5, struct sparx5_port *port, bool high_spd_dev)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
330
sparx5_port_dev_index(sparx5, port->portno) : port->portno;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
332
sparx5_to_high_dev(sparx5, port->portno) : TARGET_DEV2G5;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
333
void __iomem *devinst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
334
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
366
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
372
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
378
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
394
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
400
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
404
err = sparx5_port_flush_poll(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
438
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
442
u32 pcs = sparx5_to_pcs_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
443
void __iomem *pcsinst = spx5_inst_get(sparx5, pcs, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
455
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
461
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
469
static int sparx5_port_fifo_sz(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
472
u32 sys_clk = sparx5_clk_period(sparx5->coreclock);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
488
if (!is_sparx5(sparx5))
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
531
int sparx5_port_mux_set(struct sparx5 *sparx5, struct sparx5_port *port,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
545
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
556
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
566
static int sparx5_port_max_tags_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
575
u32 dev = sparx5_to_high_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
576
u32 tinst = sparx5_port_dev_index(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
577
void __iomem *inst = spx5_inst_get(sparx5, dev, tinst);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
578
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
590
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
615
int sparx5_port_fwd_urg(struct sparx5 *sparx5, u32 speed)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
650
static int sparx5_port_fc_setup(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
664
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
670
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
676
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
682
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
696
int sparx5_serdes_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
742
static int sparx5_port_pcs_low_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
757
err = sparx5_serdes_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
767
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
772
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
78
static int sparx5_get_dev2g5_status(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
783
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
786
spx5_wr(0, sparx5, DEV2G5_PCS1G_ANEG_CFG(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
796
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
802
static int sparx5_port_pcs_high_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
807
u32 pix = sparx5_port_dev_index(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
808
u32 dev = sparx5_to_high_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
809
u32 pcs = sparx5_to_pcs_dev(sparx5, port->portno);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
814
devinst = spx5_inst_get(sparx5, dev, pix);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
815
pcsinst = spx5_inst_get(sparx5, pcs, pix);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
818
err = sparx5_serdes_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
825
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
859
static void sparx5_dev_switch(struct sparx5 *sparx5, int port, bool hsd)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
861
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
864
bt_indx = BIT(ops->get_port_dev_bit(sparx5, port));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
869
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
87
value = spx5_rd(sparx5, DEV2G5_PCS1G_STICKY(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
874
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
879
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
885
static int sparx5_port_config_low_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
90
spx5_wr(value, sparx5, DEV2G5_PCS1G_STICKY(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
904
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
911
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
917
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
923
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
93
value = spx5_rd(sparx5, DEV2G5_PCS1G_LINK_STATUS(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
933
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
937
if (!is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
946
sparx5, DEV2G5_PHAD_CTRL(port->portno, i));
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
953
int sparx5_port_pcs_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
961
if (sparx5_dev_change(sparx5, port, conf)) {
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
963
sparx5_dev_switch(sparx5, port->portno, high_speed_dev);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
966
err = sparx5_port_disable(sparx5, port, !high_speed_dev);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
971
err = sparx5_port_disable(sparx5, port, high_speed_dev);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
976
err = sparx5_port_pcs_high_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
978
err = sparx5_port_pcs_low_set(sparx5, port, conf);
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
987
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.c
993
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
112
int sparx5_get_port_status(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
117
int sparx5_port_fwd_urg(struct sparx5 *sparx5, u32 speed);
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
48
static inline u32 sparx5_to_high_dev(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
50
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
59
static inline u32 sparx5_to_pcs_dev(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
61
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
70
static inline u32 sparx5_port_dev_mapping(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
82
static inline u32 sparx5_port_dev_index(struct sparx5 *sparx5, int port)
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
84
return sparx5->data->ops->get_port_dev_index(sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
87
int sparx5_port_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
91
int sparx5_port_config(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
95
int sparx5_port_pcs_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_port.h
99
int sparx5_serdes_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
101
return readx_poll_timeout(sparx5_psfp_sgid_get_status, sparx5, val,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
107
static void sparx5_psfp_sg_config_change(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
109
spx5_wr(ANA_AC_SG_ACCESS_CTRL_SGID_SET(id), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
114
sparx5, ANA_AC_SG_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
116
if (sparx5_psfp_sgid_wait_for_completion(sparx5) < 0)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
121
static void sparx5_psfp_sf_set(struct sparx5 *sparx5, u32 id,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
132
sparx5, ANA_AC_TSN_SF_CFG(id));
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
135
static int sparx5_psfp_sg_set(struct sparx5 *sparx5, u32 id,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
147
spx5_wr(ANA_AC_SG_ACCESS_CTRL_SGID_SET(id), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
151
spx5_wr(sg->basetime.tv_nsec, sparx5, ANA_AC_SG_CONFIG_REG_1);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
152
spx5_wr(base_lsb, sparx5, ANA_AC_SG_CONFIG_REG_2);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
164
sparx5, ANA_AC_SG_CONFIG_REG_3);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
166
spx5_wr(sg->cycletime, sparx5, ANA_AC_SG_CONFIG_REG_4);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
167
spx5_wr(sg->cycletimeext, sparx5, ANA_AC_SG_CONFIG_REG_5);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
178
sparx5, ANA_AC_SG_GCL_GS_CONFIG(i));
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
181
spx5_wr(accum_time_interval, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
185
spx5_wr(gce->maxoctets, sparx5, ANA_AC_SG_GCL_OCT_CONFIG(i));
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
191
static int sparx5_sdlb_conf_set(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
194
int (*sparx5_sdlb_group_action)(struct sparx5 *sparx5, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
202
sparx5_policer_conf_set(sparx5, &fm->pol);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
204
return sparx5_sdlb_group_action(sparx5, fm->pol.group, fm->pol.idx);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
207
int sparx5_psfp_sf_add(struct sparx5 *sparx5, const struct sparx5_psfp_sf *sf,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
212
ret = sparx5_psfp_sf_get(sparx5, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
216
sparx5_psfp_sf_set(sparx5, *id, sf);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
221
int sparx5_psfp_sf_del(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
225
sparx5_psfp_sf_set(sparx5, id, &sf);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
227
return sparx5_psfp_sf_put(sparx5, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
23
static int sparx5_psfp_sf_get(struct sparx5 *sparx5, u32 *id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
230
int sparx5_psfp_sg_add(struct sparx5 *sparx5, u32 uidx,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
236
ret = sparx5_psfp_sg_get(sparx5, uidx, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
244
sparx5_new_base_time(sparx5, sg->cycletime, 0, &basetime);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
247
sparx5_psfp_sg_set(sparx5, *id, sg);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
250
sparx5_psfp_sg_config_change(sparx5, *id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
255
int sparx5_psfp_sg_del(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
26
sparx5->data->consts->n_filters, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
260
ret = sparx5_psfp_sg_put(sparx5, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
267
return sparx5_psfp_sg_set(sparx5, id, &sg);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
270
int sparx5_psfp_fm_add(struct sparx5 *sparx5, u32 uidx,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
277
ret = sparx5_psfp_fm_get(sparx5, uidx, &fm->pol.idx);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
284
ret = sparx5_sdlb_group_get_by_rate(sparx5, pol->rate, pol->burst);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
29
static int sparx5_psfp_sf_put(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
290
ret = sparx5_sdlb_conf_set(sparx5, fm);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
299
int sparx5_psfp_fm_del(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
306
ret = sparx5_sdlb_group_get_by_index(sparx5, id, &fm.pol.group);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
310
ret = sparx5_psfp_fm_put(sparx5, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
317
return sparx5_sdlb_conf_set(sparx5, &fm);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
32
sparx5->data->consts->n_filters, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
320
void sparx5_psfp_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
322
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
326
for (i = 0; i < sparx5->data->consts->n_lb_groups; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
328
sparx5_sdlb_group_init(sparx5, group->max_rate,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
333
sparx5, ANA_AC_SG_CYCLETIME_UPDATE_PERIOD);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
336
ANA_L2_FWD_CFG_ISDX_LOOKUP_ENA, sparx5, ANA_L2_FWD_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
35
static int sparx5_psfp_sg_get(struct sparx5 *sparx5, u32 idx, u32 *id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
38
sparx5->data->consts->n_gates, idx, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
41
static int sparx5_psfp_sg_put(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
44
sparx5->data->consts->n_gates, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
47
static int sparx5_psfp_fm_get(struct sparx5 *sparx5, u32 idx, u32 *id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
50
sparx5->data->consts->n_sdlbs, idx, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
53
static int sparx5_psfp_fm_put(struct sparx5 *sparx5, u32 id)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
56
sparx5->data->consts->n_sdlbs, id);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
59
u32 sparx5_psfp_isdx_get_sf(struct sparx5 *sparx5, u32 isdx)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
61
return ANA_L2_TSN_CFG_TSN_SFID_GET(spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
65
u32 sparx5_psfp_isdx_get_fm(struct sparx5 *sparx5, u32 isdx)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
67
return ANA_L2_DLB_CFG_DLB_IDX_GET(spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
71
u32 sparx5_psfp_sf_get_sg(struct sparx5 *sparx5, u32 sfid)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
73
return ANA_AC_TSN_SF_CFG_TSN_SGID_GET(spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
77
void sparx5_isdx_conf_set(struct sparx5 *sparx5, u32 isdx, u32 sfid, u32 fmid)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
80
sparx5, ANA_L2_TSN_CFG(isdx));
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
83
sparx5, ANA_L2_DLB_CFG(isdx));
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
92
static int sparx5_psfp_sgid_get_status(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
94
return spx5_rd(sparx5, ANA_AC_SG_ACCESS_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_psfp.c
97
static int sparx5_psfp_sgid_wait_for_completion(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
134
mutex_lock(&sparx5->ptp_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
135
phc = &sparx5->phc[SPARX5_PHC_PORT];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
137
mutex_unlock(&sparx5->ptp_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
145
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
148
phc = &sparx5->phc[SPARX5_PHC_PORT];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
227
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
241
spin_lock_irqsave(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
242
if (sparx5->ptp_skbs == SPARX5_MAX_PTP_ID) {
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
243
spin_unlock_irqrestore(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
25
static u64 sparx5_ptp_get_1ppm(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
253
sparx5->ptp_skbs++;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
258
spin_unlock_irqrestore(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
266
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
269
spin_lock_irqsave(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
271
sparx5->ptp_skbs--;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
273
spin_unlock_irqrestore(&sparx5->ptp_ts_id_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
276
void sparx5_get_hwtimestamp(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
281
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
285
spin_lock_irqsave(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
293
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
295
ts->tv_sec = spx5_rd(sparx5, PTP_PTP_TOD_SEC_LSB(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
296
curr_nsec = spx5_rd(sparx5, PTP_PTP_TOD_NSEC(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
304
spin_unlock_irqrestore(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
310
struct sparx5 *sparx5 = args;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
321
val = spx5_rd(sparx5, REW_PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
336
port = sparx5->ports[txport];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
339
delay = spx5_rd(sparx5, REW_PTP_TWOSTEP_STAMP);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
347
sparx5, REW_PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
349
val = spx5_rd(sparx5, REW_PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
35
switch (sparx5->coreclock) {
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
356
id = spx5_rd(sparx5, REW_PTP_TWOSTEP_STAMP);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
358
id |= spx5_rd(sparx5, REW_PTP_TWOSTEP_STAMP_SUBNS);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
374
sparx5, REW_PTP_TWOSTEP_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
379
spin_lock(&sparx5->ptp_ts_id_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
380
sparx5->ptp_skbs--;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
381
spin_unlock(&sparx5->ptp_ts_id_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
384
sparx5_get_hwtimestamp(sparx5, &ts, delay);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
399
struct sparx5 *sparx5 = phc->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
413
tod_inc = sparx5_ptp_get_nominal_value(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
419
ref = sparx5_ptp_get_1ppm(sparx5) * (scaled_ppm >> 16);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
420
ref += (sparx5_ptp_get_1ppm(sparx5) * (0xffff & scaled_ppm)) >> 16;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
423
spin_lock_irqsave(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
427
sparx5, PTP_PTP_DOM_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
429
spx5_wr((u32)tod_inc & 0xFFFFFFFF, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
431
spx5_wr((u32)(tod_inc >> 32), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
435
PTP_PTP_DOM_CFG_PTP_CLKCFG_DIS, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
438
spin_unlock_irqrestore(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
447
struct sparx5 *sparx5 = phc->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
451
consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
453
spin_lock_irqsave(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
462
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
466
sparx5, PTP_PTP_TOD_SEC_MSB(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
468
sparx5, PTP_PTP_TOD_SEC_LSB(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
469
spx5_wr(ts->tv_nsec, sparx5, PTP_PTP_TOD_NSEC(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
478
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
480
spin_unlock_irqrestore(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
488
struct sparx5 *sparx5 = phc->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
494
consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
496
spin_lock_irqsave(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
504
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
506
s = spx5_rd(sparx5, PTP_PTP_TOD_SEC_MSB(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
508
s |= spx5_rd(sparx5, PTP_PTP_TOD_SEC_LSB(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
509
ns = spx5_rd(sparx5, PTP_PTP_TOD_NSEC(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
512
spin_unlock_irqrestore(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
528
struct sparx5 *sparx5 = phc->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
531
consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
536
spin_lock_irqsave(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
545
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
548
sparx5, PTP_PTP_TOD_NSEC(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
557
sparx5, PTP_PTP_PIN_CFG(consts->tod_pin));
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
559
spin_unlock_irqrestore(&sparx5->ptp_clock_lock, flags);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
56
static u64 sparx5_ptp_get_nominal_value(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
586
static int sparx5_ptp_phc_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
590
struct sparx5_phc *phc = &sparx5->phc[index];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
593
phc->clock = ptp_clock_register(&phc->info, sparx5->dev);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
598
phc->sparx5 = sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
60
switch (sparx5->coreclock) {
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
606
int sparx5_ptp_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
608
u64 tod_adj = sparx5_ptp_get_nominal_value(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
612
if (!sparx5->ptp)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
616
err = sparx5_ptp_phc_init(sparx5, i, &sparx5_ptp_clock_info);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
621
spin_lock_init(&sparx5->ptp_clock_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
622
spin_lock_init(&sparx5->ptp_ts_id_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
623
mutex_init(&sparx5->ptp_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
626
spx5_wr(PTP_PTP_DOM_CFG_PTP_ENA_SET(0), sparx5, PTP_PTP_DOM_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
631
sparx5, PTP_PTP_DOM_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
634
spx5_wr((u32)tod_adj & 0xFFFFFFFF, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
636
spx5_wr((u32)(tod_adj >> 32), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
642
sparx5, PTP_PTP_DOM_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
645
spx5_wr(PTP_PTP_DOM_CFG_PTP_ENA_SET(0x7), sparx5, PTP_PTP_DOM_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
647
for (i = 0; i < sparx5->data->consts->n_ports; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
648
port = sparx5->ports[i];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
658
void sparx5_ptp_deinit(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
663
for (i = 0; i < sparx5->data->consts->n_ports; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
664
port = sparx5->ports[i];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
672
ptp_clock_unregister(sparx5->phc[i].clock);
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
675
void sparx5_ptp_rxtstamp(struct sparx5 *sparx5, struct sk_buff *skb,
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
683
if (!sparx5->ptp)
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
686
phc = &sparx5->phc[SPARX5_PHC_PORT];
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
85
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_ptp.c
93
if (test_bit(port->portno, sparx5->bridge_mask))
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
103
value = spx5_rd(sparx5, HSCH_HSCH_LEAK_CFG(layer, group));
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
107
static u32 sparx5_lg_get_next(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
113
value = spx5_rd(sparx5, HSCH_SE_CONNECT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
117
static u32 sparx5_lg_get_last(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
121
itr = sparx5_lg_get_first(sparx5, layer, group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
124
next = sparx5_lg_get_next(sparx5, layer, group, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
132
static bool sparx5_lg_is_last(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
135
return idx == sparx5_lg_get_next(sparx5, layer, group, idx);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
138
static bool sparx5_lg_is_first(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
141
return idx == sparx5_lg_get_first(sparx5, layer, group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
144
static bool sparx5_lg_is_empty(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
146
return sparx5_lg_get_leak_time(sparx5, layer, group) == 0;
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
149
static bool sparx5_lg_is_singular(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
151
if (sparx5_lg_is_empty(sparx5, layer, group))
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
154
return sparx5_lg_get_first(sparx5, layer, group) ==
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
155
sparx5_lg_get_last(sparx5, layer, group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
158
static void sparx5_lg_enable(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
161
sparx5_lg_set_leak_time(sparx5, layer, group, leak_time);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
164
static void sparx5_lg_disable(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
166
sparx5_lg_set_leak_time(sparx5, layer, group, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
169
static int sparx5_lg_get_group_by_index(struct sparx5 *sparx5, u32 layer,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
176
if (sparx5_lg_is_empty(sparx5, layer, i))
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
179
itr = sparx5_lg_get_first(sparx5, layer, i);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
182
next = sparx5_lg_get_next(sparx5, layer, i, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
215
static int sparx5_lg_get_adjacent(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
220
*first = sparx5_lg_get_first(sparx5, layer, group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
226
*next = sparx5_lg_get_next(sparx5, layer, group, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
24
void sparx5_new_base_time(struct sparx5 *sparx5, const u32 cycle_time,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
241
static int sparx5_lg_conf_set(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
247
sparx5_lg_disable(sparx5, layer, group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
254
HSCH_HSCH_CFG_CFG_HSCH_LAYER, sparx5, HSCH_HSCH_CFG_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
257
spx5_wr(HSCH_SE_CONNECT_SE_LEAK_LINK_SET(idx_next), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
262
HSCH_HSCH_LEAK_CFG_LEAK_FIRST, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
266
sparx5_lg_enable(sparx5, layer, group, leak_time);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
271
static int sparx5_lg_del(struct sparx5 *sparx5, u32 layer, u32 group, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
277
WARN_ON(sparx5_lg_get_adjacent(sparx5, layer, group, idx, &prev, &next,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
280
if (sparx5_lg_is_singular(sparx5, layer, group)) {
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
282
} else if (sparx5_lg_is_last(sparx5, layer, group, idx)) {
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
286
} else if (sparx5_lg_is_first(sparx5, layer, group, idx)) {
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
295
return sparx5_lg_conf_set(sparx5, layer, group, first, idx, next,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
299
static int sparx5_lg_add(struct sparx5 *sparx5, u32 layer, u32 new_group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
308
if (sparx5_lg_get_group_by_index(sparx5, layer, idx, &old_group) >= 0) {
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
311
sparx5_lg_del(sparx5, layer, old_group, idx);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
321
if (sparx5_lg_is_empty(sparx5, layer, new_group))
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
324
next = sparx5_lg_get_first(sparx5, layer, new_group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
326
return sparx5_lg_conf_set(sparx5, layer, new_group, first, idx, next,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
334
int (*sparx5_lg_action)(struct sparx5 *, u32, u32, u32);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
335
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
344
HSCH_HSCH_CFG_CFG_HSCH_LAYER, sparx5, HSCH_HSCH_CFG_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
348
sparx5, HSCH_SE_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
35
sparx5_ptp_gettime64(&sparx5->phc[SPARX5_PHC_PORT].info, &ts);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
353
sparx5, HSCH_CIR_CFG(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
356
sparx5_lg_action(sparx5, layer, group, idx);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
370
u32 layer = is_sparx5(port->sparx5) ? 2 : 1;
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
376
port->sparx5, HSCH_HSCH_CFG_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
380
HSCH_SE_CFG_SE_DWRR_CNT, port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
385
HSCH_DWRR_ENTRY_DWRR_COST, port->sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
392
static int sparx5_leak_groups_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
394
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
401
sys_clk_per_100ps = spx5_rd(sparx5, HSCH_SYS_CLK_PER);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
441
sparx5_lg_disable(sparx5, i, ii);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
448
int sparx5_qos_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
452
ret = sparx5_leak_groups_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
456
ret = sparx5_dcb_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
460
sparx5_psfp_init(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
537
sparx5_lg_get_group_by_index(port->sparx5, layer, idx, &group);
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
84
static u32 sparx5_lg_get_leak_time(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
88
value = spx5_rd(sparx5, HSCH_HSCH_TIMER_CFG(layer, group));
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
92
static void sparx5_lg_set_leak_time(struct sparx5 *sparx5, u32 layer, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
95
spx5_wr(HSCH_HSCH_TIMER_CFG_LEAK_TIME_SET(leak_time), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_qos.c
99
static u32 sparx5_lg_get_first(struct sparx5 *sparx5, u32 layer, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_qos.h
62
int sparx5_qos_init(struct sparx5 *sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
102
return lb == sparx5_sdlb_group_get_next(sparx5, group, lb);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
105
static bool sparx5_sdlb_group_is_empty(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
109
val = spx5_rd(sparx5, ANA_AC_SDLB_PUP_CTRL(group));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
114
static u32 sparx5_sdlb_group_get_last(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
118
itr = sparx5_sdlb_group_get_first(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
121
next = sparx5_sdlb_group_get_next(sparx5, group, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
129
static bool sparx5_sdlb_group_is_singular(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
131
if (sparx5_sdlb_group_is_empty(sparx5, group))
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
134
return sparx5_sdlb_group_get_first(sparx5, group) ==
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
135
sparx5_sdlb_group_get_last(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
138
static int sparx5_sdlb_group_get_adjacent(struct sparx5 *sparx5, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
144
*first = sparx5_sdlb_group_get_first(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
150
*next = sparx5_sdlb_group_get_next(sparx5, group, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
163
static int sparx5_sdlb_group_get_count(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
168
itr = sparx5_sdlb_group_get_first(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
171
next = sparx5_sdlb_group_get_next(sparx5, group, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
180
int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
182
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
189
for (i = sparx5->data->consts->n_lb_groups - 1; i >= 0; i--) {
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
192
count = sparx5_sdlb_group_get_count(sparx5, i);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
208
int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
213
for (i = 0; i < sparx5->data->consts->n_lb_groups; i++) {
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
214
if (sparx5_sdlb_group_is_empty(sparx5, i))
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
217
itr = sparx5_sdlb_group_get_first(sparx5, i);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
220
next = sparx5_sdlb_group_get_next(sparx5, i, itr);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
236
static int sparx5_sdlb_group_link(struct sparx5 *sparx5, u32 group, u32 idx,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
240
sparx5_sdlb_group_disable(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
248
sparx5, ANA_AC_SDLB_XLB_NEXT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
251
spx5_wr(ANA_AC_SDLB_XLB_START_LBSET_START_SET(first), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
255
sparx5_sdlb_group_enable(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
260
int sparx5_sdlb_group_add(struct sparx5 *sparx5, u32 group, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
267
if (sparx5_sdlb_group_is_empty(sparx5, group))
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
270
next = sparx5_sdlb_group_get_first(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
272
return sparx5_sdlb_group_link(sparx5, group, idx, first, next, false);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
275
int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
28
u64 sparx5_sdlb_clk_hz_get(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
280
if (sparx5_sdlb_group_get_adjacent(sparx5, group, idx, &prev, &next,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
287
if (sparx5_sdlb_group_is_singular(sparx5, group)) {
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
289
} else if (sparx5_sdlb_group_is_last(sparx5, group, idx)) {
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
293
} else if (sparx5_sdlb_group_is_first(sparx5, group, idx)) {
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
302
return sparx5_sdlb_group_link(sparx5, group, idx, first, next, empty);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
305
void sparx5_sdlb_group_init(struct sparx5 *sparx5, u64 max_rate, u32 min_burst,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
308
const struct sparx5_ops *ops = sparx5->data->ops;
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
326
sparx5_sdlb_pup_interval_get(sparx5, max_token, max_rate);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
33
(sparx5_clk_period(sparx5->coreclock) / 100);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
331
sparx5, ANA_AC_SDLB_PUP_INTERVAL(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
334
sparx5, ANA_AC_SDLB_FRM_RATE_TOKENS(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
336
spx5_wr(ANA_AC_SDLB_LBGRP_MISC_THRES_SHIFT_SET(thres_shift), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
38
static int sparx5_sdlb_pup_interval_get(struct sparx5 *sparx5, u32 max_token,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
43
clk_hz = sparx5_sdlb_clk_hz_get(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
48
int sparx5_sdlb_pup_token_get(struct sparx5 *sparx5, u32 pup_interval, u64 rate)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
55
clk_hz = sparx5_sdlb_clk_hz_get(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
60
static void sparx5_sdlb_group_disable(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
63
ANA_AC_SDLB_PUP_CTRL_PUP_ENA, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
67
static void sparx5_sdlb_group_enable(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
70
ANA_AC_SDLB_PUP_CTRL_PUP_ENA, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
74
static u32 sparx5_sdlb_group_get_first(struct sparx5 *sparx5, u32 group)
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
78
val = spx5_rd(sparx5, ANA_AC_SDLB_XLB_START(group));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
83
static u32 sparx5_sdlb_group_get_next(struct sparx5 *sparx5, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
88
val = spx5_rd(sparx5, ANA_AC_SDLB_XLB_NEXT(lb));
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
93
static bool sparx5_sdlb_group_is_first(struct sparx5 *sparx5, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
96
return lb == sparx5_sdlb_group_get_first(sparx5, group);
drivers/net/ethernet/microchip/sparx5/sparx5_sdlb.c
99
static bool sparx5_sdlb_group_is_last(struct sparx5 *sparx5, u32 group,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
101
sparx5_set_ageing(port->sparx5, ageing_time);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
108
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
119
mutex_lock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
120
list_for_each_entry(e, &sparx5->mdb_entries, list) {
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
125
mutex_unlock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
161
sparx5_vlan_port_apply(port->sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
180
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
184
if (bitmap_empty(sparx5->bridge_mask, SPX5_PORTS))
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
186
sparx5->hw_bridge_dev = bridge;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
188
if (sparx5->hw_bridge_dev != bridge)
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
19
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
194
set_bit(port->portno, sparx5->bridge_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
202
sparx5_mact_forget(sparx5, ndev->dev_addr, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
217
clear_bit(port->portno, sparx5->bridge_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
225
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
229
clear_bit(port->portno, sparx5->bridge_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
230
if (bitmap_empty(sparx5->bridge_mask, SPX5_PORTS))
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
231
sparx5->hw_bridge_dev = NULL;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
239
sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
267
sparx5_vlan_port_apply(port->sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
276
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
280
sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_CPU),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
283
sparx5_mact_forget(sparx5, port->ndev->dev_addr, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
330
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
337
sparx5 = switchdev_work->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
340
sparx5 = switchdev_work->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
35
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
357
sparx5_add_mact_entry(sparx5, dev,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
358
sparx5_get_pgid(sparx5, PGID_CPU),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
361
sparx5_add_mact_entry(sparx5, port->ndev, port->portno,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
365
sparx5_del_mact_entry(sparx5, fdb_info->addr, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
38
for (pgid = sparx5_get_pgid(sparx5, PGID_IPV4_MC_DATA);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
387
struct sparx5 *spx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
39
pgid <= sparx5_get_pgid(sparx5, PGID_IPV6_MC_CTRL); pgid++)
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
390
spx5 = container_of(nb, struct sparx5, switchdev_nb);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
407
switchdev_work->sparx5 = spx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
441
struct sparx5 *sparx5 =
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
442
container_of(nb, struct sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
446
sparx5_mact_learn(sparx5, sparx5_get_pgid(sparx5, PGID_BCAST),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
459
static int sparx5_alloc_mdb_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
46
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
472
err = sparx5_pgid_alloc_mcast(sparx5, &pgid_idx);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
482
mutex_lock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
483
list_add_tail(&entry->list, &sparx5->mdb_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
484
mutex_unlock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
490
static void sparx5_free_mdb_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
496
mutex_lock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
497
list_for_each_entry_safe(entry, tmp, &sparx5->mdb_entries, list) {
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
50
sparx5_get_pgid(sparx5, PGID_MC_FLOOD),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
502
sparx5_pgid_free(sparx5, entry->pgid_idx);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
509
mutex_unlock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
512
static struct sparx5_mdb_entry *sparx5_mdb_get_entry(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
518
mutex_lock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
519
list_for_each_entry(e, &sparx5->mdb_entries, list) {
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
527
mutex_unlock(&sparx5->mdb_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
531
static void sparx5_cpu_copy_ena(struct sparx5 *spx5, u16 pgid, bool enable)
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
543
struct sparx5 *spx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
57
sparx5_get_pgid(sparx5, PGID_UC_FLOOD),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
600
struct sparx5 *spx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
61
sparx5_get_pgid(sparx5, PGID_BCAST),
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
678
struct sparx5 *sparx5 =
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
679
container_of(nb, struct sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
68
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
682
sparx5_mact_forget(sparx5, dev->broadcast, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
70
if (!test_bit(port->portno, sparx5->bridge_mask)) {
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
746
int sparx5_register_notifier_blocks(struct sparx5 *s5)
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
78
set_bit(port->portno, sparx5->bridge_fwd_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
781
void sparx5_unregister_notifier_blocks(struct sparx5 *s5)
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
81
set_bit(port->portno, sparx5->bridge_lrn_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
86
clear_bit(port->portno, sparx5->bridge_fwd_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
87
clear_bit(port->portno, sparx5->bridge_lrn_mask);
drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c
92
sparx5_update_fwd(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_tc.c
63
static void sparx5_tc_get_layer_and_idx(struct sparx5 *sparx5, u32 parent,
drivers/net/ethernet/microchip/sparx5/sparx5_tc.c
93
sparx5_tc_get_layer_and_idx(port->sparx5, qopt->parent, port->portno,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1172
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1180
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1287
if (!sparx5_has_feature(sparx5, SPX5_FEATURE_PSFP)) {
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1292
err = sparx5_tc_flower_psfp_setup(sparx5, vrule, tc_sg_idx,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1328
static void sparx5_tc_free_psfp_resources(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1342
sfid = sparx5_psfp_isdx_get_sf(sparx5, isdx);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1347
fmid = sparx5_psfp_isdx_get_fm(sparx5, isdx);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1348
sgid = sparx5_psfp_sf_get_sg(sparx5, sfid);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1350
if (fmid && sparx5_psfp_fm_del(sparx5, fmid) < 0)
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1354
if (sgid && sparx5_psfp_sg_del(sparx5, sgid) < 0)
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1358
if (sparx5_psfp_sf_del(sparx5, sfid) < 0)
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1362
sparx5_isdx_conf_set(sparx5, isdx, 0, 0);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1370
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1378
sparx5_tc_free_psfp_resources(sparx5, vrule);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1392
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1428
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1475
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
1560
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
411
vctrl = port->sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
774
static int sparx5_tc_flower_psfp_setup(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
789
sg_idx = sparx5_pool_idx_to_id(sparx5->data->consts->n_gates -
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
802
ret = sparx5_psfp_sg_add(sparx5, sg_idx, sg, &psfp_sgid);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
808
ret = sparx5_psfp_fm_add(sparx5, pol_idx, fm, &psfp_fmid);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
817
ret = sparx5_psfp_sf_add(sparx5, sf, &psfp_sfid);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_flower.c
822
sparx5_isdx_conf_set(sparx5, psfp_sfid, psfp_sfid, psfp_fmid);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
103
err = vcap_enable_lookups(sparx5->vcap_ctrl, ndev,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
133
list_add_tail(&mall_entry->list, &sparx5->mall_entries);
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
143
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
147
entry = sparx5_tc_matchall_entry_find(&sparx5->mall_entries,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
155
err = vcap_enable_lookups(sparx5->vcap_ctrl, ndev,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
172
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
175
entry = sparx5_tc_matchall_entry_find(&sparx5->mall_entries,
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
53
struct sparx5 *sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_tc_matchall.c
73
sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
119
static void sparx5_vcap_is2_port_keys(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
133
value = spx5_rd(sparx5, ANA_ACL_VCAP_S2_CFG(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
141
value = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
232
static void sparx5_vcap_is2_port_stickies(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
243
value = spx5_rd(sparx5, ANA_ACL_SEC_LOOKUP_STICKY(lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
282
spx5_wr(value, sparx5, ANA_ACL_SEC_LOOKUP_STICKY(lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
287
static void sparx5_vcap_es0_port_keys(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
299
value = spx5_rd(sparx5, REW_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
307
value = spx5_rd(sparx5, REW_RTAG_ETAG_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
325
static void sparx5_vcap_es2_port_keys(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
339
value = spx5_rd(sparx5, EACL_VCAP_ES2_KEY_SEL(port->portno,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
405
static void sparx5_vcap_es2_port_stickies(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
414
value = spx5_rd(sparx5, EACL_SEC_LOOKUP_STICKY(lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
433
spx5_wr(value, sparx5, EACL_SEC_LOOKUP_STICKY(lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
444
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
448
vctrl = sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
453
sparx5_vcap_is0_port_keys(sparx5, admin, port, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
456
sparx5_vcap_is2_port_keys(sparx5, admin, port, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
457
sparx5_vcap_is2_port_stickies(sparx5, admin, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
460
sparx5_vcap_es0_port_keys(sparx5, admin, port, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
463
sparx5_vcap_es2_port_keys(sparx5, admin, port, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
464
sparx5_vcap_es2_port_stickies(sparx5, admin, out);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
76
static void sparx5_vcap_is0_port_keys(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_debugfs.c
90
value = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1000
mutex_unlock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1003
static void sparx5_vcap_es0_cache_write(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1020
spx5_wr(keystr[idx] & mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1022
spx5_wr(~mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1028
spx5_wr(actstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1039
spx5_wr(admin->cache.counter, sparx5, VCAP_ES0_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1040
sparx5_es0_write_esdx_counter(sparx5, admin, start);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1044
static void sparx5_vcap_es2_cache_write(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1061
spx5_wr(keystr[idx] & mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1063
spx5_wr(~mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1069
spx5_wr(actstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1081
spx5_wr(admin->cache.counter, sparx5, EACL_ES2_CNT(start));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1082
spx5_wr(admin->cache.sticky, sparx5, VCAP_ES2_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1094
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1098
sparx5_vcap_is0_cache_write(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1101
sparx5_vcap_is2_cache_write(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1104
sparx5_vcap_es0_cache_write(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1107
sparx5_vcap_es2_cache_write(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1110
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1115
static void sparx5_vcap_is0_cache_read(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1130
keystr[idx] = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1132
mskstr[idx] = ~spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1139
actstr[idx] = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1144
spx5_rd(sparx5, VCAP_SUPER_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1146
spx5_rd(sparx5, VCAP_SUPER_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1150
static void sparx5_vcap_is2_cache_read(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1165
keystr[idx] = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1167
mskstr[idx] = ~spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1174
actstr[idx] = spx5_rd(sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1181
spx5_rd(sparx5, ANA_ACL_CNT_A(start));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1184
spx5_rd(sparx5, ANA_ACL_CNT_B(start));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1186
spx5_rd(sparx5, VCAP_SUPER_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1191
static void sparx5_es0_read_esdx_counter(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1196
mutex_lock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1197
spx5_wr(XQS_STAT_CFG_STAT_VIEW_SET(id), sparx5, XQS_STAT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1198
counter = spx5_rd(sparx5, XQS_CNT(SPARX5_STAT_ESDX_GRN_PKTS)) +
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1199
spx5_rd(sparx5, XQS_CNT(SPARX5_STAT_ESDX_YEL_PKTS));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1200
mutex_unlock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1205
static void sparx5_vcap_es0_cache_read(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1221
spx5_rd(sparx5, VCAP_ES0_VCAP_ENTRY_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1223
~spx5_rd(sparx5, VCAP_ES0_VCAP_MASK_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1230
spx5_rd(sparx5, VCAP_ES0_VCAP_ACTION_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1234
spx5_rd(sparx5, VCAP_ES0_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1236
sparx5_es0_read_esdx_counter(sparx5, admin, start);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1240
static void sparx5_vcap_es2_cache_read(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1256
spx5_rd(sparx5, VCAP_ES2_VCAP_ENTRY_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1258
~spx5_rd(sparx5, VCAP_ES2_VCAP_MASK_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1265
spx5_rd(sparx5, VCAP_ES2_VCAP_ACTION_DAT(idx));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1270
spx5_rd(sparx5, EACL_ES2_CNT(start));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1272
spx5_rd(sparx5, VCAP_ES2_VCAP_CNT_DAT(0));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1284
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1288
sparx5_vcap_is0_cache_read(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1291
sparx5_vcap_is2_cache_read(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1294
sparx5_vcap_es0_cache_read(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1297
sparx5_vcap_es2_cache_read(sparx5, admin, sel, start, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1300
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1311
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1313
_sparx5_vcap_range_init(sparx5, admin, addr, count);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1316
static void sparx5_vcap_super_update(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1323
VCAP_SUPER_CFG_MV_SIZE_SET(0), sparx5, VCAP_SUPER_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1331
sparx5, VCAP_SUPER_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1332
sparx5_vcap_wait_super_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1335
static void sparx5_vcap_es0_update(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1342
VCAP_ES0_CFG_MV_SIZE_SET(0), sparx5, VCAP_ES0_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1350
sparx5, VCAP_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1351
sparx5_vcap_wait_es0_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1354
static void sparx5_vcap_es2_update(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1361
VCAP_ES2_CFG_MV_SIZE_SET(0), sparx5, VCAP_ES2_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1369
sparx5, VCAP_ES2_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1370
sparx5_vcap_wait_es2_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1379
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1384
sparx5_vcap_super_update(sparx5, cmd, sel, addr);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1387
sparx5_vcap_es0_update(sparx5, cmd, sel, addr);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1390
sparx5_vcap_es2_update(sparx5, cmd, sel, addr);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1393
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1398
static void sparx5_vcap_super_move(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1406
sparx5, VCAP_SUPER_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1414
sparx5, VCAP_SUPER_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1415
sparx5_vcap_wait_super_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1418
static void sparx5_vcap_es0_move(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1426
sparx5, VCAP_ES0_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1434
sparx5, VCAP_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1435
sparx5_vcap_wait_es0_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1438
static void sparx5_vcap_es2_move(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1446
sparx5, VCAP_ES2_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1454
sparx5, VCAP_ES2_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1455
sparx5_vcap_wait_es2_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1463
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1480
sparx5_vcap_super_move(sparx5, addr, cmd, mv_num_pos, mv_size);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1483
sparx5_vcap_es0_move(sparx5, addr, cmd, mv_num_pos, mv_size);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1486
sparx5_vcap_es2_move(sparx5, addr, cmd, mv_num_pos, mv_size);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1489
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
152
static void sparx5_vcap_type_err(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1523
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1532
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1539
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1546
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
161
static void sparx5_vcap_wait_super_update(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1612
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1621
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1628
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1632
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1639
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1644
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1651
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
167
false, sparx5, VCAP_SUPER_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1705
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
171
static void sparx5_vcap_wait_es0_update(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1714
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1721
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1728
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
177
false, sparx5, VCAP_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1771
sparx5_vcap_type_err(port->sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1777
static void sparx5_vcap_is0_port_key_selection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1780
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1793
spx5_wr(keysel, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1797
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1804
static void sparx5_vcap_is2_port_key_selection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1807
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
181
static void sparx5_vcap_wait_es2_update(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1819
spx5_wr(keysel, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1827
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1832
static void sparx5_vcap_es0_port_key_selection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1835
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1842
sparx5, REW_RTAG_ETAG_CTRL(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1845
sparx5, REW_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1849
static void sparx5_vcap_es2_port_key_selection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1852
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1861
spx5_wr(keysel, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1866
static void sparx5_vcap_port_key_selection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
187
false, sparx5, VCAP_ES2_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1871
sparx5_vcap_is0_port_key_selection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1874
sparx5_vcap_is2_port_key_selection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1877
sparx5_vcap_es0_port_key_selection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1880
sparx5_vcap_es2_port_key_selection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1883
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1889
static void sparx5_vcap_port_key_deselection(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1892
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1901
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1908
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
191
static void _sparx5_vcap_range_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1913
REW_ES0_CTRL_ES0_LU_ENA, sparx5, REW_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1920
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1924
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1942
sparx5_vcap_admin_alloc(struct sparx5 *sparx5, struct vcap_control *ctrl,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1976
static void sparx5_vcap_block_alloc(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1991
spx5_wr(VCAP_SUPER_IDX_CORE_IDX_SET(idx), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
1994
sparx5, VCAP_SUPER_MAP);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2005
cores = spx5_rd(sparx5, VCAP_ES0_CORE_CNT);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2007
spx5_wr(VCAP_ES0_IDX_CORE_IDX_SET(idx), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2009
spx5_wr(VCAP_ES0_MAP_CORE_MAP_SET(1), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2017
cores = spx5_rd(sparx5, VCAP_ES2_CORE_CNT);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2019
spx5_wr(VCAP_ES2_IDX_CORE_IDX_SET(idx), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
202
sparx5, VCAP_SUPER_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2021
spx5_wr(VCAP_ES2_MAP_CORE_MAP_SET(1), sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2026
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2032
int sparx5_vcap_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2034
const struct sparx5_consts *consts = sparx5->data->consts;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2054
sparx5->vcap_ctrl = ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2064
admin = sparx5_vcap_admin_alloc(sparx5, ctrl, cfg);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2071
sparx5_vcap_block_alloc(sparx5, admin, cfg);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2072
sparx5_vcap_block_init(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2074
sparx5_vcap_port_key_selection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2077
dir = vcap_debugfs(sparx5->dev, sparx5->debugfs_root, ctrl);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2079
if (sparx5->ports[idx])
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2080
vcap_port_debugfs(sparx5->dev, dir, ctrl,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2081
sparx5->ports[idx]->ndev);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2086
void sparx5_vcap_destroy(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2088
struct vcap_control *ctrl = sparx5->vcap_ctrl;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
2095
sparx5_vcap_port_key_deselection(sparx5, admin);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
210
sparx5, VCAP_SUPER_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
211
sparx5_vcap_wait_super_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
216
sparx5, VCAP_ES0_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
224
sparx5, VCAP_ES0_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
225
sparx5_vcap_wait_es0_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
230
sparx5, VCAP_ES2_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
238
sparx5, VCAP_ES2_CTRL);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
239
sparx5_vcap_wait_es2_update(sparx5);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
242
sparx5_vcap_type_err(sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
248
static void sparx5_vcap_block_init(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
251
_sparx5_vcap_range_init(sparx5, admin, admin->first_valid_addr,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
262
return vcap_keyset_name(port->sparx5->vcap_ctrl, keyset);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
411
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
415
value = spx5_rd(sparx5, ANA_CL_ADV_CL_CFG(portno, lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
465
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
469
value = spx5_rd(sparx5, ANA_ACL_VCAP_S2_KEY_SEL(portno, lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
594
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
598
value = spx5_rd(sparx5, REW_RTAG_ETAG_CTRL(portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
619
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
623
value = spx5_rd(sparx5, EACL_VCAP_ES2_KEY_SEL(portno, lookup));
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
706
sparx5_vcap_type_err(port->sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
783
sparx5_vcap_type_err(port->sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
888
sparx5_vcap_type_err(port->sparx5, admin, __func__);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
902
static void sparx5_vcap_is0_cache_write(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
919
spx5_wr(keystr[idx] & mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
921
spx5_wr(~mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
927
spx5_wr(actstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
939
spx5_wr(admin->cache.counter, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
943
static void sparx5_vcap_is2_cache_write(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
960
spx5_wr(keystr[idx] & mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
962
spx5_wr(~mskstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
968
spx5_wr(actstr[idx], sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
981
spx5_wr(admin->cache.counter, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
984
spx5_wr(admin->cache.counter, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
986
spx5_wr(admin->cache.sticky, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
992
static void sparx5_es0_write_esdx_counter(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
995
mutex_lock(&sparx5->queue_stats_lock);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
996
spx5_wr(XQS_STAT_CFG_STAT_VIEW_SET(id), sparx5, XQS_STAT_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
997
spx5_wr(admin->cache.counter, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vcap_impl.c
999
spx5_wr(0, sparx5, XQS_CNT(SPARX5_STAT_ESDX_YEL_PKTS));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
10
static int sparx5_vlant_set_mask(struct sparx5 *sparx5, u16 vid)
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
102
clear_bit(port->portno, sparx5->vlan_mask[vid]);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
103
ret = sparx5_vlant_set_mask(sparx5, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
115
sparx5_vlan_port_apply(sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
122
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
129
spx5_rmw(val, mask, sparx5, ANA_AC_PGID_CFG(pgid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
133
spx5_rmw(val, mask, sparx5, ANA_AC_PGID_CFG1(pgid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
137
spx5_rmw(val, mask, sparx5, ANA_AC_PGID_CFG2(pgid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
143
void sparx5_pgid_clear(struct sparx5 *spx5, int pgid)
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
15
bitmap_to_arr32(mask, sparx5->vlan_mask[vid], SPX5_PORTS);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
152
void sparx5_pgid_read_mask(struct sparx5 *spx5, int pgid, u32 portmask[3])
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
161
void sparx5_update_fwd(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
168
bitmap_to_arr32(mask, sparx5->bridge_fwd_mask, SPX5_PORTS);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
171
for (port = 0; port < sparx5->data->consts->n_ports; port++) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
172
if (test_bit(port, sparx5->bridge_fwd_mask)) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
174
bitmap_copy(workmask, sparx5->bridge_fwd_mask, SPX5_PORTS);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
177
spx5_wr(mask[0], sparx5, ANA_AC_SRC_CFG(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
178
if (is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
179
spx5_wr(mask[1], sparx5, ANA_AC_SRC_CFG1(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
18
spx5_wr(mask[0], sparx5, ANA_L3_VLAN_MASK_CFG(vid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
180
spx5_wr(mask[2], sparx5, ANA_AC_SRC_CFG2(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
183
spx5_wr(0, sparx5, ANA_AC_SRC_CFG(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
184
if (is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
185
spx5_wr(0, sparx5, ANA_AC_SRC_CFG1(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
186
spx5_wr(0, sparx5, ANA_AC_SRC_CFG2(port));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
19
if (is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
192
bitmap_and(workmask, sparx5->bridge_fwd_mask,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
193
sparx5->bridge_lrn_mask, SPX5_PORTS);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
197
spx5_wr(mask[0], sparx5, ANA_L2_AUTO_LRN_CFG);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
198
if (is_sparx5(sparx5)) {
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
199
spx5_wr(mask[1], sparx5, ANA_L2_AUTO_LRN_CFG1);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
20
spx5_wr(mask[1], sparx5, ANA_L3_VLAN_MASK_CFG1(vid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
200
spx5_wr(mask[2], sparx5, ANA_L2_AUTO_LRN_CFG2);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
204
void sparx5_vlan_port_apply(struct sparx5 *sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
21
spx5_wr(mask[2], sparx5, ANA_L3_VLAN_MASK_CFG2(vid));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
214
spx5_wr(val, sparx5, ANA_CL_VLAN_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
224
spx5_wr(val, sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
236
spx5_wr(val, sparx5, REW_TAG_CTRL(port->portno));
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
241
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
27
void sparx5_vlan_init(struct sparx5 *sparx5)
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
33
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
40
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
44
void sparx5_vlan_port_setup(struct sparx5 *sparx5, int portno)
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
46
struct sparx5_port *port = sparx5->ports[portno];
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
53
sparx5,
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
60
struct sparx5 *sparx5 = port->sparx5;
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
75
set_bit(port->portno, sparx5->vlan_mask[vid]);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
76
ret = sparx5_vlant_set_mask(sparx5, vid);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
84
sparx5_vlan_port_apply(sparx5, port);
drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c
91
struct sparx5 *sparx5 = port->sparx5;