diff options
Diffstat (limited to 'src/cpu/amd/family_10h-family_15h/init_cpus.c')
-rw-r--r-- | src/cpu/amd/family_10h-family_15h/init_cpus.c | 39 |
1 files changed, 39 insertions, 0 deletions
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 bf1862b7e9..1794072a64 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++) { |