diff mbox series

[U-Boot,v2,2/4] x86: acpi: Introduce a stub to generate CSRT

Message ID 20190714162359.56390-2-andriy.shevchenko@linux.intel.com
State Accepted
Commit ddd2a4244c26068ae1a4e3161b21b738a8bec46e
Delegated to: Bin Meng
Headers show
Series [U-Boot,v2,1/4] x86: acpi: Add CSRT description | expand

Commit Message

Andy Shevchenko July 14, 2019, 4:23 p.m. UTC
Here is a stub function that generates an empty CSRT. If the target platform
provides acpi_fill_csrt() function, it will be used to populate the table.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 arch/x86/include/asm/acpi_table.h |  1 +
 arch/x86/lib/acpi_table.c         | 32 +++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

Comments

Bin Meng July 18, 2019, 2:27 p.m. UTC | #1
On Mon, Jul 15, 2019 at 12:24 AM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> Here is a stub function that generates an empty CSRT. If the target platform
> provides acpi_fill_csrt() function, it will be used to populate the table.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  arch/x86/include/asm/acpi_table.h |  1 +
>  arch/x86/lib/acpi_table.c         | 32 +++++++++++++++++++++++++++++++
>  2 files changed, 33 insertions(+)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Bin Meng July 19, 2019, 9:48 a.m. UTC | #2
On Thu, Jul 18, 2019 at 10:27 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> On Mon, Jul 15, 2019 at 12:24 AM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> >
> > Here is a stub function that generates an empty CSRT. If the target platform
> > provides acpi_fill_csrt() function, it will be used to populate the table.
> >
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  arch/x86/include/asm/acpi_table.h |  1 +
> >  arch/x86/lib/acpi_table.c         | 32 +++++++++++++++++++++++++++++++
> >  2 files changed, 33 insertions(+)
> >
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

applied to u-boot-x86, thanks!
diff mbox series

Patch

diff --git a/arch/x86/include/asm/acpi_table.h b/arch/x86/include/asm/acpi_table.h
index a70abd5d75..02aea127c1 100644
--- a/arch/x86/include/asm/acpi_table.h
+++ b/arch/x86/include/asm/acpi_table.h
@@ -401,6 +401,7 @@  u32 acpi_fill_madt(u32 current);
 int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base,
 			      u16 seg_nr, u8 start, u8 end);
 u32 acpi_fill_mcfg(u32 current);
+u32 acpi_fill_csrt(u32 current);
 void acpi_create_gnvs(struct acpi_global_nvs *gnvs);
 ulong write_acpi_tables(ulong start);
 
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index e80e968b50..efc4edf801 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -337,6 +337,30 @@  static void acpi_create_mcfg(struct acpi_mcfg *mcfg)
 	header->checksum = table_compute_checksum((void *)mcfg, header->length);
 }
 
+__weak u32 acpi_fill_csrt(u32 current)
+{
+	return current;
+}
+
+static void acpi_create_csrt(struct acpi_csrt *csrt)
+{
+	struct acpi_table_header *header = &(csrt->header);
+	u32 current = (u32)csrt + sizeof(struct acpi_csrt);
+
+	memset((void *)csrt, 0, sizeof(struct acpi_csrt));
+
+	/* Fill out header fields */
+	acpi_fill_header(header, "CSRT");
+	header->length = sizeof(struct acpi_csrt);
+	header->revision = 0;
+
+	current = acpi_fill_csrt(current);
+
+	/* (Re)calculate length and checksum */
+	header->length = current - (u32)csrt;
+	header->checksum = table_compute_checksum((void *)csrt, header->length);
+}
+
 static void acpi_create_spcr(struct acpi_spcr *spcr)
 {
 	struct acpi_table_header *header = &(spcr->header);
@@ -440,6 +464,7 @@  ulong write_acpi_tables(ulong start)
 	struct acpi_fadt *fadt;
 	struct acpi_mcfg *mcfg;
 	struct acpi_madt *madt;
+	struct acpi_csrt *csrt;
 	struct acpi_spcr *spcr;
 	int i;
 
@@ -529,6 +554,13 @@  ulong write_acpi_tables(ulong start)
 	acpi_add_table(rsdp, mcfg);
 	current = ALIGN(current, 16);
 
+	debug("ACPI:    * CSRT\n");
+	csrt = (struct acpi_csrt *)current;
+	acpi_create_csrt(csrt);
+	current += csrt->header.length;
+	acpi_add_table(rsdp, csrt);
+	current = ALIGN(current, 16);
+
 	debug("ACPI:    * SPCR\n");
 	spcr = (struct acpi_spcr *)current;
 	acpi_create_spcr(spcr);