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_HW_REDUCED_ACPI	BIT(20) | ||||||
| #define ACPI_FADT_LOW_PWR_IDLE_S0	BIT(21) | #define ACPI_FADT_LOW_PWR_IDLE_S0	BIT(21) | ||||||
| 
 | 
 | ||||||
|  | /* ARM boot flags */ | ||||||
|  | #define ACPI_ARM_PSCI_COMPLIANT		BIT(0) | ||||||
|  | 
 | ||||||
| enum acpi_address_space_type { | enum acpi_address_space_type { | ||||||
| 	ACPI_ADDRESS_SPACE_MEMORY = 0,	/* System memory */ | 	ACPI_ADDRESS_SPACE_MEMORY = 0,	/* System memory */ | ||||||
| 	ACPI_ADDRESS_SPACE_IO,		/* System I/O */ | 	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_pm_tmr_blk; | ||||||
| 	struct acpi_gen_regaddr x_gpe0_blk; | 	struct acpi_gen_regaddr x_gpe0_blk; | ||||||
| 	struct acpi_gen_regaddr x_gpe1_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 */ | /* 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_PLATFORM_IRQ_SRC,	/* Platform interrupt sources */ | ||||||
| 	ACPI_APIC_LX2APIC,		/* Processor local x2APIC */ | 	ACPI_APIC_LX2APIC,		/* Processor local x2APIC */ | ||||||
| 	ACPI_APIC_LX2APIC_NMI,		/* Local x2APIC NMI */ | 	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 */ | /* MADT: Processor Local APIC Structure */ | ||||||
|  | @ -345,6 +353,57 @@ struct __packed acpi_madt_lapic_nmi { | ||||||
| 	u8 lint;		/* Local APIC LINT# */ | 	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) */ | /* MCFG (PCI Express MMIO config space BAR description table) */ | ||||||
| struct acpi_mcfg { | struct acpi_mcfg { | ||||||
| 	struct acpi_table_header header; | 	struct acpi_table_header header; | ||||||
|  | @ -371,6 +430,19 @@ struct acpi_csrt { | ||||||
| 	struct acpi_table_header header; | 	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 { | struct acpi_csrt_group { | ||||||
| 	u32 length; | 	u32 length; | ||||||
| 	u32 vendor_id; | 	u32 vendor_id; | ||||||
|  | @ -382,6 +454,25 @@ struct acpi_csrt_group { | ||||||
| 	u32 shared_info_length; | 	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 { | struct acpi_csrt_shared_info { | ||||||
| 	u16 major_version; | 	u16 major_version; | ||||||
| 	u16 minor_version; | 	u16 minor_version; | ||||||
|  | @ -559,6 +650,120 @@ struct __packed acpi_spcr { | ||||||
| 	u32 reserved2; | 	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 */ | /* Tables defined/reserved by ACPI and generated by U-Boot */ | ||||||
| enum acpi_tables { | enum acpi_tables { | ||||||
| 	ACPITAB_BERT, | 	ACPITAB_BERT, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue