[coreboot-gerrit] New patch to review for coreboot: amd/pi/hudson: Add early SPI setup

Marc Jones (marc@marcjonesconsulting.com) gerrit at coreboot.org
Tue Feb 21 21:37:01 CET 2017


Marc Jones (marc at marcjonesconsulting.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18442

-gerrit

commit 9e9476145052bcd2faa33b28214be9bc844727fd
Author: Marshall Dawson <marshalldawson3rd at gmail.com>
Date:   Fri Feb 10 16:03:54 2017 -0700

    amd/pi/hudson: Add early SPI setup
    
    Add some generic functions that can configure the SPI interface to
    have faster performance.
    
    Given that the hudson files are used across many generations of FCHs,
    make sure to refer to the appropriate BKDG or RRG before using the
    functions.  Notable differences:
     * Hudson 1 defines read mode in CNTRL0 differently than later gens
     * Hudson 1 supports setting NormSpeed in Cntr1 but Hudson3 allows
       setting FastSpeed as well
     * Kabini, Mullins, Carrizo and Stoney Ridge contain a "new" SPI100
       controller
    
    Original-Signed-off-by: Marshall Dawson <marshalldawson3rd at gmail.com>
    Original-Reviewed-by: Marc Jones <marcj303 at gmail.com>
    (cherry picked from commit 1922d6f424dcf1f42e2f21fb7c6d53d7bcc247d0)
    
    Change-Id: Id12440e67bc575dbe4b980ef1da931d7bfae188d
    Signed-off-by: Marc Jones <marcj303 at gmail.com>
---
 src/southbridge/amd/pi/hudson/early_setup.c | 43 +++++++++++++++++++++++++++++
 src/southbridge/amd/pi/hudson/hudson.h      |  4 +++
 2 files changed, 47 insertions(+)

diff --git a/src/southbridge/amd/pi/hudson/early_setup.c b/src/southbridge/amd/pi/hudson/early_setup.c
index a650468..fa68624 100644
--- a/src/southbridge/amd/pi/hudson/early_setup.c
+++ b/src/southbridge/amd/pi/hudson/early_setup.c
@@ -197,4 +197,47 @@ void hudson_clk_output_48Mhz(void)
 	*memptr = data;
 }
 
+static void hudson_default_spibase(void)
+{
+	/* Make sure the base address is predictable */
+	device_t dev = PCI_DEV(0, 0x14, 3);
+
+	u32 base = pci_read_config32(dev, 0xa0) & 0xfffffff0;
+	base |= SPI_BASE_ADDRESS | SPI_ROM_ENABLE;
+	pci_write_config32(dev, 0xa0, base);
+}
+
+void hudson_set_spi100(u16 norm, u16 fast, u16 alt, u16 tpm)
+{
+	hudson_default_spibase();
+	write16(SPI100_SPEED_CONFIG,
+				(norm << SPI_NORM_SPEED_NEW_SH) |
+				(fast << SPI_FAST_SPEED_NEW_SH) |
+				(alt << SPI_ALT_SPEED_NEW_SH) |
+				(tpm << SPI_TPM_SPEED_NEW_SH));
+	write16(SPI100_ENABLE, SPI_USE_SPI100);
+}
+
+void hudson_disable_4dw_burst(void)
+{
+	hudson_default_spibase();
+	write16(SPI100_HOST_PREF_CONFIG, read16(SPI100_HOST_PREF_CONFIG)
+					& ~SPI_RD4DW_EN_HOST);
+}
+
+/* Hudson 1-3 only.  For Hudson 1, call with fast=1 */
+void hudson_set_readspeed(u16 norm, u16 fast)
+{
+	hudson_default_spibase();
+	write16(SPI_CNTRL1, (read16(SPI_CNTRL1) & ~SPI_CNTRL1_SPEED_MASK) |
+				(norm << SPI_NORM_SPEED_SH) |
+				(fast << SPI_FAST_SPEED_SH));
+}
+
+void hudson_read_mode(u32 mode)
+{
+	hudson_default_spibase();
+	write32(SPI_CNTRL0, (read32(SPI_CNTRL0) & ~SPI_READ_MODE_MASK) | mode);
+}
+
 #endif
diff --git a/src/southbridge/amd/pi/hudson/hudson.h b/src/southbridge/amd/pi/hudson/hudson.h
index 73dd0e9..d055572 100644
--- a/src/southbridge/amd/pi/hudson/hudson.h
+++ b/src/southbridge/amd/pi/hudson/hudson.h
@@ -182,6 +182,10 @@ void hudson_lpc_port80(void);
 void hudson_lpc_decode(void);
 void hudson_pci_port80(void);
 void hudson_clk_output_48Mhz(void);
+void hudson_read_mode(u32 mode);
+void hudson_set_spi100(u16 norm, u16 fast, u16 alt, u16 tpm);
+void hudson_disable_4dw_burst(void);
+void hudson_set_readspeed(u16 norm, u16 fast);
 
 int s3_save_nvram_early(u32 dword, int size, int  nvram_pos);
 int s3_load_nvram_early(int size, u32 *old_dword, int nvram_pos);



More information about the coreboot-gerrit mailing list