Lines Matching full:qdma

41 	struct airoha_qdma *qdma = irq_bank->qdma;  in airoha_qdma_set_irqmask()  local
42 int bank = irq_bank - &qdma->irq_banks[0]; in airoha_qdma_set_irqmask()
52 airoha_qdma_wr(qdma, REG_INT_ENABLE(bank, index), in airoha_qdma_set_irqmask()
57 airoha_qdma_rr(qdma, REG_INT_ENABLE(bank, index)); in airoha_qdma_set_irqmask()
76 struct airoha_eth *eth = port->qdma->eth; in airoha_set_macaddr()
107 struct airoha_eth *eth = port->qdma->eth; in airoha_set_vip_for_gdm_port()
504 /* QDMA LAN, RX Ring-22 */ in airoha_fe_init()
554 struct airoha_qdma *qdma = q->qdma; in airoha_qdma_fill_rx_queue() local
555 int qid = q - &qdma->q_rx[0]; in airoha_qdma_fill_rx_queue()
588 airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), in airoha_qdma_fill_rx_queue()
619 struct airoha_qdma *qdma = q->qdma; in airoha_qdma_rx_process() local
620 struct airoha_eth *eth = qdma->eth; in airoha_qdma_rx_process()
621 int qid = q - &qdma->q_rx[0]; in airoha_qdma_rx_process()
732 struct airoha_qdma *qdma = q->qdma; in airoha_qdma_rx_napi_poll() local
733 int i, qid = q - &qdma->q_rx[0]; in airoha_qdma_rx_napi_poll()
737 for (i = 0; i < ARRAY_SIZE(qdma->irq_banks); i++) { in airoha_qdma_rx_napi_poll()
741 airoha_qdma_irq_enable(&qdma->irq_banks[i], intr_reg, in airoha_qdma_rx_napi_poll()
750 struct airoha_qdma *qdma, int ndesc) in airoha_qdma_init_rx_queue() argument
759 .dev = qdma->eth->dev, in airoha_qdma_init_rx_queue()
762 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_rx_queue()
763 int qid = q - &qdma->q_rx[0], thr; in airoha_qdma_init_rx_queue()
768 q->qdma = qdma; in airoha_qdma_init_rx_queue()
790 airoha_qdma_wr(qdma, REG_RX_RING_BASE(qid), dma_addr); in airoha_qdma_init_rx_queue()
791 airoha_qdma_rmw(qdma, REG_RX_RING_SIZE(qid), in airoha_qdma_init_rx_queue()
796 airoha_qdma_rmw(qdma, REG_RX_RING_SIZE(qid), RX_RING_THR_MASK, in airoha_qdma_init_rx_queue()
798 airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK, in airoha_qdma_init_rx_queue()
800 airoha_qdma_set(qdma, REG_RX_SCATTER_CFG(qid), RX_RING_SG_EN_MASK); in airoha_qdma_init_rx_queue()
809 struct airoha_eth *eth = q->qdma->eth; in airoha_qdma_cleanup_rx_queue()
823 static int airoha_qdma_init_rx(struct airoha_qdma *qdma) in airoha_qdma_init_rx() argument
827 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_init_rx()
835 err = airoha_qdma_init_rx_queue(&qdma->q_rx[i], qdma, in airoha_qdma_init_rx()
848 struct airoha_qdma *qdma; in airoha_qdma_tx_napi_poll() local
853 qdma = irq_q->qdma; in airoha_qdma_tx_napi_poll()
854 id = irq_q - &qdma->q_tx_irq[0]; in airoha_qdma_tx_napi_poll()
855 eth = qdma->eth; in airoha_qdma_tx_napi_poll()
857 status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(id)); in airoha_qdma_tx_napi_poll()
879 if (qid >= ARRAY_SIZE(qdma->q_tx)) in airoha_qdma_tx_napi_poll()
882 q = &qdma->q_tx[qid]; in airoha_qdma_tx_napi_poll()
940 airoha_qdma_rmw(qdma, REG_IRQ_CLEAR_LEN(id), in airoha_qdma_tx_napi_poll()
942 airoha_qdma_rmw(qdma, REG_IRQ_CLEAR_LEN(id), in airoha_qdma_tx_napi_poll()
947 airoha_qdma_irq_enable(&qdma->irq_banks[0], QDMA_INT_REG_IDX0, in airoha_qdma_tx_napi_poll()
954 struct airoha_qdma *qdma, int size) in airoha_qdma_init_tx_queue() argument
956 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_tx_queue()
957 int i, qid = q - &qdma->q_tx[0]; in airoha_qdma_init_tx_queue()
962 q->qdma = qdma; in airoha_qdma_init_tx_queue()
983 airoha_qdma_set(qdma, REG_TX_RING_BLOCKING(qid), in airoha_qdma_init_tx_queue()
986 airoha_qdma_wr(qdma, REG_TX_RING_BASE(qid), dma_addr); in airoha_qdma_init_tx_queue()
987 airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), TX_RING_CPU_IDX_MASK, in airoha_qdma_init_tx_queue()
989 airoha_qdma_rmw(qdma, REG_TX_DMA_IDX(qid), TX_RING_DMA_IDX_MASK, in airoha_qdma_init_tx_queue()
996 struct airoha_qdma *qdma, int size) in airoha_qdma_tx_irq_init() argument
998 int id = irq_q - &qdma->q_tx_irq[0]; in airoha_qdma_tx_irq_init()
999 struct airoha_eth *eth = qdma->eth; in airoha_qdma_tx_irq_init()
1011 irq_q->qdma = qdma; in airoha_qdma_tx_irq_init()
1013 airoha_qdma_wr(qdma, REG_TX_IRQ_BASE(id), dma_addr); in airoha_qdma_tx_irq_init()
1014 airoha_qdma_rmw(qdma, REG_TX_IRQ_CFG(id), TX_IRQ_DEPTH_MASK, in airoha_qdma_tx_irq_init()
1016 airoha_qdma_rmw(qdma, REG_TX_IRQ_CFG(id), TX_IRQ_THR_MASK, in airoha_qdma_tx_irq_init()
1022 static int airoha_qdma_init_tx(struct airoha_qdma *qdma) in airoha_qdma_init_tx() argument
1026 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) { in airoha_qdma_init_tx()
1027 err = airoha_qdma_tx_irq_init(&qdma->q_tx_irq[i], qdma, in airoha_qdma_init_tx()
1033 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_qdma_init_tx()
1034 err = airoha_qdma_init_tx_queue(&qdma->q_tx[i], qdma, in airoha_qdma_init_tx()
1045 struct airoha_eth *eth = q->qdma->eth; in airoha_qdma_cleanup_tx_queue()
1062 static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma) in airoha_qdma_init_hfwd_queues() argument
1065 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_hfwd_queues()
1066 int id = qdma - &eth->qdma[0]; in airoha_qdma_init_hfwd_queues()
1071 name = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d-buf", id); in airoha_qdma_init_hfwd_queues()
1104 airoha_qdma_wr(qdma, REG_FWD_BUF_BASE, dma_addr); in airoha_qdma_init_hfwd_queues()
1110 airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr); in airoha_qdma_init_hfwd_queues()
1112 airoha_qdma_rmw(qdma, REG_HW_FWD_DSCP_CFG, in airoha_qdma_init_hfwd_queues()
1115 airoha_qdma_rmw(qdma, REG_FWD_DSCP_LOW_THR, FWD_DSCP_LOW_THR_MASK, in airoha_qdma_init_hfwd_queues()
1117 airoha_qdma_rmw(qdma, REG_LMGR_INIT_CFG, in airoha_qdma_init_hfwd_queues()
1125 30 * USEC_PER_MSEC, true, qdma, in airoha_qdma_init_hfwd_queues()
1129 static void airoha_qdma_init_qos(struct airoha_qdma *qdma) in airoha_qdma_init_qos() argument
1131 airoha_qdma_clear(qdma, REG_TXWRR_MODE_CFG, TWRR_WEIGHT_SCALE_MASK); in airoha_qdma_init_qos()
1132 airoha_qdma_set(qdma, REG_TXWRR_MODE_CFG, TWRR_WEIGHT_BASE_MASK); in airoha_qdma_init_qos()
1134 airoha_qdma_clear(qdma, REG_PSE_BUF_USAGE_CFG, in airoha_qdma_init_qos()
1137 airoha_qdma_set(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
1141 airoha_qdma_rmw(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
1144 airoha_qdma_rmw(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
1149 airoha_qdma_set(qdma, REG_GLB_TRTCM_CFG, GLB_TRTCM_EN_MASK); in airoha_qdma_init_qos()
1151 airoha_qdma_rmw(qdma, REG_GLB_TRTCM_CFG, GLB_FAST_TICK_MASK, in airoha_qdma_init_qos()
1153 airoha_qdma_rmw(qdma, REG_GLB_TRTCM_CFG, GLB_SLOW_TICK_RATIO_MASK, in airoha_qdma_init_qos()
1156 airoha_qdma_set(qdma, REG_EGRESS_TRTCM_CFG, EGRESS_TRTCM_EN_MASK); in airoha_qdma_init_qos()
1157 airoha_qdma_rmw(qdma, REG_EGRESS_TRTCM_CFG, EGRESS_FAST_TICK_MASK, in airoha_qdma_init_qos()
1159 airoha_qdma_rmw(qdma, REG_EGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
1163 airoha_qdma_set(qdma, REG_INGRESS_TRTCM_CFG, INGRESS_TRTCM_EN_MASK); in airoha_qdma_init_qos()
1164 airoha_qdma_clear(qdma, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
1166 airoha_qdma_rmw(qdma, REG_INGRESS_TRTCM_CFG, INGRESS_FAST_TICK_MASK, in airoha_qdma_init_qos()
1168 airoha_qdma_rmw(qdma, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
1172 airoha_qdma_set(qdma, REG_SLA_TRTCM_CFG, SLA_TRTCM_EN_MASK); in airoha_qdma_init_qos()
1173 airoha_qdma_rmw(qdma, REG_SLA_TRTCM_CFG, SLA_FAST_TICK_MASK, in airoha_qdma_init_qos()
1175 airoha_qdma_rmw(qdma, REG_SLA_TRTCM_CFG, SLA_SLOW_TICK_RATIO_MASK, in airoha_qdma_init_qos()
1179 static void airoha_qdma_init_qos_stats(struct airoha_qdma *qdma) in airoha_qdma_init_qos_stats() argument
1185 airoha_qdma_wr(qdma, REG_CNTR_VAL(i << 1), 0); in airoha_qdma_init_qos_stats()
1186 airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1), in airoha_qdma_init_qos_stats()
1191 airoha_qdma_wr(qdma, REG_CNTR_VAL((i << 1) + 1), 0); in airoha_qdma_init_qos_stats()
1192 airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1), in airoha_qdma_init_qos_stats()
1200 static int airoha_qdma_hw_init(struct airoha_qdma *qdma) in airoha_qdma_hw_init() argument
1204 for (i = 0; i < ARRAY_SIZE(qdma->irq_banks); i++) { in airoha_qdma_hw_init()
1206 airoha_qdma_wr(qdma, REG_INT_STATUS(i), 0xffffffff); in airoha_qdma_hw_init()
1208 airoha_qdma_irq_enable(&qdma->irq_banks[i], QDMA_INT_REG_IDX0, in airoha_qdma_hw_init()
1210 airoha_qdma_irq_enable(&qdma->irq_banks[i], QDMA_INT_REG_IDX1, in airoha_qdma_hw_init()
1212 airoha_qdma_irq_enable(&qdma->irq_banks[i], QDMA_INT_REG_IDX2, in airoha_qdma_hw_init()
1214 airoha_qdma_irq_enable(&qdma->irq_banks[i], QDMA_INT_REG_IDX3, in airoha_qdma_hw_init()
1218 airoha_qdma_irq_enable(&qdma->irq_banks[0], QDMA_INT_REG_IDX0, in airoha_qdma_hw_init()
1220 airoha_qdma_irq_enable(&qdma->irq_banks[0], QDMA_INT_REG_IDX4, in airoha_qdma_hw_init()
1224 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_qdma_hw_init()
1225 if (!qdma->q_tx[i].ndesc) in airoha_qdma_hw_init()
1229 airoha_qdma_set(qdma, REG_TX_RING_BLOCKING(i), in airoha_qdma_hw_init()
1232 airoha_qdma_clear(qdma, REG_TX_RING_BLOCKING(i), in airoha_qdma_hw_init()
1236 airoha_qdma_wr(qdma, REG_QDMA_GLOBAL_CFG, in airoha_qdma_hw_init()
1246 airoha_qdma_init_qos(qdma); in airoha_qdma_hw_init()
1248 /* disable qdma rx delay interrupt */ in airoha_qdma_hw_init()
1249 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_hw_init()
1250 if (!qdma->q_rx[i].ndesc) in airoha_qdma_hw_init()
1253 airoha_qdma_clear(qdma, REG_RX_DELAY_INT_IDX(i), in airoha_qdma_hw_init()
1257 airoha_qdma_set(qdma, REG_TXQ_CNGST_CFG, in airoha_qdma_hw_init()
1259 airoha_qdma_init_qos_stats(qdma); in airoha_qdma_hw_init()
1267 struct airoha_qdma *qdma = irq_bank->qdma; in airoha_irq_handler() local
1273 intr[i] = airoha_qdma_rr(qdma, REG_INT_STATUS(i)); in airoha_irq_handler()
1275 airoha_qdma_wr(qdma, REG_INT_STATUS(i), intr[i]); in airoha_irq_handler()
1278 if (!test_bit(DEV_STATE_INITIALIZED, &qdma->eth->state)) in airoha_irq_handler()
1293 for (i = 0; rx_intr_mask && i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_irq_handler()
1294 if (!qdma->q_rx[i].ndesc) in airoha_irq_handler()
1298 napi_schedule(&qdma->q_rx[i].napi); in airoha_irq_handler()
1302 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) { in airoha_irq_handler()
1308 napi_schedule(&qdma->q_tx_irq[i].napi); in airoha_irq_handler()
1316 struct airoha_qdma *qdma) in airoha_qdma_init_irq_banks() argument
1318 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_irq_banks()
1319 int i, id = qdma - &eth->qdma[0]; in airoha_qdma_init_irq_banks()
1321 for (i = 0; i < ARRAY_SIZE(qdma->irq_banks); i++) { in airoha_qdma_init_irq_banks()
1322 struct airoha_irq_bank *irq_bank = &qdma->irq_banks[i]; in airoha_qdma_init_irq_banks()
1327 irq_bank->qdma = qdma; in airoha_qdma_init_irq_banks()
1350 struct airoha_qdma *qdma) in airoha_qdma_init() argument
1352 int err, id = qdma - &eth->qdma[0]; in airoha_qdma_init()
1355 qdma->eth = eth; in airoha_qdma_init()
1356 res = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d", id); in airoha_qdma_init()
1360 qdma->regs = devm_platform_ioremap_resource_byname(pdev, res); in airoha_qdma_init()
1361 if (IS_ERR(qdma->regs)) in airoha_qdma_init()
1362 return dev_err_probe(eth->dev, PTR_ERR(qdma->regs), in airoha_qdma_init()
1363 "failed to iomap qdma%d regs\n", id); in airoha_qdma_init()
1365 err = airoha_qdma_init_irq_banks(pdev, qdma); in airoha_qdma_init()
1369 err = airoha_qdma_init_rx(qdma); in airoha_qdma_init()
1373 err = airoha_qdma_init_tx(qdma); in airoha_qdma_init()
1377 err = airoha_qdma_init_hfwd_queues(qdma); in airoha_qdma_init()
1381 return airoha_qdma_hw_init(qdma); in airoha_qdma_init()
1409 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) { in airoha_hw_init()
1410 err = airoha_qdma_init(pdev, eth, &eth->qdma[i]); in airoha_hw_init()
1424 static void airoha_hw_cleanup(struct airoha_qdma *qdma) in airoha_hw_cleanup() argument
1428 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_hw_cleanup()
1429 if (!qdma->q_rx[i].ndesc) in airoha_hw_cleanup()
1432 netif_napi_del(&qdma->q_rx[i].napi); in airoha_hw_cleanup()
1433 airoha_qdma_cleanup_rx_queue(&qdma->q_rx[i]); in airoha_hw_cleanup()
1434 if (qdma->q_rx[i].page_pool) in airoha_hw_cleanup()
1435 page_pool_destroy(qdma->q_rx[i].page_pool); in airoha_hw_cleanup()
1438 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_hw_cleanup()
1439 netif_napi_del(&qdma->q_tx_irq[i].napi); in airoha_hw_cleanup()
1441 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_hw_cleanup()
1442 if (!qdma->q_tx[i].ndesc) in airoha_hw_cleanup()
1445 airoha_qdma_cleanup_tx_queue(&qdma->q_tx[i]); in airoha_hw_cleanup()
1449 static void airoha_qdma_start_napi(struct airoha_qdma *qdma) in airoha_qdma_start_napi() argument
1453 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_qdma_start_napi()
1454 napi_enable(&qdma->q_tx_irq[i].napi); in airoha_qdma_start_napi()
1456 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_start_napi()
1457 if (!qdma->q_rx[i].ndesc) in airoha_qdma_start_napi()
1460 napi_enable(&qdma->q_rx[i].napi); in airoha_qdma_start_napi()
1464 static void airoha_qdma_stop_napi(struct airoha_qdma *qdma) in airoha_qdma_stop_napi() argument
1468 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_qdma_stop_napi()
1469 napi_disable(&qdma->q_tx_irq[i].napi); in airoha_qdma_stop_napi()
1471 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_stop_napi()
1472 if (!qdma->q_rx[i].ndesc) in airoha_qdma_stop_napi()
1475 napi_disable(&qdma->q_rx[i].napi); in airoha_qdma_stop_napi()
1481 struct airoha_eth *eth = port->qdma->eth; in airoha_update_hw_stats()
1627 struct airoha_qdma *qdma = port->qdma; in airoha_dev_open() local
1635 airoha_fe_set(qdma->eth, REG_GDM_INGRESS_CFG(port->id), in airoha_dev_open()
1638 airoha_fe_clear(qdma->eth, REG_GDM_INGRESS_CFG(port->id), in airoha_dev_open()
1641 airoha_fe_rmw(qdma->eth, REG_GDM_LEN_CFG(port->id), in airoha_dev_open()
1646 airoha_qdma_set(qdma, REG_QDMA_GLOBAL_CFG, in airoha_dev_open()
1649 atomic_inc(&qdma->users); in airoha_dev_open()
1657 struct airoha_qdma *qdma = port->qdma; in airoha_dev_stop() local
1665 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) in airoha_dev_stop()
1668 if (atomic_dec_and_test(&qdma->users)) { in airoha_dev_stop()
1669 airoha_qdma_clear(qdma, REG_QDMA_GLOBAL_CFG, in airoha_dev_stop()
1673 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_dev_stop()
1674 if (!qdma->q_tx[i].ndesc) in airoha_dev_stop()
1677 airoha_qdma_cleanup_tx_queue(&qdma->q_tx[i]); in airoha_dev_stop()
1701 struct airoha_eth *eth = port->qdma->eth; in airhoha_set_gdm2_loopback()
1753 struct airoha_eth *eth = port->qdma->eth; in airoha_dev_init()
1803 struct airoha_eth *eth = port->qdma->eth; in airoha_dev_change_mtu()
1894 struct airoha_qdma *qdma = port->qdma; in airoha_dev_xmit() local
1903 qid = skb_get_queue_mapping(skb) % ARRAY_SIZE(qdma->q_tx); in airoha_dev_xmit()
1934 q = &qdma->q_tx[qid]; in airoha_dev_xmit()
1994 airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), in airoha_dev_xmit()
2024 struct airoha_eth *eth = port->qdma->eth; in airoha_ethtool_get_drvinfo()
2093 airoha_qdma_clear(port->qdma, REG_QUEUE_CLOSE_CFG(channel), in airoha_qdma_set_chan_tx_sched()
2100 airoha_qdma_wr(port->qdma, REG_TXWRR_WEIGHT_CFG, in airoha_qdma_set_chan_tx_sched()
2108 true, port->qdma, in airoha_qdma_set_chan_tx_sched()
2114 airoha_qdma_rmw(port->qdma, REG_CHAN_QOS_MODE(channel >> 3), in airoha_qdma_set_chan_tx_sched()
2180 u64 cpu_tx_packets = airoha_qdma_rr(port->qdma, in airoha_qdma_get_tx_ets_stats()
2182 u64 fwd_tx_packets = airoha_qdma_rr(port->qdma, in airoha_qdma_get_tx_ets_stats()
2218 static int airoha_qdma_get_rl_param(struct airoha_qdma *qdma, int queue_id, in airoha_qdma_get_rl_param() argument
2227 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_get_rl_param()
2230 USEC_PER_MSEC, 10 * USEC_PER_MSEC, true, qdma, in airoha_qdma_get_rl_param()
2234 *val_low = airoha_qdma_rr(qdma, REG_TRTCM_DATA_LOW(addr)); in airoha_qdma_get_rl_param()
2236 *val_high = airoha_qdma_rr(qdma, REG_TRTCM_DATA_HIGH(addr)); in airoha_qdma_get_rl_param()
2241 static int airoha_qdma_set_rl_param(struct airoha_qdma *qdma, int queue_id, in airoha_qdma_set_rl_param() argument
2251 airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val); in airoha_qdma_set_rl_param()
2252 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_set_rl_param()
2257 qdma, REG_TRTCM_CFG_PARAM(addr)); in airoha_qdma_set_rl_param()
2260 static int airoha_qdma_set_rl_config(struct airoha_qdma *qdma, int queue_id, in airoha_qdma_set_rl_config() argument
2266 err = airoha_qdma_get_rl_param(qdma, queue_id, addr, TRTCM_MISC_MODE, in airoha_qdma_set_rl_config()
2273 return airoha_qdma_set_rl_param(qdma, queue_id, addr, TRTCM_MISC_MODE, in airoha_qdma_set_rl_config()
2277 static int airoha_qdma_set_rl_token_bucket(struct airoha_qdma *qdma, in airoha_qdma_set_rl_token_bucket() argument
2284 err = airoha_qdma_get_rl_param(qdma, queue_id, REG_INGRESS_TRTCM_CFG, in airoha_qdma_set_rl_token_bucket()
2289 val = airoha_qdma_rr(qdma, REG_INGRESS_TRTCM_CFG); in airoha_qdma_set_rl_token_bucket()
2306 err = airoha_qdma_set_rl_param(qdma, queue_id, REG_INGRESS_TRTCM_CFG, in airoha_qdma_set_rl_token_bucket()
2316 return airoha_qdma_set_rl_param(qdma, queue_id, REG_INGRESS_TRTCM_CFG, in airoha_qdma_set_rl_token_bucket()
2320 static int airoha_qdma_init_rl_config(struct airoha_qdma *qdma, int queue_id, in airoha_qdma_init_rl_config() argument
2328 err = airoha_qdma_set_rl_config(qdma, queue_id, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_rl_config()
2333 return airoha_qdma_set_rl_config(qdma, queue_id, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_rl_config()
2337 static int airoha_qdma_get_trtcm_param(struct airoha_qdma *qdma, int channel, in airoha_qdma_get_trtcm_param() argument
2348 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_get_trtcm_param()
2352 qdma, REG_TRTCM_CFG_PARAM(addr))) in airoha_qdma_get_trtcm_param()
2355 *val_low = airoha_qdma_rr(qdma, REG_TRTCM_DATA_LOW(addr)); in airoha_qdma_get_trtcm_param()
2357 *val_high = airoha_qdma_rr(qdma, REG_TRTCM_DATA_HIGH(addr)); in airoha_qdma_get_trtcm_param()
2362 static int airoha_qdma_set_trtcm_param(struct airoha_qdma *qdma, int channel, in airoha_qdma_set_trtcm_param() argument
2373 airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val); in airoha_qdma_set_trtcm_param()
2374 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_set_trtcm_param()
2379 qdma, REG_TRTCM_CFG_PARAM(addr)); in airoha_qdma_set_trtcm_param()
2382 static int airoha_qdma_set_trtcm_config(struct airoha_qdma *qdma, int channel, in airoha_qdma_set_trtcm_config() argument
2388 if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_config()
2394 return airoha_qdma_set_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_config()
2398 static int airoha_qdma_set_trtcm_token_bucket(struct airoha_qdma *qdma, in airoha_qdma_set_trtcm_token_bucket() argument
2406 if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_token_bucket()
2410 val = airoha_qdma_rr(qdma, addr); in airoha_qdma_set_trtcm_token_bucket()
2427 err = airoha_qdma_set_trtcm_param(qdma, channel, addr, in airoha_qdma_set_trtcm_token_bucket()
2435 return airoha_qdma_set_trtcm_param(qdma, channel, addr, in airoha_qdma_set_trtcm_token_bucket()
2447 err = airoha_qdma_set_trtcm_config(port->qdma, channel, in airoha_qdma_set_tx_rate_limit()
2453 err = airoha_qdma_set_trtcm_token_bucket(port->qdma, channel, in airoha_qdma_set_tx_rate_limit()
2505 struct airoha_qdma *qdma = port->qdma; in airoha_qdma_set_rx_meter() local
2508 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_set_rx_meter()
2511 if (!qdma->q_rx[i].ndesc) in airoha_qdma_set_rx_meter()
2514 err = airoha_qdma_init_rl_config(qdma, i, !!rate, unit_type); in airoha_qdma_set_rx_meter()
2518 err = airoha_qdma_set_rl_token_bucket(qdma, i, rate, in airoha_qdma_set_rx_meter()
2620 struct airoha_eth *eth = port->qdma->eth; in airoha_dev_setup_tc_block_cb()
2834 struct airoha_qdma *qdma; in airoha_alloc_gdm_port() local
2865 qdma = &eth->qdma[index % AIROHA_MAX_NUM_QDMA]; in airoha_alloc_gdm_port()
2877 dev->irq = qdma->irq_banks[0].irq; in airoha_alloc_gdm_port()
2898 port->qdma = qdma; in airoha_alloc_gdm_port()
2943 eth->rsts[2].id = "qdma"; in airoha_probe()
2978 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
2979 airoha_qdma_start_napi(&eth->qdma[i]); in airoha_probe()
2999 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
3000 airoha_qdma_stop_napi(&eth->qdma[i]); in airoha_probe()
3003 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
3004 airoha_hw_cleanup(&eth->qdma[i]); in airoha_probe()
3025 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) { in airoha_remove()
3026 airoha_qdma_stop_napi(&eth->qdma[i]); in airoha_remove()
3027 airoha_hw_cleanup(&eth->qdma[i]); in airoha_remove()