2018-05-07 06:58:06 +09:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
x86: Generate a valid ACPI table
Implement write_acpi_table() to create a minimal working ACPI table.
This includes writing FACS, XSDT, RSDP, FADT, MCFG, MADT, DSDT & SSDT
ACPI table entries.
Use a Kconfig option GENERATE_ACPI_TABLE to tell U-Boot whether we need
actually write the APCI table just like we did for PIRQ routing, MP table
and SFI tables. With ACPI table existence, linux kernel gets control of
power management, thermal management, configuration management and
monitoring in hardware.
Signed-off-by: Saket Sinha <saket.sinha89@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tidied up whitespace and aligned some tabs:
Signed-off-by: Simon Glass <sjg@chromium.org>
2015-08-22 15:50:55 +09:00
|
|
|
/*
|
|
|
|
* Based on acpi.c from coreboot
|
|
|
|
*
|
|
|
|
* Copyright (C) 2015, Saket Sinha <saket.sinha89@gmail.com>
|
2016-05-07 23:46:22 +09:00
|
|
|
* Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
|
x86: Generate a valid ACPI table
Implement write_acpi_table() to create a minimal working ACPI table.
This includes writing FACS, XSDT, RSDP, FADT, MCFG, MADT, DSDT & SSDT
ACPI table entries.
Use a Kconfig option GENERATE_ACPI_TABLE to tell U-Boot whether we need
actually write the APCI table just like we did for PIRQ routing, MP table
and SFI tables. With ACPI table existence, linux kernel gets control of
power management, thermal management, configuration management and
monitoring in hardware.
Signed-off-by: Saket Sinha <saket.sinha89@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tidied up whitespace and aligned some tabs:
Signed-off-by: Simon Glass <sjg@chromium.org>
2015-08-22 15:50:55 +09:00
|
|
|
*/
|
|
|
|
|
2018-07-19 13:42:17 +09:00
|
|
|
#ifndef __ASM_ACPI_TABLE_H__
|
|
|
|
#define __ASM_ACPI_TABLE_H__
|
|
|
|
|
2020-04-09 07:57:36 +09:00
|
|
|
struct acpi_facs;
|
|
|
|
struct acpi_fadt;
|
2016-06-17 18:13:16 +09:00
|
|
|
struct acpi_global_nvs;
|
2020-04-09 07:57:36 +09:00
|
|
|
struct acpi_madt_ioapic;
|
|
|
|
struct acpi_madt_irqoverride;
|
|
|
|
struct acpi_madt_lapic_nmi;
|
|
|
|
struct acpi_mcfg_mmconfig;
|
|
|
|
struct acpi_table_header;
|
2018-11-21 06:52:37 +09:00
|
|
|
|
x86: Generate a valid ACPI table
Implement write_acpi_table() to create a minimal working ACPI table.
This includes writing FACS, XSDT, RSDP, FADT, MCFG, MADT, DSDT & SSDT
ACPI table entries.
Use a Kconfig option GENERATE_ACPI_TABLE to tell U-Boot whether we need
actually write the APCI table just like we did for PIRQ routing, MP table
and SFI tables. With ACPI table existence, linux kernel gets control of
power management, thermal management, configuration management and
monitoring in hardware.
Signed-off-by: Saket Sinha <saket.sinha89@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tidied up whitespace and aligned some tabs:
Signed-off-by: Simon Glass <sjg@chromium.org>
2015-08-22 15:50:55 +09:00
|
|
|
/* These can be used by the target port */
|
|
|
|
|
2016-05-07 23:46:24 +09:00
|
|
|
void acpi_fill_header(struct acpi_table_header *header, char *signature);
|
2016-05-07 23:46:25 +09:00
|
|
|
void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
|
|
|
|
void *dsdt);
|
2016-05-07 23:46:30 +09:00
|
|
|
int acpi_create_madt_lapics(u32 current);
|
2016-05-07 23:46:25 +09:00
|
|
|
int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id,
|
|
|
|
u32 addr, u32 gsi_base);
|
x86: Generate a valid ACPI table
Implement write_acpi_table() to create a minimal working ACPI table.
This includes writing FACS, XSDT, RSDP, FADT, MCFG, MADT, DSDT & SSDT
ACPI table entries.
Use a Kconfig option GENERATE_ACPI_TABLE to tell U-Boot whether we need
actually write the APCI table just like we did for PIRQ routing, MP table
and SFI tables. With ACPI table existence, linux kernel gets control of
power management, thermal management, configuration management and
monitoring in hardware.
Signed-off-by: Saket Sinha <saket.sinha89@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tidied up whitespace and aligned some tabs:
Signed-off-by: Simon Glass <sjg@chromium.org>
2015-08-22 15:50:55 +09:00
|
|
|
int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride,
|
2016-05-07 23:46:25 +09:00
|
|
|
u8 bus, u8 source, u32 gsirq, u16 flags);
|
|
|
|
int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
|
|
|
|
u8 cpu, u16 flags, u8 lint);
|
2016-05-07 23:46:26 +09:00
|
|
|
u32 acpi_fill_madt(u32 current);
|
2017-07-22 04:32:05 +09:00
|
|
|
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);
|
2019-07-15 01:23:57 +09:00
|
|
|
u32 acpi_fill_csrt(u32 current);
|
2020-07-08 12:32:05 +09:00
|
|
|
|
2020-09-23 03:45:09 +09:00
|
|
|
/**
|
|
|
|
* acpi_write_hpet() - Write out a HPET table
|
|
|
|
*
|
|
|
|
* Write out the table for High-Precision Event Timers
|
|
|
|
*
|
|
|
|
* @ctx: Current ACPI context
|
|
|
|
* @return 0 if OK, -ve on error
|
|
|
|
*/
|
|
|
|
int acpi_write_hpet(struct acpi_ctx *ctx);
|
|
|
|
|
2020-09-23 03:45:10 +09:00
|
|
|
/**
|
|
|
|
* acpi_write_dbg2_pci_uart() - Write out a DBG2 table
|
|
|
|
*
|
|
|
|
* @ctx: Current ACPI context
|
|
|
|
* @dev: Debug UART device to describe
|
|
|
|
* @access_size: Access size for UART (e.g. ACPI_ACCESS_SIZE_DWORD_ACCESS)
|
|
|
|
* @return 0 if OK, -ve on error
|
|
|
|
*/
|
|
|
|
int acpi_write_dbg2_pci_uart(struct acpi_ctx *ctx, struct udevice *dev,
|
|
|
|
uint access_size);
|
|
|
|
|
2020-07-08 12:32:05 +09:00
|
|
|
/**
|
|
|
|
* acpi_create_gnvs() - Create a GNVS (Global Non Volatile Storage) table
|
|
|
|
*
|
|
|
|
* @gnvs: Table to fill in
|
|
|
|
* @return 0 if OK, -ve on error
|
|
|
|
*/
|
|
|
|
int acpi_create_gnvs(struct acpi_global_nvs *gnvs);
|
|
|
|
|
2017-01-16 23:03:35 +09:00
|
|
|
ulong write_acpi_tables(ulong start);
|
2017-04-21 23:24:36 +09:00
|
|
|
|
2018-01-30 22:01:16 +09:00
|
|
|
/**
|
|
|
|
* acpi_get_rsdp_addr() - get ACPI RSDP table address
|
|
|
|
*
|
|
|
|
* This routine returns the ACPI RSDP table address in the system memory.
|
|
|
|
*
|
|
|
|
* @return: ACPI RSDP table address
|
|
|
|
*/
|
|
|
|
ulong acpi_get_rsdp_addr(void);
|
2018-07-19 13:42:17 +09:00
|
|
|
|
2020-09-23 03:45:14 +09:00
|
|
|
/**
|
|
|
|
* arch_read_sci_irq_select() - Read the system-control interrupt number
|
|
|
|
*
|
|
|
|
* @returns value of IRQ register in the PMC
|
|
|
|
*/
|
|
|
|
int arch_read_sci_irq_select(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* arch_write_sci_irq_select() - Set the system-control interrupt number
|
|
|
|
*
|
|
|
|
* @scis: New value for IRQ register in the PMC
|
|
|
|
*/
|
|
|
|
int arch_write_sci_irq_select(uint scis);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* arch_madt_sci_irq_polarity() - Return the priority to use for the MADT
|
|
|
|
*
|
|
|
|
* @sci: System-control interrupt number
|
|
|
|
* @return priority to use (MP_IRQ_POLARITY_...)
|
|
|
|
*/
|
|
|
|
int arch_madt_sci_irq_polarity(int sci);
|
|
|
|
|
2018-07-19 13:42:17 +09:00
|
|
|
#endif /* __ASM_ACPI_TABLE_H__ */
|