[PATCH 6/6] net: dwc_eth_qos: Prevent DMA from writing updated RX DMA descriptor

Ramon Fried rfried.dev at gmail.com
Mon Mar 23 13:20:09 CET 2020


On Mon, Mar 23, 2020 at 3:45 AM Marek Vasut <marex at denx.de> wrote:
>
> The DMA may attempt to write a DMA descriptor in the ring while it is
> being updated. By writing the DMA descriptor buffer address to 0, it
> is assured the DMA will not use such a buffer and the buffer can be
> updated without any interference.
>
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> Cc: Patrice Chotard <patrice.chotard at st.com>
> Cc: Patrick Delaunay <patrick.delaunay at st.com>
> Cc: Ramon Fried <rfried.dev at gmail.com>
> Cc: Stephen Warren <swarren at nvidia.com>
> ---
>  drivers/net/dwc_eth_qos.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index 7dadb10fe7..c86b9d59a5 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -1431,8 +1431,10 @@ static int eqos_free_pkt(struct udevice *dev, uchar *packet, int length)
>
>         rx_desc = &(eqos->rx_descs[eqos->rx_desc_idx]);
>
> +       rx_desc->des0 = 0;
> +       mb();
> +       eqos->config->ops->eqos_flush_desc(rx_desc);
>         eqos->config->ops->eqos_inval_buffer(packet, length);
> -
>         rx_desc->des0 = (u32)(ulong)packet;
>         rx_desc->des1 = 0;
>         rx_desc->des2 = 0;
> --
> 2.25.1
>
Reviewed-by: Ramon Fried <rfried.dev at gmail.com>


More information about the U-Boot mailing list