]> git.baikalelectronics.ru Git - uboot.git/commitdiff
net: dwc_eth_qos: Allow platform to override tx/rx_fifo_sz
authorSumit Garg <sumit.garg@linaro.org>
Wed, 1 Feb 2023 13:58:54 +0000 (19:28 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 10 Feb 2023 17:50:00 +0000 (12:50 -0500)
The GMAC controller on QCS404 SoC (support added by upcoming patch) fails
to work with maximum tx/rx_fifo_sz supported by the hardware (16K). So
allow platforms to override FIFO size using corresponding DT node
properties.

Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
drivers/net/dwc_eth_qos.c
drivers/net/dwc_eth_qos.h

index 753a912607e483780d586c2453313d2011f42b17..65b8556be2837ff61a7f63ae50e6819786194c88 100644 (file)
@@ -852,12 +852,19 @@ static int eqos_start(struct udevice *dev)
        rx_fifo_sz = (val >> EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_SHIFT) &
                EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_MASK;
 
-       /*
-        * r/tx_fifo_sz is encoded as log2(n / 128). Undo that by shifting.
-        * r/tqs is encoded as (n / 256) - 1.
-        */
-       tqs = (128 << tx_fifo_sz) / 256 - 1;
-       rqs = (128 << rx_fifo_sz) / 256 - 1;
+       /* r/tx_fifo_sz is encoded as log2(n / 128). Undo that by shifting */
+       tx_fifo_sz = 128 << tx_fifo_sz;
+       rx_fifo_sz = 128 << rx_fifo_sz;
+
+       /* Allow platform to override TX/RX fifo size */
+       if (eqos->tx_fifo_sz)
+               tx_fifo_sz = eqos->tx_fifo_sz;
+       if (eqos->rx_fifo_sz)
+               rx_fifo_sz = eqos->rx_fifo_sz;
+
+       /* r/tqs is encoded as (n / 256) - 1 */
+       tqs = tx_fifo_sz / 256 - 1;
+       rqs = rx_fifo_sz / 256 - 1;
 
        clrsetbits_le32(&eqos->mtl_regs->txq0_operation_mode,
                        EQOS_MTL_TXQ0_OPERATION_MODE_TQS_MASK <<
index 8fccd6f0572958a7c24779251659c16b81f0c354..466a792de7a483c8818598ee8fc2adfd00f68e5d 100644 (file)
@@ -276,6 +276,7 @@ struct eqos_priv {
        bool started;
        bool reg_access_ok;
        bool clk_ck_enabled;
+       unsigned int tx_fifo_sz, rx_fifo_sz;
 };
 
 void eqos_inval_desc_generic(void *desc);