[PATCH 1/4] mach-k3: common.c: Add dma device remove in spl exit

Kumar, Udit u-kumar1 at ti.com
Fri Oct 4 16:39:11 CEST 2024


Hi Prasant,

Thanks for series,

Could we update the subject of patch something like

Remove dma device in spl exit, Sorry but

Add dma device remove in spl exit looks little confusing , are we adding 
or removing ?


On 10/4/2024 6:50 PM, Prasanth Babu Mantena wrote:
> While exiting from spl, remove any dma device active through
> spl_board_prepare_for_boot(). This is required for cleaning up
> any dma channels being used in spl and avoid issues with overlapping
> channel allocation in the next stage bootloaders.
>
> Signed-off-by: Prasanth Babu Mantena <p-mantena at ti.com>
> ---
>   arch/arm/mach-k3/common.c | 23 ++++++++++++++++++++++-
>   1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
> index df48ec8d47..982dc76b00 100644
> --- a/arch/arm/mach-k3/common.c
> +++ b/arch/arm/mach-k3/common.c
> @@ -28,6 +28,8 @@
>   #include <env.h>
>   #include <elf.h>
>   #include <soc.h>
> +#include <dm/uclass-internal.h>
> +#include <dm/device-internal.h>
>   
>   #include <asm/arch/k3-qos.h>
>   
> @@ -246,12 +248,31 @@ void spl_enable_cache(void)
>   #endif
>   }
>   
> -#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
> +static __maybe_unused void k3_dma_remove(void)
> +{
> +	struct udevice *dev;
> +	int rc;
> +
> +	rc = uclass_find_device(UCLASS_DMA, 0, &dev);

Are you thinking to have DMA device optional ?

Second question, if we enabled multiple DMAs in u-boot, then would you 
like to remove all ?


> +	if (!rc && dev) {
> +		rc = device_remove(dev, DM_REMOVE_NORMAL);
> +		if (rc)
> +			pr_warn("Cannot remove dma device '%s' (err=%d)\n",
> +				dev->name, rc);
> +	}
> +}
> +
>   void spl_board_prepare_for_boot(void)
>   {
> +#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
>   	dcache_disable();
> +#endif

Please suggest , why we are protecting dcache_disable with flags ?


> +#if IS_ENABLED(CONFIG_SPL_DMA) && IS_ENABLED(CONFIG_SPL_DM_DEVICE_REMOVE)
> +	k3_dma_remove();
> +#endif
>   }
>   
> +#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
>   void spl_board_prepare_for_linux(void)
>   {
>   	dcache_disable();


More information about the U-Boot mailing list