From 8db0cfefd16c9aa6dbc0ffdfd9d2ba81a1561650 Mon Sep 17 00:00:00 2001 From: Rudolf Marek Date: Tue, 3 Feb 2009 22:37:22 +0000 Subject: Following patch converts the run-time SSDT patching via update_ssdt funtion to new AML code generator. Compile-tested on all changed targets. I think it should work because it works for Asus M2V-MX SE. Signed-off-by: Rudolf Marek Acked-by: Carl-Daniel Hailfinger git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3929 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/mainboard/amd/dbm690t/acpi_tables.c | 22 ++++++++++------------ src/mainboard/amd/pistachio/acpi_tables.c | 23 ++++++++++------------- src/mainboard/amd/serengeti_cheetah/acpi_tables.c | 22 ++++++++++------------ 3 files changed, 30 insertions(+), 37 deletions(-) (limited to 'src/mainboard/amd') diff --git a/src/mainboard/amd/dbm690t/acpi_tables.c b/src/mainboard/amd/dbm690t/acpi_tables.c index 893ac158fd..0d890b5c60 100644 --- a/src/mainboard/amd/dbm690t/acpi_tables.c +++ b/src/mainboard/amd/dbm690t/acpi_tables.c @@ -25,7 +25,7 @@ #include #include #include - +#include <../../../northbridge/amd/amdk8/amdk8_acpi.h> #include #define DUMP_ACPI_TABLES 0 @@ -99,8 +99,6 @@ unsigned long acpi_fill_madt(unsigned long current) extern void get_bus_conf(void); -extern void update_ssdt(void *ssdt); - void update_ssdtx(void *ssdtx, int i) { uint8_t *PCI; @@ -591,6 +589,11 @@ u32 pstates_algorithm(acpi_header_t * dsdt) } +unsigned long acpi_fill_ssdt_generator(unsigned long current, char *oem_table_id) { + k8acpi_write_vars(); + return (unsigned long) (acpigen_get_current()); +} + unsigned long write_acpi_tables(unsigned long start) { unsigned long current; @@ -657,15 +660,10 @@ unsigned long write_acpi_tables(unsigned long start) /* SSDT */ printk_debug("ACPI: * SSDT\n"); - ssdt = (acpi_header_t *) current; - current += ((acpi_header_t *) AmlCode_ssdt)->length; - memcpy((void *)ssdt, (void *)AmlCode_ssdt, - ((acpi_header_t *) AmlCode_ssdt)->length); - /* Here you need to set value in pci1234, sblk and sbdn in get_bus_conf.c */ - update_ssdt((void *)ssdt); - /* recalculate checksum */ - ssdt->checksum = 0; - ssdt->checksum = acpi_checksum((u8 *)ssdt, ssdt->length); + ssdt = (acpi_header_t *)current; + + acpi_create_ssdt_generator(ssdt, "DYNADATA"); + current += ssdt->length; acpi_add_table(rsdt, ssdt); #if ACPI_SSDTX_NUM >= 1 diff --git a/src/mainboard/amd/pistachio/acpi_tables.c b/src/mainboard/amd/pistachio/acpi_tables.c index 893ac158fd..57d8214e66 100644 --- a/src/mainboard/amd/pistachio/acpi_tables.c +++ b/src/mainboard/amd/pistachio/acpi_tables.c @@ -25,7 +25,7 @@ #include #include #include - +#include <../../../northbridge/amd/amdk8/amdk8_acpi.h> #include #define DUMP_ACPI_TABLES 0 @@ -55,7 +55,6 @@ static void dump_mem(u32 start, u32 end) #endif extern u8 AmlCode[]; -extern u8 AmlCode_ssdt[]; #if ACPI_SSDTX_NUM >= 1 extern u8 AmlCode_ssdt2[]; @@ -99,8 +98,6 @@ unsigned long acpi_fill_madt(unsigned long current) extern void get_bus_conf(void); -extern void update_ssdt(void *ssdt); - void update_ssdtx(void *ssdtx, int i) { uint8_t *PCI; @@ -591,6 +588,11 @@ u32 pstates_algorithm(acpi_header_t * dsdt) } +unsigned long acpi_fill_ssdt_generator(unsigned long current, char *oem_table_id) { + k8acpi_write_vars(); + return (unsigned long) (acpigen_get_current()); +} + unsigned long write_acpi_tables(unsigned long start) { unsigned long current; @@ -657,15 +659,10 @@ unsigned long write_acpi_tables(unsigned long start) /* SSDT */ printk_debug("ACPI: * SSDT\n"); - ssdt = (acpi_header_t *) current; - current += ((acpi_header_t *) AmlCode_ssdt)->length; - memcpy((void *)ssdt, (void *)AmlCode_ssdt, - ((acpi_header_t *) AmlCode_ssdt)->length); - /* Here you need to set value in pci1234, sblk and sbdn in get_bus_conf.c */ - update_ssdt((void *)ssdt); - /* recalculate checksum */ - ssdt->checksum = 0; - ssdt->checksum = acpi_checksum((u8 *)ssdt, ssdt->length); + ssdt = (acpi_header_t *)current; + + acpi_create_ssdt_generator(ssdt, "DYNADATA"); + current += ssdt->length; acpi_add_table(rsdt, ssdt); #if ACPI_SSDTX_NUM >= 1 diff --git a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c index ddc8c1826f..d671907687 100644 --- a/src/mainboard/amd/serengeti_cheetah/acpi_tables.c +++ b/src/mainboard/amd/serengeti_cheetah/acpi_tables.c @@ -16,6 +16,7 @@ #include #include #include +#include <../../../northbridge/amd/amdk8/amdk8_acpi.h> #include "mb_sysconf.h" @@ -38,8 +39,6 @@ static void dump_mem(unsigned start, unsigned end) #endif extern unsigned char AmlCode[]; -extern unsigned char AmlCode_ssdt[]; - #if ACPI_SSDTX_NUM >= 1 extern unsigned char AmlCode_ssdt2[]; extern unsigned char AmlCode_ssdt3[]; @@ -157,8 +156,6 @@ unsigned long acpi_fill_madt(unsigned long current) extern void get_bus_conf(void); -extern void update_ssdt(void *ssdt); - void update_ssdtx(void *ssdtx, int i) { uint8_t *PCI; @@ -182,6 +179,11 @@ void update_ssdtx(void *ssdtx, int i) } +unsigned long acpi_fill_ssdt_generator(unsigned long current, char *oem_table_id) { + k8acpi_write_vars(); + return (unsigned long) (acpigen_get_current()); +} + unsigned long write_acpi_tables(unsigned long start) { unsigned long current; @@ -256,14 +258,10 @@ unsigned long write_acpi_tables(unsigned long start) /* SSDT */ printk_debug("ACPI: * SSDT\n"); ssdt = (acpi_header_t *)current; - current += ((acpi_header_t *)AmlCode_ssdt)->length; - memcpy((void *)ssdt, (void *)AmlCode_ssdt, ((acpi_header_t *)AmlCode_ssdt)->length); - //Here you need to set value in pci1234, sblk and sbdn in get_bus_conf.c - update_ssdt((void*)ssdt); - /* recalculate checksum */ - ssdt->checksum = 0; - ssdt->checksum = acpi_checksum((unsigned char *)ssdt,ssdt->length); - acpi_add_table(rsdt,ssdt); + + acpi_create_ssdt_generator(ssdt, "DYNADATA"); + current += ssdt->length; + acpi_add_table(rsdt, ssdt); #if ACPI_SSDTX_NUM >= 1 -- cgit v1.2.3