[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