On 6/4/24 10:30, Simon Horman wrote: > On Fri, May 31, 2024 at 04:38:38PM -0500, Wei Huang wrote: >> According to PCI SIG ECN, calling the _DSM firmware method for a given >> CPU_UID returns the steering tags for different types of memory >> (volatile, non-volatile). These tags are supposed to be used in ST >> table entry for optimal results. >> >> Co-developed-by: Eric Van Tassell <Eric.VanTassell@xxxxxxx> >> Signed-off-by: Eric Van Tassell <Eric.VanTassell@xxxxxxx> >> Signed-off-by: Wei Huang <wei.huang2@xxxxxxx> >> Reviewed-by: Ajit Khaparde <ajit.khaparde@xxxxxxxxxxxx> >> Reviewed-by: Somnath Kotur <somnath.kotur@xxxxxxxxxxxx> >> Reviewed-by: Andy Gospodarek <andrew.gospodarek@xxxxxxxxxxxx> > > ... > >> diff --git a/drivers/pci/pcie/tph.c b/drivers/pci/pcie/tph.c > > ... > >> +static bool invoke_dsm(acpi_handle handle, u32 cpu_uid, u8 ph, >> + u8 target_type, bool cache_ref_valid, >> + u64 cache_ref, union st_info *st_out) >> +{ >> + union acpi_object in_obj, in_buf[3], *out_obj; >> + >> + in_buf[0].integer.type = ACPI_TYPE_INTEGER; >> + in_buf[0].integer.value = 0; /* 0 => processor cache steering tags */ >> + >> + in_buf[1].integer.type = ACPI_TYPE_INTEGER; >> + in_buf[1].integer.value = cpu_uid; >> + >> + in_buf[2].integer.type = ACPI_TYPE_INTEGER; >> + in_buf[2].integer.value = ph & 3; >> + in_buf[2].integer.value |= (target_type & 1) << 2; >> + in_buf[2].integer.value |= (cache_ref_valid & 1) << 3; >> + in_buf[2].integer.value |= (cache_ref << 32); >> + >> + in_obj.type = ACPI_TYPE_PACKAGE; >> + in_obj.package.count = ARRAY_SIZE(in_buf); >> + in_obj.package.elements = in_buf; >> + >> + out_obj = acpi_evaluate_dsm(handle, &pci_acpi_dsm_guid, MIN_ST_DSM_REV, >> + ST_DSM_FUNC_INDEX, &in_obj); > > Hi Wei Huang, Eric, all, > > This seems to break builds on ARM (32bit) with multi_v7_defconfig. > > .../tph.c:221:39: error: use of undeclared identifier 'pci_acpi_dsm_guid' > 221 | out_obj = acpi_evaluate_dsm(handle, &pci_acpi_dsm_guid, MIN_ST_DSM_REV, > | Thanks for pointing it out. I will add "depends on ACPI" in Kconfig which solves the problem: $ make ARCH=arm CROSS_COMPILE=arm-linux-gnu- multi_v7_defconfig zImage modules CALL scripts/checksyscalls.sh Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready > > I suspect a dependency on ACPI in Kconfig is appropriate. > >> + >> + if (!out_obj) >> + return false; >> + >> + if (out_obj->type != ACPI_TYPE_BUFFER) { >> + pr_err("invalid return type %d from TPH _DSM\n", >> + out_obj->type); >> + ACPI_FREE(out_obj); >> + return false; >> + } > > ...