Hello Steffen,

On 28.11.23 17:29, Steffen Trumtrar wrote:
> +     writel(ctrl, &macb->tx_ring[tx_head].ctrl);
> +     writel((ulong)packet, &macb->tx_ring[tx_head].addr);
>       dma_sync_single_for_device(macb->dev, (unsigned long)packet, length, 
> DMA_TO_DEVICE);

For this buffer dma_map_single is missing. I just sent out a series to implement
CONFIG_DMA_API_DEBUG by the way that should catch this (as well as the original
issue in the Rx path).

> -     macb->gem_q1_descs[0].addr = 0;
> -     macb->gem_q1_descs[0].ctrl = MACB_BIT(TX_WRAP) |
> -             MACB_BIT(TX_LAST) | MACB_BIT(TX_USED);
> +     writel(0, &macb->gem_q1_descs[0].addr);
> +     setbits_le32(&macb->gem_q1_descs[0].ctrl,
> +                  MACB_BIT(TX_WRAP) | MACB_BIT(TX_LAST) | MACB_BIT(TX_USED));

Should be writel to maintain previous semantics.

> -     macb->tx_ring[TX_RING_SIZE - 1].addr |= MACB_BIT(TX_WRAP);
> +     writel(MACB_BIT(TX_WRAP), &macb->tx_ring[TX_RING_SIZE - 1].addr);

Should be a setbits_le32 to maintain previous semantics.

>               /* Disable the second priority rx queue */
> -             macb->gem_q1_descs[1].addr = MACB_BIT(RX_USED) |
> -                             MACB_BIT(RX_WRAP);
> -             macb->gem_q1_descs[1].ctrl = 0;
> +             setbits_le32(&macb->gem_q1_descs[1].addr,
> +                          MACB_BIT(RX_USED) | MACB_BIT(RX_WRAP));

Should be a writel to maintain previous semantics.

> +             writel(0, &macb->gem_q1_descs[1].ctrl);
>  
>               gem_writel(macb, RQ1, (ulong)&macb->gem_q1_descs[1]);
>       }
> 

Cheers,
Ahmad

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |


Reply via email to