mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 04:46:01 +01:00
x86: Move FACS table to a writer function
Move this table over to use a writer function, moving the code from the x86 implementation. Add a pointer to the DSDT in struct acpi_ctx so we can reference it later. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
94ba15a3f1
commit
a53d38f80a
@ -38,21 +38,6 @@ extern const unsigned char AmlCode[];
|
|||||||
/* ACPI RSDP address to be used in boot parameters */
|
/* ACPI RSDP address to be used in boot parameters */
|
||||||
static ulong acpi_rsdp_addr;
|
static ulong acpi_rsdp_addr;
|
||||||
|
|
||||||
static void acpi_create_facs(struct acpi_facs *facs)
|
|
||||||
{
|
|
||||||
memset((void *)facs, 0, sizeof(struct acpi_facs));
|
|
||||||
|
|
||||||
memcpy(facs->signature, "FACS", 4);
|
|
||||||
facs->length = sizeof(struct acpi_facs);
|
|
||||||
facs->hardware_signature = 0;
|
|
||||||
facs->firmware_waking_vector = 0;
|
|
||||||
facs->global_lock = 0;
|
|
||||||
facs->flags = 0;
|
|
||||||
facs->x_firmware_waking_vector_l = 0;
|
|
||||||
facs->x_firmware_waking_vector_h = 0;
|
|
||||||
facs->version = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int acpi_create_madt_lapic(struct acpi_madt_lapic *lapic,
|
static int acpi_create_madt_lapic(struct acpi_madt_lapic *lapic,
|
||||||
u8 cpu, u8 apic)
|
u8 cpu, u8 apic)
|
||||||
{
|
{
|
||||||
@ -507,7 +492,6 @@ static int write_acpi_tables_x86(struct acpi_ctx *ctx,
|
|||||||
const struct acpi_writer *entry)
|
const struct acpi_writer *entry)
|
||||||
{
|
{
|
||||||
const int thl = sizeof(struct acpi_table_header);
|
const int thl = sizeof(struct acpi_table_header);
|
||||||
struct acpi_facs *facs;
|
|
||||||
struct acpi_table_header *dsdt;
|
struct acpi_table_header *dsdt;
|
||||||
struct acpi_fadt *fadt;
|
struct acpi_fadt *fadt;
|
||||||
struct acpi_table_header *ssdt;
|
struct acpi_table_header *ssdt;
|
||||||
@ -521,12 +505,6 @@ static int write_acpi_tables_x86(struct acpi_ctx *ctx,
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
debug("ACPI: * FACS\n");
|
|
||||||
facs = ctx->current;
|
|
||||||
acpi_inc_align(ctx, sizeof(struct acpi_facs));
|
|
||||||
|
|
||||||
acpi_create_facs(facs);
|
|
||||||
|
|
||||||
debug("ACPI: * DSDT\n");
|
debug("ACPI: * DSDT\n");
|
||||||
dsdt = ctx->current;
|
dsdt = ctx->current;
|
||||||
|
|
||||||
@ -599,7 +577,7 @@ static int write_acpi_tables_x86(struct acpi_ctx *ctx,
|
|||||||
debug("ACPI: * FADT\n");
|
debug("ACPI: * FADT\n");
|
||||||
fadt = ctx->current;
|
fadt = ctx->current;
|
||||||
acpi_inc_align(ctx, sizeof(struct acpi_fadt));
|
acpi_inc_align(ctx, sizeof(struct acpi_fadt));
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, ctx->facs, dsdt);
|
||||||
acpi_add_table(ctx, fadt);
|
acpi_add_table(ctx, fadt);
|
||||||
|
|
||||||
debug("ACPI: * SSDT\n");
|
debug("ACPI: * SSDT\n");
|
||||||
@ -666,7 +644,7 @@ static int write_acpi_tables_x86(struct acpi_ctx *ctx,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ACPI_WRITER(x86, NULL, write_acpi_tables_x86, 0);
|
ACPI_WRITER(2x86, NULL, write_acpi_tables_x86, 0);
|
||||||
|
|
||||||
ulong acpi_get_rsdp_addr(void)
|
ulong acpi_get_rsdp_addr(void)
|
||||||
{
|
{
|
||||||
|
@ -52,6 +52,7 @@ enum acpi_dump_option {
|
|||||||
* adding a new table. The RSDP holds pointers to the RSDT and XSDT.
|
* adding a new table. The RSDP holds pointers to the RSDT and XSDT.
|
||||||
* @rsdt: Pointer to the Root System Description Table
|
* @rsdt: Pointer to the Root System Description Table
|
||||||
* @xsdt: Pointer to the Extended System Description Table
|
* @xsdt: Pointer to the Extended System Description Table
|
||||||
|
* @facs: Pointer to the Firmware ACPI Control Structure
|
||||||
* @nhlt: Intel Non-High-Definition-Audio Link Table (NHLT) pointer, used to
|
* @nhlt: Intel Non-High-Definition-Audio Link Table (NHLT) pointer, used to
|
||||||
* build up information that audio codecs need to provide in the NHLT ACPI
|
* build up information that audio codecs need to provide in the NHLT ACPI
|
||||||
* table
|
* table
|
||||||
@ -65,6 +66,7 @@ struct acpi_ctx {
|
|||||||
struct acpi_rsdp *rsdp;
|
struct acpi_rsdp *rsdp;
|
||||||
struct acpi_rsdt *rsdt;
|
struct acpi_rsdt *rsdt;
|
||||||
struct acpi_xsdt *xsdt;
|
struct acpi_xsdt *xsdt;
|
||||||
|
struct acpi_facs *facs;
|
||||||
struct nhlt *nhlt;
|
struct nhlt *nhlt;
|
||||||
char *len_stack[ACPIGEN_LENSTACK_SIZE];
|
char *len_stack[ACPIGEN_LENSTACK_SIZE];
|
||||||
int ltop;
|
int ltop;
|
||||||
|
@ -10,4 +10,5 @@ obj-y += acpi_writer.o
|
|||||||
# With QEMU the ACPI tables come from there, not from U-Boot
|
# With QEMU the ACPI tables come from there, not from U-Boot
|
||||||
ifndef CONFIG_QEMU
|
ifndef CONFIG_QEMU
|
||||||
obj-y += base.o
|
obj-y += base.o
|
||||||
|
obj-y += facs.o
|
||||||
endif
|
endif
|
||||||
|
33
lib/acpi/facs.c
Normal file
33
lib/acpi/facs.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Write an ACPI Firmware ACPI Control Structure (FACS) table
|
||||||
|
*
|
||||||
|
* Copyright 2021 Google LLC
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <acpi/acpi_table.h>
|
||||||
|
#include <dm/acpi.h>
|
||||||
|
|
||||||
|
int acpi_write_facs(struct acpi_ctx *ctx, const struct acpi_writer *entry)
|
||||||
|
{
|
||||||
|
struct acpi_facs *facs = ctx->current;
|
||||||
|
|
||||||
|
memset((void *)facs, '\0', sizeof(struct acpi_facs));
|
||||||
|
|
||||||
|
memcpy(facs->signature, "FACS", 4);
|
||||||
|
facs->length = sizeof(struct acpi_facs);
|
||||||
|
facs->hardware_signature = 0;
|
||||||
|
facs->firmware_waking_vector = 0;
|
||||||
|
facs->global_lock = 0;
|
||||||
|
facs->flags = 0;
|
||||||
|
facs->x_firmware_waking_vector_l = 0;
|
||||||
|
facs->x_firmware_waking_vector_h = 0;
|
||||||
|
facs->version = 1;
|
||||||
|
|
||||||
|
ctx->facs = facs;
|
||||||
|
acpi_inc(ctx, sizeof(struct acpi_facs));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ACPI_WRITER(1facs, "FACS", acpi_write_facs, 0);
|
Loading…
x
Reference in New Issue
Block a user