aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-09-07 09:58:13 -0600
committerBin Meng <bmeng@tinylab.org>2023-09-22 06:03:46 +0800
commit15a23b6f167ac89d9be8c1c676309253865e446f (patch)
tree4a0d4c3572f849426c81ef11d87607a6b8dd2486
parent9804e572cf1ade7a0aae000740e6159a1e5394fd (diff)
downloadu-boot-15a23b6f167ac89d9be8c1c676309253865e446f.zip
u-boot-15a23b6f167ac89d9be8c1c676309253865e446f.tar.gz
u-boot-15a23b6f167ac89d9be8c1c676309253865e446f.tar.bz2
dm: core: Allow marking driver model as dead
On x86 devices we use CAR (Cache-As-RAM) to hold the malloc() region in SPL, since SDRAM is not set up yet. This means that driver model stores its tables in this region. When preparing to jump from SPL to U-Boot proper, we must disable CAR, so that the CPU can uses the caches normally. This means that driver model tables become inaccessible. From there until we jump to U-Boot proper, we must avoid using driver model. This is only a problem on boards which operate this way, for example chromebook_link64 Add a flag to indicate that driver model is dead and should not be used. It can be used in SPL to avoid hanging the machine. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r--common/spl/spl.c2
-rw-r--r--include/asm-generic/global_data.h5
2 files changed, 6 insertions, 1 deletions
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 0062f3f..045a5e8 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -800,7 +800,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
IS_ENABLED(CONFIG_SPL_ATF))
dram_init_banksize();
- if (CONFIG_IS_ENABLED(PCI)) {
+ if (CONFIG_IS_ENABLED(PCI) && !(gd->flags & GD_FLG_DM_DEAD)) {
ret = pci_init();
if (ret)
puts(SPL_TPL_PROMPT "Cannot initialize PCI\n");
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index d364f1b..d47c674 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -674,6 +674,11 @@ enum gd_flags {
* @GD_FLG_OF_TAG_MIGRATE: Device tree has old u-boot,dm- tags
*/
GD_FLG_OF_TAG_MIGRATE = 0x200000,
+ /**
+ * @GD_FLG_DM_DEAD: Driver model is not accessible. This can be set when
+ * the memory used to holds its tables has been mapped out.
+ */
+ GD_FLG_DM_DEAD = 0x400000,
};
#endif /* __ASSEMBLY__ */