[PATCH net-next 0/2] net: fec: support RX flushing via fsl,rx-flush-queues
"A. Sverdlin" <[email protected]>
| Newsgroups | org.kernel.vger.netdev,dev.linux.lists.imx,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Alexander Sverdlin <[email protected]> The FEC/ENET controller can flush frames that get stuck at the head of the RX FIFO because their destination ring has no empty buffer descriptor (RxBD[E] clear or ENET_RDARn not set). Without flushing, such a frame blocks the FIFO and stalls reception on all queues; with flushing enabled the offending frame is discarded instead. Flushing is configured per RX queue through the RX_FLUSHn bits of the QOS Scheme register (FEC_QOS_SCHEME). This series adds a device tree property, fsl,rx-flush-queues, listing the RX queues for which flushing should be enabled, and programs the corresponding RX_FLUSHn bits. Erratum ERR050395 (e.g. i.MX8QXP) can lock up the RX path when flushing is enabled on more than one queue at the same time; recovery requires a full ENET reset. Rather than encoding that hardware limitation in the binding, the DT property is kept generic and the single-queue restriction is enforced in the driver: a configuration enabling flushing on multiple queues is rejected unless the controller advertises FEC_QUIRK_HAS_MULTI_RX_FLUSH. Future parts with the erratum fixed can set that quirk to allow flushing on several queues. Example: &fec { fsl,num-rx-queues = <3>; fsl,rx-flush-queues = <1>; }; Alexander Sverdlin (2): dt-bindings: net: fsl,fec: add fsl,rx-flush-queues net: fec: support receive flushing via fsl,rx-flush-queues .../devicetree/bindings/net/fsl,fec.yaml | 14 ++++++++ drivers/net/ethernet/freescale/fec.h | 14 ++++++++ drivers/net/ethernet/freescale/fec_main.c | 34 +++++++++++++++++++ 3 files changed, 63 insertions(+) -- 2.55.0