Lines Matching full:qdma
298 /* QDMA */
811 struct airoha_qdma *qdma; member
830 struct airoha_qdma *qdma; member
878 /* descriptor and packet buffers for qdma hw forward */
886 struct airoha_qdma *qdma; member
910 struct airoha_qdma qdma[AIROHA_MAX_NUM_QDMA]; member
943 #define airoha_qdma_rr(qdma, offset) \ argument
944 airoha_rr((qdma)->regs, (offset))
945 #define airoha_qdma_wr(qdma, offset, val) \ argument
946 airoha_wr((qdma)->regs, (offset), (val))
947 #define airoha_qdma_rmw(qdma, offset, mask, val) \ argument
948 airoha_rmw((qdma)->regs, (offset), (mask), (val))
949 #define airoha_qdma_set(qdma, offset, val) \ argument
950 airoha_rmw((qdma)->regs, (offset), 0, (val))
951 #define airoha_qdma_clear(qdma, offset, val) \ argument
952 airoha_rmw((qdma)->regs, (offset), (val), 0)
954 static void airoha_qdma_set_irqmask(struct airoha_qdma *qdma, int index, in airoha_qdma_set_irqmask() argument
959 if (WARN_ON_ONCE(index >= ARRAY_SIZE(qdma->irqmask))) in airoha_qdma_set_irqmask()
962 spin_lock_irqsave(&qdma->irq_lock, flags); in airoha_qdma_set_irqmask()
964 qdma->irqmask[index] &= ~clear; in airoha_qdma_set_irqmask()
965 qdma->irqmask[index] |= set; in airoha_qdma_set_irqmask()
966 airoha_qdma_wr(qdma, REG_INT_ENABLE(index), qdma->irqmask[index]); in airoha_qdma_set_irqmask()
970 airoha_qdma_rr(qdma, REG_INT_ENABLE(index)); in airoha_qdma_set_irqmask()
972 spin_unlock_irqrestore(&qdma->irq_lock, flags); in airoha_qdma_set_irqmask()
975 static void airoha_qdma_irq_enable(struct airoha_qdma *qdma, int index, in airoha_qdma_irq_enable() argument
978 airoha_qdma_set_irqmask(qdma, index, 0, mask); in airoha_qdma_irq_enable()
981 static void airoha_qdma_irq_disable(struct airoha_qdma *qdma, int index, in airoha_qdma_irq_disable() argument
984 airoha_qdma_set_irqmask(qdma, index, mask, 0); in airoha_qdma_irq_disable()
998 struct airoha_eth *eth = port->qdma->eth; in airoha_set_macaddr()
1465 /* QDMA LAN, RX Ring-22 */ in airoha_fe_init()
1497 struct airoha_qdma *qdma = q->qdma; in airoha_qdma_fill_rx_queue() local
1498 struct airoha_eth *eth = qdma->eth; in airoha_qdma_fill_rx_queue()
1499 int qid = q - &qdma->q_rx[0]; in airoha_qdma_fill_rx_queue()
1535 airoha_qdma_rmw(qdma, REG_RX_CPU_IDX(qid), in airoha_qdma_fill_rx_queue()
1566 struct airoha_qdma *qdma = q->qdma; in airoha_qdma_rx_process() local
1567 struct airoha_eth *eth = qdma->eth; in airoha_qdma_rx_process()
1568 int qid = q - &qdma->q_rx[0]; in airoha_qdma_rx_process()
1638 airoha_qdma_irq_enable(q->qdma, QDMA_INT_REG_IDX1, in airoha_qdma_rx_napi_poll()
1645 struct airoha_qdma *qdma, int ndesc) in airoha_qdma_init_rx_queue() argument
1654 .dev = qdma->eth->dev, in airoha_qdma_init_rx_queue()
1657 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_rx_queue()
1658 int qid = q - &qdma->q_rx[0], thr; in airoha_qdma_init_rx_queue()
1663 q->qdma = qdma; in airoha_qdma_init_rx_queue()
1685 airoha_qdma_wr(qdma, REG_RX_RING_BASE(qid), dma_addr); in airoha_qdma_init_rx_queue()
1686 airoha_qdma_rmw(qdma, REG_RX_RING_SIZE(qid), in airoha_qdma_init_rx_queue()
1691 airoha_qdma_rmw(qdma, REG_RX_RING_SIZE(qid), RX_RING_THR_MASK, in airoha_qdma_init_rx_queue()
1693 airoha_qdma_rmw(qdma, REG_RX_DMA_IDX(qid), RX_RING_DMA_IDX_MASK, in airoha_qdma_init_rx_queue()
1703 struct airoha_eth *eth = q->qdma->eth; in airoha_qdma_cleanup_rx_queue()
1717 static int airoha_qdma_init_rx(struct airoha_qdma *qdma) in airoha_qdma_init_rx() argument
1721 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_init_rx()
1729 err = airoha_qdma_init_rx_queue(&qdma->q_rx[i], qdma, in airoha_qdma_init_rx()
1742 struct airoha_qdma *qdma; in airoha_qdma_tx_napi_poll() local
1747 qdma = irq_q->qdma; in airoha_qdma_tx_napi_poll()
1748 id = irq_q - &qdma->q_tx_irq[0]; in airoha_qdma_tx_napi_poll()
1749 eth = qdma->eth; in airoha_qdma_tx_napi_poll()
1751 status = airoha_qdma_rr(qdma, REG_IRQ_STATUS(id)); in airoha_qdma_tx_napi_poll()
1773 if (qid >= ARRAY_SIZE(qdma->q_tx)) in airoha_qdma_tx_napi_poll()
1776 q = &qdma->q_tx[qid]; in airoha_qdma_tx_napi_poll()
1834 airoha_qdma_rmw(qdma, REG_IRQ_CLEAR_LEN(id), in airoha_qdma_tx_napi_poll()
1836 airoha_qdma_rmw(qdma, REG_IRQ_CLEAR_LEN(id), in airoha_qdma_tx_napi_poll()
1841 airoha_qdma_irq_enable(qdma, QDMA_INT_REG_IDX0, in airoha_qdma_tx_napi_poll()
1848 struct airoha_qdma *qdma, int size) in airoha_qdma_init_tx_queue() argument
1850 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_tx_queue()
1851 int i, qid = q - &qdma->q_tx[0]; in airoha_qdma_init_tx_queue()
1856 q->qdma = qdma; in airoha_qdma_init_tx_queue()
1877 airoha_qdma_set(qdma, REG_TX_RING_BLOCKING(qid), in airoha_qdma_init_tx_queue()
1880 airoha_qdma_wr(qdma, REG_TX_RING_BASE(qid), dma_addr); in airoha_qdma_init_tx_queue()
1881 airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), TX_RING_CPU_IDX_MASK, in airoha_qdma_init_tx_queue()
1883 airoha_qdma_rmw(qdma, REG_TX_DMA_IDX(qid), TX_RING_DMA_IDX_MASK, in airoha_qdma_init_tx_queue()
1890 struct airoha_qdma *qdma, int size) in airoha_qdma_tx_irq_init() argument
1892 int id = irq_q - &qdma->q_tx_irq[0]; in airoha_qdma_tx_irq_init()
1893 struct airoha_eth *eth = qdma->eth; in airoha_qdma_tx_irq_init()
1905 irq_q->qdma = qdma; in airoha_qdma_tx_irq_init()
1907 airoha_qdma_wr(qdma, REG_TX_IRQ_BASE(id), dma_addr); in airoha_qdma_tx_irq_init()
1908 airoha_qdma_rmw(qdma, REG_TX_IRQ_CFG(id), TX_IRQ_DEPTH_MASK, in airoha_qdma_tx_irq_init()
1910 airoha_qdma_rmw(qdma, REG_TX_IRQ_CFG(id), TX_IRQ_THR_MASK, in airoha_qdma_tx_irq_init()
1916 static int airoha_qdma_init_tx(struct airoha_qdma *qdma) in airoha_qdma_init_tx() argument
1920 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) { in airoha_qdma_init_tx()
1921 err = airoha_qdma_tx_irq_init(&qdma->q_tx_irq[i], qdma, in airoha_qdma_init_tx()
1927 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_qdma_init_tx()
1928 err = airoha_qdma_init_tx_queue(&qdma->q_tx[i], qdma, in airoha_qdma_init_tx()
1939 struct airoha_eth *eth = q->qdma->eth; in airoha_qdma_cleanup_tx_queue()
1956 static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma) in airoha_qdma_init_hfwd_queues() argument
1958 struct airoha_eth *eth = qdma->eth; in airoha_qdma_init_hfwd_queues()
1964 qdma->hfwd.desc = dmam_alloc_coherent(eth->dev, size, &dma_addr, in airoha_qdma_init_hfwd_queues()
1966 if (!qdma->hfwd.desc) in airoha_qdma_init_hfwd_queues()
1969 airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr); in airoha_qdma_init_hfwd_queues()
1972 qdma->hfwd.q = dmam_alloc_coherent(eth->dev, size, &dma_addr, in airoha_qdma_init_hfwd_queues()
1974 if (!qdma->hfwd.q) in airoha_qdma_init_hfwd_queues()
1977 airoha_qdma_wr(qdma, REG_FWD_BUF_BASE, dma_addr); in airoha_qdma_init_hfwd_queues()
1979 airoha_qdma_rmw(qdma, REG_HW_FWD_DSCP_CFG, in airoha_qdma_init_hfwd_queues()
1982 airoha_qdma_rmw(qdma, REG_FWD_DSCP_LOW_THR, FWD_DSCP_LOW_THR_MASK, in airoha_qdma_init_hfwd_queues()
1984 airoha_qdma_rmw(qdma, REG_LMGR_INIT_CFG, in airoha_qdma_init_hfwd_queues()
1992 30 * USEC_PER_MSEC, true, qdma, in airoha_qdma_init_hfwd_queues()
1996 static void airoha_qdma_init_qos(struct airoha_qdma *qdma) in airoha_qdma_init_qos() argument
1998 airoha_qdma_clear(qdma, REG_TXWRR_MODE_CFG, TWRR_WEIGHT_SCALE_MASK); in airoha_qdma_init_qos()
1999 airoha_qdma_set(qdma, REG_TXWRR_MODE_CFG, TWRR_WEIGHT_BASE_MASK); in airoha_qdma_init_qos()
2001 airoha_qdma_clear(qdma, REG_PSE_BUF_USAGE_CFG, in airoha_qdma_init_qos()
2004 airoha_qdma_set(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
2008 airoha_qdma_rmw(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
2011 airoha_qdma_rmw(qdma, REG_EGRESS_RATE_METER_CFG, in airoha_qdma_init_qos()
2016 airoha_qdma_set(qdma, REG_GLB_TRTCM_CFG, GLB_TRTCM_EN_MASK); in airoha_qdma_init_qos()
2018 airoha_qdma_rmw(qdma, REG_GLB_TRTCM_CFG, GLB_FAST_TICK_MASK, in airoha_qdma_init_qos()
2020 airoha_qdma_rmw(qdma, REG_GLB_TRTCM_CFG, GLB_SLOW_TICK_RATIO_MASK, in airoha_qdma_init_qos()
2023 airoha_qdma_set(qdma, REG_EGRESS_TRTCM_CFG, EGRESS_TRTCM_EN_MASK); in airoha_qdma_init_qos()
2024 airoha_qdma_rmw(qdma, REG_EGRESS_TRTCM_CFG, EGRESS_FAST_TICK_MASK, in airoha_qdma_init_qos()
2026 airoha_qdma_rmw(qdma, REG_EGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
2030 airoha_qdma_set(qdma, REG_INGRESS_TRTCM_CFG, INGRESS_TRTCM_EN_MASK); in airoha_qdma_init_qos()
2031 airoha_qdma_clear(qdma, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
2033 airoha_qdma_rmw(qdma, REG_INGRESS_TRTCM_CFG, INGRESS_FAST_TICK_MASK, in airoha_qdma_init_qos()
2035 airoha_qdma_rmw(qdma, REG_INGRESS_TRTCM_CFG, in airoha_qdma_init_qos()
2039 airoha_qdma_set(qdma, REG_SLA_TRTCM_CFG, SLA_TRTCM_EN_MASK); in airoha_qdma_init_qos()
2040 airoha_qdma_rmw(qdma, REG_SLA_TRTCM_CFG, SLA_FAST_TICK_MASK, in airoha_qdma_init_qos()
2042 airoha_qdma_rmw(qdma, REG_SLA_TRTCM_CFG, SLA_SLOW_TICK_RATIO_MASK, in airoha_qdma_init_qos()
2046 static void airoha_qdma_init_qos_stats(struct airoha_qdma *qdma) in airoha_qdma_init_qos_stats() argument
2052 airoha_qdma_wr(qdma, REG_CNTR_VAL(i << 1), 0); in airoha_qdma_init_qos_stats()
2053 airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1), in airoha_qdma_init_qos_stats()
2058 airoha_qdma_wr(qdma, REG_CNTR_VAL((i << 1) + 1), 0); in airoha_qdma_init_qos_stats()
2059 airoha_qdma_wr(qdma, REG_CNTR_CFG(i << 1), in airoha_qdma_init_qos_stats()
2067 static int airoha_qdma_hw_init(struct airoha_qdma *qdma) in airoha_qdma_hw_init() argument
2072 for (i = 0; i < ARRAY_SIZE(qdma->irqmask); i++) in airoha_qdma_hw_init()
2073 airoha_qdma_wr(qdma, REG_INT_STATUS(i), 0xffffffff); in airoha_qdma_hw_init()
2076 airoha_qdma_irq_enable(qdma, QDMA_INT_REG_IDX0, INT_IDX0_MASK); in airoha_qdma_hw_init()
2077 airoha_qdma_irq_enable(qdma, QDMA_INT_REG_IDX1, INT_IDX1_MASK); in airoha_qdma_hw_init()
2078 airoha_qdma_irq_enable(qdma, QDMA_INT_REG_IDX4, INT_IDX4_MASK); in airoha_qdma_hw_init()
2081 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_qdma_hw_init()
2082 if (!qdma->q_tx[i].ndesc) in airoha_qdma_hw_init()
2086 airoha_qdma_set(qdma, REG_TX_RING_BLOCKING(i), in airoha_qdma_hw_init()
2089 airoha_qdma_clear(qdma, REG_TX_RING_BLOCKING(i), in airoha_qdma_hw_init()
2093 airoha_qdma_wr(qdma, REG_QDMA_GLOBAL_CFG, in airoha_qdma_hw_init()
2104 airoha_qdma_init_qos(qdma); in airoha_qdma_hw_init()
2106 /* disable qdma rx delay interrupt */ in airoha_qdma_hw_init()
2107 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_hw_init()
2108 if (!qdma->q_rx[i].ndesc) in airoha_qdma_hw_init()
2111 airoha_qdma_clear(qdma, REG_RX_DELAY_INT_IDX(i), in airoha_qdma_hw_init()
2115 airoha_qdma_set(qdma, REG_TXQ_CNGST_CFG, in airoha_qdma_hw_init()
2117 airoha_qdma_init_qos_stats(qdma); in airoha_qdma_hw_init()
2124 struct airoha_qdma *qdma = dev_instance; in airoha_irq_handler() local
2125 u32 intr[ARRAY_SIZE(qdma->irqmask)]; in airoha_irq_handler()
2128 for (i = 0; i < ARRAY_SIZE(qdma->irqmask); i++) { in airoha_irq_handler()
2129 intr[i] = airoha_qdma_rr(qdma, REG_INT_STATUS(i)); in airoha_irq_handler()
2130 intr[i] &= qdma->irqmask[i]; in airoha_irq_handler()
2131 airoha_qdma_wr(qdma, REG_INT_STATUS(i), intr[i]); in airoha_irq_handler()
2134 if (!test_bit(DEV_STATE_INITIALIZED, &qdma->eth->state)) in airoha_irq_handler()
2138 airoha_qdma_irq_disable(qdma, QDMA_INT_REG_IDX1, in airoha_irq_handler()
2141 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_irq_handler()
2142 if (!qdma->q_rx[i].ndesc) in airoha_irq_handler()
2146 napi_schedule(&qdma->q_rx[i].napi); in airoha_irq_handler()
2151 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) { in airoha_irq_handler()
2155 airoha_qdma_irq_disable(qdma, QDMA_INT_REG_IDX0, in airoha_irq_handler()
2157 napi_schedule(&qdma->q_tx_irq[i].napi); in airoha_irq_handler()
2166 struct airoha_qdma *qdma) in airoha_qdma_init() argument
2168 int err, id = qdma - ð->qdma[0]; in airoha_qdma_init()
2171 spin_lock_init(&qdma->irq_lock); in airoha_qdma_init()
2172 qdma->eth = eth; in airoha_qdma_init()
2174 res = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d", id); in airoha_qdma_init()
2178 qdma->regs = devm_platform_ioremap_resource_byname(pdev, res); in airoha_qdma_init()
2179 if (IS_ERR(qdma->regs)) in airoha_qdma_init()
2180 return dev_err_probe(eth->dev, PTR_ERR(qdma->regs), in airoha_qdma_init()
2181 "failed to iomap qdma%d regs\n", id); in airoha_qdma_init()
2183 qdma->irq = platform_get_irq(pdev, 4 * id); in airoha_qdma_init()
2184 if (qdma->irq < 0) in airoha_qdma_init()
2185 return qdma->irq; in airoha_qdma_init()
2187 err = devm_request_irq(eth->dev, qdma->irq, airoha_irq_handler, in airoha_qdma_init()
2188 IRQF_SHARED, KBUILD_MODNAME, qdma); in airoha_qdma_init()
2192 err = airoha_qdma_init_rx(qdma); in airoha_qdma_init()
2196 err = airoha_qdma_init_tx(qdma); in airoha_qdma_init()
2200 err = airoha_qdma_init_hfwd_queues(qdma); in airoha_qdma_init()
2204 return airoha_qdma_hw_init(qdma); in airoha_qdma_init()
2232 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) { in airoha_hw_init()
2233 err = airoha_qdma_init(pdev, eth, ð->qdma[i]); in airoha_hw_init()
2243 static void airoha_hw_cleanup(struct airoha_qdma *qdma) in airoha_hw_cleanup() argument
2247 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_hw_cleanup()
2248 if (!qdma->q_rx[i].ndesc) in airoha_hw_cleanup()
2251 netif_napi_del(&qdma->q_rx[i].napi); in airoha_hw_cleanup()
2252 airoha_qdma_cleanup_rx_queue(&qdma->q_rx[i]); in airoha_hw_cleanup()
2253 if (qdma->q_rx[i].page_pool) in airoha_hw_cleanup()
2254 page_pool_destroy(qdma->q_rx[i].page_pool); in airoha_hw_cleanup()
2257 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_hw_cleanup()
2258 netif_napi_del(&qdma->q_tx_irq[i].napi); in airoha_hw_cleanup()
2260 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_hw_cleanup()
2261 if (!qdma->q_tx[i].ndesc) in airoha_hw_cleanup()
2264 airoha_qdma_cleanup_tx_queue(&qdma->q_tx[i]); in airoha_hw_cleanup()
2268 static void airoha_qdma_start_napi(struct airoha_qdma *qdma) in airoha_qdma_start_napi() argument
2272 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_qdma_start_napi()
2273 napi_enable(&qdma->q_tx_irq[i].napi); in airoha_qdma_start_napi()
2275 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_start_napi()
2276 if (!qdma->q_rx[i].ndesc) in airoha_qdma_start_napi()
2279 napi_enable(&qdma->q_rx[i].napi); in airoha_qdma_start_napi()
2283 static void airoha_qdma_stop_napi(struct airoha_qdma *qdma) in airoha_qdma_stop_napi() argument
2287 for (i = 0; i < ARRAY_SIZE(qdma->q_tx_irq); i++) in airoha_qdma_stop_napi()
2288 napi_disable(&qdma->q_tx_irq[i].napi); in airoha_qdma_stop_napi()
2290 for (i = 0; i < ARRAY_SIZE(qdma->q_rx); i++) { in airoha_qdma_stop_napi()
2291 if (!qdma->q_rx[i].ndesc) in airoha_qdma_stop_napi()
2294 napi_disable(&qdma->q_rx[i].napi); in airoha_qdma_stop_napi()
2300 struct airoha_eth *eth = port->qdma->eth; in airoha_update_hw_stats()
2445 struct airoha_qdma *qdma = port->qdma; in airoha_dev_open() local
2449 err = airoha_set_gdm_ports(qdma->eth, true); in airoha_dev_open()
2454 airoha_fe_set(qdma->eth, REG_GDM_INGRESS_CFG(port->id), in airoha_dev_open()
2457 airoha_fe_clear(qdma->eth, REG_GDM_INGRESS_CFG(port->id), in airoha_dev_open()
2460 airoha_qdma_set(qdma, REG_QDMA_GLOBAL_CFG, in airoha_dev_open()
2470 struct airoha_qdma *qdma = port->qdma; in airoha_dev_stop() local
2474 err = airoha_set_gdm_ports(qdma->eth, false); in airoha_dev_stop()
2478 airoha_qdma_clear(qdma, REG_QDMA_GLOBAL_CFG, in airoha_dev_stop()
2482 for (i = 0; i < ARRAY_SIZE(qdma->q_tx); i++) { in airoha_dev_stop()
2483 if (!qdma->q_tx[i].ndesc) in airoha_dev_stop()
2486 airoha_qdma_cleanup_tx_queue(&qdma->q_tx[i]); in airoha_dev_stop()
2562 struct airoha_qdma *qdma = port->qdma; in airoha_dev_xmit() local
2571 qid = skb_get_queue_mapping(skb) % ARRAY_SIZE(qdma->q_tx); in airoha_dev_xmit()
2598 q = &qdma->q_tx[qid]; in airoha_dev_xmit()
2653 airoha_qdma_rmw(qdma, REG_TX_CPU_IDX(qid), in airoha_dev_xmit()
2683 struct airoha_eth *eth = port->qdma->eth; in airoha_ethtool_get_drvinfo()
2752 airoha_qdma_clear(port->qdma, REG_QUEUE_CLOSE_CFG(channel), in airoha_qdma_set_chan_tx_sched()
2759 airoha_qdma_wr(port->qdma, REG_TXWRR_WEIGHT_CFG, in airoha_qdma_set_chan_tx_sched()
2767 true, port->qdma, in airoha_qdma_set_chan_tx_sched()
2773 airoha_qdma_rmw(port->qdma, REG_CHAN_QOS_MODE(channel >> 3), in airoha_qdma_set_chan_tx_sched()
2839 u64 cpu_tx_packets = airoha_qdma_rr(port->qdma, in airoha_qdma_get_tx_ets_stats()
2841 u64 fwd_tx_packets = airoha_qdma_rr(port->qdma, in airoha_qdma_get_tx_ets_stats()
2877 static int airoha_qdma_get_trtcm_param(struct airoha_qdma *qdma, int channel, in airoha_qdma_get_trtcm_param() argument
2888 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_get_trtcm_param()
2892 qdma, REG_TRTCM_CFG_PARAM(addr))) in airoha_qdma_get_trtcm_param()
2895 *val_low = airoha_qdma_rr(qdma, REG_TRTCM_DATA_LOW(addr)); in airoha_qdma_get_trtcm_param()
2897 *val_high = airoha_qdma_rr(qdma, REG_TRTCM_DATA_HIGH(addr)); in airoha_qdma_get_trtcm_param()
2902 static int airoha_qdma_set_trtcm_param(struct airoha_qdma *qdma, int channel, in airoha_qdma_set_trtcm_param() argument
2913 airoha_qdma_wr(qdma, REG_TRTCM_DATA_LOW(addr), val); in airoha_qdma_set_trtcm_param()
2914 airoha_qdma_wr(qdma, REG_TRTCM_CFG_PARAM(addr), config); in airoha_qdma_set_trtcm_param()
2919 qdma, REG_TRTCM_CFG_PARAM(addr)); in airoha_qdma_set_trtcm_param()
2922 static int airoha_qdma_set_trtcm_config(struct airoha_qdma *qdma, int channel, in airoha_qdma_set_trtcm_config() argument
2928 if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_config()
2934 return airoha_qdma_set_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_config()
2938 static int airoha_qdma_set_trtcm_token_bucket(struct airoha_qdma *qdma, in airoha_qdma_set_trtcm_token_bucket() argument
2946 if (airoha_qdma_get_trtcm_param(qdma, channel, addr, TRTCM_MISC_MODE, in airoha_qdma_set_trtcm_token_bucket()
2950 val = airoha_qdma_rr(qdma, addr); in airoha_qdma_set_trtcm_token_bucket()
2967 err = airoha_qdma_set_trtcm_param(qdma, channel, addr, in airoha_qdma_set_trtcm_token_bucket()
2975 return airoha_qdma_set_trtcm_param(qdma, channel, addr, in airoha_qdma_set_trtcm_token_bucket()
2987 err = airoha_qdma_set_trtcm_config(port->qdma, channel, in airoha_qdma_set_tx_rate_limit()
2993 err = airoha_qdma_set_trtcm_token_bucket(port->qdma, channel, in airoha_qdma_set_tx_rate_limit()
3150 struct airoha_qdma *qdma; in airoha_alloc_gdm_port() local
3181 qdma = ð->qdma[index % AIROHA_MAX_NUM_QDMA]; in airoha_alloc_gdm_port()
3192 dev->irq = qdma->irq; in airoha_alloc_gdm_port()
3213 port->qdma = qdma; in airoha_alloc_gdm_port()
3246 eth->rsts[2].id = "qdma"; in airoha_probe()
3281 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
3282 airoha_qdma_start_napi(ð->qdma[i]); in airoha_probe()
3301 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
3302 airoha_qdma_stop_napi(ð->qdma[i]); in airoha_probe()
3304 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) in airoha_probe()
3305 airoha_hw_cleanup(ð->qdma[i]); in airoha_probe()
3324 for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) { in airoha_remove()
3325 airoha_qdma_stop_napi(ð->qdma[i]); in airoha_remove()
3326 airoha_hw_cleanup(ð->qdma[i]); in airoha_remove()