mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
x86: Move FACP table into separate functions
Each board has its own way of creating this table. Rather than calling the acpi_create_fadt() function for each one from a common acpi_write_fadt() function, just move the writer into the board-specific code. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
138d7ece70
commit
379d3c1fd6
6 changed files with 68 additions and 45 deletions
|
@ -146,16 +146,25 @@ void fill_fadt(struct acpi_fadt *fadt)
|
||||||
fadt->x_pm_tmr_blk.addrl = IOMAP_ACPI_BASE + PM1_TMR;
|
fadt->x_pm_tmr_blk.addrl = IOMAP_ACPI_BASE + PM1_TMR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
static int apl_write_fadt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
|
||||||
void *dsdt)
|
|
||||||
{
|
{
|
||||||
struct acpi_table_header *header = &fadt->header;
|
struct acpi_table_header *header;
|
||||||
|
struct acpi_fadt *fadt;
|
||||||
|
|
||||||
acpi_fadt_common(fadt, facs, dsdt);
|
fadt = ctx->current;
|
||||||
|
acpi_fadt_common(fadt, ctx->facs, ctx->dsdt);
|
||||||
intel_acpi_fill_fadt(fadt);
|
intel_acpi_fill_fadt(fadt);
|
||||||
fill_fadt(fadt);
|
fill_fadt(fadt);
|
||||||
|
header = &fadt->header;
|
||||||
header->checksum = table_compute_checksum(fadt, header->length);
|
header->checksum = table_compute_checksum(fadt, header->length);
|
||||||
|
|
||||||
|
acpi_add_table(ctx, fadt);
|
||||||
|
|
||||||
|
acpi_inc(ctx, sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
ACPI_WRITER(5fadt, "FACS", apl_write_fadt, 0);
|
||||||
|
|
||||||
int apl_acpi_fill_dmar(struct acpi_ctx *ctx)
|
int apl_acpi_fill_dmar(struct acpi_ctx *ctx)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,20 +15,24 @@
|
||||||
#include <asm/arch/iomap.h>
|
#include <asm/arch/iomap.h>
|
||||||
#include <dm/uclass-internal.h>
|
#include <dm/uclass-internal.h>
|
||||||
|
|
||||||
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
static int baytrail_write_fadt(struct acpi_ctx *ctx,
|
||||||
void *dsdt)
|
const struct acpi_writer *entry)
|
||||||
{
|
{
|
||||||
struct acpi_table_header *header = &(fadt->header);
|
struct acpi_table_header *header;
|
||||||
|
struct acpi_fadt *fadt;
|
||||||
|
|
||||||
|
fadt = ctx->current;
|
||||||
|
header = &fadt->header;
|
||||||
u16 pmbase = ACPI_BASE_ADDRESS;
|
u16 pmbase = ACPI_BASE_ADDRESS;
|
||||||
|
|
||||||
memset((void *)fadt, 0, sizeof(struct acpi_fadt));
|
memset(fadt, '\0', sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
acpi_fill_header(header, "FACP");
|
acpi_fill_header(header, "FACP");
|
||||||
header->length = sizeof(struct acpi_fadt);
|
header->length = sizeof(struct acpi_fadt);
|
||||||
header->revision = 4;
|
header->revision = 4;
|
||||||
|
|
||||||
fadt->firmware_ctrl = (u32)facs;
|
fadt->firmware_ctrl = (u32)ctx->facs;
|
||||||
fadt->dsdt = (u32)dsdt;
|
fadt->dsdt = (u32)ctx->dsdt;
|
||||||
fadt->preferred_pm_profile = ACPI_PM_MOBILE;
|
fadt->preferred_pm_profile = ACPI_PM_MOBILE;
|
||||||
fadt->sci_int = 9;
|
fadt->sci_int = 9;
|
||||||
fadt->smi_cmd = 0;
|
fadt->smi_cmd = 0;
|
||||||
|
@ -75,9 +79,9 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
||||||
fadt->reset_reg.addrh = 0;
|
fadt->reset_reg.addrh = 0;
|
||||||
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
|
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
|
||||||
|
|
||||||
fadt->x_firmware_ctl_l = (u32)facs;
|
fadt->x_firmware_ctl_l = (u32)ctx->facs;
|
||||||
fadt->x_firmware_ctl_h = 0;
|
fadt->x_firmware_ctl_h = 0;
|
||||||
fadt->x_dsdt_l = (u32)dsdt;
|
fadt->x_dsdt_l = (u32)ctx->dsdt;
|
||||||
fadt->x_dsdt_h = 0;
|
fadt->x_dsdt_h = 0;
|
||||||
|
|
||||||
fadt->x_pm1a_evt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
|
fadt->x_pm1a_evt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
|
||||||
|
@ -137,7 +141,14 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
||||||
fadt->x_gpe1_blk.addrh = 0x0;
|
fadt->x_gpe1_blk.addrh = 0x0;
|
||||||
|
|
||||||
header->checksum = table_compute_checksum(fadt, header->length);
|
header->checksum = table_compute_checksum(fadt, header->length);
|
||||||
|
|
||||||
|
acpi_add_table(ctx, fadt);
|
||||||
|
|
||||||
|
acpi_inc(ctx, sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
ACPI_WRITER(5fadt, "FACP", baytrail_write_fadt, 0);
|
||||||
|
|
||||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,20 +10,24 @@
|
||||||
#include <asm/arch/global_nvs.h>
|
#include <asm/arch/global_nvs.h>
|
||||||
#include <asm/arch/iomap.h>
|
#include <asm/arch/iomap.h>
|
||||||
|
|
||||||
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
static int quark_write_fadt(struct acpi_ctx *ctx,
|
||||||
void *dsdt)
|
const struct acpi_writer *entry)
|
||||||
{
|
{
|
||||||
struct acpi_table_header *header = &(fadt->header);
|
|
||||||
u16 pmbase = ACPI_PM1_BASE_ADDRESS;
|
u16 pmbase = ACPI_PM1_BASE_ADDRESS;
|
||||||
|
struct acpi_table_header *header;
|
||||||
|
struct acpi_fadt *fadt;
|
||||||
|
|
||||||
memset((void *)fadt, 0, sizeof(struct acpi_fadt));
|
fadt = ctx->current;
|
||||||
|
header = &fadt->header;
|
||||||
|
|
||||||
|
memset(fadt, '\0', sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
acpi_fill_header(header, "FACP");
|
acpi_fill_header(header, "FACP");
|
||||||
header->length = sizeof(struct acpi_fadt);
|
header->length = sizeof(struct acpi_fadt);
|
||||||
header->revision = 4;
|
header->revision = 4;
|
||||||
|
|
||||||
fadt->firmware_ctrl = (u32)facs;
|
fadt->firmware_ctrl = (u32)ctx->facs;
|
||||||
fadt->dsdt = (u32)dsdt;
|
fadt->dsdt = (u32)ctx->dsdt;
|
||||||
fadt->preferred_pm_profile = ACPI_PM_UNSPECIFIED;
|
fadt->preferred_pm_profile = ACPI_PM_UNSPECIFIED;
|
||||||
fadt->sci_int = 9;
|
fadt->sci_int = 9;
|
||||||
fadt->smi_cmd = 0;
|
fadt->smi_cmd = 0;
|
||||||
|
@ -70,9 +74,9 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
||||||
fadt->reset_reg.addrh = 0;
|
fadt->reset_reg.addrh = 0;
|
||||||
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
|
fadt->reset_value = SYS_RST | RST_CPU | FULL_RST;
|
||||||
|
|
||||||
fadt->x_firmware_ctl_l = (u32)facs;
|
fadt->x_firmware_ctl_l = (u32)ctx->facs;
|
||||||
fadt->x_firmware_ctl_h = 0;
|
fadt->x_firmware_ctl_h = 0;
|
||||||
fadt->x_dsdt_l = (u32)dsdt;
|
fadt->x_dsdt_l = (u32)ctx->dsdt;
|
||||||
fadt->x_dsdt_h = 0;
|
fadt->x_dsdt_h = 0;
|
||||||
|
|
||||||
fadt->x_pm1a_evt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
|
fadt->x_pm1a_evt_blk.space_id = ACPI_ADDRESS_SPACE_IO;
|
||||||
|
@ -132,7 +136,14 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
||||||
fadt->x_gpe1_blk.addrh = 0x0;
|
fadt->x_gpe1_blk.addrh = 0x0;
|
||||||
|
|
||||||
header->checksum = table_compute_checksum(fadt, header->length);
|
header->checksum = table_compute_checksum(fadt, header->length);
|
||||||
|
|
||||||
|
acpi_add_table(ctx, fadt);
|
||||||
|
|
||||||
|
acpi_inc(ctx, sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
ACPI_WRITER(5fadt, "FACP", quark_write_fadt, 0);
|
||||||
|
|
||||||
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
int acpi_create_gnvs(struct acpi_global_nvs *gnvs)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,19 +16,23 @@
|
||||||
#include <asm/arch/iomap.h>
|
#include <asm/arch/iomap.h>
|
||||||
#include <dm/uclass-internal.h>
|
#include <dm/uclass-internal.h>
|
||||||
|
|
||||||
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
static int tangier_write_fadt(struct acpi_ctx *ctx,
|
||||||
void *dsdt)
|
const struct acpi_writer *entry)
|
||||||
{
|
{
|
||||||
struct acpi_table_header *header = &(fadt->header);
|
struct acpi_table_header *header;
|
||||||
|
struct acpi_fadt *fadt;
|
||||||
|
|
||||||
memset((void *)fadt, 0, sizeof(struct acpi_fadt));
|
fadt = ctx->current;
|
||||||
|
header = &fadt->header;
|
||||||
|
|
||||||
|
memset(fadt, '\0', sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
acpi_fill_header(header, "FACP");
|
acpi_fill_header(header, "FACP");
|
||||||
header->length = sizeof(struct acpi_fadt);
|
header->length = sizeof(struct acpi_fadt);
|
||||||
header->revision = 6;
|
header->revision = 6;
|
||||||
|
|
||||||
fadt->firmware_ctrl = (u32)facs;
|
fadt->firmware_ctrl = (u32)ctx->facs;
|
||||||
fadt->dsdt = (u32)dsdt;
|
fadt->dsdt = (u32)ctx->dsdt;
|
||||||
fadt->preferred_pm_profile = ACPI_PM_UNSPECIFIED;
|
fadt->preferred_pm_profile = ACPI_PM_UNSPECIFIED;
|
||||||
|
|
||||||
fadt->iapc_boot_arch = ACPI_FADT_VGA_NOT_PRESENT |
|
fadt->iapc_boot_arch = ACPI_FADT_VGA_NOT_PRESENT |
|
||||||
|
@ -41,13 +45,18 @@ void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
||||||
|
|
||||||
fadt->minor_revision = 2;
|
fadt->minor_revision = 2;
|
||||||
|
|
||||||
fadt->x_firmware_ctl_l = (u32)facs;
|
fadt->x_firmware_ctl_l = (u32)ctx->facs;
|
||||||
fadt->x_firmware_ctl_h = 0;
|
fadt->x_firmware_ctl_h = 0;
|
||||||
fadt->x_dsdt_l = (u32)dsdt;
|
fadt->x_dsdt_l = (u32)ctx->dsdt;
|
||||||
fadt->x_dsdt_h = 0;
|
fadt->x_dsdt_h = 0;
|
||||||
|
|
||||||
header->checksum = table_compute_checksum(fadt, header->length);
|
header->checksum = table_compute_checksum(fadt, header->length);
|
||||||
|
|
||||||
|
acpi_inc(ctx, sizeof(struct acpi_fadt));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
ACPI_WRITER(5fadt, "FACP", tangier_write_fadt, 0);
|
||||||
|
|
||||||
u32 acpi_fill_madt(u32 current)
|
u32 acpi_fill_madt(u32 current)
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,8 +24,6 @@ struct acpi_table_header;
|
||||||
|
|
||||||
/* These can be used by the target port */
|
/* These can be used by the target port */
|
||||||
|
|
||||||
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
|
||||||
void *dsdt);
|
|
||||||
int acpi_create_madt_lapics(u32 current);
|
int acpi_create_madt_lapics(u32 current);
|
||||||
int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id,
|
int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id,
|
||||||
u32 addr, u32 gsi_base);
|
u32 addr, u32 gsi_base);
|
||||||
|
|
|
@ -523,21 +523,6 @@ int acpi_write_gnvs(struct acpi_ctx *ctx, const struct acpi_writer *entry)
|
||||||
}
|
}
|
||||||
ACPI_WRITER(4gnvs, "GNVS", acpi_write_gnvs, 0);
|
ACPI_WRITER(4gnvs, "GNVS", acpi_write_gnvs, 0);
|
||||||
|
|
||||||
static int acpi_write_fadt(struct acpi_ctx *ctx,
|
|
||||||
const struct acpi_writer *entry)
|
|
||||||
{
|
|
||||||
struct acpi_fadt *fadt;
|
|
||||||
|
|
||||||
fadt = ctx->current;
|
|
||||||
acpi_create_fadt(fadt, ctx->facs, ctx->dsdt);
|
|
||||||
acpi_add_table(ctx, fadt);
|
|
||||||
|
|
||||||
acpi_inc(ctx, sizeof(struct acpi_fadt));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
ACPI_WRITER(5fact, "FADT", acpi_write_fadt, 0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* QEMU's version of write_acpi_tables is defined in drivers/misc/qfw.c
|
* QEMU's version of write_acpi_tables is defined in drivers/misc/qfw.c
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue