summaryrefslogtreecommitdiff
path: root/src/mainboard/amd
diff options
context:
space:
mode:
authorRudolf Marek <r.marek@assembler.cz>2009-02-03 22:37:22 +0000
committerRudolf Marek <r.marek@assembler.cz>2009-02-03 22:37:22 +0000
commit8db0cfefd16c9aa6dbc0ffdfd9d2ba81a1561650 (patch)
treefce5646fe8cbc78dd2a00937464cafeca6f4a3d4 /src/mainboard/amd
parent742655bb4d18fcb0c5081f6d9c8ba5b870fa0b47 (diff)
downloadcoreboot-8db0cfefd16c9aa6dbc0ffdfd9d2ba81a1561650.tar.xz
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 <r.marek@assembler.cz> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3929 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/mainboard/amd')
-rw-r--r--src/mainboard/amd/dbm690t/acpi_tables.c22
-rw-r--r--src/mainboard/amd/pistachio/acpi_tables.c23
-rw-r--r--src/mainboard/amd/serengeti_cheetah/acpi_tables.c22
3 files changed, 30 insertions, 37 deletions
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 <cpu/x86/msr.h>
#include <cpu/amd/mtrr.h>
#include <cpu/amd/amdk8_sysconf.h>
-
+#include <../../../northbridge/amd/amdk8/amdk8_acpi.h>
#include <arch/cpu.h>
#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 <cpu/x86/msr.h>
#include <cpu/amd/mtrr.h>
#include <cpu/amd/amdk8_sysconf.h>
-
+#include <../../../northbridge/amd/amdk8/amdk8_acpi.h>
#include <arch/cpu.h>
#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 <cpu/x86/msr.h>
#include <cpu/amd/mtrr.h>
#include <cpu/amd/amdk8_sysconf.h>
+#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