diff options
-rw-r--r-- | hwsetup.c | 9 | ||||
-rw-r--r-- | include/bios.h | 2 | ||||
-rw-r--r-- | main.c | 7 |
3 files changed, 12 insertions, 6 deletions
@@ -94,7 +94,7 @@ void setup_pam(int bdf, int pambase) pci_config_writeb(bdf, pambase, 0x30); } -void setup_hw(void) +bool setup_hw(void) { const int bdf = 0; const uint8_t *bios_start = (void *)((uintptr_t)&stext + 0xfff00000); @@ -112,8 +112,9 @@ void setup_hw(void) setup_ich9(); setup_ich9_pm(); pambase = Q35_HOST_BRIDGE_PAM0; - } else - panic(); + } else { + return false; + } // Make ram from 0xc0000-0xf0000 read-write rom_check_value = rom_check; @@ -126,6 +127,8 @@ void setup_hw(void) memcpy(&sinit, init_start, &einit - &sinit); setup_pic(); + + return true; } #define Q35_HOST_BRIDGE_PCIEXBAREN 1 diff --git a/include/bios.h b/include/bios.h index 3e4cdee..1469cb6 100644 --- a/include/bios.h +++ b/include/bios.h @@ -64,7 +64,7 @@ extern void bios32_entry(void); extern uint32_t pic_base(void); extern void setup_pci(void); -extern void setup_hw(void); +extern bool setup_hw(void); extern bool setup_mmconfig(void); extern void extract_acpi(void); extern void boot_from_fwcfg(void); @@ -79,10 +79,11 @@ static void extract_e820(void) int __attribute__ ((section (".text.startup"))) main(void) { + bool have_pci; #ifdef BENCHMARK_HACK outb(FW_EXIT_PORT, FW_START); #endif - setup_hw(); + have_pci = setup_hw(); // Only the 16-bit trampoline for vmlinuz and the 16-bit interrupt // handlers need to run from the F-segment, but keep things simple @@ -90,7 +91,9 @@ int __attribute__ ((section (".text.startup"))) main(void) asm("ljmp $0x8, $1f; 1:"); have_mmconfig = setup_mmconfig(); - setup_pci(); + if (have_pci) { + setup_pci(); + } setup_idt(); fw_cfg_setup(); extract_acpi(); |