u32 chan = 0;
        u8 qmode = 0;
 
-       if (rxfifosz == 0)
-               rxfifosz = priv->dma_cap.rx_fifo_size;
-       if (txfifosz == 0)
-               txfifosz = priv->dma_cap.tx_fifo_size;
-
        /* Split up the shared Tx/Rx FIFO memory on DW QoS Eth and DW XGMAC */
        if (priv->plat->has_gmac4 || priv->plat->has_xgmac) {
                rxfifosz /= rx_channels_count;
        int rxfifosz = priv->plat->rx_fifo_size;
        int txfifosz = priv->plat->tx_fifo_size;
 
-       if (rxfifosz == 0)
-               rxfifosz = priv->dma_cap.rx_fifo_size;
-       if (txfifosz == 0)
-               txfifosz = priv->dma_cap.tx_fifo_size;
-
        /* Adjust for real per queue fifo size */
        rxfifosz /= rx_channels_count;
        txfifosz /= tx_channels_count;
        const int mtu = new_mtu;
        int ret;
 
-       if (txfifosz == 0)
-               txfifosz = priv->dma_cap.tx_fifo_size;
-
        txfifosz /= priv->plat->tx_queues_to_use;
 
        if (stmmac_xdp_is_enabled(priv) && new_mtu > ETH_DATA_LEN) {
                priv->plat->tx_queues_to_use = priv->dma_cap.number_tx_queues;
        }
 
-       if (priv->dma_cap.rx_fifo_size &&
-           priv->plat->rx_fifo_size > priv->dma_cap.rx_fifo_size) {
+       if (!priv->plat->rx_fifo_size) {
+               if (priv->dma_cap.rx_fifo_size) {
+                       priv->plat->rx_fifo_size = priv->dma_cap.rx_fifo_size;
+               } else {
+                       dev_err(priv->device, "Can't specify Rx FIFO size\n");
+                       return -ENODEV;
+               }
+       } else if (priv->dma_cap.rx_fifo_size &&
+                  priv->plat->rx_fifo_size > priv->dma_cap.rx_fifo_size) {
                dev_warn(priv->device,
                         "Rx FIFO size (%u) exceeds dma capability\n",
                         priv->plat->rx_fifo_size);
                priv->plat->rx_fifo_size = priv->dma_cap.rx_fifo_size;
        }
-       if (priv->dma_cap.tx_fifo_size &&
-           priv->plat->tx_fifo_size > priv->dma_cap.tx_fifo_size) {
+       if (!priv->plat->tx_fifo_size) {
+               if (priv->dma_cap.tx_fifo_size) {
+                       priv->plat->tx_fifo_size = priv->dma_cap.tx_fifo_size;
+               } else {
+                       dev_err(priv->device, "Can't specify Tx FIFO size\n");
+                       return -ENODEV;
+               }
+       } else if (priv->dma_cap.tx_fifo_size &&
+                  priv->plat->tx_fifo_size > priv->dma_cap.tx_fifo_size) {
                dev_warn(priv->device,
                         "Tx FIFO size (%u) exceeds dma capability\n",
                         priv->plat->tx_fifo_size);