aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Frodin <dave.frodin@se-eng.com>2015-03-13 08:22:17 -0600
committerDave Frodin <dave.frodin@se-eng.com>2015-03-17 17:49:58 +0100
commitf364fc7682e6ac68e1614e759a3cdeed46dd9e5b (patch)
treea949d6937f2722ee50c499b52552eed96d004ec8
parent68ec2fce2bcf0f9d8f02d80feb4d6bc4385e9047 (diff)
downloadcoreboot-f364fc7682e6ac68e1614e759a3cdeed46dd9e5b.tar.gz
coreboot-f364fc7682e6ac68e1614e759a3cdeed46dd9e5b.tar.xz
coreboot-f364fc7682e6ac68e1614e759a3cdeed46dd9e5b.zip
southbridge/amd/pi: Enable early I/O decode to LPC
The decode of UART addresses down to the LPC bus needs to occur early to allow romstage console messages to be seen. This enables the decode of most of the I/O ports typically seen in a system. Change-Id: I6636946af4ad5320a5a46c2920b4f06345b5f806 Signed-off-by: Dave Frodin <dave.frodin@se-eng.com> Reviewed-on: http://review.coreboot.org/8661 Tested-by: build bot (Jenkins) Reviewed-by: Marc Jones <marc.jones@se-eng.com>
-rw-r--r--src/southbridge/amd/pi/hudson/early_setup.c24
-rw-r--r--src/southbridge/amd/pi/hudson/hudson.h35
2 files changed, 59 insertions, 0 deletions
diff --git a/src/southbridge/amd/pi/hudson/early_setup.c b/src/southbridge/amd/pi/hudson/early_setup.c
index 9500d0ec2..08697b998 100644
--- a/src/southbridge/amd/pi/hudson/early_setup.c
+++ b/src/southbridge/amd/pi/hudson/early_setup.c
@@ -28,6 +28,7 @@
#include <arch/cpu.h>
#include <cbmem.h>
#include "hudson.h"
+#include "pci_devs.h"
void hudson_pci_port80(void)
{
@@ -93,6 +94,29 @@ void hudson_lpc_port80(void)
pci_write_config8(dev, 0x4a, byte);
}
+void hudson_lpc_decode(void)
+{
+ device_t dev;
+ u32 tmp = 0;
+
+ /* Enable I/O decode to LPC bus */
+ dev = PCI_DEV(0, PCU_DEV, LPC_FUNC);
+ tmp = DECODE_ENABLE_PARALLEL_PORT0 | DECODE_ENABLE_PARALLEL_PORT2
+ | DECODE_ENABLE_PARALLEL_PORT4 | DECODE_ENABLE_SERIAL_PORT0
+ | DECODE_ENABLE_SERIAL_PORT1 | DECODE_ENABLE_SERIAL_PORT2
+ | DECODE_ENABLE_SERIAL_PORT3 | DECODE_ENABLE_SERIAL_PORT4
+ | DECODE_ENABLE_SERIAL_PORT5 | DECODE_ENABLE_SERIAL_PORT6
+ | DECODE_ENABLE_SERIAL_PORT7 | DECODE_ENABLE_AUDIO_PORT0
+ | DECODE_ENABLE_AUDIO_PORT1 | DECODE_ENABLE_AUDIO_PORT2
+ | DECODE_ENABLE_AUDIO_PORT3 | DECODE_ENABLE_MSS_PORT2
+ | DECODE_ENABLE_MSS_PORT3 | DECODE_ENABLE_FDC_PORT0
+ | DECODE_ENABLE_FDC_PORT1 | DECODE_ENABLE_GAME_PORT
+ | DECODE_ENABLE_KBC_PORT | DECODE_ENABLE_ACPIUC_PORT
+ | DECODE_ENABLE_ADLIB_PORT;
+
+ pci_write_config32(dev, LPC_IO_PORT_DECODE_ENABLE, tmp);
+}
+
int s3_save_nvram_early(u32 dword, int size, int nvram_pos)
{
int i;
diff --git a/src/southbridge/amd/pi/hudson/hudson.h b/src/southbridge/amd/pi/hudson/hudson.h
index 90c3205ed..6cd0f7843 100644
--- a/src/southbridge/amd/pi/hudson/hudson.h
+++ b/src/southbridge/amd/pi/hudson/hudson.h
@@ -55,6 +55,40 @@
#define SPI_ROM_ENABLE 0x02
#define SPI_BASE_ADDRESS 0xFEC10000
+#define LPC_IO_PORT_DECODE_ENABLE 0x44
+#define DECODE_ENABLE_PARALLEL_PORT0 (1 << 0)
+#define DECODE_ENABLE_PARALLEL_PORT1 (1 << 1)
+#define DECODE_ENABLE_PARALLEL_PORT2 (1 << 2)
+#define DECODE_ENABLE_PARALLEL_PORT3 (1 << 3)
+#define DECODE_ENABLE_PARALLEL_PORT4 (1 << 4)
+#define DECODE_ENABLE_PARALLEL_PORT5 (1 << 5)
+#define DECODE_ENABLE_SERIAL_PORT0 (1 << 6)
+#define DECODE_ENABLE_SERIAL_PORT1 (1 << 7)
+#define DECODE_ENABLE_SERIAL_PORT2 (1 << 8)
+#define DECODE_ENABLE_SERIAL_PORT3 (1 << 9)
+#define DECODE_ENABLE_SERIAL_PORT4 (1 << 10)
+#define DECODE_ENABLE_SERIAL_PORT5 (1 << 11)
+#define DECODE_ENABLE_SERIAL_PORT6 (1 << 12)
+#define DECODE_ENABLE_SERIAL_PORT7 (1 << 13)
+#define DECODE_ENABLE_AUDIO_PORT0 (1 << 14)
+#define DECODE_ENABLE_AUDIO_PORT1 (1 << 15)
+#define DECODE_ENABLE_AUDIO_PORT2 (1 << 16)
+#define DECODE_ENABLE_AUDIO_PORT3 (1 << 17)
+#define DECODE_ENABLE_MIDI_PORT0 (1 << 18)
+#define DECODE_ENABLE_MIDI_PORT1 (1 << 19)
+#define DECODE_ENABLE_MIDI_PORT2 (1 << 20)
+#define DECODE_ENABLE_MIDI_PORT3 (1 << 21)
+#define DECODE_ENABLE_MSS_PORT0 (1 << 22)
+#define DECODE_ENABLE_MSS_PORT1 (1 << 23)
+#define DECODE_ENABLE_MSS_PORT2 (1 << 24)
+#define DECODE_ENABLE_MSS_PORT3 (1 << 25)
+#define DECODE_ENABLE_FDC_PORT0 (1 << 26)
+#define DECODE_ENABLE_FDC_PORT1 (1 << 27)
+#define DECODE_ENABLE_GAME_PORT (1 << 28)
+#define DECODE_ENABLE_KBC_PORT (1 << 29)
+#define DECODE_ENABLE_ACPIUC_PORT (1 << 30)
+#define DECODE_ENABLE_ADLIB_PORT (1 << 31)
+
static inline int hudson_sata_enable(void)
{
/* True if IDE or AHCI. */
@@ -76,6 +110,7 @@ u16 pm_read16(u16 reg);
#ifdef __PRE_RAM__
void hudson_lpc_port80(void);
+void hudson_lpc_decode(void);
void hudson_pci_port80(void);
void hudson_clk_output_48Mhz(void);