i82801gx: Use CMOS variable if available for power-on on power failure
authorPatrick Georgi <patrick.georgi@secunet.com>
Tue, 22 Nov 2011 09:28:46 +0000 (10:28 +0100)
committerStefan Reinauer <stefan.reinauer@coreboot.org>
Sat, 24 Mar 2012 19:39:03 +0000 (20:39 +0100)
We used a hard coded value for some reason. Don't do that, but use CMOS
instead.

Change-Id: Ib83aa07a3e55bed075150354a060317ebc9d5ba7
Signed-off-by: Patrick Georgi <patrick.georgi@secunet.com>
Reviewed-on: http://review.coreboot.org/443
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
src/southbridge/intel/i82801gx/smihandler.c

index 48375e451d63bbcaef1f1054ad2ef94aa0590c38..5cc25e7ae2e42b13c20eeb10b20f7374b38be38d 100644 (file)
@@ -279,12 +279,16 @@ static void southbridge_smi_sleep(unsigned int node, smm_state_save_area_t *stat
        u8 reg8;
        u32 reg32;
        u8 slp_typ;
-       /* FIXME: the power state on boot should be read from
-        * CMOS or even better from GNVS. Right now it's hard
-        * coded at compile time.
-        */
        u8 s5pwr = CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL;
 
+       // save and recover RTC port values
+       u8 tmp70, tmp72;
+       tmp70 = inb(0x70);
+       tmp72 = inb(0x72);
+       get_option(&s5pwr, "power_on_after_fail");
+       outb(tmp70, 0x70);
+       outb(tmp72, 0x72);
+
        /* First, disable further SMIs */
        reg8 = inb(pmbase + SMI_EN);
        reg8 &= ~SLP_SMI_EN;