mach-k3: common.c: Remove dma device in spl exit

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>
This commit is contained in:
Prasanth Babu Mantena
2024-10-09 20:27:00 +05:30
committed by Tom Rini
parent 080bb8480a
commit c4b00537dc

View File

@@ -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,32 @@ void spl_enable_cache(void)
#endif
}
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
void spl_board_prepare_for_boot(void)
static __maybe_unused void k3_dma_remove(void)
{
dcache_disable();
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);
} else
pr_warn("DMA Device not found (err=%d)\n", 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();