123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /** @file
- Secondary System Description Table (SSDT) for hardware reduced events.
- Arm Reference Design platforms implement the HW-Reduced ACPI model and do not
- support legacy ACPI Fixed Hardware interfaces.
- GPIO Signalled ACPI event is one of the methods for signalling events in
- HW-Reduced ACPI model. In this method, ACPI events can be signaled when a GPIO
- Interrupt is received by OSPM and that GPIO Interrupt Connection is listed in
- a GPIO controller device’s _AEI object.
- Interrupt Signalled ACPI event is another method of signalling events in
- HW-Reduced ACPI model. In this method, ACPI event is generated when an
- interrupt is received by the OSPM which is listed in the Generic Event Device
- (GED) _CRS object.
- Copyright (c) 2021, ARM Limited. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
- @par Specification Reference:
- - ACPI 6.4, Chapter 5.6.5, GPIO-signaled ACPI Events
- - Arm Base Boot Requirements 1.0, Issue F, Chapter 8.5.3, GPIO controllers
- - ACPI 6.4, Chapter 5.6.9, Interrupt-signaled ACPI events
- - Arm Base Boot Requirements 1.0, Issue F, Chapter 8.5.4 Generic Event
- Devices
- **/
- #include "SgiAcpiHeader.h"
- DefinitionBlock("SsdtEvent.aml", "SSDT", 2, "ARMLTD", "ARMSGI", EFI_ACPI_ARM_OEM_REVISION) {
- /* GPIO Controller 0 device. Use _AEI object to configure pin 0 for
- signalling HW-Reduced events and the _L00 method to handle the event
- generated by pin 0.
- */
- Device (\_SB.GPI0)
- {
- Name (_HID, "ARMH0061") /* PrimeCell GPIO */
- Name (_UID, 0)
- /* Resource setting for GPIO controller 0 */
- Name (_CRS, ResourceTemplate () {
- Memory32Fixed (
- ReadWrite,
- FixedPcdGet32 (PcdGpioController0BaseAddress),
- FixedPcdGet32 (PcdGpioController0Size)
- )
- Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {
- FixedPcdGet32 (PcdGpioController0Interrupt)
- }
- })
- /* ACPI Event information for GPIO controller 0 */
- Name (_AEI, ResourceTemplate() {
- GpioInt (Level, ActiveHigh, Exclusive, PullDown, , "\\_SB.GPI0") {0}
- })
- /* Event handler for pin0 */
- Method (_L00) {
- Printf ("GPIO0 Pin0 Toggled")
- Store (1, INC0)
- }
- /* Mapping for interrupt clear register */
- OperationRegion (
- GIO0,
- SystemMemory,
- FixedPcdGet32 (PcdGpioController0BaseAddress),
- FixedPcdGet32 (PcdGpioController0Size)
- )
- Field (GIO0, ByteAcc, NoLock, Preserve) {
- Offset (0x41C), /* WO Intr clear on writing 1 to resp bit */
- INC0, 8
- }
- }
- /* ACPI GED object Template. Arm's reference design platforms include a SP804
- dual timer which is implemented as part of the RoS sub-system. The SP804
- interrupt is used in GED as interrupt source. */
- Device (\_SB.GED0) {
- Name (_HID, "ACPI0013")
- Name (_UID, 0)
- /* Resource setting for GED */
- Name (_CRS, ResourceTemplate () {
- Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {
- FixedPcdGet32 (PcdSp804DualTimerInterrupt)
- }
- })
- Method (_STA, 0x0, NotSerialized) {
- return (0xF);
- }
- /* Register map for interrupt clear register */
- OperationRegion (
- DTIM,
- SystemMemory,
- FixedPcdGet32 (PcdSp804DualTimerBaseAddress),
- FixedPcdGet32 (PcdSp804DualTimerSize))
- Field (DTIM, DWordAcc, NoLock, Preserve) {
- Offset (0x0C),
- T1IC, 32, /* 0x0C Timer 1 Interrupt clear */
- }
- /* GED event handler */
- Method (_EVT, 1, Serialized) {
- switch (ToInteger (Arg0))
- {
- case (FixedPcdGet32 (PcdSp804DualTimerInterrupt)) {
- Store (0x01, T1IC)
- }
- }
- }
- } /* Device (\_SB.GED0) */
- }
|