From 6d7c1fc3a4a5dbf0c9f784b76f878f05386425a0 Mon Sep 17 00:00:00 2001 From: Wang Qing Pei Date: Sun, 15 Aug 2010 11:37:41 +0000 Subject: Gigabyte dual bios mainboard will always reboot, caused by the superio. After lots of testing, the SuperIO LDN 7, register 0xEF is the key to the problem. This patch adds a function which stops dual bios mainboards from rebooting, when called. Signed-off-by: Wang Qing Pei Acked-by: Stefan Reinauer git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5697 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/superio/ite/it8718f/it8718f.h | 1 + src/superio/ite/it8718f/it8718f_early_serial.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) (limited to 'src') diff --git a/src/superio/ite/it8718f/it8718f.h b/src/superio/ite/it8718f/it8718f.h index 1967d25b5f..c441db3fbd 100644 --- a/src/superio/ite/it8718f/it8718f.h +++ b/src/superio/ite/it8718f/it8718f.h @@ -32,6 +32,7 @@ #if defined(__PRE_RAM__) && !defined(__ROMCC__) void it8718f_24mhz_clkin(void); +void it8718f_disable_reboot(void); void it8718f_enable_serial(device_t dev, unsigned iobase); #endif diff --git a/src/superio/ite/it8718f/it8718f_early_serial.c b/src/superio/ite/it8718f/it8718f_early_serial.c index fabbde5e8f..c3a8c73264 100644 --- a/src/superio/ite/it8718f/it8718f_early_serial.c +++ b/src/superio/ite/it8718f/it8718f_early_serial.c @@ -74,6 +74,20 @@ void it8718f_24mhz_clkin(void) it8718f_exit_conf(); } +/* GIGABYTE uses a special SuperIO register to protect its Dual BIOS + * mechanism. It lives in the GPIO LDN. However, register 0xEF is not + * mentioned in the IT8718F datasheet so just hardcode it to 0x7E for + * now. + */ +void it8718f_disable_reboot(void) +{ + it8718f_enter_conf(); + + it8718f_sio_write(0x07, 0xEF, 0x7E); + + it8718f_exit_conf(); +} + /* Enable the peripheral devices on the IT8718F Super I/O chip. */ void it8718f_enable_serial(device_t dev, unsigned iobase) { -- cgit v1.2.3