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

Amir Ayupov aaupov at fb.com
Sat Oct 24 23:21:38 PDT 2026


On Wed, 21 Oct 2026 15:39:58 +0100 Leo Yan <leo.yan at arm.com> 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)
> 
Thanks, will apply in v3.

> > +
> >  /* 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.
> 
Will drop in a separate patch in v3.

> > 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;
> 
>        /* No required capabilities miss from the device */
>        if (feat_flags & ~csdev_flags & CS_CFG_MATCH_CAP_MASK)
>            return false;
> 
>        return true;
> 
> Thanks,
> Leo

Yes, that looks cleaner, thanks!

Sent using hkml (https://github.com/sjp38/hackermail)



More information about the linux-arm-kernel mailing list