Add QWord support to acpigen.

Add TOM2 to the K8 DSDT.

Signed-off-by: Carl-Daniel Hailfinger <[email protected]>

Compile tested only.

--- LinuxBIOSv2-asus_m2a-vm/src/northbridge/amd/amdk8/amdk8_acpi.c      
(Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/northbridge/amd/amdk8/amdk8_acpi.c      
(Arbeitskopie)
@@ -302,6 +302,8 @@
        lens += acpigen_write_name_dword("SBDN", sysconf.sbdn);
        msr = rdmsr(TOP_MEM);
        lens += acpigen_write_name_dword("TOM1", msr.lo);
+       msr = rdmsr(TOP_MEM2);
+       lens += acpigen_write_name_qword("TOM2", (msr.hi << 32) | msr.lo);
 
        lens += k8acpi_write_HT();
        //minus opcode
--- LinuxBIOSv2-asus_m2a-vm/src/arch/i386/boot/acpigen.c        (Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/arch/i386/boot/acpigen.c        (Arbeitskopie)
@@ -97,6 +97,21 @@
        return 5;
 }
 
+int acpigen_write_qword(uint64_t data)
+{
+       /* qword op */
+       acpigen_emit_byte(0xc);
+       acpigen_emit_byte(data & 0xff);
+       acpigen_emit_byte((data >> 8) & 0xff);
+       acpigen_emit_byte((data >> 16) & 0xff);
+       acpigen_emit_byte((data >> 24) & 0xff);
+       acpigen_emit_byte((data >> 32) & 0xff);
+       acpigen_emit_byte((data >> 40) & 0xff);
+       acpigen_emit_byte((data >> 48) & 0xff);
+       acpigen_emit_byte((data >> 56) & 0xff);
+       return 9;
+}
+
 int acpigen_write_name_byte(char *name, uint8_t val) {
        int len;
        len = acpigen_write_name(name);
@@ -111,6 +126,13 @@
        return len;
 }
 
+int acpigen_write_name_qword(char *name, uint64_t val) {
+       int len;
+       len = acpigen_write_name(name);
+       len += acpigen_write_qword(val);
+       return len;
+}
+
 int acpigen_emit_stream(char *data, int size) {
        int i;
        for (i = 0; i < size; i++) {
--- LinuxBIOSv2-asus_m2a-vm/src/arch/i386/include/arch/acpigen.h        
(Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/arch/i386/include/arch/acpigen.h        
(Arbeitskopie)
@@ -30,8 +30,10 @@
 int acpigen_emit_byte(unsigned char data);
 int acpigen_emit_stream(char *data, int size);
 int acpigen_write_dword(unsigned int data);
+int acpigen_write_qword(uint64_t data);
 int acpigen_write_name(char *name);
 int acpigen_write_name_dword(char *name, uint32_t val);
+int acpigen_write_name_qword(char *name, uint64_t val);
 int acpigen_write_name_byte(char *name, uint8_t val);
 int acpigen_write_scope(char *name);
 int acpigen_write_PPC(u8 nr);


-- 
http://www.hailfinger.org/

--- LinuxBIOSv2-asus_m2a-vm/src/northbridge/amd/amdk8/amdk8_acpi.c      
(Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/northbridge/amd/amdk8/amdk8_acpi.c      
(Arbeitskopie)
@@ -302,6 +302,8 @@
        lens += acpigen_write_name_dword("SBDN", sysconf.sbdn);
        msr = rdmsr(TOP_MEM);
        lens += acpigen_write_name_dword("TOM1", msr.lo);
+       msr = rdmsr(TOP_MEM2);
+       lens += acpigen_write_name_qword("TOM2", (msr.hi << 32) | msr.lo);
 
        lens += k8acpi_write_HT();
        //minus opcode
--- LinuxBIOSv2-asus_m2a-vm/src/arch/i386/boot/acpigen.c        (Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/arch/i386/boot/acpigen.c        (Arbeitskopie)
@@ -97,6 +97,21 @@
        return 5;
 }
 
+int acpigen_write_qword(uint64_t data)
+{
+       /* qword op */
+       acpigen_emit_byte(0xc);
+       acpigen_emit_byte(data & 0xff);
+       acpigen_emit_byte((data >> 8) & 0xff);
+       acpigen_emit_byte((data >> 16) & 0xff);
+       acpigen_emit_byte((data >> 24) & 0xff);
+       acpigen_emit_byte((data >> 32) & 0xff);
+       acpigen_emit_byte((data >> 40) & 0xff);
+       acpigen_emit_byte((data >> 48) & 0xff);
+       acpigen_emit_byte((data >> 56) & 0xff);
+       return 9;
+}
+
 int acpigen_write_name_byte(char *name, uint8_t val) {
        int len;
        len = acpigen_write_name(name);
@@ -111,6 +126,13 @@
        return len;
 }
 
+int acpigen_write_name_qword(char *name, uint64_t val) {
+       int len;
+       len = acpigen_write_name(name);
+       len += acpigen_write_qword(val);
+       return len;
+}
+
 int acpigen_emit_stream(char *data, int size) {
        int i;
        for (i = 0; i < size; i++) {
--- LinuxBIOSv2-asus_m2a-vm/src/arch/i386/include/arch/acpigen.h        
(Revision 3950)
+++ LinuxBIOSv2-asus_m2a-vm/src/arch/i386/include/arch/acpigen.h        
(Arbeitskopie)
@@ -30,8 +30,10 @@
 int acpigen_emit_byte(unsigned char data);
 int acpigen_emit_stream(char *data, int size);
 int acpigen_write_dword(unsigned int data);
+int acpigen_write_qword(uint64_t data);
 int acpigen_write_name(char *name);
 int acpigen_write_name_dword(char *name, uint32_t val);
+int acpigen_write_name_qword(char *name, uint64_t val);
 int acpigen_write_name_byte(char *name, uint8_t val);
 int acpigen_write_scope(char *name);
 int acpigen_write_PPC(u8 nr);
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to