aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/amd/sb700/bootblock.c
diff options
context:
space:
mode:
authorTimothy Pearson <tpearson@raptorengineeringinc.com>2015-10-23 22:28:26 -0500
committerPeter Stuge <peter@stuge.se>2015-10-25 05:05:46 +0100
commitee3ec8e21256e544ef0a32f283a65c0c47040948 (patch)
treee15929b289e4a4e9876f217223cf7e53415285e3 /src/southbridge/amd/sb700/bootblock.c
parent2a16acee6b5fe7c8007f29e6015e0eef443a9344 (diff)
southbridge/amd/sb700: Set up uninitialized devices in early boot
LPC decodes were not enabled, leading to a failure of POST 80 cards and similar debugging devices. Enable the relevant LPC decodes to allow debugging. Additionally, the SMBUS controllers were not properly set up. Enable both the primary and auxiliary controllers. Finally, K10 and higher CPUs were hanging during boot due to a misconfigued IOAPIC. Properly configure the IOAPIC. Change-Id: I9ffb6542ce445ac971fb81f4f554e7f1313e6a98 Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com> Reviewed-on: http://review.coreboot.org/12177 Reviewed-by: Peter Stuge <peter@stuge.se> Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/southbridge/amd/sb700/bootblock.c')
-rw-r--r--src/southbridge/amd/sb700/bootblock.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/southbridge/amd/sb700/bootblock.c b/src/southbridge/amd/sb700/bootblock.c
index 67e6434de1..fb6f0888f8 100644
--- a/src/southbridge/amd/sb700/bootblock.c
+++ b/src/southbridge/amd/sb700/bootblock.c
@@ -1,6 +1,7 @@
/*
* This file is part of the coreboot project.
*
+ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
* Copyright (C) 2010 Advanced Micro Devices, Inc.
*
* This program is free software; you can redistribute it and/or modify
@@ -21,6 +22,9 @@
#include <arch/io.h>
#include <device/pci_ids.h>
+#define IO_MEM_PORT_DECODE_ENABLE_5 0x48
+#define IO_MEM_PORT_DECODE_ENABLE_6 0x4a
+
/*
* Enable 4MB (LPC) ROM access at 0xFFC00000 - 0xFFFFFFFF.
*
@@ -35,14 +39,21 @@
static void sb700_enable_rom(void)
{
u8 reg8;
+ u32 dword;
pci_devfn_t dev;
dev = PCI_DEV(0, 0x14, 3);
+ /* The LPC settings below work for SPI flash as well;
+ * the hardware does not distinguish between LPC and SPI flash ROM
+ * aside from offering additional side-channel access to SPI flash
+ * via a separate register-based interface.
+ */
+
/* Decode variable LPC ROM address ranges 1 and 2. */
- reg8 = pci_io_read_config8(dev, 0x48);
+ reg8 = pci_io_read_config8(dev, IO_MEM_PORT_DECODE_ENABLE_5);
reg8 |= (1 << 3) | (1 << 4);
- pci_io_write_config8(dev, 0x48, reg8);
+ pci_io_write_config8(dev, IO_MEM_PORT_DECODE_ENABLE_5, reg8);
/* LPC ROM address range 1: */
/* Enable LPC ROM range mirroring start at 0x000e(0000). */
@@ -57,10 +68,32 @@ static void sb700_enable_rom(void)
* 0xfff0(0000): 1MB
* 0xffe0(0000): 2MB
* 0xffc0(0000): 4MB
+ * 0xff80(0000): 8MB
*/
pci_io_write_config16(dev, 0x6c, 0x10000 - (CONFIG_COREBOOT_ROMSIZE_KB >> 6));
/* Enable LPC ROM range end at 0xffff(ffff). */
pci_io_write_config16(dev, 0x6e, 0xffff);
+
+ /* SB700 LPC Bridge 0x48.
+ * Turn on all LPC IO Port decode enables
+ */
+ pci_io_write_config32(dev, 0x44, 0xffffffff);
+
+ /* SB700 LPC Bridge 0x48.
+ * BIT0: Port Enable for SuperIO 0x2E-0x2F
+ * BIT1: Port Enable for SuperIO 0x4E-0x4F
+ * BIT6: Port Enable for RTC IO 0x70-0x73
+ */
+ reg8 = pci_io_read_config8(dev, IO_MEM_PORT_DECODE_ENABLE_5);
+ reg8 |= (1 << 0) | (1 << 1) | (1 << 6);
+ pci_io_write_config8(dev, IO_MEM_PORT_DECODE_ENABLE_5, reg8);
+
+ /* SB700 LPC Bridge 0x4a.
+ * BIT5: Port Enable for Port 0x80
+ */
+ reg8 = pci_io_read_config8(dev, IO_MEM_PORT_DECODE_ENABLE_6);
+ reg8 |= (1 << 5);
+ pci_io_write_config8(dev, IO_MEM_PORT_DECODE_ENABLE_6, reg8);
}
static void bootblock_southbridge_init(void)