aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/lenovo/t60/romstage.c
diff options
context:
space:
mode:
authorSven Schnelle <svens@stackframe.org>2011-10-15 17:31:01 +0200
committerSven Schnelle <svens@stackframe.org>2011-10-20 16:06:35 +0200
commitb5381105325391553b17c6ec2455233fc27e73b8 (patch)
tree244f77d68819d0cd504ac3ac2ec47d56fb78c349 /src/mainboard/lenovo/t60/romstage.c
parent2588db496d8037c9e548a9dd75360a3785b0ae7f (diff)
T60: Add support for Ultrabay Legacy I/O devices (40Y8122)
Those modules have basically the same Super I/O capabilities as the Docking station. Unfortunately, the Super I/O in the module shares the same I/O address as the Docking station, so we're not allowed to connect the LPC Docking Bus if such a module is present. To be able to detect this device and use it as early console for coreboot, we have to initialize the GPIO Controller before, as this device is detected via GPIO06. Change-Id: If7c38bb6797f76cf28f09f3614ab9a33878571fb Signed-off-by: Sven Schnelle <svens@stackframe.org> Reviewed-on: http://review.coreboot.org/282 Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/mainboard/lenovo/t60/romstage.c')
-rw-r--r--src/mainboard/lenovo/t60/romstage.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/mainboard/lenovo/t60/romstage.c b/src/mainboard/lenovo/t60/romstage.c
index 252ae40023..7ed776830e 100644
--- a/src/mainboard/lenovo/t60/romstage.c
+++ b/src/mainboard/lenovo/t60/romstage.c
@@ -210,7 +210,7 @@ static void early_ich7_init(void)
void main(unsigned long bist)
{
u32 reg32;
- int boot_mode = 0;
+ int boot_mode = 0, dock_err;
const u8 spd_addrmap[2 * DIMM_SOCKETS] = { 0x50, 0x52, 0x51, 0x53 };
if (bist == 0)
@@ -223,15 +223,21 @@ void main(unsigned long bist)
ich7_enable_lpc();
+ /* We want early GPIO setup, to be able to detect legacy I/O module */
+ pci_write_config32(PCI_DEV(0, 0x1f, 0), GPIOBASE, DEFAULT_GPIOBASE | 1);
+ /* Enable GPIOs */
+ pci_write_config8(PCI_DEV(0, 0x1f, 0), 0x4c /* GC */ , 0x10);
+ setup_ich7_gpios();
- /* dock_init initializes the DLPC switch on
- * thinpad side, so this is required even
- * if we're undocked.
- */
- if (!dlpc_init() && dock_present()) {
+ dock_err = dlpc_init();
+
+ /* We prefer Legacy I/O module over docking */
+ if (legacy_io_present()) {
+ legacy_io_init();
+ early_superio_config();
+ } else if (!dock_err && dock_present()) {
dock_connect();
early_superio_config();
- /* Set up the console */
}
#if CONFIG_USBDEBUG
@@ -239,6 +245,7 @@ void main(unsigned long bist)
early_usbdebug_init();
#endif
+ /* Setup the console */
console_init();
/* Halt if there was a built in self test failure */