[PATCH v2 7/8] drivers/perf: hisi: Add support for HiSilicon PA PMU driver

Shaokun Zhang zhangshaokun at hisilicon.com
Thu Feb 4 02:20:27 EST 2021


Hi Mark,

在 2021/2/3 21:43, Mark Rutland 写道:
> On Wed, Feb 03, 2021 at 03:51:07PM +0800, Shaokun Zhang wrote:
>> On HiSilicon Hip09 platform, there is a PA (Protocol Adapter) module on
>> each chip SICL (Super I/O Cluster) which incorporates three Hydra interface
>> and facilitates the cache coherency between the dies on the chip. While PA
>> uncore PMU model is the same as other Hip09 PMU modules and many PMU events
>> are supported. Let's support the PMU driver using the HiSilicon uncore PMU
>> framework.
> 
>> +HISI_PMU_EVENT_ATTR_EXTRACTOR(tgtid_cmd, config1, 10, 0);
>> +HISI_PMU_EVENT_ATTR_EXTRACTOR(tgtid_msk, config1, 21, 11);
>> +HISI_PMU_EVENT_ATTR_EXTRACTOR(srcid_cmd, config1, 32, 22);
>> +HISI_PMU_EVENT_ATTR_EXTRACTOR(srcid_msk, config1, 43, 33);
>> +HISI_PMU_EVENT_ATTR_EXTRACTOR(tracetag_en, config1, 44, 44);
> 
> As with the other patches, a brief introduction for these in the commit
> message would be helpful.

Sure, it will be added in next version.

> 
>> +static void hisi_pa_pmu_enable_filter(struct perf_event *event)
>> +{
>> +	if (event->attr.config1 != 0x0) {
>> +		hisi_pa_pmu_enable_tracetag(event);
>> +		hisi_pa_pmu_config_srcid(event);
>> +		hisi_pa_pmu_config_tgtid(event);
>> +	}
>> +}
>> +
>> +static void hisi_pa_pmu_disable_filter(struct perf_event *event)
>> +{
>> +	if (event->attr.config1 != 0x0) {
>> +		hisi_pa_pmu_clear_tgtid(event);
>> +		hisi_pa_pmu_clear_srcid(event);
>> +		hisi_pa_pmu_clear_tracetag(event);
>> +	}
>> +}
> 
> Does this get reset when the driver probes? I couldn't spot where we
> ensured this was in a sane initial state.

For these filters, the default value is disabled and if the user needs
this feature, the driver will configure and enable this corresponding
control bit.

> 
>> +static void hisi_pa_pmu_write_evtype(struct hisi_pmu *pa_pmu, int idx,
>> +				     u32 type)
>> +{
>> +	u32 reg, reg_idx, shift, val;
>> +
>> +	/*
>> +	 * Select the appropriate event select register(PA_EVENT_TYPE0/1).
>> +	 * There are 2 event select registers for the 8 hardware counters.
>> +	 * Event code is 8-bits and for the former 4 hardware counters,
>> +	 * PA_EVENT_TYPE0 is chosen. For the latter 4 hardware counters,
>> +	 * PA_EVENT_TYPE1 is chosen.
>> +	 */
>> +	reg = PA_EVENT_TYPE0 + rounddown(idx, 4);
> 
> The use of rounddown() here is confusing, as it relies on the number of
> elements per register happening to be equal to the size of the register
> in bytes. That works here since each element is a byte, but as it's not
> the common case it sticks out.
> 
> Please divide the index by the number of elements per register, then
> multiply that by the size of the register.

Ok, will fix this in v3.

Thanks,
Shaokun

> 
> Thanks,
> Mark.
> .
> 



More information about the linux-arm-kernel mailing list