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 <[email protected]>
---
  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();

Reply via email to