@@ -1492,6 +1492,7 @@ const struct penable chipset_enables[] = {
{0x1022, 0x7440, OK, "AMD", "AMD-768", enable_flash_amd_768_8111},
{0x1022, 0x7468, OK, "AMD", "AMD-8111", enable_flash_amd_768_8111},
{0x1022, 0x780e, OK, "AMD", "FCH", enable_flash_sb600},
+ {0x1022, 0x790e, OK, "AMD", "Promontory", enable_flash_sb600},
{0x1039, 0x0406, NT, "SiS", "501/5101/5501", enable_flash_sis501},
{0x1039, 0x0496, NT, "SiS", "85C496+497", enable_flash_sis85c496},
{0x1039, 0x0530, OK, "SiS", "530", enable_flash_sis530},
@@ -53,6 +53,7 @@ enum amd_chipset {
CHIPSET_HUDSON234,
CHIPSET_BOLTON,
CHIPSET_YANGTZE,
+ CHIPSET_PROMONTORY,
};
static enum amd_chipset amd_gen = CHIPSET_AMD_UNKNOWN;
@@ -150,6 +151,9 @@ static void determine_generation(struct pci_dev *dev)
"the output of lspci -nnvx, thanks!.\n", rev);
}
#endif
+ } else if (dev->device_id == 0x790e) {
+ amd_gen = CHIPSET_PROMONTORY;
+ msg_pdbg("Promontory (Ryzen) detected.\n");
} else
msg_pwarn("%s: Unknown LPC device %" PRIx16 ":%" PRIx16 ".\n"
"Please report this to flashrom@flashrom.org and include this log and\n"
@@ -577,7 +581,7 @@ int sb600_probe_spi(struct pci_dev *dev)
msg_pdbg("SpiRomEnable=%i", (tmp >> 1) & 0x1);
if (amd_gen == CHIPSET_SB7XX)
msg_pdbg(", AltSpiCSEnable=%i, AbortEnable=%i", tmp & 0x1, (tmp >> 2) & 0x1);
- else if (amd_gen == CHIPSET_YANGTZE)
+ else if (amd_gen >= CHIPSET_YANGTZE)
msg_pdbg(", RouteTpm2Sp=%i", (tmp >> 3) & 0x1);
tmp = pci_read_byte(dev, 0xba);
@@ -613,13 +617,13 @@ int sb600_probe_spi(struct pci_dev *dev)
*/
tmp = mmio_readl(sb600_spibar + 0x00);
msg_pdbg("(0x%08" PRIx32 ") SpiArbEnable=%i", tmp, (tmp >> 19) & 0x1);
- if (amd_gen == CHIPSET_YANGTZE)
+ if (amd_gen >= CHIPSET_YANGTZE)
msg_pdbg(", IllegalAccess=%i", (tmp >> 21) & 0x1);
msg_pdbg(", SpiAccessMacRomEn=%i, SpiHostAccessRomEn=%i, ArbWaitCount=%i",
(tmp >> 22) & 0x1, (tmp >> 23) & 0x1, (tmp >> 24) & 0x7);
- if (amd_gen != CHIPSET_YANGTZE)
+ if (amd_gen < CHIPSET_YANGTZE)
msg_pdbg(", SpiBridgeDisable=%i", (tmp >> 27) & 0x1);
switch (amd_gen) {
@@ -628,6 +632,7 @@ int sb600_probe_spi(struct pci_dev *dev)
case CHIPSET_SB89XX:
case CHIPSET_HUDSON234:
case CHIPSET_YANGTZE:
+ case CHIPSET_PROMONTORY:
msg_pdbg(", SpiBusy=%i", (tmp >> 31) & 0x1);
default: break;
}
@@ -690,7 +695,7 @@ int sb600_probe_spi(struct pci_dev *dev)
return ERROR_FATAL;
/* Starting with Yangtze the SPI controller got a different interface with a much bigger buffer. */
- if (amd_gen != CHIPSET_YANGTZE)
+ if (amd_gen < CHIPSET_YANGTZE)
register_spi_master(&spi_master_sb600);
else
register_spi_master(&spi_master_yangtze);
Signed-off-by: Stefan Tauner <stefan.tauner@gmx.at> --- chipset_enable.c | 1 + sb600spi.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) This is the first and very crude version of a patch to support Ryzen. I have no datasheet (neither does the internet AFAICT). The patch prepares sb600_spi.c for Propmonotry support distinct from Yangtze but does not implement any differences so far (because we don't know any yet).