[PATCH v2 2/4] coresight: syscfg: Match feature capabilities separately from device class

Suzuki K Poulose suzuki.poulose at arm.com
Tue Oct 27 04:21:59 PDT 2026


On 21/10/2026 15:39, Leo Yan wrote:
> On Mon, Oct 12, 2026 at 04:05:21PM -0700, Amir Ayupov wrote:
> 
> [...]
> 
>> --- a/drivers/hwtracing/coresight/coresight-config.h
>> +++ b/drivers/hwtracing/coresight/coresight-config.h
>> @@ -30,6 +30,12 @@
>>   #define CS_CFG_MATCH_CLASS_SRC_ALL	0x0001	/* match any source */
>>   #define CS_CFG_MATCH_CLASS_SRC_ETM4	0x0002	/* match any ETMv4 device */
> 
> It is good to introduce a marco:
> 
>    #define CS_CFG_MATCH_CLASS_MASK       GENMASK_U32(7, 0)
> 
>> +/*
>> + * flags defining device capabilities a feature can require. A feature loads on
>> + * a device that matches one of its classes and has all of its capabilities.
>> + */
>> +#define CS_CFG_MATCH_CAP_MASK		0x0000ff00
> 
> To make the mask explicitly 32-bit unsigned:
> 
>    #define CS_CFG_MATCH_CAP_MASK		GENMASK_U32(15, 8)
> 
>> +
>>   /* flags defining device instance matching - used in config match desc data. */
>>   #define CS_CFG_MATCH_INST_ANY		0x80000000 /* any instance of a class */
> 
> Not an issue with this patch, but CS_CFG_MATCH_INST_ANY appears to be
> unused and could be removed in a separate cleanup patch.
> 
>> diff --git a/drivers/hwtracing/coresight/coresight-syscfg.c b/drivers/hwtracing/coresight/coresight-syscfg.c
>> index a816c22c87bc8..1545d64afec01 100644
>> --- a/drivers/hwtracing/coresight/coresight-syscfg.c
>> +++ b/drivers/hwtracing/coresight/coresight-syscfg.c
>> @@ -172,7 +172,21 @@ cscfg_alloc_csdev_feat(struct coresight_device *csdev, struct cscfg_feature_desc
>>   }
>>   
>>   /* load one feature into one coresight device */
>> +/*
>> + * A feature matches a device that shares one of its class flags and has all of
>> + * the capability flags it requires.
>> + */
>> +static bool cscfg_match_feat_csdev(u32 feat_flags, u32 csdev_flags)
>> +{
>> +	u32 caps = feat_flags & CS_CFG_MATCH_CAP_MASK;
>> +
>> +	return (feat_flags & csdev_flags & ~CS_CFG_MATCH_CAP_MASK) &&
>> +	       (csdev_flags & caps) == caps;
> 
> For clearer comparison conditions:
> 
>         /* Class type must be matches */
>         if ((feat_flags & CS_CFG_MATCH_CLASS_MASK) !=
>             (csdev_flags & CS_CFG_MATCH_CLASS_MASK)
>             return false;

Why not use FIELD_GET() to compare to make it more explicit ?

> 
>         /* No required capabilities miss from the device */
>         if (feat_flags & ~csdev_flags & CS_CFG_MATCH_CAP_MASK)
>             return false;

Same here.

Suzuki>
>         return true;
> 
> Thanks,
> Leo




More information about the linux-arm-kernel mailing list