[PATCH] perf/arm-cmn: Fix {wp_dev_sel2, wp_dev_sel} limited to 0/1 when MXP_MULTIPLE_DTM_EN is TRUE

Robin Murphy robin.murphy at arm.com
Tue Sep 8 08:04:57 PDT 2026


On 08/09/2026 9:15 am, allen.wang wrote:
> Hi,
> 
> Gentle ping on this patch.
> 
> Could someone please review it when time permits?
> 
> Thanks!
> Allen
> 
> On 8/19/2026 6:54 PM, Shouping Wang wrote:
>> When MXP_MULTIPLE_DTM_EN is TRUE, each DTM will monitor at most
>> two device ports. In this case, {wp_dev_sel2, wp_dev_sel} will
>> only use values 2'b00 and 2'b01 per DTM.

Hmm, I read the "each DTM will only use..." wording[1] as implying that 
the hardware itself would ignore wp_dev_sel2 (especially since that 
would seem to be the obvious thing to do) - are you saying that that 
isn't the case? (I've never had access to any actual multi-DTM hardware...)

Thanks,
Robin.

[1] 
https://support.arm.com/documentation/102308/0307/Debug-trace-and-PMU/Debug-Trace-system-overview/DTM-watchpoint?lang=en

>> Previously the setting allowed values beyond the supported range
>> per DTM, which could cause each DTM to select invalid ports when
>> MXP_MULTIPLE_DTM_EN is TRUE.
>>
>> Fix this by applying `dev %= 2` to clamp the selection value to
>> the valid range when MXP_MULTIPLE_DTM_EN is TRUE.
>>
>> Fixes: 60d1504070c2 ("perf/arm-cmn: Support new IP features")
>> Signed-off-by: Shouping Wang <allen.wang at hj-micro.com>
>> ---
>>   drivers/perf/arm-cmn.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/perf/arm-cmn.c b/drivers/perf/arm-cmn.c
>> index 40c05c519a1d..13ccbf2a7345 100644
>> --- a/drivers/perf/arm-cmn.c
>> +++ b/drivers/perf/arm-cmn.c
>> @@ -1392,6 +1392,7 @@ static void arm_cmn_claim_wp_idx(struct arm_cmn_dtm *dtm,
>>   
>>   static u32 arm_cmn_wp_config(struct perf_event *event, int wp_idx)
>>   {
>> +	struct arm_cmn *cmn = to_cmn(event->pmu);
>>   	u32 config;
>>   	u32 dev = CMN_EVENT_WP_DEV_SEL(event);
>>   	u32 chn = CMN_EVENT_WP_CHN_SEL(event);
>> @@ -1404,6 +1405,9 @@ static u32 arm_cmn_wp_config(struct perf_event *event, int wp_idx)
>>   	if (is_cmn600)
>>   		grp &= 1;
>>   
>> +	if (cmn->multi_dtm)
>> +		dev %=  2;
>> +
>>   	config = FIELD_PREP(CMN_DTM_WPn_CONFIG_WP_DEV_SEL, dev) |
>>   		 FIELD_PREP(CMN_DTM_WPn_CONFIG_WP_CHN_SEL, chn) |
>>   		 FIELD_PREP(CMN_DTM_WPn_CONFIG_WP_GRP, grp) |
> 




More information about the linux-arm-kernel mailing list