mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
x86: acpi: Pack global NVS into ACPI table
Now that platform-specific ACPI global NVS is added, pack it into ACPI table and get its address fixed up. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: George McCollister <george.mccollister@gmail.com> Tested-by: George McCollister <george.mccollister@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
cf7108b320
commit
79c2c257cf
5 changed files with 32 additions and 2 deletions
|
@ -299,6 +299,9 @@ struct acpi_mcfg_mmconfig {
|
|||
/* PM1_CNT bit defines */
|
||||
#define PM1_CNT_SCI_EN (1 << 0)
|
||||
|
||||
/* ACPI global NVS structure */
|
||||
struct acpi_global_nvs;
|
||||
|
||||
/* These can be used by the target port */
|
||||
|
||||
void acpi_fill_header(struct acpi_table_header *header, char *signature);
|
||||
|
@ -312,4 +315,5 @@ int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride,
|
|||
int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
|
||||
u8 cpu, u16 flags, u8 lint);
|
||||
u32 acpi_fill_madt(u32 current);
|
||||
void acpi_create_gnvs(struct acpi_global_nvs *gnvs);
|
||||
u32 write_acpi_tables(u32 start);
|
||||
|
|
|
@ -22,6 +22,9 @@ Method(_WAK, 1)
|
|||
Return (Package() {0, 0})
|
||||
}
|
||||
|
||||
/* ACPI global NVS */
|
||||
#include "global_nvs.asl"
|
||||
|
||||
/* TODO: add CPU ASL support */
|
||||
|
||||
Scope (\_SB)
|
||||
|
|
|
@ -22,6 +22,9 @@ Method(_WAK, 1)
|
|||
Return (Package() {0, 0})
|
||||
}
|
||||
|
||||
/* ACPI global NVS */
|
||||
#include "global_nvs.asl"
|
||||
|
||||
/* TODO: add CPU ASL support */
|
||||
|
||||
Scope (\_SB)
|
||||
|
|
|
@ -11,10 +11,12 @@
|
|||
#include <cpu.h>
|
||||
#include <dm.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <asm/acpi/global_nvs.h>
|
||||
#include <asm/acpi_table.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/lapic.h>
|
||||
#include <asm/tables.h>
|
||||
#include <asm/arch/global_nvs.h>
|
||||
|
||||
/*
|
||||
* IASL compiles the dsdt entries and writes the hex values
|
||||
|
@ -336,6 +338,7 @@ u32 write_acpi_tables(u32 start)
|
|||
struct acpi_fadt *fadt;
|
||||
struct acpi_mcfg *mcfg;
|
||||
struct acpi_madt *madt;
|
||||
int i;
|
||||
|
||||
current = start;
|
||||
|
||||
|
@ -383,6 +386,25 @@ u32 write_acpi_tables(u32 start)
|
|||
current += dsdt->length - sizeof(struct acpi_table_header);
|
||||
current = ALIGN(current, 16);
|
||||
|
||||
/* Pack GNVS into the ACPI table area */
|
||||
for (i = 0; i < dsdt->length; i++) {
|
||||
u32 *gnvs = (u32 *)((u32)dsdt + i);
|
||||
if (*gnvs == ACPI_GNVS_ADDR) {
|
||||
debug("Fix up global NVS in DSDT to 0x%08x\n", current);
|
||||
*gnvs = current;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update DSDT checksum since we patched the GNVS address */
|
||||
dsdt->checksum = 0;
|
||||
dsdt->checksum = table_compute_checksum((void *)dsdt, dsdt->length);
|
||||
|
||||
/* Fill in platform-specific global NVS variables */
|
||||
acpi_create_gnvs((struct acpi_global_nvs *)current);
|
||||
current += sizeof(struct acpi_global_nvs);
|
||||
current = ALIGN(current, 16);
|
||||
|
||||
debug("ACPI: * FADT\n");
|
||||
fadt = (struct acpi_fadt *)current;
|
||||
current += sizeof(struct acpi_fadt);
|
||||
|
|
|
@ -1020,8 +1020,6 @@ Features not supported so far (to make it a complete ACPI solution):
|
|||
* S3 (Suspend to RAM), S4 (Suspend to Disk).
|
||||
|
||||
Features that are optional:
|
||||
* ACPI global NVS support. We may need it to simplify ASL code logic if
|
||||
utilizing NVS variables. Most likely we will need this sooner or later.
|
||||
* Dynamic AML bytecodes insertion at run-time. We may need this to support
|
||||
SSDT table generation and DSDT fix up.
|
||||
* SMI support. Since U-Boot is a modern bootloader, we don't want to bring
|
||||
|
|
Loading…
Reference in a new issue