diff mbox series

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

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

Commit Message

Prasanth Babu Mantena Oct. 4, 2024, 1:20 p.m. UTC
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(-)

Comments

Kumar, Udit Oct. 4, 2024, 2:39 p.m. UTC | #1
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 mbox series

Patch

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