Hi Gustavo, On 5/21/25 5:26 PM, Gustavo Romero wrote: > Hi Eric, > > On 5/14/25 14:01, Eric Auger wrote: >> Move aml_pci_edsm to pcihp since we want to reuse that for >> ARM and acpi-index support. >> >> Signed-off-by: Eric Auger <eric.au...@redhat.com> >> --- >> include/hw/acpi/pcihp.h | 2 ++ >> hw/acpi/pcihp.c | 53 +++++++++++++++++++++++++++++++++++++++++ >> hw/i386/acpi-build.c | 53 ----------------------------------------- >> 3 files changed, 55 insertions(+), 53 deletions(-) >> >> diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h >> index 4d820b4baf..bc31dbff39 100644 >> --- a/include/hw/acpi/pcihp.h >> +++ b/include/hw/acpi/pcihp.h >> @@ -82,6 +82,8 @@ bool build_append_notification_callback(Aml >> *parent_scope, const PCIBus *bus); >> void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus); >> +Aml *aml_pci_edsm(void); >> + >> /* Called on reset */ >> void acpi_pcihp_reset(AcpiPciHpState *s); >> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c >> index d800371ddc..57fe8938b1 100644 >> --- a/hw/acpi/pcihp.c >> +++ b/hw/acpi/pcihp.c >> @@ -937,6 +937,59 @@ void build_append_pci_bus_devices(Aml >> *parent_scope, PCIBus *bus) >> } >> } >> +Aml *aml_pci_edsm(void) >> +{ >> + Aml *method, *ifctx; >> + Aml *zero = aml_int(0); >> + Aml *func = aml_arg(2); >> + Aml *ret = aml_local(0); >> + Aml *aidx = aml_local(1); >> + Aml *params = aml_arg(4); >> + >> + method = aml_method("EDSM", 5, AML_SERIALIZED); >> + >> + /* get supported functions */ >> + ifctx = aml_if(aml_equal(func, zero)); >> + { >> + /* 1: have supported functions */ >> + /* 7: support for function 7 */ >> + const uint8_t caps = 1 | BIT(7); >> + build_append_pci_dsm_func0_common(ifctx, ret); >> + aml_append(ifctx, aml_store(aml_int(caps), aml_index(ret, >> zero))); >> + aml_append(ifctx, aml_return(ret)); >> + } >> + aml_append(method, ifctx); >> + >> + /* handle specific functions requests */ >> + /* >> + * PCI Firmware Specification 3.1 >> + * 4.6.7. _DSM for Naming a PCI or PCI Express Device Under >> + * Operating Systems >> + */ >> + ifctx = aml_if(aml_equal(func, aml_int(7))); >> + { >> + Aml *pkg = aml_package(2); >> + aml_append(pkg, zero); >> + /* optional, if not impl. should return null string */ >> + aml_append(pkg, aml_string("%s", "")); >> + aml_append(ifctx, aml_store(pkg, ret)); >> + >> + /* >> + * IASL is fine when initializing Package with computational >> data, >> + * however it makes guest unhappy /it fails to process such >> AML/. >> + * So use runtime assignment to set acpi-index after initializer >> + * to make OSPM happy. >> + */ >> + aml_append(ifctx, >> + aml_store(aml_derefof(aml_index(params, aml_int(0))), >> aidx)); >> + aml_append(ifctx, aml_store(aidx, aml_index(ret, zero))); >> + aml_append(ifctx, aml_return(ret)); >> + } >> + aml_append(method, ifctx); >> + >> + return method; >> +} >> + >> const VMStateDescription vmstate_acpi_pcihp_pci_status = { >> .name = "acpi_pcihp_pci_status", >> .version_id = 1, >> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c >> index bcfba2ccb3..385e75d061 100644 >> --- a/hw/i386/acpi-build.c >> +++ b/hw/i386/acpi-build.c >> @@ -322,59 +322,6 @@ build_facs(GArray *table_data) >> g_array_append_vals(table_data, reserved, 40); /* Reserved */ >> } >> -static Aml *aml_pci_edsm(void) >> -{ >> - Aml *method, *ifctx; >> - Aml *zero = aml_int(0); >> - Aml *func = aml_arg(2); >> - Aml *ret = aml_local(0); >> - Aml *aidx = aml_local(1); >> - Aml *params = aml_arg(4); >> - >> - method = aml_method("EDSM", 5, AML_SERIALIZED); >> - >> - /* get supported functions */ >> - ifctx = aml_if(aml_equal(func, zero)); >> - { >> - /* 1: have supported functions */ >> - /* 7: support for function 7 */ >> - const uint8_t caps = 1 | BIT(7); >> - build_append_pci_dsm_func0_common(ifctx, ret); >> - aml_append(ifctx, aml_store(aml_int(caps), aml_index(ret, >> zero))); >> - aml_append(ifctx, aml_return(ret)); >> - } >> - aml_append(method, ifctx); >> - >> - /* handle specific functions requests */ >> - /* >> - * PCI Firmware Specification 3.1 >> - * 4.6.7. _DSM for Naming a PCI or PCI Express Device Under >> - * Operating Systems >> - */ >> - ifctx = aml_if(aml_equal(func, aml_int(7))); >> - { >> - Aml *pkg = aml_package(2); >> - aml_append(pkg, zero); >> - /* optional, if not impl. should return null string */ >> - aml_append(pkg, aml_string("%s", "")); >> - aml_append(ifctx, aml_store(pkg, ret)); >> - >> - /* >> - * IASL is fine when initializing Package with computational >> data, >> - * however it makes guest unhappy /it fails to process such >> AML/. >> - * So use runtime assignment to set acpi-index after initializer >> - * to make OSPM happy. >> - */ >> - aml_append(ifctx, >> - aml_store(aml_derefof(aml_index(params, aml_int(0))), >> aidx)); >> - aml_append(ifctx, aml_store(aidx, aml_index(ret, zero))); >> - aml_append(ifctx, aml_return(ret)); >> - } >> - aml_append(method, ifctx); >> - >> - return method; >> -} >> - >> /* >> * build_prt - Define interrupt routing rules >> * > > EDSM is not called from anywhere. _DSM method actually calls the PDSM, > already defined > in pcihp.c and generated by aml_pci_pdsm(). build_acpi_pci_hotplug(), > which calls > aml_pci_pdsm(), properly creates the PDSM method. Then in > build_append_pcihp_slots() > the a _DSM is defined per slot and inside it there is a call to PDSM, > so I understand > we should actually stick to the PDSM in pcihp.c instead of EDSM.
I see build_append_pci_bus_devices -> aml_pci_static_endpoint_dsm adds a _DSM method which eventually calls EDSM. aml_pci_device_dsm builds another _DSM implementation which calls PDSM. As we use build_append_pci_bus_devices and we are likely to have a _DSM implementation that calls EDSM method, I think we shall have it in the aml. What do I miss? Thank you for the comprehensive review! Cheers Eric > > EDSM, being used in i386 code, feels a outdated PDSM, so maybe PDSM > should be used there, > although a different story or a clean up for later. I'm not sure what > "static endpoint" > means in the context of EDSM. > > Hence this patch can be dropped in my understanding and: > > aml_append(pci0_scope, aml_pci_edsm()) in 15/22 too, without any > prejudice to the > hotplugging and unplugging in this series. > > > Cheers, > Gustavo >