In message: [PATCH linux-yocto] net: macb: Fix tx/rx malfunction after phy link
down and up
on 10/02/2026 Kevin Hao wrote:
> In commit 99537d5c476c ("net: macb: Relocate mog_init_rings() callback
> from macb_mac_link_up() to macb_open()"), the mog_init_rings() callback
> was moved from macb_mac_link_up() to macb_open() to resolve a deadlock
> issue. However, this change introduced a tx/rx malfunction following
> phy link down and up events. The issue arises from a mismatch between
> the software queue->tx_head, queue->tx_tail, queue->rx_prepared_head,
> and queue->rx_tail values and the hardware's internal tx/rx queue
> pointers.
>
> According to the Zynq UltraScale TRM [1], when tx/rx is disabled, the
> internal tx queue pointer resets to the value in the tx queue base
> address register, while the internal rx queue pointer remains unchanged.
> The following is quoted from the Zynq UltraScale TRM:
> When transmit is disabled, with bit [3] of the network control register
> set low, the transmit-buffer queue pointer resets to point to the address
> indicated by the transmit-buffer queue base address register. Disabling
> receive does not have the same effect on the receive-buffer queue
> pointer.
>
> Additionally, there is no need to reset the RBQP and TBQP registers in a
> phy event callback. Therefore, move macb_init_buffers() to macb_open().
> In a phy link up event, the only required action is to reset the tx
> software head and tail pointers to align with the hardware's behavior.
>
> [1] https://docs.amd.com/v/u/en-US/ug1085-zynq-ultrascale-trm
>
> Fixes: 99537d5c476c ("net: macb: Relocate mog_init_rings() callback from
> macb_mac_link_up() to macb_open()")
> Signed-off-by: Kevin Hao <[email protected]>
> Cc: [email protected]
> ---
> Hi Bruce,
>
> Could you please help merge this patch into the following linux-yocto
> branches?
> v6.12/standard/base
> v6.6/standard/base
> v6.1/standard/base
>
> This patch fixes a critical bug that can halt the MACB Ethernet controller’s
> TX/RX
> during a simple PHY link down‑up sequence. It affects multiple boards
> (including
> Raspberry Pi 4/5, Xilinx Zynq, ZynqMP, and Versal) and is currently blocking
> testing and release for several related BSPs supported by linux-yocto kernel.
>
> I submitted the fix [1] upstream two days ago but have not yet received
> feedback.
> Given the broad impact, I propose we merge it into linux-yocto now to unblock
> affected BSPs. If the community requests changes later, I am prepared to
> follow
> up with additional patches.
Since have no concerns that you'll follow up with fixes, and will
also see any conflicts with stable updates, I've gone ahead and merged
this to all the branches.
Bruce
>
> [1]
> https://lore.kernel.org/r/[email protected]
> ---
> drivers/net/ethernet/cadence/macb_main.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb_main.c
> b/drivers/net/ethernet/cadence/macb_main.c
> index
> 095c1cfcc9a1d4158ca614119f9fdaba069e7939..f258c4b82c74d7d25aeaa1f2b3b61d671a1befce
> 100644
> --- a/drivers/net/ethernet/cadence/macb_main.c
> +++ b/drivers/net/ethernet/cadence/macb_main.c
> @@ -756,14 +756,12 @@ static void macb_mac_link_up(struct phylink_config
> *config,
> if (rx_pause)
> ctrl |= MACB_BIT(PAE);
>
> - /* Initialize rings & buffers as clearing MACB_BIT(TE) in link
> down
> - * cleared the pipeline and control registers.
> - */
> - macb_init_buffers(bp);
> -
> - for (q = 0, queue = bp->queues; q < bp->num_queues; ++q,
> ++queue)
> + for (q = 0, queue = bp->queues; q < bp->num_queues; ++q,
> ++queue) {
> + queue->tx_head = 0;
> + queue->tx_tail = 0;
> queue_writel(queue, IER,
> bp->rx_intr_mask | MACB_TX_INT_FLAGS |
> MACB_BIT(HRESP));
> + }
> }
>
> macb_or_gem_writel(bp, NCFGR, ctrl);
> @@ -2985,6 +2983,7 @@ static int macb_open(struct net_device *dev)
> }
>
> bp->macbgem_ops.mog_init_rings(bp);
> + macb_init_buffers(bp);
>
> for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) {
> napi_enable(&queue->napi_rx);
>
> ---
> base-commit: a7fbaf7533ae7ebc35f56c0dfb86970eda4d721c
> change-id: 20260210-yocto-v6-12-macb-688d0359c94d
>
> Best regards,
> --
> Kevin Hao <[email protected]>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#16298):
https://lists.yoctoproject.org/g/linux-yocto/message/16298
Mute This Topic: https://lists.yoctoproject.org/mt/117731832/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-