mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-30 08:07:59 +00:00
acpi: Add a central location for table version numbers
Each ACPI table has its own version number. Add the version numbers in a single function so we can keep them consistent and easily see what versions are supported. Start a new acpi_table file in a generic directory to house this function. We can move things over to this file from x86 as needed. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
89c2798f1f
commit
91fe8b79f6
5 changed files with 141 additions and 0 deletions
|
@ -202,6 +202,26 @@ struct __packed acpi_fadt {
|
||||||
struct acpi_gen_regaddr x_gpe1_blk;
|
struct acpi_gen_regaddr x_gpe1_blk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* FADT TABLE Revision values - note these do not match the ACPI revision */
|
||||||
|
#define ACPI_FADT_REV_ACPI_1_0 1
|
||||||
|
#define ACPI_FADT_REV_ACPI_2_0 3
|
||||||
|
#define ACPI_FADT_REV_ACPI_3_0 4
|
||||||
|
#define ACPI_FADT_REV_ACPI_4_0 4
|
||||||
|
#define ACPI_FADT_REV_ACPI_5_0 5
|
||||||
|
#define ACPI_FADT_REV_ACPI_6_0 6
|
||||||
|
|
||||||
|
/* MADT TABLE Revision values - note these do not match the ACPI revision */
|
||||||
|
#define ACPI_MADT_REV_ACPI_3_0 2
|
||||||
|
#define ACPI_MADT_REV_ACPI_4_0 3
|
||||||
|
#define ACPI_MADT_REV_ACPI_5_0 3
|
||||||
|
#define ACPI_MADT_REV_ACPI_6_0 5
|
||||||
|
|
||||||
|
#define ACPI_MCFG_REV_ACPI_3_0 1
|
||||||
|
|
||||||
|
/* IVRS Revision Field */
|
||||||
|
#define IVRS_FORMAT_FIXED 0x01 /* Type 10h & 11h only */
|
||||||
|
#define IVRS_FORMAT_MIXED 0x02 /* Type 10h, 11h, & 40h */
|
||||||
|
|
||||||
/* FACS flags */
|
/* FACS flags */
|
||||||
#define ACPI_FACS_S4BIOS_F BIT(0)
|
#define ACPI_FACS_S4BIOS_F BIT(0)
|
||||||
#define ACPI_FACS_64BIT_WAKE_F BIT(1)
|
#define ACPI_FACS_64BIT_WAKE_F BIT(1)
|
||||||
|
@ -391,6 +411,46 @@ struct __packed acpi_spcr {
|
||||||
u32 reserved2;
|
u32 reserved2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Tables defined/reserved by ACPI and generated by U-Boot */
|
||||||
|
enum acpi_tables {
|
||||||
|
ACPITAB_BERT,
|
||||||
|
ACPITAB_DBG2,
|
||||||
|
ACPITAB_DMAR,
|
||||||
|
ACPITAB_DSDT,
|
||||||
|
ACPITAB_ECDT,
|
||||||
|
ACPITAB_FACS,
|
||||||
|
ACPITAB_FADT,
|
||||||
|
ACPITAB_HEST,
|
||||||
|
ACPITAB_HPET,
|
||||||
|
ACPITAB_IVRS,
|
||||||
|
ACPITAB_MADT,
|
||||||
|
ACPITAB_MCFG,
|
||||||
|
ACPITAB_NHLT,
|
||||||
|
ACPITAB_RSDP,
|
||||||
|
ACPITAB_RSDT,
|
||||||
|
ACPITAB_SLIT,
|
||||||
|
ACPITAB_SPCR,
|
||||||
|
ACPITAB_SPMI,
|
||||||
|
ACPITAB_SRAT,
|
||||||
|
ACPITAB_SSDT,
|
||||||
|
ACPITAB_TCPA,
|
||||||
|
ACPITAB_TPM2,
|
||||||
|
ACPITAB_VFCT,
|
||||||
|
ACPITAB_XSDT,
|
||||||
|
|
||||||
|
ACPITAB_COUNT,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* acpi_get_table_revision() - Get the revision number generated for a table
|
||||||
|
*
|
||||||
|
* This keeps the version-number information in one place
|
||||||
|
*
|
||||||
|
* @table: ACPI table to check
|
||||||
|
* @return version number that U-Boot generates
|
||||||
|
*/
|
||||||
|
int acpi_get_table_revision(enum acpi_tables table);
|
||||||
|
|
||||||
#endif /* !__ACPI__*/
|
#endif /* !__ACPI__*/
|
||||||
|
|
||||||
#include <asm/acpi_table.h>
|
#include <asm/acpi_table.h>
|
||||||
|
|
|
@ -58,6 +58,7 @@ obj-$(CONFIG_TPM_V1) += tpm-v1.o
|
||||||
obj-$(CONFIG_TPM_V2) += tpm-v2.o
|
obj-$(CONFIG_TPM_V2) += tpm-v2.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
obj-$(CONFIG_$(SPL_)ACPIGEN) += acpi/
|
||||||
obj-$(CONFIG_$(SPL_)RSA) += rsa/
|
obj-$(CONFIG_$(SPL_)RSA) += rsa/
|
||||||
obj-$(CONFIG_SHA1) += sha1.o
|
obj-$(CONFIG_SHA1) += sha1.o
|
||||||
obj-$(CONFIG_SHA256) += sha256.o
|
obj-$(CONFIG_SHA256) += sha256.o
|
||||||
|
|
4
lib/acpi/Makefile
Normal file
4
lib/acpi/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-y += acpi_table.o
|
62
lib/acpi/acpi_table.c
Normal file
62
lib/acpi/acpi_table.c
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Generic code used to generate ACPI tables
|
||||||
|
*
|
||||||
|
* Copyright 2019 Google LLC
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <acpi/acpi_table.h>
|
||||||
|
|
||||||
|
int acpi_get_table_revision(enum acpi_tables table)
|
||||||
|
{
|
||||||
|
switch (table) {
|
||||||
|
case ACPITAB_FADT:
|
||||||
|
return ACPI_FADT_REV_ACPI_3_0;
|
||||||
|
case ACPITAB_MADT:
|
||||||
|
return ACPI_MADT_REV_ACPI_3_0;
|
||||||
|
case ACPITAB_MCFG:
|
||||||
|
return ACPI_MCFG_REV_ACPI_3_0;
|
||||||
|
case ACPITAB_TCPA:
|
||||||
|
/* This version and the rest are open-coded */
|
||||||
|
return 2;
|
||||||
|
case ACPITAB_TPM2:
|
||||||
|
return 4;
|
||||||
|
case ACPITAB_SSDT: /* ACPI 3.0 upto 6.3: 2 */
|
||||||
|
return 2;
|
||||||
|
case ACPITAB_SRAT: /* ACPI 2.0: 1, ACPI 3.0: 2, ACPI 4.0 to 6.3: 3 */
|
||||||
|
return 1; /* TODO Should probably be upgraded to 2 */
|
||||||
|
case ACPITAB_DMAR:
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_SLIT: /* ACPI 2.0 upto 6.3: 1 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_SPMI: /* IMPI 2.0 */
|
||||||
|
return 5;
|
||||||
|
case ACPITAB_HPET: /* Currently 1. Table added in ACPI 2.0 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_VFCT: /* ACPI 2.0/3.0/4.0: 1 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_IVRS:
|
||||||
|
return IVRS_FORMAT_FIXED;
|
||||||
|
case ACPITAB_DBG2:
|
||||||
|
return 0;
|
||||||
|
case ACPITAB_FACS: /* ACPI 2.0/3.0: 1, ACPI 4.0 to 6.3: 2 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_RSDT: /* ACPI 1.0 upto 6.3: 1 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_XSDT: /* ACPI 2.0 upto 6.3: 1 */
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_RSDP: /* ACPI 2.0 upto 6.3: 2 */
|
||||||
|
return 2;
|
||||||
|
case ACPITAB_HEST:
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_NHLT:
|
||||||
|
return 5;
|
||||||
|
case ACPITAB_BERT:
|
||||||
|
return 1;
|
||||||
|
case ACPITAB_SPCR:
|
||||||
|
return 2;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
|
#include <acpi/acpi_table.h>
|
||||||
#include <dm/acpi.h>
|
#include <dm/acpi.h>
|
||||||
#include <dm/test.h>
|
#include <dm/test.h>
|
||||||
#include <test/ut.h>
|
#include <test/ut.h>
|
||||||
|
@ -53,3 +54,16 @@ static int dm_test_acpi_get_name(struct unit_test_state *uts)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
DM_TEST(dm_test_acpi_get_name, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
DM_TEST(dm_test_acpi_get_name, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/* Test acpi_get_table_revision() */
|
||||||
|
static int dm_test_acpi_get_table_revision(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
ut_asserteq(1, acpi_get_table_revision(ACPITAB_MCFG));
|
||||||
|
ut_asserteq(2, acpi_get_table_revision(ACPITAB_RSDP));
|
||||||
|
ut_asserteq(4, acpi_get_table_revision(ACPITAB_TPM2));
|
||||||
|
ut_asserteq(-EINVAL, acpi_get_table_revision(ACPITAB_COUNT));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_acpi_get_table_revision,
|
||||||
|
DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
|
||||||
|
|
Loading…
Add table
Reference in a new issue