diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2013-01-21 12:14:29 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2013-02-07 21:48:35 -0500 |
commit | 9e4d41cd7c157a1d7037b06f9d830a7dfc6d1441 (patch) | |
tree | 4b1dcd270fd93bc664039e9c50fd500fadadfcd9 | |
parent | 6ca0460fbb8ecfa5d42c8928b7ee71f20d0cffdb (diff) | |
download | seabios-9e4d41cd7c157a1d7037b06f9d830a7dfc6d1441.tar.gz |
POST: Move cpu caching and dma setup to platform_hardware_setup().
The CPU cache is enabled and DMA is disabled on all real-world POST
entry situations, so no need to do this in the low-level "pre-init"
phase. Instead, move it to the platform hardware setup stage.
Also, move the setting of the reboot flags (which control reset-vector
entry point handling) to ivt_init().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r-- | src/post.c | 20 | ||||
-rw-r--r-- | src/resume.c | 4 | ||||
-rw-r--r-- | src/util.h | 2 |
3 files changed, 13 insertions, 13 deletions
@@ -37,6 +37,10 @@ ivt_init(void) { dprintf(3, "init ivt\n"); + // Setup reset-vector entry point (controls legacy reboots). + HaveRunPost = 1; + outb_cmos(0, CMOS_RESET_CODE); + // Initialize all vectors to the default handler. int i; for (i=0; i<256; i++) @@ -145,6 +149,12 @@ device_hardware_setup(void) static void platform_hardware_setup(void) { + // Enable CPU caching + setcr0(getcr0() & ~(CR0_CD|CR0_NW)); + + // Make sure legacy DMA isn't running. + dma_setup(); + // Init base pc hardware. pic_setup(); timer_setup(); @@ -305,16 +315,6 @@ reloc_preinit(void *f, void *arg) void VISIBLE32INIT dopost(void) { - // Set reboot flags. - HaveRunPost = 1; - outb_cmos(0, CMOS_RESET_CODE); - - // Enable CPU caching - setcr0(getcr0() & ~(CR0_CD|CR0_NW)); - - // Make sure legacy DMA isn't running. - dma_preinit(); - // Check if we are running under Xen. xen_preinit(); diff --git a/src/resume.c b/src/resume.c index 99265cd..ffc84fc 100644 --- a/src/resume.c +++ b/src/resume.c @@ -19,7 +19,7 @@ int HaveRunPost VAR16VISIBLE; // Reset DMA controller void -dma_preinit(void) +dma_setup(void) { // first reset the DMA controllers outb(0, PORT_DMA1_MASTER_CLEAR); @@ -40,7 +40,7 @@ handle_resume(void) outb_cmos(0, CMOS_RESET_CODE); dprintf(1, "In resume (status=%d)\n", status); - dma_preinit(); + dma_setup(); switch (status) { case 0x01 ... 0x04: @@ -355,7 +355,7 @@ void disable_bootsplash(void); // resume.c extern int HaveRunPost; -void dma_preinit(void); +void dma_setup(void); // pnpbios.c #define PNP_SIGNATURE 0x506e5024 // $PnP |