ASRock E350M1: ACPI-related BSOD fix
authorScott Duplichan <scott@notabs.org>
Sun, 10 Jul 2011 01:14:20 +0000 (20:14 -0500)
committerPeter Stuge <peter@stuge.se>
Sun, 10 Jul 2011 16:31:29 +0000 (18:31 +0200)
On installing/starting Windows (tested with Win7 Ultimate)
the system crashes with a Blue Screen of Death, reporting an ACPI BIOS error.

From Scott Duplichan:
To avoid the Windows BSOD, the uninitialized value TOM1 in the SSDT
must be corrected. The attached patch does this. It uses the older
patching method, and not the (possibly preferred) AML generation
method. To simplify the patching operation, I moved the AML item
'TOM1' to the start of the SSDT. The patch also includes code to
confirm the AML variable TOM1 is at the expected offset before patching.

Also tested & working with Linux.

Change-Id: I59cedc366e09d98f690b093d6a21fc0c864559c3
Signed-off-by: Scott Duplichan <scott@notabs.org>
Acked-by: Marshall Buschman <mbuschman@lucidmachines.com>
Reviewed-on: http://review.coreboot.org/91
Tested-by: build bot (Jenkins)
Reviewed-by: Peter Stuge <peter@stuge.se>
src/mainboard/asrock/e350m1/acpi_tables.c
src/northbridge/amd/agesa/family14/ssdt.asl

index 20b0dc2f60eff1560c66f972c195da2151986d52..cd0a99686117d51e62f29b5abeeeff912744f7aa 100644 (file)
@@ -185,6 +185,11 @@ unsigned long write_acpi_tables(unsigned long start)
     memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
     current += ssdt->length;
     memcpy(ssdt, &AmlCode_ssdt, ssdt->length);
+
+    char *position = ssdt;
+    if (memcmp (position + 50, "TOM1", 4) == 0)
+        *(u32 *) (position + 55) = __readmsr (0xc001001a);
+
    /* recalculate checksum */
     ssdt->checksum = 0;
     ssdt->checksum = acpi_checksum((unsigned char *)ssdt,ssdt->length);
index e69012bc66786d18f559161fc5a37f88a22effd6..1e694db68d6e5deee08a002d25c2d24b5e638072 100644 (file)
@@ -30,6 +30,7 @@ DefinitionBlock ("SSDT.aml", "SSDT", 1, "AMD-FAM14H", "AMD-ACPI", 0x1000)
 
        Scope (\_SB.PCI0)
        {
+               Name (TOM1, 0xaaaaaaaa)
                Name (BUSN, Package (0x20) /* HC_NUMS */
                {
                        0x11111111,
@@ -264,7 +265,6 @@ DefinitionBlock ("SSDT.aml", "SSDT", 1, "AMD-FAM14H", "AMD-ACPI", 0x1000)
                        0x44444444
                })
                Name (SBLK, 0x11)
-               Name (TOM1, 0xaaaaaaaa)
                Name (SBDN, 0xbbbbbbbb)
                Name (HCLK, Package (0x20) /* HC_POSSIBLE_NUM */
                {