77 lines
2.8 KiB
Diff
77 lines
2.8 KiB
Diff
|
|
From 2d5040ce21af5fc02a8588456be7316fcd5bc2a0 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Keqian Zhu <zhukeqian1@huawei.com>
|
||
|
|
Date: Tue, 2 Apr 2024 16:36:38 +0800
|
||
|
|
Subject: [PATCH] arm/virt/acpi: Factor out CPPC building from DSDT CPU aml
|
||
|
|
|
||
|
|
When CPU hotplug is enabled, we will use build_cpus_aml instead of
|
||
|
|
acpi_dsdt_add_cpus, so factor out CPPC building to reuse it.
|
||
|
|
|
||
|
|
Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
|
||
|
|
---
|
||
|
|
hw/arm/virt-acpi-build.c | 34 ++++++++++++++++++++--------------
|
||
|
|
1 file changed, 20 insertions(+), 14 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
|
||
|
|
index 48fc77fb83..084c8abc7c 100644
|
||
|
|
--- a/hw/arm/virt-acpi-build.c
|
||
|
|
+++ b/hw/arm/virt-acpi-build.c
|
||
|
|
@@ -123,8 +123,23 @@ static void acpi_dsdt_add_cppc(Aml *dev, uint64_t cpu_base, int *regs_offset)
|
||
|
|
aml_append(dev, aml_name_decl("_CPC", cpc));
|
||
|
|
}
|
||
|
|
|
||
|
|
-static void acpi_dsdt_add_cpus(Aml *scope, VirtMachineState *vms,
|
||
|
|
- const MemMapEntry *cppc_memmap)
|
||
|
|
+static void virt_acpi_dsdt_cpu_cppc(int ncpu, int num_cpu, Aml *dev) {
|
||
|
|
+ VirtMachineState *vms = VIRT_MACHINE(qdev_get_machine());
|
||
|
|
+ const MemMapEntry *cppc_memmap = &vms->memmap[VIRT_CPUFREQ];
|
||
|
|
+
|
||
|
|
+ /*
|
||
|
|
+ * Append _CPC and _PSD to support CPU frequence show
|
||
|
|
+ * Check CPPC available by DESIRED_PERF register
|
||
|
|
+ */
|
||
|
|
+ if (cppc_regs_offset[DESIRED_PERF] != -1) {
|
||
|
|
+ acpi_dsdt_add_cppc(dev,
|
||
|
|
+ cppc_memmap->base + ncpu * CPPC_REG_PER_CPU_STRIDE,
|
||
|
|
+ cppc_regs_offset);
|
||
|
|
+ acpi_dsdt_add_psd(dev, num_cpu);
|
||
|
|
+ }
|
||
|
|
+}
|
||
|
|
+
|
||
|
|
+static void acpi_dsdt_add_cpus(Aml *scope, VirtMachineState *vms)
|
||
|
|
{
|
||
|
|
MachineState *ms = MACHINE(vms);
|
||
|
|
uint16_t i;
|
||
|
|
@@ -134,18 +149,9 @@ static void acpi_dsdt_add_cpus(Aml *scope, VirtMachineState *vms,
|
||
|
|
aml_append(dev, aml_name_decl("_HID", aml_string("ACPI0007")));
|
||
|
|
aml_append(dev, aml_name_decl("_UID", aml_int(i)));
|
||
|
|
|
||
|
|
- /*
|
||
|
|
- * Append _CPC and _PSD to support CPU frequence show
|
||
|
|
- * Check CPPC available by DESIRED_PERF register
|
||
|
|
- */
|
||
|
|
- if (cppc_regs_offset[DESIRED_PERF] != -1) {
|
||
|
|
- acpi_dsdt_add_cppc(dev,
|
||
|
|
- cppc_memmap->base + i * CPPC_REG_PER_CPU_STRIDE,
|
||
|
|
- cppc_regs_offset);
|
||
|
|
- acpi_dsdt_add_psd(dev, ms->smp.cpus);
|
||
|
|
- }
|
||
|
|
+ virt_acpi_dsdt_cpu_cppc(i, ms->smp.cpus, dev);
|
||
|
|
|
||
|
|
- aml_append(scope, dev);
|
||
|
|
+ aml_append(scope, dev);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -931,7 +937,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||
|
|
* the RTC ACPI device at all when using UEFI.
|
||
|
|
*/
|
||
|
|
scope = aml_scope("\\_SB");
|
||
|
|
- acpi_dsdt_add_cpus(scope, vms, &memmap[VIRT_CPUFREQ]);
|
||
|
|
+ acpi_dsdt_add_cpus(scope, vms);
|
||
|
|
acpi_dsdt_add_uart(scope, &memmap[VIRT_UART],
|
||
|
|
(irqmap[VIRT_UART] + ARM_SPI_BASE));
|
||
|
|
if (vmc->acpi_expose_flash) {
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|