Re: [PATCH V2 6/9] PCI/TPH: Retrieve steering tag from ACPI _DSM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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;
>> +	}
> 
> ...




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux