diff options
author | Francis Rowe <info@gluglug.org.uk> | 2015-11-06 02:45:49 (EST) |
---|---|---|
committer | Francis Rowe <info@gluglug.org.uk> | 2015-11-06 03:01:51 (EST) |
commit | 60453ff2cbd1befe24959fba1d24f734406444e3 (patch) | |
tree | 74a6080455b2b00184fbc4a00503188032773986 /resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch | |
parent | 51f5487e7d2c8809bdc7690fe26948064257b34d (diff) | |
download | libreboot-60453ff2cbd1befe24959fba1d24f734406444e3.zip libreboot-60453ff2cbd1befe24959fba1d24f734406444e3.tar.gz libreboot-60453ff2cbd1befe24959fba1d24f734406444e3.tar.bz2 |
Update coreboot to new version (use latest stable kgpe-d16 tree)
Diffstat (limited to 'resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch')
-rw-r--r-- | resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch | 142 |
1 files changed, 85 insertions, 57 deletions
diff --git a/resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch b/resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch index 651c973..b5f03eb 100644 --- a/resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch +++ b/resources/libreboot/patch/kgpe-d16/0002-southbridge-amd-sb700-Allow-use-of-auxiliary-SMBUS-c.patch @@ -1,28 +1,29 @@ -From 6ae8695f880a4a15672eda801226b4b1c83aa1a8 Mon Sep 17 00:00:00 2001 +From c3691fe7c155d63baedbb1836e6ccf9c1fcb5846 Mon Sep 17 00:00:00 2001 From: Timothy Pearson <tpearson@raptorengineeringinc.com> Date: Sat, 17 Oct 2015 04:36:47 -0500 -Subject: [PATCH 002/139] southbridge/amd/sb700: Allow use of auxiliary SMBUS +Subject: [PATCH 002/143] southbridge/amd/sb700: Allow use of auxiliary SMBUS controller Change-Id: I29ece10eeefc2c75a3829c169f1e1aede7194ec2 Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com> --- - src/device/Kconfig | 4 ++++ - src/include/device/smbus.h | 5 +++++ - src/southbridge/amd/sb700/Kconfig | 1 + - src/southbridge/amd/sb700/sm.c | 36 +++++++++++++++++++++++++++++++----- - src/southbridge/amd/sb700/smbus.c | 15 +++++++++++++++ - 5 files changed, 56 insertions(+), 5 deletions(-) + src/device/Kconfig | 4 ++++ + src/include/device/smbus.h | 5 ++++ + src/southbridge/amd/sb700/Kconfig | 1 + + src/southbridge/amd/sb700/sm.c | 47 ++++++++++++++++++++++++++++++------- + src/southbridge/amd/sb700/smbus.c | 15 ++++++++++++ + src/southbridge/amd/sb700/smbus.h | 5 ++-- + 6 files changed, 66 insertions(+), 11 deletions(-) diff --git a/src/device/Kconfig b/src/device/Kconfig -index 613461b..3dd2b61 100644 +index 613461b..bcf7dad 100644 --- a/src/device/Kconfig +++ b/src/device/Kconfig @@ -192,6 +192,10 @@ config MULTIPLE_VGA_ADAPTERS bool default n -+config SMBUS_HAS_AUX ++config SMBUS_HAS_AUX_CHANNELS + bool + default n + @@ -30,129 +31,133 @@ index 613461b..3dd2b61 100644 bool default n diff --git a/src/include/device/smbus.h b/src/include/device/smbus.h -index 073d7e2..53e90fb 100644 +index 073d7e2..a838f55 100644 --- a/src/include/device/smbus.h +++ b/src/include/device/smbus.h @@ -47,4 +47,9 @@ int smbus_process_call(device_t dev, u8 cmd, u16 data); int smbus_block_read(device_t dev, u8 cmd, u8 bytes, u8 *buffer); int smbus_block_write(device_t dev, u8 cmd, u8 bytes, const u8 *buffer); -+#if IS_ENABLED(CONFIG_SMBUS_HAS_AUX) -+void smbus_switch_to_aux(uint8_t enable_aux); -+uint8_t smbus_switched_to_aux(void); ++#if IS_ENABLED(CONFIG_SMBUS_HAS_AUX_CHANNELS) ++void smbus_switch_to_aux_channel(uint8_t aux_channel_number); ++uint8_t smbus_current_aux_channel(void); +#endif + #endif /* DEVICE_SMBUS_H */ diff --git a/src/southbridge/amd/sb700/Kconfig b/src/southbridge/amd/sb700/Kconfig -index 42ca2bb..a5dfe07 100644 +index 42ca2bb..0761934 100644 --- a/src/southbridge/amd/sb700/Kconfig +++ b/src/southbridge/amd/sb700/Kconfig @@ -27,6 +27,7 @@ config SOUTHBRIDGE_SPECIFIC_OPTIONS # dummy select IOAPIC select HAVE_USBDEBUG_OPTIONS select HAVE_HARD_RESET -+ select SMBUS_HAS_AUX ++ select SMBUS_HAS_AUX_CHANNELS # Set for southbridge SP5100 which also uses SB700 driver config SOUTHBRIDGE_AMD_SUBTYPE_SP5100 diff --git a/src/southbridge/amd/sb700/sm.c b/src/southbridge/amd/sb700/sm.c -index f544c88..c216e1f 100644 +index f544c88..598ebec 100644 --- a/src/southbridge/amd/sb700/sm.c +++ b/src/southbridge/amd/sb700/sm.c -@@ -40,6 +40,8 @@ +@@ -40,6 +40,11 @@ #define CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL MAINBOARD_POWER_ON #endif ++#define PRIMARY_SMBUS_RESOURCE_NUMBER 0x90 ++#define AUXILIARY_SMBUS_RESOURCE_NUMBER 0x58 ++ +uint8_t smbus_use_aux = 0; + /* * SB700 enables all USB controllers by default in SMBUS Control. * SB700 enables SATA by default in SMBUS Control. -@@ -312,7 +314,10 @@ static int lsmbus_recv_byte(device_t dev) +@@ -312,7 +317,10 @@ static int lsmbus_recv_byte(device_t dev) device = dev->path.i2c.device; pbus = get_pbus_smbus(dev); - res = find_resource(pbus->dev, 0x90); + if (!smbus_use_aux) -+ res = find_resource(pbus->dev, 0x90); ++ res = find_resource(pbus->dev, PRIMARY_SMBUS_RESOURCE_NUMBER); + else -+ res = find_resource(pbus->dev, 0x58); ++ res = find_resource(pbus->dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); return do_smbus_recv_byte(res->base, device); } -@@ -326,7 +331,10 @@ static int lsmbus_send_byte(device_t dev, u8 val) +@@ -326,7 +334,10 @@ static int lsmbus_send_byte(device_t dev, u8 val) device = dev->path.i2c.device; pbus = get_pbus_smbus(dev); - res = find_resource(pbus->dev, 0x90); + if (!smbus_use_aux) -+ res = find_resource(pbus->dev, 0x90); ++ res = find_resource(pbus->dev, PRIMARY_SMBUS_RESOURCE_NUMBER); + else -+ res = find_resource(pbus->dev, 0x58); ++ res = find_resource(pbus->dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); return do_smbus_send_byte(res->base, device, val); } -@@ -340,7 +348,10 @@ static int lsmbus_read_byte(device_t dev, u8 address) +@@ -340,7 +351,10 @@ static int lsmbus_read_byte(device_t dev, u8 address) device = dev->path.i2c.device; pbus = get_pbus_smbus(dev); - res = find_resource(pbus->dev, 0x90); + if (!smbus_use_aux) -+ res = find_resource(pbus->dev, 0x90); ++ res = find_resource(pbus->dev, PRIMARY_SMBUS_RESOURCE_NUMBER); + else -+ res = find_resource(pbus->dev, 0x58); ++ res = find_resource(pbus->dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); return do_smbus_read_byte(res->base, device, address); } -@@ -354,7 +365,10 @@ static int lsmbus_write_byte(device_t dev, u8 address, u8 val) +@@ -354,7 +368,10 @@ static int lsmbus_write_byte(device_t dev, u8 address, u8 val) device = dev->path.i2c.device; pbus = get_pbus_smbus(dev); - res = find_resource(pbus->dev, 0x90); + if (!smbus_use_aux) -+ res = find_resource(pbus->dev, 0x90); ++ res = find_resource(pbus->dev, PRIMARY_SMBUS_RESOURCE_NUMBER); + else -+ res = find_resource(pbus->dev, 0x58); ++ res = find_resource(pbus->dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); return do_smbus_write_byte(res->base, device, address, val); } -@@ -393,7 +407,7 @@ static void sb700_sm_read_resources(device_t dev) +@@ -393,9 +410,18 @@ static void sb700_sm_read_resources(device_t dev) /* dev->command |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER; */ - /* smbus */ +- res = new_resource(dev, 0x90); +- res->base = 0xB00; + /* primary smbus */ - res = new_resource(dev, 0x90); - res->base = 0xB00; - res->size = 0x10; -@@ -402,6 +416,15 @@ static void sb700_sm_read_resources(device_t dev) - res->gran = 8; - res->flags = IORESOURCE_IO | IORESOURCE_FIXED | IORESOURCE_RESERVE | IORESOURCE_ASSIGNED; - -+ /* auxiliary smbus */ -+ res = new_resource(dev, 0x58); -+ res->base = 0xB20; ++ res = new_resource(dev, PRIMARY_SMBUS_RESOURCE_NUMBER); ++ res->base = SMBUS_IO_BASE; + res->size = 0x10; + res->limit = 0xFFFFUL; /* res->base + res->size -1; */ + res->align = 8; + res->gran = 8; + res->flags = IORESOURCE_IO | IORESOURCE_FIXED | IORESOURCE_RESERVE | IORESOURCE_ASSIGNED; + - compact_resources(dev); - } - -@@ -441,6 +464,9 @@ static void sb700_sm_set_resources(struct device *dev) - - res = find_resource(dev, 0x90); - pci_write_config32(dev, 0x90, res->base | 1); ++ /* auxiliary smbus */ ++ res = new_resource(dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); ++ res->base = SMBUS_AUX_IO_BASE; + res->size = 0x10; + res->limit = 0xFFFFUL; /* res->base + res->size -1; */ + res->align = 8; +@@ -439,8 +465,11 @@ static void sb700_sm_set_resources(struct device *dev) + pci_write_config8(dev, 0x65, byte); + /* TODO: End of test hpet */ + +- res = find_resource(dev, 0x90); +- pci_write_config32(dev, 0x90, res->base | 1); ++ res = find_resource(dev, PRIMARY_SMBUS_RESOURCE_NUMBER); ++ pci_write_config32(dev, PRIMARY_SMBUS_RESOURCE_NUMBER, res->base | 1); + -+ res = find_resource(dev, 0x58); -+ pci_write_config32(dev, 0x58, res->base | 1); ++ res = find_resource(dev, AUXILIARY_SMBUS_RESOURCE_NUMBER); ++ pci_write_config32(dev, AUXILIARY_SMBUS_RESOURCE_NUMBER, res->base | 1); } static struct pci_operations lops_pci = { diff --git a/src/southbridge/amd/sb700/smbus.c b/src/southbridge/amd/sb700/smbus.c -index 94f5e24..a89e830 100644 +index 94f5e24..e1cfe6b 100644 --- a/src/southbridge/amd/sb700/smbus.c +++ b/src/southbridge/amd/sb700/smbus.c @@ -22,6 +22,11 @@ @@ -161,8 +166,8 @@ index 94f5e24..a89e830 100644 +extern uint8_t smbus_use_aux; + -+void smbus_switch_to_aux(uint8_t enable_aux); -+uint8_t smbus_switched_to_aux(void); ++void smbus_switch_to_aux_channel(uint8_t aux_channel_number); ++uint8_t smbus_current_aux_channel(void); + void alink_ab_indx(u32 reg_space, u32 reg_addr, u32 mask, u32 val) { @@ -171,17 +176,40 @@ index 94f5e24..a89e830 100644 return 0; } -+void smbus_switch_to_aux(uint8_t enable_aux) ++void smbus_switch_to_aux_channel(uint8_t aux_channel_number) +{ -+ smbus_use_aux = enable_aux; ++ smbus_use_aux = (aux_channel_number != 0); +} + -+uint8_t smbus_switched_to_aux(void) ++uint8_t smbus_current_aux_channel(void) +{ + return smbus_use_aux; +} + #endif +diff --git a/src/southbridge/amd/sb700/smbus.h b/src/southbridge/amd/sb700/smbus.h +index d223fe7..34b4098 100644 +--- a/src/southbridge/amd/sb700/smbus.h ++++ b/src/southbridge/amd/sb700/smbus.h +@@ -2,6 +2,7 @@ + * This file is part of the coreboot project. + * + * Copyright (C) 2010 Advanced Micro Devices, Inc. ++ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by +@@ -24,8 +25,8 @@ + #include "stddef.h" + #include <arch/io.h> + +-#define SMBUS_IO_BASE 0x6000 /* Is it a temporary SMBus I/O base address? */ +- /*SIZE 0x40 */ ++#define SMBUS_IO_BASE 0xb00 ++#define SMBUS_AUX_IO_BASE 0xb20 + + #define SMBHSTSTAT 0x0 + #define SMBSLVSTAT 0x1 -- -1.9.1 +1.7.9.5 |