]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
net: enetc: reset PIR and CIR if they are not equal when initializing TX ring
authorWei Fang <wei.fang@nxp.com>
Tue, 24 Mar 2026 06:21:19 +0000 (14:21 +0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 27 Mar 2026 03:19:05 +0000 (20:19 -0700)
commit0239fd701d33475a39428daa3dc627407cd417a6
tree0a2e436d997a05ae1cb75a923cf46839bffa0e1d
parente8e44c98f789dee45cfd24ffb9d4936e0606d7c6
net: enetc: reset PIR and CIR if they are not equal when initializing TX ring

Currently the driver does not reset the producer index register (PIR) and
consumer index register (CIR) when initializing a TX BD ring. The driver
only reads the PIR and CIR and initializes the software indexes. If the
TX BD ring is reinitialized when it still contains unsent frames, its PIR
and CIR will not be equal after the reinitialization. However, the BDs
between CIR and PIR have been freed and become invalid and this can lead
to a hardware malfunction, causing the TX BD ring will not work properly.

For ENETC v4, it supports software to set the PIR and CIR, so the driver
can reset these two registers if they are not equal when reinitializing
the TX BD ring. Therefore, add this solution for ENETC v4. Note that this
patch does not work for ENETC v1 because it does not support software to
set the PIR and CIR.

Fixes: 99100d0d9922 ("net: enetc: add preliminary support for i.MX95 ENETC PF")
Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260324062121.2745033-2-wei.fang@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/enetc/enetc.c