
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();