From nobody Tue Aug 25 15:23:33 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6B2336605D for ; Fri, 14 Aug 2026 06:08:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687715; cv=none; b=G3nAW40d2HiAUMu+PPxOhEoWhxKX4izqV42+uIiNH4AbZFNrXi+3IeN8RRbiwI3bTuYolkquByLoP4PC6l8l/dcMM/u9Z/lGfXJM3qM2hov6N7SqCAgzYH7gcTSkQHTWAsRfQsTJwTNaanE0ot0kwR+8APDtFN8enBVfBbolilw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687715; c=relaxed/simple; bh=+DFF/LlKrj++mSfnje5JBkkLPuLJ0Z7cXJdpEeYpMoI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qsnAg4XSuGyjOiehzHrBJnLPwWvgV/oUCyyOLeJlcIZGCQn6XjhPYiBk4JlGPtUwJklaw3lupoBdonHQasprFm7+df1DH/k9OAoME3P11J7d0ckJ2K6VOPvjGhLCihYHCljG/Kt/mXDZfGw0o3Xh7Z83dwdy/UVg3J5cqMmvqrQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=P6SGzuOX; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="P6SGzuOX" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-498028b3d5eso7511185e9.1 for ; Thu, 13 Aug 2026 23:08:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786687712; x=1787292512; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9g+mH3cDkuaANlwOg+CZREKs6e+pObXwzyUt9cFT9pY=; b=P6SGzuOXhQPDRozcP/T9MOD8AlF+a8oefeWs+01Vf0pnAOskdcUE8Eod02fePST43U 4TE06kOSKyU3yQBmyVGkfgObfwdauyfJce8RGCU071Hbfrgw5VpJxYxkueuILxJfidww ohow2SHsQlIMZXpcBMvkqwwKSWXYMWMk1bpZgWoYY/xpRta+UyAb7/trWzbhtix3S3B5 ctzN7dM5+fbAwIUniUuE86WkG9dkM60b81B4BseCg+jmmIaVCSCBRDHEVNA6NM2S1+rY vrswBZU7Kp0iG+ihR9eyd96xIp6z1JLtaBB0Yjtg3Zu8frrMUPkj8uMt8JEV59trh52u jdJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786687712; x=1787292512; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9g+mH3cDkuaANlwOg+CZREKs6e+pObXwzyUt9cFT9pY=; b=kxPr6GROSrUnRF4y9tWLvgSdqOfuw7EN0hIRIStR/okI6weOTU4kjwuK6VxUIunJxb zKGfgoPM66+zwpZc06LdNRn4OMzSy7e3ogRA9C9GnMyTMJlMB4g6P15Js8zdbRhtN8o2 Tn1ChOnXStcs71FvaCkA4se+NHJP+L9n0rrAjsrlkOs/lIBDp36+PkZr+WT3svd+OPtT NLGYPINwjJztjeS4vu3tR7n5QmBWYHmUY9WDobZDMr0JhqknGdwQgtZ/l7YDIruAbxUQ JQh0ln+xV9PKHv9BIZev0Ht5Hh4/RBQwtm2UtIGNSayGM36ijxhd2lJYnD7gPujhYgbI hfVA== X-Forwarded-Encrypted: i=1; AHgh+RrbXsdzyn0FIbDncg7UF3ovreZeM0bRp8Jxw6evp36ERCcbE4tjSoKy9fBLAj3uyspJxTfWmO9/ssrvOH8=@vger.kernel.org X-Gm-Message-State: AOJu0YwG4nOiS7R3euPCc4k0XSK9ZWPKrfmfSv4Sx+wmOoHtA+TIHaGd SpbrlCLSUC33lIhHsyiqipwm3ZkmQvDU+KbVvmdVbJ/c64KM+ngC0kUt X-Gm-Gg: AR+sD1074pn6ilKAZmmmSjPESuh8lvej1nz3I3r8od19Esu6kuxj+fFucjKhhIo41/y WJN8yEqOXB2vWHI34uaF4pAJoBkw+lLDuJyHVru9j0+90wl/LEbdTPgCwgB+cBjMQlMCVK60lD+ 7WZayaE3SC4MHDxOGjLvSiJDuq3VmWULgKMUjaBAIyzJ6KPTyht9TdUzMSDH5YjzvGcwsT2Kye7 wfF5mxafHfd+y8IqdCSvnUNhvsv9ywlZZgdYQdI5tPBhVynYmYu/PkdQVitKQ5df0fkFwtMbCvp iZVbL4m0fhuHsjALNJ9jbfjbHHIHF67cZK9mQj208GDLW9JupxTbL4C+BsAXbzvX5KFGjxcysO6 UKeQdtDIr92KGdhoE2nPvisfCepAv3BF5z3dqQZ7mGGA7wn5LzY0stFOPnskhrOZIYFBKEWjPpr iicTv80P/9SBBqcf5LuluDuwJYz90mjbiDvBb3SbE/LAcSZsgjfxyDmoC9EkfHXurknHmFjZ310 PTeGOP4ciGZ+LnyLZoqLNxqn3fNmOROA/LCWOKT X-Received: by 2002:a05:600c:b99:b0:496:c379:b2a1 with SMTP id 5b1f17b1804b1-49987929903mr43542515e9.2.1786687711854; Thu, 13 Aug 2026 23:08:31 -0700 (PDT) Received: from INBSWN167928.ad.harman.com (bba-86-96-6-50.alshamil.net.ae. [86.96.6.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49989ae9618sm1475095e9.13.2026.08.13.23.08.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 23:08:31 -0700 (PDT) From: Abid Ali Date: Fri, 14 Aug 2026 06:07:53 +0000 Subject: [PATCH net-next v4 1/3] net: stmmac: enable MAC rx/tx after DMA start Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260814-stmmac-rx-fifo-block-v4-1-1951fd3d33b7@gmail.com> References: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> In-Reply-To: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , Russell King , Qingfang Deng , Maxime Chevallier Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Abid Ali X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786687705; l=2204; i=dev.taqnialabs@gmail.com; s=20260425; h=from:subject:message-id; bh=+DFF/LlKrj++mSfnje5JBkkLPuLJ0Z7cXJdpEeYpMoI=; b=7dmhLiBOgS0G/4/VZZyzW/fGUA2YSWzXKrxly684D4wqxf4gGB4SxH9/fcczyumvvs0b213FX M51iz7my+rAD0uK9HgHPV0/GD4hJngQzMHpTB7Ew9B6G62L5EMXOxHY X-Developer-Key: i=dev.taqnialabs@gmail.com; a=ed25519; pk=4Syx51HH/MOySSUpi79M2ToLOdwt1yiNb338eKZBJNk= When the MAC receiver is enabled before the DMA channels are started, incoming frames fill the MTL FIFO with no DMA engine to drain it. If the PHY/Switch is already up at this point, and there is inflow of packets towards EMAC, the per-queue FIFO overflows within this window. Once the FIFO is full, the MTL read controller goes idle and never retries delivery even if the DMA comes alive later on. This behaviour happens due to enabling the MAC RX path before the DMA setup is ready, and any delay between these events increases the chances of blocking the rx path permanently. The EMAC should only accept packets after the DMAs are enabled. Signed-off-by: Abid Ali --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/ne= t/ethernet/stmicro/stmmac/stmmac_main.c index b2b7d0242dd3..b9d5d4aabf42 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -3685,9 +3685,6 @@ static int stmmac_hw_setup(struct net_device *dev) priv->hw->rx_csum =3D 0; } =20 - /* Enable the MAC Rx/Tx */ - stmmac_mac_set(priv, priv->ioaddr, true); - /* Set the HW DMA mode and the COE */ stmmac_dma_operation_mode(priv); =20 @@ -3743,6 +3740,9 @@ static int stmmac_hw_setup(struct net_device *dev) /* Start the ball rolling... */ stmmac_start_all_dma(priv); =20 + /* Enable the MAC Rx/Tx */ + stmmac_mac_set(priv, priv->ioaddr, true); + phylink_rx_clk_stop_block(priv->phylink); stmmac_set_hw_vlan_mode(priv, priv->hw); phylink_rx_clk_stop_unblock(priv->phylink); @@ -7184,12 +7184,12 @@ int stmmac_xdp_open(struct net_device *dev) hrtimer_setup(&tx_q->txtimer, stmmac_tx_timer, CLOCK_MONOTONIC, HRTIMER_= MODE_REL); } =20 - /* Enable the MAC Rx/Tx */ - stmmac_mac_set(priv, priv->ioaddr, true); - /* Start Rx & Tx DMA Channels */ stmmac_start_all_dma(priv); =20 + /* Enable the MAC Rx/Tx */ + stmmac_mac_set(priv, priv->ioaddr, true); + ret =3D stmmac_request_irq(dev); if (ret) goto irq_error; --=20 2.43.0 From nobody Tue Aug 25 15:23:33 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0001836308E for ; Fri, 14 Aug 2026 06:08:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687718; cv=none; b=pRK/S81hawu5H7rvNWHTFc0SQQbPaboTnchptVtizjyHix/ITkaPlriAMoRC2qT0s7A2j42ELqvIgDdNmYpN4hbms7D7xwqZfBrOcGfq81Of8ucB9rixp+FXmrfiLULfhxtKaCCdZCoeGswBIaiYxRUWiFIqSBzue8mh8sAb6TE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687718; c=relaxed/simple; bh=3hSmmiC/1PtTqC8O3mOMPttueE19SjY41GAl3jIlWos=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c8YihBtPbeeFu4Wf/zt5JZahrHaWew39dbAHxmURsK4yEb5uNSaLiAHVPOd9XQlF8qFayZ0u41xw/7FbhYUK9XZhRz31Sp1Mn9N443jeuEpb4nUZpY1qyngxkyLmlpNM8WuIADuvopbpyKb1q551wLSHd0gjasKAebrfVy3sXHY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rKST0SEJ; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rKST0SEJ" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-47f6609c657so265105f8f.2 for ; Thu, 13 Aug 2026 23:08:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786687715; x=1787292515; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/3/kXI30cjQgbNzUZoCNbLWznDpgvqR7BlfSVaPO+dk=; b=rKST0SEJOZm8i2t/J8aeDgBNpNq1W4G1hmoFIen96oAA6N7ewDxiPxoSI+XL3qFIuX tETTFbpSam4fFnvsFyiCwhLoEr5825uzD82pw1XCC4fNP2VJqrFvVKLojiobQp9cW/Il /4HS6hHlkTk1KARfrF2esTAKmMGHqLZcQ1KedAApB6tVC3ymNbBOhmWO/+vRvBmlz6gs U2Ft26tGst6giT61fH4MjO44njs5WCJMxlrRcTbWq+HbfqErjfgDkOxR2Zcebbj4ubas /3VKNZWGW79PeVNdVgIft2IDNd15wgEyjmsLP02PrPoY30w3LisBbl8wqOJu7OLrC9Sv +jVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786687715; x=1787292515; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/3/kXI30cjQgbNzUZoCNbLWznDpgvqR7BlfSVaPO+dk=; b=QK5bnNw/9LJ7JvPY1s5dsNsw4pQFrPh1h5iPv67/S13XRzBMLP5DlUl8rTQPVKhhsF 9JijE4kadGDKolBlpAeAvqFszvPGFVUe5UF0f0cnyxgoZHMlLO1LfDtRdeBfp57sFQES +00fhtsraf4oQSv0DE3h7PTYgUSgE9kisFFTfkTwhVzYBfEtL55eFiv2pt1f6evVCEli zxOXqQH3MXeQOP9aQ3SX9nRGKZHLyIU2cAz5vtZFGuAQCymp6rFWPvn1MEFJDB0UGrfp 1Udr+z46oqgTC5HikybFbfwAflc/U9d65xa1U95dGi4amDOcXkWDLrbYNCMqXWRH7mHp KiqQ== X-Forwarded-Encrypted: i=1; AHgh+RpIPWrgpoju/sFDtkJT37aaDShR4dus3jkxTLqLfEMgPc9iyXHwoootO5GdNVbT4A/cMqpdrb8UiXJ20ws=@vger.kernel.org X-Gm-Message-State: AOJu0YxKa4fHpKjFsloO/odS6SXCcfEpg1+gZRPsJxruVZVXIYY44AjQ 1FcxBR2h3rpEua1yWPGnlc1QLHs9zJyBV6Tvo/DC+36OvJsRtzwA6++A X-Gm-Gg: AR+sD11LQP4GYMQ6O7QZAd6zDvwdjqf4N/O555X8fV49nytDgoz31vakkVDmMPrmi9o gRp2HovrCqz6edslwG6n8KVnO5dpp0yRP2692p9lFCgJrFh3Ye7WFp8N2Mcu2eFYcC0FMLa4570 B9ajJOz6yjkJfQ5JmCVIsERApl2GQL0Y0YIZxuI5sWs9I+bZ4JbN6n+mwgCsogC7+MSZ7PUrbHU P7PIW+jZ112EhLyNDvcbvPbZbeUv2WPjbv/1tqHu3Q5jbs/HXMueAhRvd9NSlvR2tW+5vgcrfQO Zq2vwcK7D6XY/K0rvPN5VRN/IMwfzu7iA5KkiW2dnWLY/dam9kotmV8t+fXZpPBcD7p1PM5fYPb UNkmNWzX6mBNj5n2eTx97LhfJpcQWNPA02mWw+LBiPxJ4FfYUR5T3xRV1zchRwLNeglsCZ+3xQ+ H4R2OcYB+xpETd0YvBuZFwt3QoCIyl1YaNTutigPaRZJl4ZLlXhUUKLNG0gsauAM+9N5dfzC3zr Azp4xg4hL20znD2WSrXPvAaVdCKIQIEBUN9yYw4 X-Received: by 2002:a05:600c:3114:b0:499:84fe:5f3e with SMTP id 5b1f17b1804b1-4998795c12bmr38887005e9.9.1786687715077; Thu, 13 Aug 2026 23:08:35 -0700 (PDT) Received: from INBSWN167928.ad.harman.com (bba-86-96-6-50.alshamil.net.ae. [86.96.6.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49989ae9618sm1475095e9.13.2026.08.13.23.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 23:08:34 -0700 (PDT) From: Abid Ali Date: Fri, 14 Aug 2026 06:07:54 +0000 Subject: [PATCH net-next v4 2/3] net: stmmac: xgmac: tear the datapath down in the documented order Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260814-stmmac-rx-fifo-block-v4-2-1951fd3d33b7@gmail.com> References: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> In-Reply-To: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , Russell King , Qingfang Deng , Maxime Chevallier Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Abid Ali X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786687705; l=12239; i=dev.taqnialabs@gmail.com; s=20260425; h=from:subject:message-id; bh=3hSmmiC/1PtTqC8O3mOMPttueE19SjY41GAl3jIlWos=; b=uH6dyKMlBTFQViSQa40MgxFCLmBm7Bc1MWlFlY7TWI7ZOWoASMuARXVRLiLdy16ELiaCjLEda IOw7QNOHNodCVvHUU5D6D1uMT2Qp/gxIwciWvvUV2xQgtRp8vcjmxM5 X-Developer-Key: i=dev.taqnialabs@gmail.com; a=ed25519; pk=4Syx51HH/MOySSUpi79M2ToLOdwt1yiNb338eKZBJNk= The driver stops all DMA channels at once and only some paths disable the MAC afterwards. The databook requires the reverse order with a wait at each stage, otherwise a frame can be left stranded in the MTL FIFOs and reappear as corruption on the next bring-up. Add four optional DMA callbacks and drive them from a new stmmac_datapath_teardown(): 1) stop the Tx DMA channels, wait for stopped 2) wait for the MTL Tx queues to drain into the MAC 3) disable the MAC Tx and Rx 4) wait for the MTL Rx queues to drain into the Rx DMA 5) stop the Rx DMA channels, wait for stopped These are implemented for the XGMAC variant. TPS and RPS are latched, so clear them in the matching start op. __stmmac_release() calls phylink_stop() after the teardown rather than before it, as mac_link_down() clears TE and RE and stages 2 and 4 cannot progress once the MAC is disabled. The Wake-on-LAN path in stmmac_suspend() keeps the old sequence, as it has to leave the receiver enabled. Signed-off-by: Abid Ali --- drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h | 8 +++ drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 82 ++++++++++++++++++= ++++ drivers/net/ethernet/stmicro/stmmac/hwif.h | 17 +++++ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 73 ++++++++++++++----- 4 files changed, 164 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h b/drivers/net/e= thernet/stmicro/stmmac/dwxgmac2.h index f8ab347f7b5b..50f9ccd4a9c4 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h @@ -291,6 +291,10 @@ #define XGMAC_TTC GENMASK(6, 4) #define XGMAC_TXQEN GENMASK(3, 2) #define XGMAC_TSF BIT(1) +#define XGMAC_MTL_TXQ_DEBUG(x) (0x00001108 + (0x80 * (x))) +#define XGMAC_TXQSTS BIT(4) +#define XGMAC_TRCSTS GENMASK(2, 1) +#define XGMAC_TRCSTS_READ 0x1 #define XGMAC_MTL_TCx_ETS_CONTROL(x) (0x00001110 + (0x80 * (x))) #define XGMAC_MTL_TCx_QUANTUM_WEIGHT(x) (0x00001118 + (0x80 * (x))) #define XGMAC_MTL_TCx_SENDSLOPE(x) (0x0000111c + (0x80 * (x))) @@ -306,6 +310,9 @@ #define XGMAC_EHFC BIT(7) #define XGMAC_RSF BIT(5) #define XGMAC_RTC GENMASK(1, 0) +#define XGMAC_MTL_RXQ_DEBUG(x) (0x00001148 + (0x80 * (x))) +#define XGMAC_PRXQ GENMASK(29, 16) +#define XGMAC_RXQSTS GENMASK(5, 4) #define XGMAC_MTL_RXQ_FLOW_CONTROL(x) (0x00001150 + (0x80 * (x))) #define XGMAC_RFD GENMASK(31, 17) #define XGMAC_RFA GENMASK(15, 1) @@ -391,6 +398,7 @@ #define XGMAC_NIS BIT(15) #define XGMAC_AIS BIT(14) #define XGMAC_FBE BIT(12) +#define XGMAC_RPS BIT(8) #define XGMAC_RBU BIT(7) #define XGMAC_RI BIT(6) #define XGMAC_TBU BIT(2) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/n= et/ethernet/stmicro/stmmac/dwxgmac2_dma.c index ff83858ebc1f..df366b2e6bd7 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c @@ -4,6 +4,7 @@ * stmmac XGMAC support. */ =20 +#include #include #include "stmmac.h" #include "dwxgmac2.h" @@ -261,6 +262,9 @@ static void dwxgmac2_dma_start_tx(struct stmmac_priv *p= riv, { u32 value; =20 + /* TPS is latched once set, so clear it on every Tx DMA start. */ + writel(XGMAC_TPS, ioaddr + XGMAC_DMA_CH_STATUS(chan)); + value =3D readl(ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); value |=3D XGMAC_TXST; writel(value, ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); @@ -289,6 +293,9 @@ static void dwxgmac2_dma_start_rx(struct stmmac_priv *p= riv, { u32 value; =20 + /* RPS is latched once set, so clear it on every Rx DMA start. */ + writel(XGMAC_RPS, ioaddr + XGMAC_DMA_CH_STATUS(chan)); + value =3D readl(ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan)); value |=3D XGMAC_RXST; writel(value, ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan)); @@ -592,6 +599,77 @@ static int dwxgmac2_enable_tbs(struct stmmac_priv *pri= v, void __iomem *ioaddr, return 0; } =20 +static int dwxgmac2_tx_dma_stopped(struct stmmac_priv *priv, + void __iomem *ioaddr, u32 chan) +{ + u32 value; + int ret; + + ret =3D readl_poll_timeout(ioaddr + XGMAC_DMA_CH_STATUS(chan), value, + value & XGMAC_TPS, 100, 10000); + if (ret) + netdev_warn(priv->dev, "Tx DMA channel %u stop timeout\n", + chan); + + return ret; +} + +static int dwxgmac2_tx_mtl_drain(struct stmmac_priv *priv, + void __iomem *ioaddr, u32 queue) +{ + u32 value; + int ret; + + /* Wait until the queue is empty and its read controller is no longer + * pulling a frame out towards the MAC. + */ + ret =3D readl_poll_timeout(ioaddr + XGMAC_MTL_TXQ_DEBUG(queue), value, + !(value & XGMAC_TXQSTS) && + FIELD_GET(XGMAC_TRCSTS, value) !=3D + XGMAC_TRCSTS_READ, + 100, 10000); + if (ret) + netdev_warn(priv->dev, "MTL Tx queue %u drain timeout\n", + queue); + + return ret; +} + +static int dwxgmac2_rx_mtl_drain(struct stmmac_priv *priv, + void __iomem *ioaddr, u32 queue) +{ + u32 value; + int ret; + + /* Wait until no packet is left in the queue and the queue reports + * itself empty. + */ + ret =3D readl_poll_timeout(ioaddr + XGMAC_MTL_RXQ_DEBUG(queue), value, + !FIELD_GET(XGMAC_PRXQ, value) && + !FIELD_GET(XGMAC_RXQSTS, value), + 100, 10000); + if (ret) + netdev_warn(priv->dev, "MTL Rx queue %u drain timeout\n", + queue); + + return ret; +} + +static int dwxgmac2_rx_dma_stopped(struct stmmac_priv *priv, + void __iomem *ioaddr, u32 chan) +{ + u32 value; + int ret; + + ret =3D readl_poll_timeout(ioaddr + XGMAC_DMA_CH_STATUS(chan), value, + value & XGMAC_RPS, 100, 10000); + if (ret) + netdev_warn(priv->dev, "Rx DMA channel %u stop timeout\n", + chan); + + return ret; +} + const struct stmmac_dma_ops dwxgmac210_dma_ops =3D { .reset =3D dwxgmac2_dma_reset, .init =3D dwxgmac2_dma_init, @@ -620,4 +698,8 @@ const struct stmmac_dma_ops dwxgmac210_dma_ops =3D { .set_bfsize =3D dwxgmac2_set_bfsize, .enable_sph =3D dwxgmac2_enable_sph, .enable_tbs =3D dwxgmac2_enable_tbs, + .tx_dma_stopped =3D dwxgmac2_tx_dma_stopped, + .tx_mtl_drain =3D dwxgmac2_tx_mtl_drain, + .rx_mtl_drain =3D dwxgmac2_rx_mtl_drain, + .rx_dma_stopped =3D dwxgmac2_rx_dma_stopped, }; diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ether= net/stmicro/stmmac/hwif.h index 04dafec021b4..86f4aa88961c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/hwif.h +++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h @@ -231,6 +231,15 @@ struct stmmac_dma_ops { bool en, u32 chan); int (*enable_tbs)(struct stmmac_priv *priv, void __iomem *ioaddr, bool en, u32 chan); + /* Ordered datapath teardown */ + int (*tx_dma_stopped)(struct stmmac_priv *priv, void __iomem *ioaddr, + u32 chan); + int (*tx_mtl_drain)(struct stmmac_priv *priv, void __iomem *ioaddr, + u32 queue); + int (*rx_mtl_drain)(struct stmmac_priv *priv, void __iomem *ioaddr, + u32 queue); + int (*rx_dma_stopped)(struct stmmac_priv *priv, void __iomem *ioaddr, + u32 chan); }; =20 #define stmmac_dma_init(__priv, __args...) \ @@ -293,6 +302,14 @@ struct stmmac_dma_ops { stmmac_do_void_callback(__priv, dma, enable_sph, __priv, __args) #define stmmac_enable_tbs(__priv, __args...) \ stmmac_do_callback(__priv, dma, enable_tbs, __priv, __args) +#define stmmac_tx_dma_stopped(__priv, __args...) \ + stmmac_do_callback(__priv, dma, tx_dma_stopped, __priv, __args) +#define stmmac_tx_mtl_drain(__priv, __args...) \ + stmmac_do_callback(__priv, dma, tx_mtl_drain, __priv, __args) +#define stmmac_rx_mtl_drain(__priv, __args...) \ + stmmac_do_callback(__priv, dma, rx_mtl_drain, __priv, __args) +#define stmmac_rx_dma_stopped(__priv, __args...) \ + stmmac_do_callback(__priv, dma, rx_dma_stopped, __priv, __args) =20 struct mac_device_info; struct net_device; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/ne= t/ethernet/stmicro/stmmac/stmmac_main.c index b9d5d4aabf42..9c3a8f122b94 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -2560,6 +2560,52 @@ static void stmmac_stop_all_dma(struct stmmac_priv *= priv) stmmac_deinit_chan(priv, priv->ioaddr, chan); } =20 +/** + * stmmac_datapath_teardown - ordered datapath teardown as per IP specific= ation + * @priv: driver private structure + * Description: + * When teardown ops are available, follow the databook ordered teardown + * sequence. + * Follows the legacy stop + MAC disable for variants without the feature. + */ +static void stmmac_datapath_teardown(struct stmmac_priv *priv) +{ + u32 rx_channels_count =3D priv->plat->rx_queues_to_use; + u32 tx_channels_count =3D priv->plat->tx_queues_to_use; + u32 chan; + + /* Stop all TX DMA channels */ + for (chan =3D 0; chan < tx_channels_count; chan++) + stmmac_stop_tx_dma(priv, chan); + + /* Wait for every TX DMA channel to report itself stopped */ + if (priv->hw->dma->tx_dma_stopped) + for (chan =3D 0; chan < tx_channels_count; chan++) + stmmac_tx_dma_stopped(priv, priv->ioaddr, chan); + + /* Wait for the MTL TX queues to finish pushing into the MAC */ + if (priv->hw->dma->tx_mtl_drain) + for (chan =3D 0; chan < tx_channels_count; chan++) + stmmac_tx_mtl_drain(priv, priv->ioaddr, chan); + + /* Disable the MAC TX and RX */ + stmmac_mac_set(priv, priv->ioaddr, false); + + /* Wait for the MTL RX queues to drain into the RX DMA */ + if (priv->hw->dma->rx_mtl_drain) + for (chan =3D 0; chan < rx_channels_count; chan++) + stmmac_rx_mtl_drain(priv, priv->ioaddr, chan); + + /* Stop all RX DMA channels */ + for (chan =3D 0; chan < rx_channels_count; chan++) + stmmac_stop_rx_dma(priv, chan); + + /* Wait for every RX DMA channel to report itself stopped */ + if (priv->hw->dma->rx_dma_stopped) + for (chan =3D 0; chan < rx_channels_count; chan++) + stmmac_rx_dma_stopped(priv, priv->ioaddr, chan); +} + /** * stmmac_dma_operation_mode - HW DMA operation mode * @priv: driver private structure @@ -4240,9 +4286,6 @@ static void __stmmac_release(struct net_device *dev) struct stmmac_priv *priv =3D netdev_priv(dev); u8 chan; =20 - /* Stop and disconnect the PHY */ - phylink_stop(priv->phylink); - stmmac_disable_all_queues(priv); =20 for (chan =3D 0; chan < priv->plat->tx_queues_to_use; chan++) @@ -4253,8 +4296,11 @@ static void __stmmac_release(struct net_device *dev) /* Free the IRQ lines */ stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0); =20 - /* Stop TX/RX DMA and clear the descriptors */ - stmmac_stop_all_dma(priv); + /* Has to run before mac_link_down() disables the MAC. */ + stmmac_datapath_teardown(priv); + + /* Stop and disconnect the PHY */ + phylink_stop(priv->phylink); =20 /* Release and free the Rx/Tx resources */ free_dma_desc_resources(priv, &priv->dma_conf); @@ -7104,15 +7150,12 @@ void stmmac_xdp_release(struct net_device *dev) /* Free the IRQ lines */ stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0); =20 - /* Stop TX/RX DMA channels */ - stmmac_stop_all_dma(priv); + /* Stop the MAC and the TX/RX DMA channels */ + stmmac_datapath_teardown(priv); =20 /* Release and free the Rx/Tx resources */ free_dma_desc_resources(priv, &priv->dma_conf); =20 - /* Disable the MAC Rx/Tx */ - stmmac_mac_set(priv, priv->ioaddr, false); - /* set trans_start so we don't get spurious * watchdogs during reset */ @@ -8190,17 +8233,15 @@ int stmmac_suspend(struct device *dev) timer_delete_sync(&priv->eee_ctrl_timer); } =20 - /* Stop TX/RX DMA */ - stmmac_stop_all_dma(priv); - - stmmac_legacy_serdes_power_down(priv); - /* Enable Power down mode by programming the PMT regs */ if (priv->wolopts) { + stmmac_stop_all_dma(priv); + stmmac_legacy_serdes_power_down(priv); stmmac_pmt(priv, priv->hw, priv->wolopts); priv->irq_wake =3D 1; } else { - stmmac_mac_set(priv, priv->ioaddr, false); + stmmac_datapath_teardown(priv); + stmmac_legacy_serdes_power_down(priv); pinctrl_pm_select_sleep_state(priv->device); } =20 --=20 2.43.0 From nobody Tue Aug 25 15:23:33 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F26B03655CC for ; Fri, 14 Aug 2026 06:08:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687721; cv=none; b=LHBh8J4AI8doKxhfb+WNyK8CvaF/N3ZgRKZbXxESiFo8n2EZHrETX4Q9HsCHAcJHZMiK+uzDa9Fjdz1/tbrhA72i/Qx+QZsXjnL6+vGmivnJv5KWTpauPCGw6smbjl+vmaJE8S+fAu+9fYtiFYW7SQ5JtkgmqzgkeNrgpL2RHf8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786687721; c=relaxed/simple; bh=0Vwj+Yf7E1Ji8YvFOtq75mgQ/Wgtg5/pWR1g1XG9zro=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=udpFfAvf0x35x9PlUbxq9SQZY/CR1IrGHrASOUAePHo+Saqszl+6ssulCqeiBmLle9QqgbEi5JPThIJAJCk3FE8iK190nBRX/zak2FB04yaU4vjPt5mI6tUzPlVNEX4OVaT35wPcFd3m8w07M406SyydnlA+B2jQKomU84NKMbI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Z0G11eX2; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Z0G11eX2" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4994c49f588so4494085e9.0 for ; Thu, 13 Aug 2026 23:08:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786687718; x=1787292518; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Dr5UudFe4F6r6fPOKSi/bBNU+7nHpGE79pgT3ehlkvE=; b=Z0G11eX2wPdBjPCQKpexBDK0EZl1IwP43WvhjfZfyTU3Mg3l2qNSsoSmMTBf3+z1ll ZTpwaKxToyyabuY48qYTRkNQG5kL8ZIxX9fUmRztQhspwceRU/47oZ43dEz4C9nGelWS 6J/KJxzUdkcf5TxSMxB/25ci0ZW9ogycdO8HmWlEyH+iO3u/QMvsVyAl0CV99e0YxBO5 TOPkSolCHeNqqwX3o5EYKW4yGQjR+9YfmGj8ukLj7i8J62cboY5bF42vZJiQNNGsW1zm jfvkUHnfELNsjuqNvqVOX5X/9SY66jqRMFppY/7rbCkSJKERWQh15p6UFZgU1TPyXs0b M8Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786687718; x=1787292518; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Dr5UudFe4F6r6fPOKSi/bBNU+7nHpGE79pgT3ehlkvE=; b=GlX9VjgGhnOlFjQIrA+qZ01UWJwfToXP94qxHL26zCgZdsLVlSomvoQjZKwaWi5hKj bg7nihwZHluKGdTuLKq7B9mg4x+f4aeVdI4uI23z3x2tCQK/5WoLVHeUQqD9h8Irb7ti ApiYEGJjVhC23EFbUXiro6+/McDEC+lcQalY9eyAzxYYa3EMzUirP9iMCegUICFM+x22 BfjA9CDZQr9iwfaysJIbIDImHYSdrfSGsgJFZAP2zr5PDFUdiYNIdoRqafgH2OfZ6JTp YyKmTz2S5BPDiy+w48UmwvFnQ7PmzQgH+OJiKzsV12EnG1EKdraQnm21BZBGuKxhFpOt 6+Kw== X-Forwarded-Encrypted: i=1; AHgh+Rq8xvQNGaoswLmncSbjjLXtgZO+frywK7RRjvwX4kpgy0fItA6vOvl3syzNMJ8bBInur63xqEEaS0gymrM=@vger.kernel.org X-Gm-Message-State: AOJu0YyN+c6yvjywpFDHlG5XFXawarnAaXuavapRwhe15GPNUh0qU94f W8qlyXLQfF99T716lvgU5SNkAqUH+f5FKsKisycEkl2hB1o+Wx7qgvFQ X-Gm-Gg: AR+sD10IEn0dCkJz1vdhO0RQoRVAbrBiUZ7WiRU4R8jzcIbhR+w1G91DFfDbJtjAENP mWuzeZ8Ts52gEif5mOPeczq1A7IAIGz5F3nrcvzglrNkbdEHP6mxsSMXLijLluZ9pbHRIarH0hT 05+4Ew7DTdumEgPEH+uOP4SjxCATWuejhG+YNre0yv67qBll8J3w/J29C+oNeQLjO/mMPxO43K3 4Y14XIeuWbbHn2IcAEGFu6veWsEJ8WqCANVuKsDgsY7/5mvhutXs+wk40RsC38aZktcqe9BxFxr 5HThiyZmPWeLWPfauASR0HSFgIuxEAGhbqEHOO8GjOWJaqFaVsp6wBygboYgst+GzznXrFUZAf+ w81GGcZczQ43Y7beuuYuZ6Pe7KL0uO4wuBbiyxl7LYu6kmsMlDP+y/TUPEtTgkTbD6XuFBEbstr 3ykPyMTeQvFjfiY/3FOOQqWu52X5YIvTco7YbflsUSzRnUt1zD903lxSvWSqrRDJ0TXmqpoFJfx SC4hmOUGDgvpVNtjrFPeT/x/lOJZT3+CoxRwBZN X-Received: by 2002:a05:600d:117:b0:499:5f80:83ac with SMTP id 5b1f17b1804b1-49987ab4e1bmr24402485e9.7.1786687718165; Thu, 13 Aug 2026 23:08:38 -0700 (PDT) Received: from INBSWN167928.ad.harman.com (bba-86-96-6-50.alshamil.net.ae. [86.96.6.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49989ae9618sm1475095e9.13.2026.08.13.23.08.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Aug 2026 23:08:37 -0700 (PDT) From: Abid Ali Date: Fri, 14 Aug 2026 06:07:55 +0000 Subject: [PATCH net-next v4 3/3] net: stmmac: xgmac: decouple the MAC Rx/Tx enables from the DMA ops Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260814-stmmac-rx-fifo-block-v4-3-1951fd3d33b7@gmail.com> References: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> In-Reply-To: <20260814-stmmac-rx-fifo-block-v4-0-1951fd3d33b7@gmail.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Coquelin , Alexandre Torgue , Russell King , Qingfang Deng , Maxime Chevallier Cc: netdev@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Abid Ali X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786687705; l=2086; i=dev.taqnialabs@gmail.com; s=20260425; h=from:subject:message-id; bh=0Vwj+Yf7E1Ji8YvFOtq75mgQ/Wgtg5/pWR1g1XG9zro=; b=LnFwns+EYkt/RIAKFdCfRUKmnaV61xN7S2an1VxP7zn2xuNjez526gMQes2zTFI9XOaZ6kK4H 5/E/AvF2/T7AGDRwZWlVD+q5/OhyACmoDs/5PWIlyCnPGg7tS+Xwabl X-Developer-Key: i=dev.taqnialabs@gmail.com; a=ed25519; pk=4Syx51HH/MOySSUpi79M2ToLOdwt1yiNb338eKZBJNk= The XGMAC per-channel DMA start and stop ops also raise and lower MAC_Tx_Configuration.TE and MAC_Rx_Configuration.RE. Those bits are global, not per channel, so an op meant to touch one channel reconfigures the whole MAC. stmmac_tx_err() restarting a single Tx channel clears TE and stops transmit on every other channel too. Signed-off-by: Abid Ali --- drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/n= et/ethernet/stmicro/stmmac/dwxgmac2_dma.c index df366b2e6bd7..ba4f535fb9eb 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c @@ -268,10 +268,6 @@ static void dwxgmac2_dma_start_tx(struct stmmac_priv *= priv, value =3D readl(ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); value |=3D XGMAC_TXST; writel(value, ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); - - value =3D readl(ioaddr + XGMAC_TX_CONFIG); - value |=3D XGMAC_CONFIG_TE; - writel(value, ioaddr + XGMAC_TX_CONFIG); } =20 static void dwxgmac2_dma_stop_tx(struct stmmac_priv *priv, void __iomem *i= oaddr, @@ -282,10 +278,6 @@ static void dwxgmac2_dma_stop_tx(struct stmmac_priv *p= riv, void __iomem *ioaddr, value =3D readl(ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); value &=3D ~XGMAC_TXST; writel(value, ioaddr + XGMAC_DMA_CH_TX_CONTROL(chan)); - - value =3D readl(ioaddr + XGMAC_TX_CONFIG); - value &=3D ~XGMAC_CONFIG_TE; - writel(value, ioaddr + XGMAC_TX_CONFIG); } =20 static void dwxgmac2_dma_start_rx(struct stmmac_priv *priv, @@ -299,10 +291,6 @@ static void dwxgmac2_dma_start_rx(struct stmmac_priv *= priv, value =3D readl(ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan)); value |=3D XGMAC_RXST; writel(value, ioaddr + XGMAC_DMA_CH_RX_CONTROL(chan)); - - value =3D readl(ioaddr + XGMAC_RX_CONFIG); - value |=3D XGMAC_CONFIG_RE; - writel(value, ioaddr + XGMAC_RX_CONFIG); } =20 static void dwxgmac2_dma_stop_rx(struct stmmac_priv *priv, void __iomem *i= oaddr, --=20 2.43.0