amdfam10: Move to per-device ACPI
Change-Id: I9ce2333e1ea527843f83d411dea2a669263156c2 Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: http://review.coreboot.org/7027 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
parent
25819d357b
commit
2a19fb1d76
@ -3,3 +3,4 @@ ramstage-y += model_10xxx_init.c
|
|||||||
ramstage-y += processor_name.c
|
ramstage-y += processor_name.c
|
||||||
|
|
||||||
romstage-$(CONFIG_UPDATE_CPU_MICROCODE) += update_microcode.c
|
romstage-$(CONFIG_UPDATE_CPU_MICROCODE) += update_microcode.c
|
||||||
|
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += powernow_acpi.c
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of the coreboot project.
|
* This file is part of the coreboot project.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
* Copyright (C) 2008 Advanced Micro Devices, Inc.
|
||||||
|
* Copyright (C) 2009 Rudolf Marek <r.marek@assembler.cz>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -17,23 +18,14 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DefinitionBlock ("SSPR.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925441)
|
#include <console/console.h>
|
||||||
{
|
#include <stdint.h>
|
||||||
Scope (\_SB)
|
#include <cpu/x86/msr.h>
|
||||||
{
|
#include <arch/acpigen.h>
|
||||||
Processor (\_SB.CPAA, 0xbb, 0x120, 6) // CPU0 and 0x01 need to be updated
|
#include <cpu/amd/powernow.h>
|
||||||
{
|
|
||||||
Name(_PCT, Package ()
|
|
||||||
{
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_CTRL
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_STATUS
|
|
||||||
})
|
|
||||||
|
|
||||||
Name(_PSS, Package()
|
/* FIXME: this should be implemented but right now all boards hardcode it. */
|
||||||
|
int amd_generate_powernow(u32 pcontrol_blk, u8 plen, u8 onlyBSP)
|
||||||
{
|
{
|
||||||
Package(0x06) {0x1111, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
return 0;
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -69,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -69,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -29,37 +29,6 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_table_id)
|
|
||||||
{
|
|
||||||
int lens;
|
|
||||||
msr_t msr;
|
|
||||||
char pscope[] = "\\_SB.PCI0";
|
|
||||||
|
|
||||||
lens = acpigen_write_scope(pscope);
|
|
||||||
msr = rdmsr(TOP_MEM);
|
|
||||||
lens += acpigen_write_name_dword("TOM1", msr.lo);
|
|
||||||
msr = rdmsr(TOP_MEM2);
|
|
||||||
/*
|
|
||||||
* Since XP only implements parts of ACPI 2.0, we can't use a qword
|
|
||||||
* here.
|
|
||||||
* See http://www.acpi.info/presentations/S01USMOBS169_OS%2520new.ppt
|
|
||||||
* slide 22ff.
|
|
||||||
* Shift value right by 20 bit to make it fit into 32bit,
|
|
||||||
* giving us 1MB granularity and a limit of almost 4Exabyte of memory.
|
|
||||||
*/
|
|
||||||
lens += acpigen_write_name_dword("TOM2", (msr.hi << 12) | msr.lo >> 20);
|
|
||||||
acpigen_patch_len(lens - 1);
|
|
||||||
|
|
||||||
/* TODO: More HT and other tables need to go into this table generation.
|
|
||||||
* This should also be moved out to the silicon level if it can.
|
|
||||||
*/
|
|
||||||
|
|
||||||
return (unsigned long) (acpigen_get_current());
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -84,108 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * coreboot PSTATE/TOM SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *) current;
|
|
||||||
acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);
|
|
||||||
current += ssdt->length;
|
|
||||||
acpi_add_table(rsdp,ssdt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -28,9 +28,7 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
#include "mainboard.h"
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
extern const unsigned char AmlCode_ssdt2[];
|
||||||
@ -39,12 +37,6 @@ extern const unsigned char AmlCode_ssdt4[];
|
|||||||
extern const unsigned char AmlCode_ssdt5[];
|
extern const unsigned char AmlCode_ssdt5[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
u32 gsi_base=0x18;
|
u32 gsi_base=0x18;
|
||||||
@ -141,19 +133,9 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
unsigned long mainboard_write_acpi_tables(unsigned long current,
|
||||||
|
acpi_rsdp_t *rsdp)
|
||||||
{
|
{
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
acpi_header_t *ssdtx;
|
acpi_header_t *ssdtx;
|
||||||
void *p;
|
void *p;
|
||||||
|
|
||||||
@ -161,97 +143,6 @@ unsigned long write_acpi_tables(unsigned long start)
|
|||||||
|
|
||||||
get_bus_conf(); //it will get sblk, pci1234, hcdn, and sbdn
|
get_bus_conf(); //it will get sblk, pci1234, hcdn, and sbdn
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current;
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n", dsdt, dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current;
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n", current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current+=madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current+=srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current+=slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp, ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
/* same htio, but different possition? We may have to copy,
|
/* same htio, but different possition? We may have to copy,
|
||||||
@ -293,6 +184,5 @@ unsigned long write_acpi_tables(unsigned long start)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
15
src/mainboard/amd/serengeti_cheetah_fam10/mainboard.c
Normal file
15
src/mainboard/amd/serengeti_cheetah_fam10/mainboard.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <console/console.h>
|
||||||
|
#include <device/device.h>
|
||||||
|
#include <arch/acpi.h>
|
||||||
|
#include <arch/acpi.h>
|
||||||
|
#include <arch/acpigen.h>
|
||||||
|
#include "mainboard.h"
|
||||||
|
|
||||||
|
static void mainboard_enable(device_t dev)
|
||||||
|
{
|
||||||
|
dev->ops->write_acpi_tables = mainboard_write_acpi_tables;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct chip_operations mainboard_ops = {
|
||||||
|
.enable_dev = mainboard_enable,
|
||||||
|
};
|
2
src/mainboard/amd/serengeti_cheetah_fam10/mainboard.h
Normal file
2
src/mainboard/amd/serengeti_cheetah_fam10/mainboard.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
unsigned long mainboard_write_acpi_tables(unsigned long start, acpi_rsdp_t *rsdp);
|
||||||
|
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -29,16 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -63,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -53,12 +53,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -28,16 +28,6 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -62,160 +52,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,37 +29,6 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_table_id)
|
|
||||||
{
|
|
||||||
int lens;
|
|
||||||
msr_t msr;
|
|
||||||
char pscope[] = "\\_SB.PCI0";
|
|
||||||
|
|
||||||
lens = acpigen_write_scope(pscope);
|
|
||||||
msr = rdmsr(TOP_MEM);
|
|
||||||
lens += acpigen_write_name_dword("TOM1", msr.lo);
|
|
||||||
msr = rdmsr(TOP_MEM2);
|
|
||||||
/*
|
|
||||||
* Since XP only implements parts of ACPI 2.0, we can't use a qword
|
|
||||||
* here.
|
|
||||||
* See http://www.acpi.info/presentations/S01USMOBS169_OS%2520new.ppt
|
|
||||||
* slide 22ff.
|
|
||||||
* Shift value right by 20 bit to make it fit into 32bit,
|
|
||||||
* giving us 1MB granularity and a limit of almost 4Exabyte of memory.
|
|
||||||
*/
|
|
||||||
lens += acpigen_write_name_dword("TOM2", (msr.hi << 12) | msr.lo >> 20);
|
|
||||||
acpigen_patch_len(lens - 1);
|
|
||||||
|
|
||||||
/* TODO: More HT and other tables need to go into this table generation.
|
|
||||||
* This should also be moved out to the silicon level if it can.
|
|
||||||
*/
|
|
||||||
|
|
||||||
return (unsigned long) (acpigen_get_current());
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -84,108 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * coreboot PSTATE/TOM SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *) current;
|
|
||||||
acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);
|
|
||||||
current += ssdt->length;
|
|
||||||
acpi_add_table(rsdp,ssdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -69,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,22 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -69,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,16 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -63,160 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -27,16 +27,6 @@
|
|||||||
#include <cpu/amd/mtrr.h>
|
#include <cpu/amd/mtrr.h>
|
||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -61,160 +51,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -27,16 +27,6 @@
|
|||||||
#include <cpu/amd/mtrr.h>
|
#include <cpu/amd/mtrr.h>
|
||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -61,160 +51,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -55,12 +55,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -29,37 +29,6 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_table_id)
|
|
||||||
{
|
|
||||||
int lens;
|
|
||||||
msr_t msr;
|
|
||||||
char pscope[] = "\\_SB.PCI0";
|
|
||||||
|
|
||||||
lens = acpigen_write_scope(pscope);
|
|
||||||
msr = rdmsr(TOP_MEM);
|
|
||||||
lens += acpigen_write_name_dword("TOM1", msr.lo);
|
|
||||||
msr = rdmsr(TOP_MEM2);
|
|
||||||
/*
|
|
||||||
* Since XP only implements parts of ACPI 2.0, we can't use a qword
|
|
||||||
* here.
|
|
||||||
* See http://www.acpi.info/presentations/S01USMOBS169_OS%2520new.ppt
|
|
||||||
* slide 22ff.
|
|
||||||
* Shift value right by 20 bit to make it fit into 32bit,
|
|
||||||
* giving us 1MB granularity and a limit of almost 4Exabyte of memory.
|
|
||||||
*/
|
|
||||||
lens += acpigen_write_name_dword("TOM2", (msr.hi << 12) | msr.lo >> 20);
|
|
||||||
acpigen_patch_len(lens - 1);
|
|
||||||
|
|
||||||
/* TODO: More HT and other tables need to go into this table generation.
|
|
||||||
* This should also be moved out to the silicon level if it can.
|
|
||||||
*/
|
|
||||||
|
|
||||||
return (unsigned long) (acpigen_get_current());
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -84,108 +53,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * coreboot PSTATE/TOM SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *) current;
|
|
||||||
acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);
|
|
||||||
current += ssdt->length;
|
|
||||||
acpi_add_table(rsdp,ssdt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -28,16 +28,6 @@
|
|||||||
#include <cpu/amd/mtrr.h>
|
#include <cpu/amd/mtrr.h>
|
||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
@ -62,160 +52,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -54,12 +54,6 @@ unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_ta
|
|||||||
return (unsigned long) (acpigen_get_current());
|
return (unsigned long) (acpigen_get_current());
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
|
||||||
{
|
|
||||||
/* Just a dummy */
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
|
@ -35,8 +35,6 @@
|
|||||||
#include <cpu/amd/amdfam10_sysconf.h>
|
#include <cpu/amd/amdfam10_sysconf.h>
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
unsigned int gsi_base = 0x18;
|
unsigned int gsi_base = 0x18;
|
||||||
@ -89,113 +87,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long acpi_fill_ssdt_generator(unsigned long current, const char *oem_table_id)
|
|
||||||
{
|
|
||||||
//k8acpi_write_vars();
|
|
||||||
//amd_generate_powernow(0, 0, 0);
|
|
||||||
//return (unsigned long) (acpigen_get_current());
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_mcfg_t *mcfg;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 byte. */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT table. */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* Clear all table memory. */
|
|
||||||
memset((void *) start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/* We explicitly add these tables later on: */
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS\n");
|
|
||||||
|
|
||||||
/* we should align FACS to 64B as per ACPI specs */
|
|
||||||
current = ALIGN(current, 64);
|
|
||||||
facs = (acpi_facs_t *) current;
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
dsdt = (acpi_header_t *) current;
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
dsdt->checksum = 0; /* Don't trust iasl to get this right. */
|
|
||||||
dsdt->checksum = acpi_checksum((u8 *)dsdt, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n", dsdt,
|
|
||||||
dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT\n");
|
|
||||||
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET\n");
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET timers Linux wants an MADT. */
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT\n");
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MCFG\n");
|
|
||||||
mcfg = (acpi_mcfg_t *) current;
|
|
||||||
acpi_create_mcfg(mcfg);
|
|
||||||
current += mcfg->header.length;
|
|
||||||
acpi_add_table(rsdp, mcfg);
|
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT\n");
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT\n");
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current+=slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT\n");
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR);
|
|
||||||
current += ssdt->length;
|
|
||||||
acpi_add_table(rsdp, ssdt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -29,16 +29,6 @@
|
|||||||
|
|
||||||
#include "mb_sysconf.h"
|
#include "mb_sysconf.h"
|
||||||
|
|
||||||
extern const unsigned char AmlCode[];
|
|
||||||
extern const unsigned char AmlCode_ssdt[];
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
extern const unsigned char AmlCode_ssdt2[];
|
|
||||||
extern const unsigned char AmlCode_ssdt3[];
|
|
||||||
extern const unsigned char AmlCode_ssdt4[];
|
|
||||||
extern const unsigned char AmlCode_ssdt5[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long acpi_fill_madt(unsigned long current)
|
unsigned long acpi_fill_madt(unsigned long current)
|
||||||
{
|
{
|
||||||
device_t dev;
|
device_t dev;
|
||||||
@ -76,160 +66,3 @@ unsigned long acpi_fill_madt(unsigned long current)
|
|||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long write_acpi_tables(unsigned long start)
|
|
||||||
{
|
|
||||||
unsigned long current;
|
|
||||||
acpi_rsdp_t *rsdp;
|
|
||||||
acpi_rsdt_t *rsdt;
|
|
||||||
acpi_hpet_t *hpet;
|
|
||||||
acpi_madt_t *madt;
|
|
||||||
acpi_srat_t *srat;
|
|
||||||
acpi_slit_t *slit;
|
|
||||||
acpi_fadt_t *fadt;
|
|
||||||
acpi_facs_t *facs;
|
|
||||||
acpi_header_t *dsdt;
|
|
||||||
acpi_header_t *ssdt;
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
acpi_header_t *ssdtx;
|
|
||||||
void *p;
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
|
||||||
|
|
||||||
/* Align ACPI tables to 16 bytes */
|
|
||||||
start = ALIGN(start, 16);
|
|
||||||
current = start;
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: Writing ACPI tables at %lx...\n", start);
|
|
||||||
|
|
||||||
/* We need at least an RSDP and an RSDT Table */
|
|
||||||
rsdp = (acpi_rsdp_t *) current;
|
|
||||||
current += sizeof(acpi_rsdp_t);
|
|
||||||
rsdt = (acpi_rsdt_t *) current;
|
|
||||||
current += sizeof(acpi_rsdt_t);
|
|
||||||
|
|
||||||
/* clear all table memory */
|
|
||||||
memset((void *)start, 0, current - start);
|
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt, NULL);
|
|
||||||
acpi_write_rsdt(rsdt);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We explicitly add these tables later on:
|
|
||||||
*/
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * HPET at %lx\n", current);
|
|
||||||
hpet = (acpi_hpet_t *) current;
|
|
||||||
current += sizeof(acpi_hpet_t);
|
|
||||||
acpi_create_hpet(hpet);
|
|
||||||
acpi_add_table(rsdp, hpet);
|
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * MADT at %lx\n",current);
|
|
||||||
madt = (acpi_madt_t *) current;
|
|
||||||
acpi_create_madt(madt);
|
|
||||||
current += madt->header.length;
|
|
||||||
acpi_add_table(rsdp, madt);
|
|
||||||
|
|
||||||
/* SRAT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
|
||||||
srat = (acpi_srat_t *) current;
|
|
||||||
acpi_create_srat(srat);
|
|
||||||
current += srat->header.length;
|
|
||||||
acpi_add_table(rsdp, srat);
|
|
||||||
|
|
||||||
/* SLIT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
|
||||||
slit = (acpi_slit_t *) current;
|
|
||||||
acpi_create_slit(slit);
|
|
||||||
current += slit->header.length;
|
|
||||||
acpi_add_table(rsdp, slit);
|
|
||||||
|
|
||||||
/* SSDT */
|
|
||||||
current = ALIGN(current, 16);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT at %lx\n", current);
|
|
||||||
ssdt = (acpi_header_t *)current;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, sizeof(acpi_header_t));
|
|
||||||
current += ssdt->length;
|
|
||||||
memcpy(ssdt, &AmlCode_ssdt, 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(rsdp,ssdt);
|
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
|
||||||
|
|
||||||
/* same htio, but different position? We may have to copy,
|
|
||||||
change HCIN, and recalculate the checknum and add_table */
|
|
||||||
|
|
||||||
for(i=1;i<sysconf.hc_possible_num;i++) { // 0: is hc sblink
|
|
||||||
if((sysconf.pci1234[i] & 1) != 1 ) continue;
|
|
||||||
u8 c;
|
|
||||||
if (i < 7) {
|
|
||||||
c = (u8) ('4' + i - 1);
|
|
||||||
} else {
|
|
||||||
c = (u8) ('A' + i - 1 - 6);
|
|
||||||
}
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * SSDT for PCI%c at %lx\n", c, current); //pci0 and pci1 are in dsdt
|
|
||||||
ssdtx = (acpi_header_t *)current;
|
|
||||||
switch (sysconf.hcid[i]) {
|
|
||||||
case 1:
|
|
||||||
p = &AmlCode_ssdt2;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
p = &AmlCode_ssdt3;
|
|
||||||
break;
|
|
||||||
case 3: /* 8131 */
|
|
||||||
p = &AmlCode_ssdt4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* HTX no io apic */
|
|
||||||
p = &AmlCode_ssdt5;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
memcpy(ssdtx, p, sizeof(acpi_header_t));
|
|
||||||
current += ssdtx->length;
|
|
||||||
memcpy(ssdtx, p, ssdtx->length);
|
|
||||||
update_ssdtx((void *)ssdtx, i);
|
|
||||||
ssdtx->checksum = 0;
|
|
||||||
ssdtx->checksum = acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
|
||||||
acpi_add_table(rsdp, ssdtx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* DSDT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT at %lx\n", current);
|
|
||||||
dsdt = (acpi_header_t *)current; // it will used by fadt
|
|
||||||
memcpy(dsdt, &AmlCode, sizeof(acpi_header_t));
|
|
||||||
current += dsdt->length;
|
|
||||||
memcpy(dsdt, &AmlCode, dsdt->length);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DSDT @ %p Length %x\n",dsdt,dsdt->length);
|
|
||||||
|
|
||||||
/* FACS */ // it needs 64 bit alignment
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FACS at %lx\n", current);
|
|
||||||
facs = (acpi_facs_t *) current; // it will be used by fadt
|
|
||||||
current += sizeof(acpi_facs_t);
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
/* FADT */
|
|
||||||
current = ALIGN(current, 8);
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * FADT at %lx\n", current);
|
|
||||||
fadt = (acpi_fadt_t *) current;
|
|
||||||
current += sizeof(acpi_fadt_t);
|
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
|
||||||
acpi_add_table(rsdp, fadt);
|
|
||||||
|
|
||||||
printk(BIOS_INFO, "ACPI: done.\n");
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
|
@ -18,5 +18,3 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
ramstage-y += northbridge.c
|
ramstage-y += northbridge.c
|
||||||
|
|
||||||
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += ssdt.asl
|
|
||||||
|
@ -1,345 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure HC_NUMS and HC_POSSIBLE_NUM setting is consistent to this file
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSDT.aml", "SSDT", 1, "AMD-FAM15H", "AMD-ACPI", 0x1000)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* These objects were referenced but not defined in this table
|
|
||||||
*/
|
|
||||||
External (\_SB_.PCI0, DeviceObj)
|
|
||||||
|
|
||||||
Scope (\_SB.PCI0)
|
|
||||||
{
|
|
||||||
Name (BUSN, Package (0x20) /* HC_NUMS */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x10101010,
|
|
||||||
0x11111111,
|
|
||||||
0x12121212,
|
|
||||||
0x13131313,
|
|
||||||
0x14141414,
|
|
||||||
0x15151515,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc
|
|
||||||
})
|
|
||||||
Name (MMIO, Package (0x80) /* HC_NUMS * 4 */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (PCIO, Package (0x40) /* HC_NUMS * 2 */
|
|
||||||
{
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444
|
|
||||||
})
|
|
||||||
Name (SBLK, 0x11)
|
|
||||||
Name (TOM1, 0xaaaaaaaa)
|
|
||||||
Name (SBDN, 0xbbbbbbbb)
|
|
||||||
Name (HCLK, Package (0x20) /* HC_POSSIBLE_NUM */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (HCDN, Package (0x20) /* HC_POSSIBLE_NUM */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (CBB, 0x99)
|
|
||||||
Name (CBST, 0x88)
|
|
||||||
Name (CBB2, 0x77)
|
|
||||||
Name (CBS2, 0x66)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -24,6 +24,7 @@ config NORTHBRIDGE_AMD_AMDFAM10
|
|||||||
select HAVE_DEBUG_CAR
|
select HAVE_DEBUG_CAR
|
||||||
select HYPERTRANSPORT_PLUGIN_SUPPORT
|
select HYPERTRANSPORT_PLUGIN_SUPPORT
|
||||||
select MMCONF_SUPPORT
|
select MMCONF_SUPPORT
|
||||||
|
select PER_DEVICE_ACPI_TABLES
|
||||||
|
|
||||||
if NORTHBRIDGE_AMD_AMDFAM10
|
if NORTHBRIDGE_AMD_AMDFAM10
|
||||||
config AGP_APERTURE_SIZE
|
config AGP_APERTURE_SIZE
|
||||||
|
@ -2,7 +2,6 @@ ramstage-y += northbridge.c
|
|||||||
ramstage-y += misc_control.c
|
ramstage-y += misc_control.c
|
||||||
|
|
||||||
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi.c
|
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi.c
|
||||||
ramstage-$(CONFIG_HAVE_ACPI_TABLES) += ssdt.asl
|
|
||||||
|
|
||||||
ramstage-y += get_pci1234.c
|
ramstage-y += get_pci1234.c
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <arch/acpi.h>
|
#include <arch/acpi.h>
|
||||||
|
#include <arch/acpigen.h>
|
||||||
#include <device/pci.h>
|
#include <device/pci.h>
|
||||||
#include <cpu/x86/msr.h>
|
#include <cpu/x86/msr.h>
|
||||||
#include <cpu/amd/mtrr.h>
|
#include <cpu/amd/mtrr.h>
|
||||||
@ -162,112 +163,6 @@ unsigned long acpi_fill_slit(unsigned long current)
|
|||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
// moved from mb acpi_tables.c
|
|
||||||
static void intx_to_stream(u32 val, u32 len, u8 *dest)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0;i<len;i++) {
|
|
||||||
*(dest+i) = (val >> (8*i)) & 0xff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void int_to_stream(u32 val, u8 *dest)
|
|
||||||
{
|
|
||||||
return intx_to_stream(val, 4, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
// used by acpi_tables.h
|
|
||||||
void update_ssdt(void *ssdt)
|
|
||||||
{
|
|
||||||
u8 *BUSN;
|
|
||||||
u8 *MMIO;
|
|
||||||
u8 *PCIO;
|
|
||||||
u8 *SBLK;
|
|
||||||
u8 *TOM1;
|
|
||||||
u8 *SBDN;
|
|
||||||
u8 *HCLK;
|
|
||||||
u8 *HCDN;
|
|
||||||
u8 *CBST;
|
|
||||||
u8 *CBBX;
|
|
||||||
u8 *CBS2;
|
|
||||||
u8 *CBB2;
|
|
||||||
|
|
||||||
|
|
||||||
int i;
|
|
||||||
u32 dword;
|
|
||||||
msr_t msr;
|
|
||||||
|
|
||||||
// the offset could be different if have different HC_NUMS, and HC_POSSIBLE_NUM and ssdt.asl
|
|
||||||
BUSN = ssdt+0x3b; //+5 will be next BUSN
|
|
||||||
MMIO = ssdt+0xe4; //+5 will be next MMIO
|
|
||||||
PCIO = ssdt+0x36d; //+5 will be next PCIO
|
|
||||||
SBLK = ssdt+0x4b2; // one byte
|
|
||||||
TOM1 = ssdt+0x4b9; //
|
|
||||||
SBDN = ssdt+0x4c3;//
|
|
||||||
HCLK = ssdt+0x4d1; //+5 will be next HCLK
|
|
||||||
HCDN = ssdt+0x57a; //+5 will be next HCDN
|
|
||||||
CBBX = ssdt+0x61f; //
|
|
||||||
CBST = ssdt+0x626;
|
|
||||||
CBB2 = ssdt+0x62d; //
|
|
||||||
CBS2 = ssdt+0x634;
|
|
||||||
|
|
||||||
for(i=0;i<HC_NUMS;i++) {
|
|
||||||
dword = sysconf.ht_c_conf_bus[i];
|
|
||||||
int_to_stream(dword, BUSN+i*5);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=0;i<(HC_NUMS*2);i++) { // FIXME: change to more chain
|
|
||||||
dword = sysconf.conf_mmio_addrx[i]; //base
|
|
||||||
int_to_stream(dword, MMIO+(i*2)*5);
|
|
||||||
dword = sysconf.conf_mmio_addr[i]; //mask
|
|
||||||
int_to_stream(dword, MMIO+(i*2+1)*5);
|
|
||||||
}
|
|
||||||
for(i=0;i<HC_NUMS;i++) { // FIXME: change to more chain
|
|
||||||
dword = sysconf.conf_io_addrx[i];
|
|
||||||
int_to_stream(dword, PCIO+(i*2)*5);
|
|
||||||
dword = sysconf.conf_io_addr[i];
|
|
||||||
int_to_stream(dword, PCIO+(i*2+1)*5);
|
|
||||||
}
|
|
||||||
|
|
||||||
*SBLK = (u8)(sysconf.sblk);
|
|
||||||
|
|
||||||
msr = rdmsr(TOP_MEM);
|
|
||||||
int_to_stream(msr.lo, TOM1);
|
|
||||||
|
|
||||||
int_to_stream(sysconf.sbdn, SBDN);
|
|
||||||
|
|
||||||
for(i=0;i<sysconf.hc_possible_num;i++) {
|
|
||||||
int_to_stream(sysconf.pci1234[i], HCLK + i*5);
|
|
||||||
int_to_stream(sysconf.hcdn[i], HCDN + i*5);
|
|
||||||
}
|
|
||||||
for(i=sysconf.hc_possible_num; i<HC_POSSIBLE_NUM; i++) { // in case we set array size to other than 8
|
|
||||||
int_to_stream(0x00000000, HCLK + i*5);
|
|
||||||
int_to_stream(0x20202020, HCDN + i*5);
|
|
||||||
}
|
|
||||||
|
|
||||||
*CBBX = (u8)(CONFIG_CBB);
|
|
||||||
|
|
||||||
if(CONFIG_CBB == 0xff) {
|
|
||||||
*CBST = (u8) (0x0f);
|
|
||||||
} else {
|
|
||||||
if((sysconf.pci1234[0] >> 12) & 0xff) { //sb chain on other than bus 0
|
|
||||||
*CBST = (u8) (0x0f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
*CBST = (u8) (0x00);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if((CONFIG_CBB == 0xff) && (sysconf.nodes>32)) {
|
|
||||||
*CBS2 = 0x0f;
|
|
||||||
*CBB2 = (u8)(CONFIG_CBB-1);
|
|
||||||
} else {
|
|
||||||
*CBS2 = 0x00;
|
|
||||||
*CBB2 = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_ssdtx(void *ssdtx, int i)
|
void update_ssdtx(void *ssdtx, int i)
|
||||||
{
|
{
|
||||||
u8 *PCI;
|
u8 *PCI;
|
||||||
@ -290,3 +185,147 @@ void update_ssdtx(void *ssdtx, int i)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void northbridge_acpi_write_vars(void)
|
||||||
|
{
|
||||||
|
msr_t msr;
|
||||||
|
char pscope[] = "\\_SB.PCI0";
|
||||||
|
int i;
|
||||||
|
|
||||||
|
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
||||||
|
|
||||||
|
acpigen_write_scope(pscope);
|
||||||
|
|
||||||
|
acpigen_write_name("BUSN");
|
||||||
|
acpigen_write_package(HC_NUMS);
|
||||||
|
for(i=0; i<HC_NUMS; i++) {
|
||||||
|
acpigen_write_dword(sysconf.ht_c_conf_bus[i]);
|
||||||
|
}
|
||||||
|
// minus the opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
|
||||||
|
acpigen_write_name("MMIO");
|
||||||
|
|
||||||
|
acpigen_write_package(HC_NUMS * 4);
|
||||||
|
|
||||||
|
for(i=0;i<(HC_NUMS*2);i++) { // FIXME: change to more chain
|
||||||
|
acpigen_write_dword(sysconf.conf_mmio_addrx[i]); //base
|
||||||
|
acpigen_write_dword(sysconf.conf_mmio_addr[i]); //mask
|
||||||
|
}
|
||||||
|
// minus the opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
|
||||||
|
acpigen_write_name("PCIO");
|
||||||
|
|
||||||
|
acpigen_write_package(HC_NUMS * 2);
|
||||||
|
|
||||||
|
for(i=0;i<HC_NUMS;i++) { // FIXME: change to more chain
|
||||||
|
acpigen_write_dword(sysconf.conf_io_addrx[i]);
|
||||||
|
acpigen_write_dword(sysconf.conf_io_addr[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// minus the opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
|
||||||
|
acpigen_write_name_byte("SBLK", sysconf.sblk);
|
||||||
|
|
||||||
|
msr = rdmsr(TOP_MEM);
|
||||||
|
acpigen_write_name_dword("TOM1", msr.lo);
|
||||||
|
|
||||||
|
msr = rdmsr(TOP_MEM2);
|
||||||
|
/*
|
||||||
|
* Since XP only implements parts of ACPI 2.0, we can't use a qword
|
||||||
|
* here.
|
||||||
|
* See http://www.acpi.info/presentations/S01USMOBS169_OS%2520new.ppt
|
||||||
|
* slide 22ff.
|
||||||
|
* Shift value right by 20 bit to make it fit into 32bit,
|
||||||
|
* giving us 1MB granularity and a limit of almost 4Exabyte of memory.
|
||||||
|
*/
|
||||||
|
acpigen_write_name_dword("TOM2", (msr.hi << 12) | msr.lo >> 20);
|
||||||
|
|
||||||
|
|
||||||
|
acpigen_write_name_dword("SBDN", sysconf.sbdn);
|
||||||
|
|
||||||
|
acpigen_write_name("HCLK");
|
||||||
|
|
||||||
|
acpigen_write_package(HC_POSSIBLE_NUM);
|
||||||
|
|
||||||
|
for(i=0;i<sysconf.hc_possible_num;i++) {
|
||||||
|
acpigen_write_dword(sysconf.pci1234[i]);
|
||||||
|
}
|
||||||
|
for(i=sysconf.hc_possible_num; i<HC_POSSIBLE_NUM; i++) { // in case we set array size to other than 8
|
||||||
|
acpigen_write_dword(0x00000000);
|
||||||
|
}
|
||||||
|
// minus the opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
|
||||||
|
acpigen_write_name("HCDN");
|
||||||
|
|
||||||
|
acpigen_write_package(HC_POSSIBLE_NUM);
|
||||||
|
|
||||||
|
for(i=0;i<sysconf.hc_possible_num;i++) {
|
||||||
|
acpigen_write_dword(sysconf.hcdn[i]);
|
||||||
|
}
|
||||||
|
for(i=sysconf.hc_possible_num; i<HC_POSSIBLE_NUM; i++) { // in case we set array size to other than 8
|
||||||
|
acpigen_write_dword(0x20202020);
|
||||||
|
}
|
||||||
|
// minus the opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
|
||||||
|
acpigen_write_name_byte("CBB", CONFIG_CBB);
|
||||||
|
|
||||||
|
u8 CBST, CBB2, CBS2;
|
||||||
|
|
||||||
|
if(CONFIG_CBB == 0xff) {
|
||||||
|
CBST = (u8) (0x0f);
|
||||||
|
} else {
|
||||||
|
if((sysconf.pci1234[0] >> 12) & 0xff) { //sb chain on other than bus 0
|
||||||
|
CBST = (u8) (0x0f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CBST = (u8) (0x00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
acpigen_write_name_byte("CBST", CBST);
|
||||||
|
|
||||||
|
if((CONFIG_CBB == 0xff) && (sysconf.nodes>32)) {
|
||||||
|
CBS2 = 0x0f;
|
||||||
|
CBB2 = (u8)(CONFIG_CBB-1);
|
||||||
|
} else {
|
||||||
|
CBS2 = 0x00;
|
||||||
|
CBB2 = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
acpigen_write_name_byte("CBB2", CBB2);
|
||||||
|
acpigen_write_name_byte("CBS2", CBS2);
|
||||||
|
|
||||||
|
//minus opcode
|
||||||
|
acpigen_pop_len();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long northbridge_write_acpi_tables(unsigned long current,
|
||||||
|
struct acpi_rsdp *rsdp)
|
||||||
|
{
|
||||||
|
acpi_srat_t *srat;
|
||||||
|
acpi_slit_t *slit;
|
||||||
|
|
||||||
|
get_bus_conf(); /* it will get sblk, pci1234, hcdn, and sbdn */
|
||||||
|
|
||||||
|
/* SRAT */
|
||||||
|
current = ALIGN(current, 8);
|
||||||
|
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
|
||||||
|
srat = (acpi_srat_t *) current;
|
||||||
|
acpi_create_srat(srat);
|
||||||
|
current += srat->header.length;
|
||||||
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
|
/* SLIT */
|
||||||
|
current = ALIGN(current, 8);
|
||||||
|
printk(BIOS_DEBUG, "ACPI: * SLIT at %lx\n", current);
|
||||||
|
slit = (acpi_slit_t *) current;
|
||||||
|
acpi_create_slit(slit);
|
||||||
|
current += slit->header.length;
|
||||||
|
acpi_add_table(rsdp, slit);
|
||||||
|
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
@ -1200,4 +1200,10 @@ u8 get_sbbusn(u8 sblk);
|
|||||||
#include "northbridge/amd/amdht/porting.h"
|
#include "northbridge/amd/amdht/porting.h"
|
||||||
BOOL AMD_CB_ManualBUIDSwapList(u8 Node, u8 Link, const u8 **List);
|
BOOL AMD_CB_ManualBUIDSwapList(u8 Node, u8 Link, const u8 **List);
|
||||||
|
|
||||||
|
struct acpi_rsdp;
|
||||||
|
|
||||||
|
unsigned long northbridge_write_acpi_tables(unsigned long start,
|
||||||
|
struct acpi_rsdp *rsdp);
|
||||||
|
void northbridge_acpi_write_vars(void);
|
||||||
|
|
||||||
#endif /* AMDFAM10_H */
|
#endif /* AMDFAM10_H */
|
||||||
|
@ -613,6 +613,10 @@ static struct device_operations northbridge_operations = {
|
|||||||
.enable_resources = pci_dev_enable_resources,
|
.enable_resources = pci_dev_enable_resources,
|
||||||
.init = mcf0_control_init,
|
.init = mcf0_control_init,
|
||||||
.scan_bus = amdfam10_scan_chains,
|
.scan_bus = amdfam10_scan_chains,
|
||||||
|
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)
|
||||||
|
.write_acpi_tables = northbridge_write_acpi_tables,
|
||||||
|
.acpi_fill_ssdt_generator = northbridge_acpi_write_vars,
|
||||||
|
#endif
|
||||||
.enable = 0,
|
.enable = 0,
|
||||||
.ops_pci = 0,
|
.ops_pci = 0,
|
||||||
};
|
};
|
||||||
|
@ -1,345 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure HC_NUMS and HC_POSSIBLE_NUM setting is consistent to this file
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSDT.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925440)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* These objects were referenced but not defined in this table
|
|
||||||
*/
|
|
||||||
External (\_SB_.PCI0, DeviceObj)
|
|
||||||
|
|
||||||
Scope (\_SB.PCI0)
|
|
||||||
{
|
|
||||||
Name (BUSN, Package (0x20) /* HC_NUMS */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x10101010,
|
|
||||||
0x11111111,
|
|
||||||
0x12121212,
|
|
||||||
0x13131313,
|
|
||||||
0x14141414,
|
|
||||||
0x15151515,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc
|
|
||||||
})
|
|
||||||
Name (MMIO, Package (0x80) /* HC_NUMS * 4 */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (PCIO, Package (0x40) /* HC_NUMS * 2 */
|
|
||||||
{
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0xbbbbbbbb,
|
|
||||||
0xcccccccc,
|
|
||||||
0xdddddddd,
|
|
||||||
0xeeeeeeee,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x99999999,
|
|
||||||
0xaaaaaaaa,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444
|
|
||||||
})
|
|
||||||
Name (SBLK, 0x11)
|
|
||||||
Name (TOM1, 0xaaaaaaaa)
|
|
||||||
Name (SBDN, 0xbbbbbbbb)
|
|
||||||
Name (HCLK, Package (0x20) /* HC_POSSIBLE_NUM */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (HCDN, Package (0x20) /* HC_POSSIBLE_NUM */
|
|
||||||
{
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888,
|
|
||||||
0x11111111,
|
|
||||||
0x22222222,
|
|
||||||
0x33333333,
|
|
||||||
0x44444444,
|
|
||||||
0x55555555,
|
|
||||||
0x66666666,
|
|
||||||
0x77777777,
|
|
||||||
0x88888888
|
|
||||||
})
|
|
||||||
Name (CBB, 0x99)
|
|
||||||
Name (CBST, 0x88)
|
|
||||||
Name (CBB2, 0x77)
|
|
||||||
Name (CBS2, 0x66)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSPR.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925441)
|
|
||||||
{
|
|
||||||
Scope (\_SB)
|
|
||||||
{
|
|
||||||
Processor (\_SB.CPAA, 0xbb, 0x120, 6) // CPU0 and 0x01 need to be updated
|
|
||||||
{
|
|
||||||
Name(_PCT, Package ()
|
|
||||||
{
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_CTRL
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_STATUS
|
|
||||||
})
|
|
||||||
|
|
||||||
Name(_PSS, Package()
|
|
||||||
{
|
|
||||||
Package(0x06) {0x1111, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x7777, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSPR.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925441)
|
|
||||||
{
|
|
||||||
Scope (\_SB)
|
|
||||||
{
|
|
||||||
Processor (\_SB.CPAA, 0xbb, 0x120, 6) // CPU0 and 0x01 need to be updated
|
|
||||||
{
|
|
||||||
Name(_PCT, Package ()
|
|
||||||
{
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_CTRL
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_STATUS
|
|
||||||
})
|
|
||||||
|
|
||||||
Name(_PSS, Package()
|
|
||||||
{
|
|
||||||
Package(0x06) {0x1111, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x7777, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x8888, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSPR.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925441)
|
|
||||||
{
|
|
||||||
Scope (\_SB)
|
|
||||||
{
|
|
||||||
Processor (\_SB.CPAA, 0xbb, 0x120, 6) // CPU0 and 0x01 need to be updated
|
|
||||||
{
|
|
||||||
Name(_PCT, Package ()
|
|
||||||
{
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_CTRL
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_STATUS
|
|
||||||
})
|
|
||||||
|
|
||||||
Name(_PSS, Package()
|
|
||||||
{
|
|
||||||
Package(0x06) {0x1111, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x7777, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x8888, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x9999, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Advanced Micro Devices, Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
DefinitionBlock ("SSPR.aml", "SSDT", 1, "AMD-FAM10", "AMD-ACPI", 100925441)
|
|
||||||
{
|
|
||||||
Scope (\_SB)
|
|
||||||
{
|
|
||||||
Processor (\_SB.CPAA, 0xbb, 0x120, 6) // CPU0 and 0x01 need to be updated
|
|
||||||
{
|
|
||||||
Name(_PCT, Package ()
|
|
||||||
{
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_CTRL
|
|
||||||
ResourceTemplate() {Register (FFixedHW, 0, 0, 0)}, //PERF_STATUS
|
|
||||||
})
|
|
||||||
|
|
||||||
Name(_PSS, Package()
|
|
||||||
{
|
|
||||||
Package(0x06) {0x1111, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x7777, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x8888, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0x9999, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
Package(0x06) {0xaaaa, 0x222222, 0x3333, 0x4444, 0x55, 0x66 },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -118,8 +118,6 @@ unsigned long acpi_fill_srat(unsigned long current)
|
|||||||
{
|
{
|
||||||
struct acpi_srat_mem_state srat_mem_state;
|
struct acpi_srat_mem_state srat_mem_state;
|
||||||
|
|
||||||
get_bus_conf();
|
|
||||||
|
|
||||||
/* create all subtables for processors */
|
/* create all subtables for processors */
|
||||||
current = acpi_create_srat_lapics(current);
|
current = acpi_create_srat_lapics(current);
|
||||||
|
|
||||||
@ -143,8 +141,6 @@ unsigned long acpi_fill_slit(unsigned long current)
|
|||||||
/* fill the first 8 byte with that num */
|
/* fill the first 8 byte with that num */
|
||||||
/* fill the next num*num byte with distance, local is 10, 1 hop mean 20, and 2 hop with 30.... */
|
/* fill the next num*num byte with distance, local is 10, 1 hop mean 20, and 2 hop with 30.... */
|
||||||
|
|
||||||
get_bus_conf();
|
|
||||||
|
|
||||||
/* because We has assume that we know the topology of the HT connection, So we can have set if we know the node_num */
|
/* because We has assume that we know the topology of the HT connection, So we can have set if we know the node_num */
|
||||||
static u8 hops_8[] = { 0, 1, 1, 2, 2, 3, 3, 4,
|
static u8 hops_8[] = { 0, 1, 1, 2, 2, 3, 3, 4,
|
||||||
1, 0, 2, 1, 3, 2, 4, 3,
|
1, 0, 2, 1, 3, 2, 4, 3,
|
||||||
|
@ -593,6 +593,9 @@ static unsigned long northbridge_write_acpi_tables(unsigned long start, acpi_rsd
|
|||||||
|
|
||||||
current = start;
|
current = start;
|
||||||
|
|
||||||
|
/* Fills sysconf structure needed for SRAT and SLIT. */
|
||||||
|
get_bus_conf();
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
printk(BIOS_DEBUG, "ACPI: * SRAT @ %p\n", srat);
|
printk(BIOS_DEBUG, "ACPI: * SRAT @ %p\n", srat);
|
||||||
|
@ -147,10 +147,19 @@ static void lpc_init(device_t dev)
|
|||||||
printk(BIOS_DEBUG, "SB800 - Late.c - lpc_init - End.\n");
|
printk(BIOS_DEBUG, "SB800 - Late.c - lpc_init - End.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long acpi_fill_mcfg(unsigned long current)
|
||||||
|
{
|
||||||
|
/* Just a dummy */
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
static struct device_operations lpc_ops = {
|
static struct device_operations lpc_ops = {
|
||||||
.read_resources = lpc_read_resources,
|
.read_resources = lpc_read_resources,
|
||||||
.set_resources = lpc_set_resources,
|
.set_resources = lpc_set_resources,
|
||||||
.enable_resources = pci_dev_enable_resources,
|
.enable_resources = pci_dev_enable_resources,
|
||||||
|
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES) && IS_ENABLED(CONFIG_PER_DEVICE_ACPI_TABLES)
|
||||||
|
.write_acpi_tables = acpi_write_hpet,
|
||||||
|
#endif
|
||||||
.init = lpc_init,
|
.init = lpc_init,
|
||||||
.scan_bus = scan_static_bus,
|
.scan_bus = scan_static_bus,
|
||||||
.ops_pci = &lops_pci,
|
.ops_pci = &lops_pci,
|
||||||
|
@ -26,8 +26,15 @@
|
|||||||
#include <pc80/mc146818rtc.h>
|
#include <pc80/mc146818rtc.h>
|
||||||
#include <pc80/isa-dma.h>
|
#include <pc80/isa-dma.h>
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
|
#include <arch/acpi.h>
|
||||||
#include "sb800.h"
|
#include "sb800.h"
|
||||||
|
|
||||||
|
unsigned long acpi_fill_mcfg(unsigned long current)
|
||||||
|
{
|
||||||
|
/* Just a dummy */
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
|
||||||
static void lpc_init(device_t dev)
|
static void lpc_init(device_t dev)
|
||||||
{
|
{
|
||||||
u8 byte;
|
u8 byte;
|
||||||
@ -243,6 +250,9 @@ static struct device_operations lpc_ops = {
|
|||||||
.read_resources = sb800_lpc_read_resources,
|
.read_resources = sb800_lpc_read_resources,
|
||||||
.set_resources = sb800_lpc_set_resources,
|
.set_resources = sb800_lpc_set_resources,
|
||||||
.enable_resources = sb800_lpc_enable_resources,
|
.enable_resources = sb800_lpc_enable_resources,
|
||||||
|
#if IS_ENABLED(CONFIG_HAVE_ACPI_TABLES) && IS_ENABLED(CONFIG_PER_DEVICE_ACPI_TABLES)
|
||||||
|
.write_acpi_tables = acpi_write_hpet,
|
||||||
|
#endif
|
||||||
.init = lpc_init,
|
.init = lpc_init,
|
||||||
.scan_bus = scan_static_bus,
|
.scan_bus = scan_static_bus,
|
||||||
.ops_pci = &lops_pci,
|
.ops_pci = &lops_pci,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user