x86: cpu: Skip init code when chain loading

When U-Boot is not the first-stage bootloader the interrupt and cache init
must be skipped, as well as init for various peripherals. Update the code
to add checks for this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2020-04-26 09:12:55 -06:00 committed by Bin Meng
parent 52b9beb527
commit 526aabec24
3 changed files with 10 additions and 3 deletions

View File

@ -239,8 +239,10 @@ int cpu_init_r(void)
struct udevice *dev;
int ret;
if (!ll_boot_init())
if (!ll_boot_init()) {
uclass_first_device(UCLASS_PCI, &dev);
return 0;
}
ret = x86_init_cpus();
if (ret)

View File

@ -264,6 +264,9 @@ int interrupt_init(void)
struct udevice *dev;
int ret;
if (!ll_boot_init())
return 0;
/* Try to set up the interrupt router, but don't require one */
ret = irq_first_device_type(X86_IRQT_BASE, &dev);
if (ret && ret != -ENODEV)
@ -295,8 +298,7 @@ int interrupt_init(void)
* TODO(sjg@chromium.org): But we don't handle these correctly when
* booted from EFI.
*/
if (ll_boot_init())
enable_interrupts();
enable_interrupts();
#endif
return 0;

View File

@ -30,6 +30,9 @@ int init_cache_f_r(void)
return ret;
}
if (!ll_boot_init())
return 0;
/* Initialise the CPU cache(s) */
return init_cache();
}