acpi: Add some tables needed by ARM devices
Add some tables needed for ARM devices, including more MADT subtables, a CSRT descriptor, GTDT and PPTT. WIP: This needs comments added. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
02155e0529
commit
979a24e488
@ -162,6 +162,9 @@ enum acpi_pm_profile {
|
||||
#define ACPI_FADT_HW_REDUCED_ACPI BIT(20)
|
||||
#define ACPI_FADT_LOW_PWR_IDLE_S0 BIT(21)
|
||||
|
||||
/* ARM boot flags */
|
||||
#define ACPI_ARM_PSCI_COMPLIANT BIT(0)
|
||||
|
||||
enum acpi_address_space_type {
|
||||
ACPI_ADDRESS_SPACE_MEMORY = 0, /* System memory */
|
||||
ACPI_ADDRESS_SPACE_IO, /* System I/O */
|
||||
@ -237,6 +240,9 @@ struct __packed acpi_fadt {
|
||||
struct acpi_gen_regaddr x_pm_tmr_blk;
|
||||
struct acpi_gen_regaddr x_gpe0_blk;
|
||||
struct acpi_gen_regaddr x_gpe1_blk;
|
||||
struct acpi_gen_regaddr sleep_control_reg;
|
||||
struct acpi_gen_regaddr sleep_status_reg;
|
||||
u64 hyp_vendor_id;
|
||||
};
|
||||
|
||||
/* FADT TABLE Revision values - note these do not match the ACPI revision */
|
||||
@ -302,6 +308,8 @@ enum acpi_apic_types {
|
||||
ACPI_APIC_PLATFORM_IRQ_SRC, /* Platform interrupt sources */
|
||||
ACPI_APIC_LX2APIC, /* Processor local x2APIC */
|
||||
ACPI_APIC_LX2APIC_NMI, /* Local x2APIC NMI */
|
||||
ACPI_APIC_GICC, /* Generic Interrupt Ctlr CPU i/f */
|
||||
ACPI_APIC_GICD /* Generic Interrupt Ctlr Distributor */
|
||||
};
|
||||
|
||||
/* MADT: Processor Local APIC Structure */
|
||||
@ -345,6 +353,57 @@ struct __packed acpi_madt_lapic_nmi {
|
||||
u8 lint; /* Local APIC LINT# */
|
||||
};
|
||||
|
||||
/* flags for acpi_madr_gicc flags word */
|
||||
enum {
|
||||
ACPI_MADRF_ENABLED = BIT(0),
|
||||
ACPI_MADRF_PERF = BIT(1),
|
||||
ACPI_MADRF_VGIC = BIT(2),
|
||||
};
|
||||
|
||||
/**
|
||||
* struct __packed acpi_madr_gicc - GIC CPU interface (type 0xb)
|
||||
*
|
||||
* This holds information about the Generic Interrupt Controller (GIC) CPU
|
||||
* interface. See ACPI Spec v6.3 section 5.2.12.14
|
||||
*/
|
||||
struct __packed acpi_madr_gicc {
|
||||
u8 type;
|
||||
u8 length;
|
||||
u16 reserved;
|
||||
u32 cpu_if_num;
|
||||
u32 processor_id;
|
||||
u32 flags;
|
||||
u32 parking_proto;
|
||||
u32 perf_gsiv;
|
||||
u64 parked_addr;
|
||||
u64 phys_base;
|
||||
u64 gicv;
|
||||
u64 gich;
|
||||
u32 vgic_maint_irq;
|
||||
u64 gicr_base;
|
||||
u64 mpidr;
|
||||
u8 efficiency;
|
||||
u8 reserved2;
|
||||
u16 spi_overflow_irq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct __packed acpi_madr_gicc - GIC distributor (type 0xc)
|
||||
*
|
||||
* This holds information about the Generic Interrupt Controller (GIC)
|
||||
* Distributor interface. See ACPI Spec v6.3 section 5.2.12.15
|
||||
*/
|
||||
struct __packed acpi_madr_gicd {
|
||||
u8 type;
|
||||
u8 length;
|
||||
u16 reserved;
|
||||
u32 gic_id;
|
||||
u64 phys_base;
|
||||
u32 reserved2;
|
||||
u8 gic_version;
|
||||
u8 reserved3[3];
|
||||
};
|
||||
|
||||
/* MCFG (PCI Express MMIO config space BAR description table) */
|
||||
struct acpi_mcfg {
|
||||
struct acpi_table_header header;
|
||||
@ -371,6 +430,19 @@ struct acpi_csrt {
|
||||
struct acpi_table_header header;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_csrt_group - header for a group within the CSRT
|
||||
*
|
||||
* The CSRT consists of one or more groups and this is the header for each
|
||||
*
|
||||
* See Core System Resources Table (CSRT), March 13, 2017, Microsoft Corporation
|
||||
* for details
|
||||
*
|
||||
* https://uefi.org/sites/default/files/resources/CSRT%20v2.pdf
|
||||
*
|
||||
* @shared_info_length indicates the number of shared-info bytes following this
|
||||
* struct (which may be 0)
|
||||
*/
|
||||
struct acpi_csrt_group {
|
||||
u32 length;
|
||||
u32 vendor_id;
|
||||
@ -382,6 +454,25 @@ struct acpi_csrt_group {
|
||||
u32 shared_info_length;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_csrt_descriptor - describes the information that follows
|
||||
*
|
||||
* See the spec as above for details
|
||||
*/
|
||||
struct acpi_csrt_descriptor {
|
||||
u32 length;
|
||||
u16 type;
|
||||
u16 subtype;
|
||||
u32 uid;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_csrt_shared_info - shared info for Intel tangier
|
||||
*
|
||||
* This provides the shared info for this particular board. Notes that the CSRT
|
||||
* does not describe the format of data, so this format may not be used by any
|
||||
* other board.
|
||||
*/
|
||||
struct acpi_csrt_shared_info {
|
||||
u16 major_version;
|
||||
u16 minor_version;
|
||||
@ -559,6 +650,120 @@ struct __packed acpi_spcr {
|
||||
u32 reserved2;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_gtdt - Generic Timer Description Table (GTDT)
|
||||
*
|
||||
* See ACPI Spec v6.3 section 5.2.24 for details
|
||||
*/
|
||||
struct __packed acpi_gtdt {
|
||||
struct acpi_table_header header;
|
||||
u64 cnt_ctrl_base;
|
||||
u32 reserved0;
|
||||
u32 sec_el1_gsiv;
|
||||
u32 sec_el1_flags;
|
||||
u32 el1_gsiv;
|
||||
u32 el1_flags;
|
||||
u32 virt_el1_gsiv;
|
||||
u32 virt_el1_flags;
|
||||
u32 el2_gsiv;
|
||||
u32 el2_flags;
|
||||
u64 cnt_read_base;
|
||||
u32 plat_timer_count;
|
||||
u32 plat_timer_offset;
|
||||
u32 virt_el2_gsiv;
|
||||
u32 virt_el2_flags;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_bgrt - Boot Graphics Resource Table (BGRT)
|
||||
*
|
||||
* Optional table that provides a mechanism to indicate that an image was drawn
|
||||
* on the screen during boot, and some information about the image.
|
||||
*
|
||||
* See ACPI Spec v6.3 section 5.2.22 for details
|
||||
*/
|
||||
struct __packed acpi_bgrt {
|
||||
struct acpi_table_header header;
|
||||
u16 version;
|
||||
u8 status;
|
||||
u8 image_type;
|
||||
u64 addr;
|
||||
u32 offset_x;
|
||||
u32 offset_y;
|
||||
};
|
||||
|
||||
/* Types for PPTT */
|
||||
#define ACPI_PPTT_TYPE_PROC 0
|
||||
#define ACPI_PPTT_TYPE_CACHE 1
|
||||
|
||||
/* Flags for PPTT */
|
||||
#define ACPI_PPTT_PHYSICAL_PACKAGE BIT(0)
|
||||
#define ACPI_PPTT_PROC_ID_VALID BIT(1)
|
||||
#define ACPI_PPTT_PROC_IS_THREAD BIT(2)
|
||||
#define ACPI_PPTT_NODE_IS_LEAF BIT(3)
|
||||
#define ACPI_PPTT_CHILDREN_IDENTICAL BIT(4)
|
||||
|
||||
/**
|
||||
* struct acpi_pptt_header - Processor Properties Topology Table (PPTT) header
|
||||
*
|
||||
* Describes the topological structure of processors and their shared resources,
|
||||
* such as caches.
|
||||
*
|
||||
* See ACPI Spec v6.3 section 5.2.29 for details
|
||||
*/
|
||||
struct __packed acpi_pptt_header {
|
||||
u8 type; /* ACPI_PPTT_TYPE_... */
|
||||
u8 length;
|
||||
u16 reserved;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_pptt_proc - a processor as described by PPTT
|
||||
*/
|
||||
struct __packed acpi_pptt_proc {
|
||||
struct acpi_pptt_header hdr;
|
||||
u32 flags;
|
||||
u32 parent;
|
||||
u32 proc_id;
|
||||
u32 num_resources;
|
||||
};
|
||||
|
||||
/* Cache flags for acpi_pptt_cache */
|
||||
#define ACPI_PPTT_SIZE_VALID BIT(0)
|
||||
#define ACPI_PPTT_SETS_VALID BIT(1)
|
||||
#define ACPI_PPTT_ASSOC_VALID BIT(2)
|
||||
#define ACPI_PPTT_ALLOC_TYPE_VALID BIT(3)
|
||||
#define ACPI_PPTT_CACHE_TYPE_VALID BIT(4)
|
||||
#define ACPI_PPTT_WRITE_POLICY_VALID BIT(5)
|
||||
#define ACPI_PPTT_LINE_SIZE_VALID BIT(6)
|
||||
|
||||
#define ACPI_PPTT_ALL_VALID 0x7f
|
||||
#define ACPI_PPTT_ALL_BUT_WRITE_POL 0x5f
|
||||
|
||||
#define ACPI_PPTT_READ_ALLOC BIT(0)
|
||||
#define ACPI_PPTT_WRITE_ALLOC BIT(1)
|
||||
#define ACPI_PPTT_CACHE_TYPE_SHIFT 2
|
||||
#define ACPI_PPTT_CACHE_TYPE_MASK (3 << ACPI_PPTT_CACHE_TYPE_SHIFT)
|
||||
#define ACPI_PPTT_CACHE_TYPE_DATA 0
|
||||
#define ACPI_PPTT_CACHE_TYPE_INSTR 1
|
||||
#define ACPI_PPTT_CACHE_TYPE_UNIFIED 2
|
||||
#define ACPI_PPTT_CACHE_TYPE_DATA 0
|
||||
#define ACPI_PPTT_WRITE_THROUGH BIT(4)
|
||||
|
||||
/**
|
||||
* struct acpi_pptt_cache - a cache as described by PPTT
|
||||
*/
|
||||
struct __packed acpi_pptt_cache {
|
||||
struct acpi_pptt_header hdr;
|
||||
u32 flags;
|
||||
u32 next_cache_level;
|
||||
u32 size;
|
||||
u32 sets;
|
||||
u8 assoc;
|
||||
u8 attributes;
|
||||
u16 line_size;
|
||||
};
|
||||
|
||||
/* Tables defined/reserved by ACPI and generated by U-Boot */
|
||||
enum acpi_tables {
|
||||
ACPITAB_BERT,
|
||||
|
Loading…
Reference in New Issue
Block a user