mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-27 15:56:54 +00:00
acrn-config: build a hardware-reduced only ACPI
Change ACPI version from V3 to V5 to support hardware-reduced ACPI, which is a V5 feature Remove/obsolete the PM1X related stuff as they are not used for hardware-reduced ACPI Add the _S5 method in DSDT table Using hardware-reduced mode allows to use a much simpler form of ACPI that does not require supporting the legacy of previous versions of the specification such as SCI IRQ. Hardware-reduced mode is specified by setting the Hardware Reduced (HW_REDUCED_ACPI) flag in FADT table. If the HW_REDUCED_ACPI flag in the FADT table is set, OSPM will ignore fields related to the ACPI HW register interface such as the PM1x control register. Instead, sleep control/status registers can be used for system sleep state entry on hardware-reduced ACPI systems. Tracked-On: #5411 Signed-off-by: dongshen <dongsheng.x.zhang@intel.com>
This commit is contained in:
parent
3cf476dc1d
commit
7cc9c8fe06
@ -21,10 +21,10 @@ ACPI_BASE = 0x7ff00000
|
|||||||
|
|
||||||
ACPI_RSDP_ADDR_OFFSET = 0x0 # (36 bytes fixed)
|
ACPI_RSDP_ADDR_OFFSET = 0x0 # (36 bytes fixed)
|
||||||
ACPI_XSDT_ADDR_OFFSET = 0x80 # (36 bytes + 8*7 table addrs)
|
ACPI_XSDT_ADDR_OFFSET = 0x80 # (36 bytes + 8*7 table addrs)
|
||||||
ACPI_FADT_ADDR_OFFSET = 0x100 # (244 bytes)
|
ACPI_FADT_ADDR_OFFSET = 0x100 # (268 bytes)
|
||||||
ACPI_DSDT_ADDR_OFFSET = 0x200 # (variable)
|
ACPI_DSDT_ADDR_OFFSET = 0x240 # (variable)
|
||||||
ACPI_MCFG_ADDR_OFFSET = 0x400 # (60 bytes)
|
ACPI_MCFG_ADDR_OFFSET = 0x440 # (60 bytes)
|
||||||
ACPI_MADT_ADDR_OFFSET = 0x440 # (depends on #CPUs)
|
ACPI_MADT_ADDR_OFFSET = 0x480 # (depends on #CPUs)
|
||||||
ACPI_PTCT_ADDR_OFFSET = 0xF00
|
ACPI_PTCT_ADDR_OFFSET = 0xF00
|
||||||
ACPI_TPM2_ADDR_OFFSET = 0x1100 # (52 bytes)
|
ACPI_TPM2_ADDR_OFFSET = 0x1100 # (52 bytes)
|
||||||
|
|
||||||
@ -38,10 +38,6 @@ ACPI_DSDT_ADDR = (ACPI_BASE + ACPI_DSDT_ADDR_OFFSET)
|
|||||||
ACPI_PTCT_ADDR = (ACPI_BASE + ACPI_PTCT_ADDR_OFFSET)
|
ACPI_PTCT_ADDR = (ACPI_BASE + ACPI_PTCT_ADDR_OFFSET)
|
||||||
ACPI_FACS_ADDR = 0x0
|
ACPI_FACS_ADDR = 0x0
|
||||||
|
|
||||||
PM1A_EVN_LEN = 0x4
|
|
||||||
PM1A_CNT_LEN = 0x2
|
|
||||||
FADT_FLAGS = 0x00001125
|
|
||||||
|
|
||||||
VIRT_PCI_MMCFG_BASE = 0xE0000000
|
VIRT_PCI_MMCFG_BASE = 0xE0000000
|
||||||
|
|
||||||
ACPI_MADT_TYPE_IOAPIC = 1
|
ACPI_MADT_TYPE_IOAPIC = 1
|
||||||
|
@ -9,6 +9,7 @@ import os, re, argparse, shutil
|
|||||||
import xml.etree.ElementTree as ElementTree
|
import xml.etree.ElementTree as ElementTree
|
||||||
from acpi_const import *
|
from acpi_const import *
|
||||||
import board_cfg_lib
|
import board_cfg_lib
|
||||||
|
import collections
|
||||||
|
|
||||||
def calculate_checksum8():
|
def calculate_checksum8():
|
||||||
'''
|
'''
|
||||||
@ -84,24 +85,6 @@ def gen_fadt(dest_vm_acpi_path, board_root):
|
|||||||
fadt_asl = 'facp.asl'
|
fadt_asl = 'facp.asl'
|
||||||
p_facs_addr = r'FACS Address : ([0-9a-fA-F]{8})'
|
p_facs_addr = r'FACS Address : ([0-9a-fA-F]{8})'
|
||||||
p_dsdt_addr = r'DSDT Address : ([0-9a-fA-F]{8})$'
|
p_dsdt_addr = r'DSDT Address : ([0-9a-fA-F]{8})$'
|
||||||
p_pm1a_event_block_addr = r'PM1A Event Block Address : (\d+)'
|
|
||||||
p_pm1a_control_block_addr = r'PM1A Control Block Address : (\d+)'
|
|
||||||
p_pm1_event_length = r'PM1 Event Block Length : (\d+)'
|
|
||||||
p_pm1_control_length = r'PM1 Control Block Length : (\d+)'
|
|
||||||
p_flasg = r' Flags (decoded below) : (\d+)'
|
|
||||||
|
|
||||||
PM1A_EVT_ADDRESS = 0x0
|
|
||||||
PM1A_CNT_ADDRESS = 0x0
|
|
||||||
e_pm_info = board_root.find('PM_INFO')
|
|
||||||
for line in e_pm_info.text.split('\n'):
|
|
||||||
s = re.search(r'#define PM1A_EVT_ADDRESS (0x\d+)UL', line)
|
|
||||||
if s is not None and len(s.groups()) > 0:
|
|
||||||
PM1A_EVT_ADDRESS = int(s.groups()[0], 16)
|
|
||||||
continue
|
|
||||||
s = re.search(r'#define PM1A_CNT_ADDRESS (0x\d+)UL', line)
|
|
||||||
if s is not None and len(s.groups()) > 0:
|
|
||||||
PM1A_CNT_ADDRESS = int(s.groups()[0], 16)
|
|
||||||
continue
|
|
||||||
|
|
||||||
with open(os.path.join(dest_vm_acpi_path, fadt_asl), 'w') as dest:
|
with open(os.path.join(dest_vm_acpi_path, fadt_asl), 'w') as dest:
|
||||||
lines = []
|
lines = []
|
||||||
@ -111,16 +94,6 @@ def gen_fadt(dest_vm_acpi_path, board_root):
|
|||||||
lines.append(re.sub(p_facs_addr, 'FACS Address : {0:08X}'.format(ACPI_FACS_ADDR), line))
|
lines.append(re.sub(p_facs_addr, 'FACS Address : {0:08X}'.format(ACPI_FACS_ADDR), line))
|
||||||
elif re.search(p_dsdt_addr, line):
|
elif re.search(p_dsdt_addr, line):
|
||||||
lines.append(re.sub(p_dsdt_addr, 'DSDT Address : {0:08X}'.format(ACPI_DSDT_ADDR), line))
|
lines.append(re.sub(p_dsdt_addr, 'DSDT Address : {0:08X}'.format(ACPI_DSDT_ADDR), line))
|
||||||
elif re.search(p_pm1a_event_block_addr, line):
|
|
||||||
lines.append(re.sub(p_pm1a_event_block_addr, 'PM1A Event Block Address : {0:08X}'.format(PM1A_EVT_ADDRESS), line))
|
|
||||||
elif re.search(p_pm1a_control_block_addr, line):
|
|
||||||
lines.append(re.sub(p_pm1a_control_block_addr, 'PM1A Control Block Address : {0:08X}'.format(PM1A_CNT_ADDRESS), line))
|
|
||||||
elif re.search(p_pm1_event_length, line):
|
|
||||||
lines.append(re.sub(p_pm1_event_length, 'PM1 Event Block Length : {0:02X}'.format(PM1A_EVN_LEN), line))
|
|
||||||
elif re.search(p_pm1_control_length, line):
|
|
||||||
lines.append(re.sub(p_pm1_control_length, 'PM1 Control Block Length : {0:02X}'.format(PM1A_CNT_LEN), line))
|
|
||||||
elif re.search(p_flasg, line):
|
|
||||||
lines.append(re.sub(p_flasg, 'Flags (decoded below) : {0:08X}'.format(FADT_FLAGS), line))
|
|
||||||
else:
|
else:
|
||||||
lines.append(line)
|
lines.append(line)
|
||||||
dest.writelines(lines)
|
dest.writelines(lines)
|
||||||
@ -438,8 +411,8 @@ def main(args):
|
|||||||
if config.startswith('VM') and os.path.isdir(os.path.join(DEST_ACPI_PATH, config)):
|
if config.startswith('VM') and os.path.isdir(os.path.join(DEST_ACPI_PATH, config)):
|
||||||
shutil.rmtree(os.path.join(DEST_ACPI_PATH, config))
|
shutil.rmtree(os.path.join(DEST_ACPI_PATH, config))
|
||||||
|
|
||||||
dict_passthru_devices = {}
|
dict_passthru_devices = collections.OrderedDict()
|
||||||
dict_vcpu_list = {}
|
dict_vcpu_list = collections.OrderedDict()
|
||||||
for vm in scenario_root.findall('vm'):
|
for vm in scenario_root.findall('vm'):
|
||||||
vm_id = vm.attrib['id']
|
vm_id = vm.attrib['id']
|
||||||
vm_type_node = vm.find('vm_type')
|
vm_type_node = vm.find('vm_type')
|
||||||
|
@ -16,6 +16,10 @@
|
|||||||
*/
|
*/
|
||||||
DefinitionBlock ("", "DSDT", 3, "ACRN ", "ACRNDSDT", 0x00000001)
|
DefinitionBlock ("", "DSDT", 3, "ACRN ", "ACRNDSDT", 0x00000001)
|
||||||
{
|
{
|
||||||
|
Name (_S5, Package ()
|
||||||
|
{
|
||||||
|
0x05,
|
||||||
|
Zero,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
[0004] Signature : "FACP" [Fixed ACPI Description Table (FADT)]
|
[0004] Signature : "FACP" [Fixed ACPI Description Table (FADT)]
|
||||||
[0004] Table Length : 000000F4
|
[0004] Table Length : 0000010C
|
||||||
[0001] Revision : 03
|
[0001] Revision : 05
|
||||||
[0001] Checksum : 28
|
[0001] Checksum : 00
|
||||||
[0006] Oem ID : "ACRN "
|
[0006] Oem ID : "ACRN "
|
||||||
[0008] Oem Table ID : "ACRNFADT"
|
[0008] Oem Table ID : "ACRNFADT"
|
||||||
[0004] Oem Revision : 00000001
|
[0004] Oem Revision : 00000001
|
||||||
@ -28,16 +28,16 @@
|
|||||||
[0001] ACPI Disable Value : 00
|
[0001] ACPI Disable Value : 00
|
||||||
[0001] S4BIOS Command : 00
|
[0001] S4BIOS Command : 00
|
||||||
[0001] P-State Control : 00
|
[0001] P-State Control : 00
|
||||||
[0004] PM1A Event Block Address : 00001800
|
[0004] PM1A Event Block Address : 00000000
|
||||||
[0004] PM1B Event Block Address : 00000000
|
[0004] PM1B Event Block Address : 00000000
|
||||||
[0004] PM1A Control Block Address : 00001804
|
[0004] PM1A Control Block Address : 00000000
|
||||||
[0004] PM1B Control Block Address : 00000000
|
[0004] PM1B Control Block Address : 00000000
|
||||||
[0004] PM2 Control Block Address : 00000000
|
[0004] PM2 Control Block Address : 00000000
|
||||||
[0004] PM Timer Block Address : 00000000
|
[0004] PM Timer Block Address : 00000000
|
||||||
[0004] GPE0 Block Address : 00000000
|
[0004] GPE0 Block Address : 00000000
|
||||||
[0004] GPE1 Block Address : 00000000
|
[0004] GPE1 Block Address : 00000000
|
||||||
[0001] PM1 Event Block Length : 04
|
[0001] PM1 Event Block Length : 00
|
||||||
[0001] PM1 Control Block Length : 02
|
[0001] PM1 Control Block Length : 00
|
||||||
[0001] PM2 Control Block Length : 00
|
[0001] PM2 Control Block Length : 00
|
||||||
[0001] PM Timer Block Length : 00
|
[0001] PM Timer Block Length : 00
|
||||||
[0001] GPE0 Block Length : 00
|
[0001] GPE0 Block Length : 00
|
||||||
@ -82,7 +82,7 @@
|
|||||||
Remote Power-on capable (V4) : 0
|
Remote Power-on capable (V4) : 0
|
||||||
Use APIC Cluster Model (V4) : 0
|
Use APIC Cluster Model (V4) : 0
|
||||||
Use APIC Physical Destination Mode (V4) : 0
|
Use APIC Physical Destination Mode (V4) : 0
|
||||||
Hardware Reduced (V5) : 0
|
Hardware Reduced (V5) : 1
|
||||||
Low Power S0 Idle (V5) : 0
|
Low Power S0 Idle (V5) : 0
|
||||||
|
|
||||||
[0012] Reset Register : [Generic Address Structure]
|
[0012] Reset Register : [Generic Address Structure]
|
||||||
@ -155,3 +155,16 @@ Use APIC Physical Destination Mode (V4) : 0
|
|||||||
[0001] Bit Offset : 00
|
[0001] Bit Offset : 00
|
||||||
[0001] Encoded Access Width : 00 [Undefined/Legacy]
|
[0001] Encoded Access Width : 00 [Undefined/Legacy]
|
||||||
[0008] Address : 0000000000000000
|
[0008] Address : 0000000000000000
|
||||||
|
[0012] Sleep Control Register : [Generic Address Structure]
|
||||||
|
[0001] Space ID : 01 [SystemIO]
|
||||||
|
[0001] Bit Width : 08
|
||||||
|
[0001] Bit Offset : 00
|
||||||
|
[0001] Encoded Access Width : 01 [Byte Access:8]
|
||||||
|
[0008] Address : 0000000000000400
|
||||||
|
|
||||||
|
[0012] Sleep Status Register : [Generic Address Structure]
|
||||||
|
[0001] Space ID : 01 [SystemIO]
|
||||||
|
[0001] Bit Width : 08
|
||||||
|
[0001] Bit Offset : 00
|
||||||
|
[0001] Encoded Access Width : 01 [Byte Access:8]
|
||||||
|
[0008] Address : 0000000000000401
|
||||||
|
Loading…
Reference in New Issue
Block a user