summaryrefslogtreecommitdiffstats
path: root/resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch')
-rw-r--r--resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch b/resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch
new file mode 100644
index 0000000..35d0d6c
--- /dev/null
+++ b/resources/libreboot/patch/coreboot/369b561315ca68d0cdedc38208105a513c7139b5/grub/kcma-d8/0010-cpu-amd-family_10h-family_15h-Set-LDT-tristate-corre.patch
@@ -0,0 +1,99 @@
+From c4669801294d56534e4ac4de3ab71de39afe90d8 Mon Sep 17 00:00:00 2001
+From: Timothy Pearson <tpearson@raptorengineeringinc.com>
+Date: Tue, 24 Nov 2015 14:11:47 -0600
+Subject: [PATCH 10/45] cpu/amd/family_10h-family_15h: Set LDT tristate
+ correctly on C32 sockets
+
+The existing code unconditionally cleared the LDT tristate enable bit,
+which was incorrect for C32 sockets. Update the code to be in line
+with the BKDG recommendations.
+
+Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
+---
+ src/cpu/amd/family_10h-family_15h/defaults.h | 19 -------------
+ src/cpu/amd/family_10h-family_15h/init_cpus.c | 39 +++++++++++++++++++++++++++
+ 2 files changed, 39 insertions(+), 19 deletions(-)
+
+diff --git a/src/cpu/amd/family_10h-family_15h/defaults.h b/src/cpu/amd/family_10h-family_15h/defaults.h
+index 57c0518..3618cb8 100644
+--- a/src/cpu/amd/family_10h-family_15h/defaults.h
++++ b/src/cpu/amd/family_10h-family_15h/defaults.h
+@@ -260,25 +260,6 @@ static const struct {
+ { 0, 0xE4, AMD_FAM10_ALL, AMD_PTYPE_ALL,
+ 0x00002000, 0x00002000 }, /* [13] LdtStopTriEn = 1 */
+
+- /* FIXME
+- * Non-C32 packages only
+- */
+- { 0, 0x84, AMD_FAM15_ALL, AMD_PTYPE_ALL,
+- 0x00000000, 0x00002000 }, /* [13] LdtStopTriEn = 1 */
+-
+- { 0, 0xA4, AMD_FAM15_ALL, AMD_PTYPE_ALL,
+- 0x00000000, 0x00002000 }, /* [13] LdtStopTriEn = 1 */
+-
+- { 0, 0xC4, AMD_FAM15_ALL, AMD_PTYPE_ALL,
+- 0x00000000, 0x00002000 }, /* [13] LdtStopTriEn = 1 */
+-
+- { 0, 0xE4, AMD_FAM15_ALL, AMD_PTYPE_ALL,
+- 0x00000000, 0x00002000 }, /* [13] LdtStopTriEn = 1 */
+-
+- /* FIXME
+- * C32 package is not supported at this time
+- */
+-
+ /* Link Global Retry Control Register */
+ { 0, 0x150, (AMD_FAM10_ALL | AMD_FAM15_ALL), AMD_PTYPE_ALL,
+ 0x00073900, 0x00073f70 }, /* TotalRetryAttempts = 0x7,
+diff --git a/src/cpu/amd/family_10h-family_15h/init_cpus.c b/src/cpu/amd/family_10h-family_15h/init_cpus.c
+index bf1862b..1794072 100644
+--- a/src/cpu/amd/family_10h-family_15h/init_cpus.c
++++ b/src/cpu/amd/family_10h-family_15h/init_cpus.c
+@@ -1095,6 +1095,45 @@ static void cpuSetAMDPCI(u8 node)
+ }
+ }
+
++ if (is_fam15h()) {
++ if (CONFIG_CPU_SOCKET_TYPE == 0x14) {
++ /* Socket C32 */
++ dword = pci_read_config32(NODE_PCI(node, 0), 0x84);
++ dword |= 0x1 << 13; /* LdtStopTriEn = 1 */
++ pci_write_config32(NODE_PCI(node, 0), 0x84, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xa4);
++ dword |= 0x1 << 13; /* LdtStopTriEn = 1 */
++ pci_write_config32(NODE_PCI(node, 0), 0xa4, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xc4);
++ dword |= 0x1 << 13; /* LdtStopTriEn = 1 */
++ pci_write_config32(NODE_PCI(node, 0), 0xc4, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xe4);
++ dword |= 0x1 << 13; /* LdtStopTriEn = 1 */
++ pci_write_config32(NODE_PCI(node, 0), 0xe4, dword);
++ }
++ else {
++ /* Other socket (G34, etc.) */
++ dword = pci_read_config32(NODE_PCI(node, 0), 0x84);
++ dword &= ~(0x1 << 13); /* LdtStopTriEn = 0 */
++ pci_write_config32(NODE_PCI(node, 0), 0x84, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xa4);
++ dword &= ~(0x1 << 13); /* LdtStopTriEn = 0 */
++ pci_write_config32(NODE_PCI(node, 0), 0xa4, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xc4);
++ dword &= ~(0x1 << 13); /* LdtStopTriEn = 0 */
++ pci_write_config32(NODE_PCI(node, 0), 0xc4, dword);
++
++ dword = pci_read_config32(NODE_PCI(node, 0), 0xe4);
++ dword &= ~(0x1 << 13); /* LdtStopTriEn = 0 */
++ pci_write_config32(NODE_PCI(node, 0), 0xe4, dword);
++ }
++ }
++
+ #ifdef DEBUG_HT_SETUP
+ /* Dump link settings */
+ for (i = 0; i < 4; i++) {
+--
+2.1.4
+