aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/nvidia/ck804/early_setup_car.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/southbridge/nvidia/ck804/early_setup_car.c')
-rw-r--r--src/southbridge/nvidia/ck804/early_setup_car.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/southbridge/nvidia/ck804/early_setup_car.c b/src/southbridge/nvidia/ck804/early_setup_car.c
index 8065d20fdb..87fdbdd4d6 100644
--- a/src/southbridge/nvidia/ck804/early_setup_car.c
+++ b/src/southbridge/nvidia/ck804/early_setup_car.c
@@ -142,7 +142,15 @@ static void ck804_early_setup(unsigned ck804_num, unsigned *busn,
CK804_MB_SETUP
#endif
-#ifndef CK804_SKIP_PCI_REG_78_INIT
+#if IS_ENABLED(CONFIG_NORTHBRIDGE_AMD_AMDFAM10)
+ /*
+ * Avoid crash (complete with severe memory corruption!) during initial CAR boot
+ * in ck804_early_setup_x() on Fam10h systems by not touching 0x78.
+ * Interestingly once the system is fully booted into Linux this can be set, but
+ * not before! Apparently something isn't initialized but the amount of effort
+ * required to fix this is non-negligible and of unknown real-world benefit
+ */
+#else
RES_PCI_IO, PCI_ADDR(0, 1, 0, 0x78), 0xc0ffffff, 0x19000000,
#endif
RES_PCI_IO, PCI_ADDR(0, 1, 0, 0xe0), 0xfffffeff, 0x00000100,
@@ -239,6 +247,10 @@ static void ck804_early_setup(unsigned ck804_num, unsigned *busn,
RES_PCI_IO, PCI_ADDR(0, 9, 0, 0x4c), 0xfe00ffff, 0x00440000,
RES_PCI_IO, PCI_ADDR(0, 9, 0, 0x74), 0xffffffc0, 0x00000000,
+ /*
+ * Avoid touching 0x78 for CONFIG_NORTHBRIDGE_AMD_AMDFAM10 for
+ * non-primary chains too???
+ */
RES_PCI_IO, PCI_ADDR(0, 1, 0, 0x78), 0xc0ffffff, 0x20000000,
RES_PCI_IO, PCI_ADDR(0, 1, 0, 0xe0), 0xfffffeff, 0x00000000,
RES_PCI_IO, PCI_ADDR(0, 1, 0, 0xe8), 0xffffff00, 0x000000ff,