06f1f4958b
ACPI GED (as described in the ACPI 6.4 spec) uses an interrupt listed in the _CRS object of GED to intimate OSPM about an event. Later then demultiplexes the notified event by evaluating ACPI _EVT method to know the type of event. Use ACPI GED to also notify the guest kernel about any CPU hot(un)plug events. Note, GED interface is used by many hotplug events like memory hotplug, NVDIMM hotplug and non-hotplug events like system power down event. Each of these can be selected using a bit in the 32 bit GED IO interface. A bit has been reserved for the CPU hotplug event. ACPI CPU hotplug related initialization should only happen if ACPI_CPU_HOTPLUG support has been enabled for particular architecture. Add cpu_hotplug_hw_init() stub to avoid compilation break. Co-developed-by: Keqian Zhu <zhukeqian1@huawei.com> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Tested-by: Vishnu Pajjuri <vishnu@os.amperecomputing.com> Tested-by: Xianglai Li <lixianglai@loongson.cn> Tested-by: Miguel Luis <miguel.luis@oracle.com> Reviewed-by: Vishnu Pajjuri <vishnu@os.amperecomputing.com> Tested-by: Zhao Liu <zhao1.liu@intel.com> Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Message-Id: <20240716111502.202344-4-salil.mehta@huawei.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Igor Mammedov <imammedo@redhat.com>
73 lines
2.1 KiB
ReStructuredText
73 lines
2.1 KiB
ReStructuredText
==================================================
|
|
QEMU and ACPI BIOS Generic Event Device interface
|
|
==================================================
|
|
|
|
The ACPI *Generic Event Device* (GED) is a HW reduced platform
|
|
specific device introduced in ACPI v6.1 that handles all platform
|
|
events, including the hotplug ones. GED is modelled as a device
|
|
in the namespace with a _HID defined to be ACPI0013. This document
|
|
describes the interface between QEMU and the ACPI BIOS.
|
|
|
|
GED allows HW reduced platforms to handle interrupts in ACPI ASL
|
|
statements. It follows a very similar approach to the _EVT method
|
|
from GPIO events. All interrupts are listed in _CRS and the handler
|
|
is written in _EVT method. However, the QEMU implementation uses a
|
|
single interrupt for the GED device, relying on an IO memory region
|
|
to communicate the type of device affected by the interrupt. This way,
|
|
we can support up to 32 events with a unique interrupt.
|
|
|
|
**Here is an example,**
|
|
|
|
::
|
|
|
|
Device (\_SB.GED)
|
|
{
|
|
Name (_HID, "ACPI0013")
|
|
Name (_UID, Zero)
|
|
Name (_CRS, ResourceTemplate ()
|
|
{
|
|
Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, )
|
|
{
|
|
0x00000029,
|
|
}
|
|
})
|
|
OperationRegion (EREG, SystemMemory, 0x09080000, 0x04)
|
|
Field (EREG, DWordAcc, NoLock, WriteAsZeros)
|
|
{
|
|
ESEL, 32
|
|
}
|
|
Method (_EVT, 1, Serialized)
|
|
{
|
|
Local0 = ESEL // ESEL = IO memory region which specifies the
|
|
// device type.
|
|
If (((Local0 & One) == One))
|
|
{
|
|
MethodEvent1()
|
|
}
|
|
If ((Local0 & 0x2) == 0x2)
|
|
{
|
|
MethodEvent2()
|
|
}
|
|
...
|
|
}
|
|
}
|
|
|
|
GED IO interface (4 byte access)
|
|
--------------------------------
|
|
**read access:**
|
|
|
|
::
|
|
|
|
[0x0-0x3] Event selector bit field (32 bit) set by QEMU.
|
|
|
|
bits:
|
|
0: Memory hotplug event
|
|
1: System power down event
|
|
2: NVDIMM hotplug event
|
|
3: CPU hotplug event
|
|
4-31: Reserved
|
|
|
|
**write_access:**
|
|
|
|
Nothing is expected to be written into GED IO memory
|