devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] perf: hisi: fix uncore PMU index ID
       [not found] <1526901317-52248-1-git-send-email-zhangshaokun@hisilicon.com>
@ 2018-05-21 17:05 ` Will Deacon
  2018-05-22  9:18   ` Zhangshaokun
  0 siblings, 1 reply; 4+ messages in thread
From: Will Deacon @ 2018-05-21 17:05 UTC (permalink / raw)
  To: Shaokun Zhang; +Cc: Mark Rutland, devicetree, Huiqiang Wang, linux-arm-kernel

Hi Shaokun,

[+DT list]

On Mon, May 21, 2018 at 07:15:17PM +0800, Shaokun Zhang wrote:
> According to ACPI SPEC about _UID (Unique ID), The _UID must be unique
> across all devices with either a common _HID or _CID. For HiSilion
> uncore PMU, SCCL_ID and INDEX_ID are used to identify the uncore PMU
> for the same _HID. Therefore, _UID is not equal to INDEX_ID in
> multi-sccl scene for the same uncore PMU device.
> 
> CCL_ID can be used as the INDEX_ID for the L3C PMU and IDX-ID is added
> in DSDT table for the HHA PMU.
> 
> Fixes: 2940bc4("perf: hisi: Add support for HiSilicon SoC L3C PMU driver")
> Fixes: 2bab3cf("perf: hisi: Add support for HiSilicon SoC HHA PMU driver")
> Reported-by: Huiqiang Wang <wanghuiqiang@huawei.com>
> Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> Cc: Huiqiang Wang <wanghuiqiang@huawei.com>
> ---
>  drivers/perf/hisilicon/hisi_uncore_hha_pmu.c | 18 ++++++++----------
>  drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c | 11 ++---------
>  2 files changed, 10 insertions(+), 19 deletions(-)

Whilst I'd normally just accept PMU driver submissions for vendor PMUs,
this part rang my alarm bells:

> diff --git a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> index 443906e..dcd8e77 100644
> --- a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> +++ b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> @@ -238,19 +238,10 @@ MODULE_DEVICE_TABLE(acpi, hisi_hha_pmu_acpi_match);
>  static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>  				  struct hisi_pmu *hha_pmu)
>  {
> -	unsigned long long id;
>  	struct resource *res;
> -	acpi_status status;
> -
> -	status = acpi_evaluate_integer(ACPI_HANDLE(&pdev->dev),
> -				       "_UID", NULL, &id);
> -	if (ACPI_FAILURE(status))
> -		return -EINVAL;
> -
> -	hha_pmu->index_id = id;
>  
>  	/*
> -	 * Use SCCL_ID and UID to identify the HHA PMU, while
> +	 * Use SCCL_ID and HHA index ID to identify the HHA PMU, while
>  	 * SCCL_ID is in MPIDR[aff2].
>  	 */
>  	if (device_property_read_u32(&pdev->dev, "hisilicon,scl-id",
> @@ -258,6 +249,13 @@ static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>  		dev_err(&pdev->dev, "Can not read hha sccl-id!\n");
>  		return -EINVAL;
>  	}
> +
> +	if (device_property_read_u32(&pdev->dev, "hisilicon,idx-id",
> +				     &hha_pmu->index_id)) {
> +		dev_err(&pdev->dev, "Can not read hha index-id!\n");
> +		return -EINVAL;
> +	}

Is this a new DT property? If so, please can you update the binding
documentation and get an Ack from a DT maintainer? It's not clear to me
what a "hisilicon,idx-id" is, nor how I would generate on from firmware.

Thanks,

Will

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf: hisi: fix uncore PMU index ID
  2018-05-21 17:05 ` [PATCH] perf: hisi: fix uncore PMU index ID Will Deacon
@ 2018-05-22  9:18   ` Zhangshaokun
  2018-05-23 16:42     ` Will Deacon
  0 siblings, 1 reply; 4+ messages in thread
From: Zhangshaokun @ 2018-05-22  9:18 UTC (permalink / raw)
  To: Will Deacon
  Cc: Mark Rutland, devicetree, Huiqiang Wang, linux-arm-kernel, Linuxarm


Hi Will,

On 2018/5/22 1:05, Will Deacon wrote:
> Hi Shaokun,
> 
> [+DT list]
> 
> On Mon, May 21, 2018 at 07:15:17PM +0800, Shaokun Zhang wrote:
>> According to ACPI SPEC about _UID (Unique ID), The _UID must be unique
>> across all devices with either a common _HID or _CID. For HiSilion
>> uncore PMU, SCCL_ID and INDEX_ID are used to identify the uncore PMU
>> for the same _HID. Therefore, _UID is not equal to INDEX_ID in
>> multi-sccl scene for the same uncore PMU device.
>>
>> CCL_ID can be used as the INDEX_ID for the L3C PMU and IDX-ID is added
>> in DSDT table for the HHA PMU.
>>
>> Fixes: 2940bc4("perf: hisi: Add support for HiSilicon SoC L3C PMU driver")
>> Fixes: 2bab3cf("perf: hisi: Add support for HiSilicon SoC HHA PMU driver")
>> Reported-by: Huiqiang Wang <wanghuiqiang@huawei.com>
>> Signed-off-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
>> Cc: Will Deacon <will.deacon@arm.com>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> Cc: Huiqiang Wang <wanghuiqiang@huawei.com>
>> ---
>>  drivers/perf/hisilicon/hisi_uncore_hha_pmu.c | 18 ++++++++----------
>>  drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c | 11 ++---------
>>  2 files changed, 10 insertions(+), 19 deletions(-)
> 
> Whilst I'd normally just accept PMU driver submissions for vendor PMUs,
> this part rang my alarm bells:
> 
>> diff --git a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>> index 443906e..dcd8e77 100644
>> --- a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>> +++ b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>> @@ -238,19 +238,10 @@ MODULE_DEVICE_TABLE(acpi, hisi_hha_pmu_acpi_match);
>>  static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>>  				  struct hisi_pmu *hha_pmu)
>>  {
>> -	unsigned long long id;
>>  	struct resource *res;
>> -	acpi_status status;
>> -
>> -	status = acpi_evaluate_integer(ACPI_HANDLE(&pdev->dev),
>> -				       "_UID", NULL, &id);
>> -	if (ACPI_FAILURE(status))
>> -		return -EINVAL;
>> -
>> -	hha_pmu->index_id = id;
>>  
>>  	/*
>> -	 * Use SCCL_ID and UID to identify the HHA PMU, while
>> +	 * Use SCCL_ID and HHA index ID to identify the HHA PMU, while
>>  	 * SCCL_ID is in MPIDR[aff2].
>>  	 */
>>  	if (device_property_read_u32(&pdev->dev, "hisilicon,scl-id",
>> @@ -258,6 +249,13 @@ static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>>  		dev_err(&pdev->dev, "Can not read hha sccl-id!\n");
>>  		return -EINVAL;
>>  	}
>> +
>> +	if (device_property_read_u32(&pdev->dev, "hisilicon,idx-id",
>> +				     &hha_pmu->index_id)) {
>> +		dev_err(&pdev->dev, "Can not read hha index-id!\n");
>> +		return -EINVAL;
>> +	}
> 
> Is this a new DT property? If so, please can you update the binding
> documentation and get an Ack from a DT maintainer? It's not clear to me

No, it is not a DT property. We don't support DT mode for this platform and
only support ACPI mode.

> what a "hisilicon,idx-id" is, nor how I would generate on from firmware.
> 

For HiSilicon this platform, it supports multi-sccl. each sccl has more than one uncore
PMUs. Like HHA uncore PMUs, each sccl has 2-HHA PMUs and idx-id is in _DSD package and
used to distinguish different HHA PMUs with the same sccl, as follow:
    Name (_DSD, Package () {
      ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
      Package () {
        Package () {"hisilicon,scl-id", 0x03},
        Package () {"hisilicon,idx-id", 0x00},
      }
    })

Thanks,
Shaokun

> Thanks,
> 
> Will
> 
> .
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf: hisi: fix uncore PMU index ID
  2018-05-22  9:18   ` Zhangshaokun
@ 2018-05-23 16:42     ` Will Deacon
  2018-05-25  8:34       ` Zhangshaokun
  0 siblings, 1 reply; 4+ messages in thread
From: Will Deacon @ 2018-05-23 16:42 UTC (permalink / raw)
  To: Zhangshaokun
  Cc: Mark Rutland, devicetree, Huiqiang Wang, linux-arm-kernel, Linuxarm

On Tue, May 22, 2018 at 05:18:51PM +0800, Zhangshaokun wrote:
> On 2018/5/22 1:05, Will Deacon wrote:
> > Whilst I'd normally just accept PMU driver submissions for vendor PMUs,
> > this part rang my alarm bells:
> > 
> >> diff --git a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> >> index 443906e..dcd8e77 100644
> >> --- a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> >> +++ b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
> >> @@ -238,19 +238,10 @@ MODULE_DEVICE_TABLE(acpi, hisi_hha_pmu_acpi_match);
> >>  static int hisi_hha_pmu_init_data(struct platform_device *pdev,
> >>  				  struct hisi_pmu *hha_pmu)
> >>  {
> >> -	unsigned long long id;
> >>  	struct resource *res;
> >> -	acpi_status status;
> >> -
> >> -	status = acpi_evaluate_integer(ACPI_HANDLE(&pdev->dev),
> >> -				       "_UID", NULL, &id);
> >> -	if (ACPI_FAILURE(status))
> >> -		return -EINVAL;
> >> -
> >> -	hha_pmu->index_id = id;
> >>  
> >>  	/*
> >> -	 * Use SCCL_ID and UID to identify the HHA PMU, while
> >> +	 * Use SCCL_ID and HHA index ID to identify the HHA PMU, while
> >>  	 * SCCL_ID is in MPIDR[aff2].
> >>  	 */
> >>  	if (device_property_read_u32(&pdev->dev, "hisilicon,scl-id",
> >> @@ -258,6 +249,13 @@ static int hisi_hha_pmu_init_data(struct platform_device *pdev,
> >>  		dev_err(&pdev->dev, "Can not read hha sccl-id!\n");
> >>  		return -EINVAL;
> >>  	}
> >> +
> >> +	if (device_property_read_u32(&pdev->dev, "hisilicon,idx-id",
> >> +				     &hha_pmu->index_id)) {
> >> +		dev_err(&pdev->dev, "Can not read hha index-id!\n");
> >> +		return -EINVAL;
> >> +	}
> > 
> > Is this a new DT property? If so, please can you update the binding
> > documentation and get an Ack from a DT maintainer? It's not clear to me
> 
> No, it is not a DT property. We don't support DT mode for this platform and
> only support ACPI mode.

Hmm, but by using the firmware-agnostic "device_property_read_u32"
interface, aren't you implicitly supporting it via DT as well? In fact,
don't you now fail the probe if this new property isn't present? Isn't
that a regression?

> > what a "hisilicon,idx-id" is, nor how I would generate on from firmware.
> > 
> 
> For HiSilicon this platform, it supports multi-sccl. each sccl has more than one uncore
> PMUs. Like HHA uncore PMUs, each sccl has 2-HHA PMUs and idx-id is in _DSD package and
> used to distinguish different HHA PMUs with the same sccl, as follow:
>     Name (_DSD, Package () {
>       ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>       Package () {
>         Package () {"hisilicon,scl-id", 0x03},
>         Package () {"hisilicon,idx-id", 0x00},
>       }
>     })

I'm still none the wiser about what this actually is. How is new _DSD crud
supposed to be documented?

Will

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf: hisi: fix uncore PMU index ID
  2018-05-23 16:42     ` Will Deacon
@ 2018-05-25  8:34       ` Zhangshaokun
  0 siblings, 0 replies; 4+ messages in thread
From: Zhangshaokun @ 2018-05-25  8:34 UTC (permalink / raw)
  To: Will Deacon
  Cc: Mark Rutland, devicetree, Huiqiang Wang, linux-arm-kernel, Linuxarm

Hi Will,

On 2018/5/24 0:42, Will Deacon wrote:
> On Tue, May 22, 2018 at 05:18:51PM +0800, Zhangshaokun wrote:
>> On 2018/5/22 1:05, Will Deacon wrote:
>>> Whilst I'd normally just accept PMU driver submissions for vendor PMUs,
>>> this part rang my alarm bells:
>>>
>>>> diff --git a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>>>> index 443906e..dcd8e77 100644
>>>> --- a/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>>>> +++ b/drivers/perf/hisilicon/hisi_uncore_hha_pmu.c
>>>> @@ -238,19 +238,10 @@ MODULE_DEVICE_TABLE(acpi, hisi_hha_pmu_acpi_match);
>>>>  static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>>>>  				  struct hisi_pmu *hha_pmu)
>>>>  {
>>>> -	unsigned long long id;
>>>>  	struct resource *res;
>>>> -	acpi_status status;
>>>> -
>>>> -	status = acpi_evaluate_integer(ACPI_HANDLE(&pdev->dev),
>>>> -				       "_UID", NULL, &id);
>>>> -	if (ACPI_FAILURE(status))
>>>> -		return -EINVAL;
>>>> -
>>>> -	hha_pmu->index_id = id;
>>>>  
>>>>  	/*
>>>> -	 * Use SCCL_ID and UID to identify the HHA PMU, while
>>>> +	 * Use SCCL_ID and HHA index ID to identify the HHA PMU, while
>>>>  	 * SCCL_ID is in MPIDR[aff2].
>>>>  	 */
>>>>  	if (device_property_read_u32(&pdev->dev, "hisilicon,scl-id",
>>>> @@ -258,6 +249,13 @@ static int hisi_hha_pmu_init_data(struct platform_device *pdev,
>>>>  		dev_err(&pdev->dev, "Can not read hha sccl-id!\n");
>>>>  		return -EINVAL;
>>>>  	}
>>>> +
>>>> +	if (device_property_read_u32(&pdev->dev, "hisilicon,idx-id",
>>>> +				     &hha_pmu->index_id)) {
>>>> +		dev_err(&pdev->dev, "Can not read hha index-id!\n");
>>>> +		return -EINVAL;
>>>> +	}
>>>
>>> Is this a new DT property? If so, please can you update the binding
>>> documentation and get an Ack from a DT maintainer? It's not clear to me
>>
>> No, it is not a DT property. We don't support DT mode for this platform and
>> only support ACPI mode.
> 
> Hmm, but by using the firmware-agnostic "device_property_read_u32"
> interface, aren't you implicitly supporting it via DT as well? In fact,
> don't you now fail the probe if this new property isn't present? Isn't
> that a regression?
> 

Even though we don't support DT, using unified device interface seems a better practice
in general. We could use acpi_dev_get_property(), but not much gain.
As for regression, this never worked anyway, right? And this is for a new platform with
little distribution, so not much pain to upgrade the FW.

>>> what a "hisilicon,idx-id" is, nor how I would generate on from firmware.
>>>
>>
>> For HiSilicon this platform, it supports multi-sccl. each sccl has more than one uncore
>> PMUs. Like HHA uncore PMUs, each sccl has 2-HHA PMUs and idx-id is in _DSD package and
>> used to distinguish different HHA PMUs with the same sccl, as follow:
>>     Name (_DSD, Package () {
>>       ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
>>       Package () {
>>         Package () {"hisilicon,scl-id", 0x03},
>>         Package () {"hisilicon,idx-id", 0x00},
>>       }
>>     })
> 
> I'm still none the wiser about what this actually is. How is new _DSD crud
> supposed to be documented?
> 

For instance:
when run perf list | grep hisi_sccl3_hha
hisi_sccl3_hha0/rx_outer/ [kernel PMU event]
------------------------------------------
hisi_sccl3_hha1/rx_outer/ [kernel PMU event]
0 and 1 are the hha index in the same sccl that sccl-id is 3.
We document as hisi_sccl{X}_<l3c{Y}/hha{Y}/ddrc{Y}> in
Documentation/perf/hisi-pmu.txt

Thanks,
Shaokun

> Will
> 
> .
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-05-25  8:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1526901317-52248-1-git-send-email-zhangshaokun@hisilicon.com>
2018-05-21 17:05 ` [PATCH] perf: hisi: fix uncore PMU index ID Will Deacon
2018-05-22  9:18   ` Zhangshaokun
2018-05-23 16:42     ` Will Deacon
2018-05-25  8:34       ` Zhangshaokun

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).