[PATCH 4/6] platform/x86/intel/pmt: Add quirk for BAR0 offset adjustment

Ruhl, Michael J michael.j.ruhl at intel.com
Fri May 31 15:40:13 UTC 2024


>-----Original Message-----
>From: David E. Box <david.e.box at linux.intel.com>
>Sent: Thursday, May 30, 2024 5:00 PM
>To: Ruhl, Michael J <michael.j.ruhl at intel.com>; intel-xe at lists.freedesktop.org
>Subject: Re: [PATCH 4/6] platform/x86/intel/pmt: Add quirk for BAR0 offset
>adjustment
>
>On Fri, 2024-05-10 at 16:59 -0400, Michael J. Ruhl wrote:
>> The offset for the discovery table is based on the P2SB bar.
>> If this bar is not available, the parent driver may need to
>> adjust the offset,
>>
>> Add a quirk to allow for this adjustment.
>
>I'm not a fan of using base_addr in this was to adjust the offset. There was a
>version that provided a separate base_adjust field to adjust the offset. Is this
>change only needed for DG2?

Yes.   This change is needed for DG2 support.  My understanding is that DG2 support
is desired.

How can we get the base_adjust code included?  Shall I update my patch with this change?

Umm,

Would it make sense to do patch 6 first (BMG support) and then backfill with the DG2 patches?

Thanks!

Mike

>David
>
>>
>> Signed-off-by: Michael J. Ruhl <michael.j.ruhl at intel.com>
>> ---
>>  drivers/platform/x86/intel/pmt/class.c     | 3 +++
>>  drivers/platform/x86/intel/pmt/telemetry.c | 2 +-
>>  drivers/platform/x86/intel/vsec.c          | 2 +-
>>  include/linux/intel_vsec.h                 | 3 +++
>>  4 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/platform/x86/intel/pmt/class.c
>> b/drivers/platform/x86/intel/pmt/class.c
>> index 62e36dd89137..957cf74234da 100644
>> --- a/drivers/platform/x86/intel/pmt/class.c
>> +++ b/drivers/platform/x86/intel/pmt/class.c
>> @@ -349,6 +349,9 @@ int intel_pmt_dev_create(struct intel_pmt_entry
>*entry,
>> struct intel_pmt_namespa
>>  	if (IS_ERR(entry->disc_table))
>>  		return PTR_ERR(entry->disc_table);
>>
>> +	if (intel_vsec_dev->quirks & VSEC_QUIRK_P2SB_OFFSET)
>> +		entry->base_addr = intel_vsec_dev->base_addr;
>> +
>>  	ret = ns->pmt_header_decode(entry, dev);
>>  	if (ret)
>>  		return ret;
>> diff --git a/drivers/platform/x86/intel/pmt/telemetry.c
>> b/drivers/platform/x86/intel/pmt/telemetry.c
>> index c9feac859e57..7be9f9746363 100644
>> --- a/drivers/platform/x86/intel/pmt/telemetry.c
>> +++ b/drivers/platform/x86/intel/pmt/telemetry.c
>> @@ -77,7 +77,7 @@ static int pmt_telem_header_decode(struct
>intel_pmt_entry
>> *entry,
>>
>>  	header->access_type = TELEM_ACCESS(readl(disc_table));
>>  	header->guid = readl(disc_table + TELEM_GUID_OFFSET);
>> -	header->base_offset = readl(disc_table + TELEM_BASE_OFFSET);
>> +	header->base_offset = readl(disc_table + TELEM_BASE_OFFSET) +
>entry-
>> >base_addr;
>>
>>  	/* Size is measured in DWORDS, but accessor returns bytes */
>>  	header->size = TELEM_SIZE(readl(disc_table));
>> diff --git a/drivers/platform/x86/intel/vsec.c
>> b/drivers/platform/x86/intel/vsec.c
>> index 5378da9354b6..5a0dfc21eb0f 100644
>> --- a/drivers/platform/x86/intel/vsec.c
>> +++ b/drivers/platform/x86/intel/vsec.c
>> @@ -185,7 +185,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev,
>struct
>> intel_vsec_header *he
>>  	if (quirks & VSEC_QUIRK_TABLE_SHIFT)
>>  		header->offset >>= TABLE_OFFSET_SHIFT;
>>
>> -	if (info->base_addr)
>> +	if (!(quirks & VSEC_QUIRK_P2SB_OFFSET) && info->base_addr)
>>  		base_addr = info->base_addr;
>>  	else
>>  		base_addr = pdev->resource[header->tbir].start;
>> diff --git a/include/linux/intel_vsec.h b/include/linux/intel_vsec.h
>> index 04f915a1ba0b..68e3a42040e8 100644
>> --- a/include/linux/intel_vsec.h
>> +++ b/include/linux/intel_vsec.h
>> @@ -65,6 +65,9 @@ enum intel_vsec_quirks {
>>
>>  	/* Platforms requiring quirk in the auxiliary driver */
>>  	VSEC_QUIRK_EARLY_HW     = BIT(4),
>> +
>> +	/* Broken P2SB access work around */
>> +	VSEC_QUIRK_P2SB_OFFSET  = BIT(5),
>>  };
>>
>>  struct pmt_callbacks {



More information about the Intel-xe mailing list