]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: Allow marking driver model as dead
authorSimon Glass <sjg@chromium.org>
Thu, 7 Sep 2023 15:58:13 +0000 (09:58 -0600)
committerBin Meng <bmeng@tinylab.org>
Thu, 21 Sep 2023 22:03:46 +0000 (06:03 +0800)
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>
common/spl/spl.c
include/asm-generic/global_data.h

index 0062f3f45d9a745515c2fe18d41a9a2df6f4733d..045a5e89625da28622b7feb6bf9038c5c0d77109 100644 (file)
@@ -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");
index d364f1b965ebfdba80e75a8e2b5c5fa174aba213..d47c674c742964c40351950fdd4afab87b6d3db2 100644 (file)
@@ -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__ */