[U-Boot] [PATCH 1/2] net: mvneta: dcache flush TX descriptors at init

From: Rabeeh Khoury rabeeh@solid-run.com
This fixes sporadic timeout on initial packet Tx (usually ARP), with an error message like:
timeout: packet not sent
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il --- drivers/net/mvneta.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 45e5eda95522..316a72b16517 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -1702,6 +1702,7 @@ static int mvneta_probe(struct udevice *dev)
/* Align buffer area for descs and rx_buffers to 1MiB */ bd_space = memalign(1 << MMU_SECTION_SHIFT, BD_SPACE); + flush_dcache_range((ulong)bd_space, (ulong)bd_space+BD_SPACE); mmu_set_region_dcache_behaviour((phys_addr_t)bd_space, BD_SPACE, DCACHE_OFF); buffer_loc.tx_descs = (struct mvneta_tx_desc *)bd_space;

From: Rabeeh Khoury rabeeh@solid-run.com
Make the initialization sequence consistent with the Linux kernel driver.
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il --- drivers/net/mvneta.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 316a72b16517..32d02212b66c 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -1708,6 +1708,7 @@ static int mvneta_probe(struct udevice *dev) buffer_loc.tx_descs = (struct mvneta_tx_desc *)bd_space; size = roundup(MVNETA_MAX_TXD * sizeof(struct mvneta_tx_desc), ARCH_DMA_MINALIGN); + memset(buffer_loc.tx_descs, 0, size); buffer_loc.rx_descs = (struct mvneta_rx_desc *) ((phys_addr_t)bd_space + size); size += roundup(MVNETA_MAX_RXD * sizeof(struct mvneta_rx_desc),

On 17.06.2018 13:55, Baruch Siach wrote:
From: Rabeeh Khoury rabeeh@solid-run.com
Make the initialization sequence consistent with the Linux kernel driver.
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il
drivers/net/mvneta.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 316a72b16517..32d02212b66c 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -1708,6 +1708,7 @@ static int mvneta_probe(struct udevice *dev) buffer_loc.tx_descs = (struct mvneta_tx_desc *)bd_space; size = roundup(MVNETA_MAX_TXD * sizeof(struct mvneta_tx_desc), ARCH_DMA_MINALIGN);
buffer_loc.rx_descs = (struct mvneta_rx_desc *) ((phys_addr_t)bd_space + size); size += roundup(MVNETA_MAX_RXD * sizeof(struct mvneta_rx_desc),memset(buffer_loc.tx_descs, 0, size);
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan

On Sun, Jun 17, 2018 at 6:55 AM, Baruch Siach baruch@tkos.co.il wrote:
From: Rabeeh Khoury rabeeh@solid-run.com
Make the initialization sequence consistent with the Linux kernel driver.
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il
Acked-by: Joe Hershberger joe.hershberger@ni.com

On 17.06.2018 13:55, Baruch Siach wrote:
From: Rabeeh Khoury rabeeh@solid-run.com
This fixes sporadic timeout on initial packet Tx (usually ARP), with an error message like:
timeout: packet not sent
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il
drivers/net/mvneta.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 45e5eda95522..316a72b16517 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -1702,6 +1702,7 @@ static int mvneta_probe(struct udevice *dev)
/* Align buffer area for descs and rx_buffers to 1MiB */ bd_space = memalign(1 << MMU_SECTION_SHIFT, BD_SPACE);
mmu_set_region_dcache_behaviour((phys_addr_t)bd_space, BD_SPACE, DCACHE_OFF); buffer_loc.tx_descs = (struct mvneta_tx_desc *)bd_space;flush_dcache_range((ulong)bd_space, (ulong)bd_space+BD_SPACE);
Nitpicking comment: Checkpatch will most likely complain about missing spaces around '+'. Other than this:
Reviewed-by: Stefan Roese sr@denx.de
Thanks, Stefan

On Sun, Jun 17, 2018 at 11:55 PM Baruch Siach baruch@tkos.co.il wrote:
From: Rabeeh Khoury rabeeh@solid-run.com
This fixes sporadic timeout on initial packet Tx (usually ARP), with an error message like:
timeout: packet not sent
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il
Thanks, I'd been seeing this but hadn't found time to look into it. With this patch applied I haven't seen the issue on a system where I'd otherwise see it every few boot attempts.
Tested-by: Chris Packham judge.packham@gmail.com

On Sun, Jun 17, 2018 at 6:55 AM, Baruch Siach baruch@tkos.co.il wrote:
From: Rabeeh Khoury rabeeh@solid-run.com
This fixes sporadic timeout on initial packet Tx (usually ARP), with an error message like:
timeout: packet not sent
Signed-off-by: Rabeeh Khoury rabeeh@solid-run.com Signed-off-by: Baruch Siach baruch@tkos.co.il
Acked-by: Joe Hershberger joe.hershberger@ni.com
But yes, make sure it is checkpatch-clean.
participants (4)
-
Baruch Siach
-
Chris Packham
-
Joe Hershberger
-
Stefan Roese