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

Marek Vasut marex at denx.de
Mon Mar 23 13:00:53 CET 2020


On 3/23/20 8:09 AM, Ramon Fried wrote:
> 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();
> Better use wmb() for better understanding your goal here ?

The driver uses mb() all over the place, so I'm just keeping it
consistent here.

But I wonder whether we even need all those barriers in this driver at all.


More information about the U-Boot mailing list