aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2013-01-21 12:14:29 -0500
committerKevin O'Connor <kevin@koconnor.net>2013-02-07 21:48:35 -0500
commit9e4d41cd7c157a1d7037b06f9d830a7dfc6d1441 (patch)
tree4b1dcd270fd93bc664039e9c50fd500fadadfcd9
parent6ca0460fbb8ecfa5d42c8928b7ee71f20d0cffdb (diff)
downloadseabios-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.c20
-rw-r--r--src/resume.c4
-rw-r--r--src/util.h2
3 files changed, 13 insertions, 13 deletions
diff --git a/src/post.c b/src/post.c
index ae5e923..f2fabbb 100644
--- a/src/post.c
+++ b/src/post.c
@@ -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:
diff --git a/src/util.h b/src/util.h
index f486c85..04c5a9d 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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