[PATCH rtems-lwip] rtemslwip/xil_shims: Perform flush with invalidate

Chris Johns chrisj at rtems.org
Tue Apr 4 01:00:17 UTC 2023


On 31/3/2023 8:13 am, Kinsey Moore wrote:
> Xilinx wrote their A53 HAL with the assumption that the CPU did not
> support cache invalidation without a flush, so the flush and
> invalidation functions were combined and all range invalidations are
> promoted to flush/invalidate. The implementation written for lwIP was
> written to the original intent of the function and thus was not flushing
> in some cases when it needed to. This resolves that issue which prevents
> DMA transmit errors in some cases.
> ---
>  rtemslwip/zynqmp/xil_shims.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/rtemslwip/zynqmp/xil_shims.c b/rtemslwip/zynqmp/xil_shims.c
> index 2eda0c5..1b1b3cf 100644
> --- a/rtemslwip/zynqmp/xil_shims.c
> +++ b/rtemslwip/zynqmp/xil_shims.c
> @@ -102,7 +102,12 @@ void XScuGic_DisableIntr ( u32 DistBaseAddress, u32 Int_Id )
>    rtems_interrupt_vector_disable( Int_Id );
>  }
>  
> +/*
> + * The Xilinx code was written such that it assumed there was no invalidate-only
> + * functionality on A53 cores. This function must flush and invalidate because
> + * of how they mapped things.
> + */
>  void Xil_DCacheInvalidateRange( INTPTR adr, INTPTR len )
>  {
> -  rtems_cache_invalidate_multiple_data_lines( (const void *) adr, len );
> +  rtems_cache_flush_multiple_data_lines( (const void *) adr, len );
>  }

Does the Xilinx code use Xil_DCacheInvalidateRange in any DMA receive paths? If
it does is this change correct as the invalidate has been removed?

Chris


More information about the devel mailing list