Message ID | 20241004132057.1449909-2-p-mantena@ti.com |
---|---|
State | New |
Delegated to: | Tom Rini |
Headers | show |
Series | Cleanup dma device in spl and move dma channel[0] | expand |
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@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();
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); + 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 +#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();
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@ti.com> --- arch/arm/mach-k3/common.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)