[PATCH v3 11/31] coresight: Populate CPU ID into the coresight_device structure
Mike Leach
mike.leach at linaro.org
Thu Oct 2 03:54:42 PDT 2025
Hi Leo,
Not obvious from the patch itself why this is being done - as no use
cases until later patches - perhaps expand the explanation here.
On Mon, 15 Sept 2025 at 11:34, Leo Yan <leo.yan at arm.com> wrote:
>
> The coresight_desc structure is a temporary structure for passing the
> information to the coresight_device structure during registration.
>
> Introduces a new "cpu" field in both structures to store the CPU ID. For
> components that are not CPU bound, set this field to -1.
>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
> ---
> drivers/hwtracing/coresight/coresight-catu.c | 1 +
> drivers/hwtracing/coresight/coresight-core.c | 1 +
> drivers/hwtracing/coresight/coresight-ctcu-core.c | 1 +
> drivers/hwtracing/coresight/coresight-cti-core.c | 1 +
> drivers/hwtracing/coresight/coresight-dummy.c | 1 +
> drivers/hwtracing/coresight/coresight-etb10.c | 1 +
> drivers/hwtracing/coresight/coresight-etm3x-core.c | 1 +
> drivers/hwtracing/coresight/coresight-etm4x-core.c | 1 +
> drivers/hwtracing/coresight/coresight-funnel.c | 1 +
> drivers/hwtracing/coresight/coresight-replicator.c | 1 +
> drivers/hwtracing/coresight/coresight-stm.c | 1 +
> drivers/hwtracing/coresight/coresight-tmc-core.c | 1 +
> drivers/hwtracing/coresight/coresight-tpda.c | 1 +
> drivers/hwtracing/coresight/coresight-tpdm.c | 1 +
> drivers/hwtracing/coresight/coresight-tpiu.c | 1 +
> drivers/hwtracing/coresight/coresight-trbe.c | 1 +
> drivers/hwtracing/coresight/ultrasoc-smb.c | 1 +
Missing coresight-tnoc.c from here?
> include/linux/coresight.h | 4 ++++
> 18 files changed, 21 insertions(+)
>
> diff --git a/drivers/hwtracing/coresight/coresight-catu.c b/drivers/hwtracing/coresight/coresight-catu.c
> index a3ccb7034ae14d7339bc2549bccadf11e28c45e2..2685e3a883b1f8067de643519b5fc91153123c57 100644
> --- a/drivers/hwtracing/coresight/coresight-catu.c
> +++ b/drivers/hwtracing/coresight/coresight-catu.c
> @@ -575,6 +575,7 @@ static int __catu_probe(struct device *dev, struct resource *res)
> catu_desc.type = CORESIGHT_DEV_TYPE_HELPER;
> catu_desc.subtype.helper_subtype = CORESIGHT_DEV_SUBTYPE_HELPER_CATU;
> catu_desc.ops = &catu_ops;
> + catu_desc.cpu = -1;
>
> coresight_clear_self_claim_tag(&catu_desc.access);
> drvdata->csdev = coresight_register(&catu_desc);
> diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c
> index 3267192f0c1c667b0570b9100c3c449064e7fb5e..db325dff884d21cc8d93f32bfe3be5c0491ffc8d 100644
> --- a/drivers/hwtracing/coresight/coresight-core.c
> +++ b/drivers/hwtracing/coresight/coresight-core.c
> @@ -1336,6 +1336,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
> csdev->ops = desc->ops;
> csdev->access = desc->access;
> csdev->orphan = true;
> + csdev->cpu = desc->cpu;
>
> csdev->dev.type = &coresight_dev_type[desc->type];
> csdev->dev.groups = desc->groups;
> diff --git a/drivers/hwtracing/coresight/coresight-ctcu-core.c b/drivers/hwtracing/coresight/coresight-ctcu-core.c
> index c586495e9a088a63cec481a82fd9f4ec7c645160..05497a5114785397a98e408466df0b937c87ab61 100644
> --- a/drivers/hwtracing/coresight/coresight-ctcu-core.c
> +++ b/drivers/hwtracing/coresight/coresight-ctcu-core.c
> @@ -231,6 +231,7 @@ static int ctcu_probe(struct platform_device *pdev)
> desc.dev = dev;
> desc.ops = &ctcu_ops;
> desc.access = CSDEV_ACCESS_IOMEM(base);
> + desc.cpu = -1;
>
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwtracing/coresight/coresight-cti-core.c
> index 8fb30dd73fd20ae613a45b1a467f457a046a9412..2c8bf5dbe8b8206c92ae5ea64a26c947ef5b9582 100644
> --- a/drivers/hwtracing/coresight/coresight-cti-core.c
> +++ b/drivers/hwtracing/coresight/coresight-cti-core.c
> @@ -931,6 +931,7 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
> cti_desc.ops = &cti_ops;
> cti_desc.groups = drvdata->ctidev.con_groups;
> cti_desc.dev = dev;
> + cti_desc.cpu = drvdata->ctidev.cpu;
>
> coresight_clear_self_claim_tag(&cti_desc.access);
> drvdata->csdev = coresight_register(&cti_desc);
> diff --git a/drivers/hwtracing/coresight/coresight-dummy.c b/drivers/hwtracing/coresight/coresight-dummy.c
> index aaa92b5081e3d2bb85d57f90ab68a1dc6a1f0dd8..653d37cd0bd12a57c78e2615f839e0d8af25d7f0 100644
> --- a/drivers/hwtracing/coresight/coresight-dummy.c
> +++ b/drivers/hwtracing/coresight/coresight-dummy.c
> @@ -179,6 +179,7 @@ static int dummy_probe(struct platform_device *pdev)
>
> desc.pdata = pdev->dev.platform_data;
> desc.dev = &pdev->dev;
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev)) {
> ret = PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-etb10.c b/drivers/hwtracing/coresight/coresight-etb10.c
> index 35db1b6093d154d67dc567df42f838e2ba3d1d58..8e0bbffdf36215fe82c89a34767e425e03f4a744 100644
> --- a/drivers/hwtracing/coresight/coresight-etb10.c
> +++ b/drivers/hwtracing/coresight/coresight-etb10.c
> @@ -770,6 +770,7 @@ static int etb_probe(struct amba_device *adev, const struct amba_id *id)
> desc.pdata = pdata;
> desc.dev = dev;
> desc.groups = coresight_etb_groups;
> + desc.cpu = -1;
>
> coresight_clear_self_claim_tag(&desc.access);
> drvdata->csdev = coresight_register(&desc);
> diff --git a/drivers/hwtracing/coresight/coresight-etm3x-core.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c
> index f759a47eaed9e804e30530a232370c9504912ac6..2cce5f4dd0e168cab066e882c0856886b30aaf91 100644
> --- a/drivers/hwtracing/coresight/coresight-etm3x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c
> @@ -885,6 +885,7 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id)
> desc.pdata = pdata;
> desc.dev = dev;
> desc.groups = coresight_etm_groups;
> + desc.cpu = drvdata->cpu;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> return PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> index 4a75c76bb44fc284034e25f8eb8e7a04e9d35885..7e66d094269de4a1344f5d962bc320b2603b7627 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> @@ -2062,6 +2062,7 @@ static int etm4_add_coresight_dev(struct etm4_init_arg *init_arg)
> desc.pdata = pdata;
> desc.dev = dev;
> desc.groups = coresight_etmv4_groups;
> + desc.cpu = drvdata->cpu;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> return PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-funnel.c b/drivers/hwtracing/coresight/coresight-funnel.c
> index 3b248e54471a38f501777fe162fea850d1c851b3..457291bb24212c502de9aadecb41da218c733c2f 100644
> --- a/drivers/hwtracing/coresight/coresight-funnel.c
> +++ b/drivers/hwtracing/coresight/coresight-funnel.c
> @@ -263,6 +263,7 @@ static int funnel_probe(struct device *dev, struct resource *res)
> desc.ops = &funnel_cs_ops;
> desc.pdata = pdata;
> desc.dev = dev;
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> return PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-replicator.c b/drivers/hwtracing/coresight/coresight-replicator.c
> index e6472658235dc479cec91ac18f3737f76f8c74f0..38518ba862928ea904c953c8303559e349e45200 100644
> --- a/drivers/hwtracing/coresight/coresight-replicator.c
> +++ b/drivers/hwtracing/coresight/coresight-replicator.c
> @@ -273,6 +273,7 @@ static int replicator_probe(struct device *dev, struct resource *res)
> desc.ops = &replicator_cs_ops;
> desc.pdata = dev->platform_data;
> desc.dev = dev;
> + desc.cpu = -1;
>
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> diff --git a/drivers/hwtracing/coresight/coresight-stm.c b/drivers/hwtracing/coresight/coresight-stm.c
> index e68529bf89c9815a8118955bf3114ad1ed4fb346..e2197ae0a7c8412785ce8b1161311048cbaa3f58 100644
> --- a/drivers/hwtracing/coresight/coresight-stm.c
> +++ b/drivers/hwtracing/coresight/coresight-stm.c
> @@ -901,6 +901,7 @@ static int __stm_probe(struct device *dev, struct resource *res)
> desc.pdata = pdata;
> desc.dev = dev;
> desc.groups = coresight_stm_groups;
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev)) {
> ret = PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c
> index 36599c431be6203e871fdcb8de569cc6701c52bb..bd783c9dcb56afa0adfa9724e45fcd0c4cfe367b 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-core.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c
> @@ -868,6 +868,7 @@ static int __tmc_probe(struct device *dev, struct resource *res)
> }
> dev->platform_data = pdata;
> desc.pdata = pdata;
> + desc.cpu = -1;
>
> coresight_clear_self_claim_tag(&desc.access);
> drvdata->csdev = coresight_register(&desc);
> diff --git a/drivers/hwtracing/coresight/coresight-tpda.c b/drivers/hwtracing/coresight/coresight-tpda.c
> index 333b3cb236859f0feb1498f4ab81037c772143fd..6739deda402ed5024e17add349314d6db793dd13 100644
> --- a/drivers/hwtracing/coresight/coresight-tpda.c
> +++ b/drivers/hwtracing/coresight/coresight-tpda.c
> @@ -324,6 +324,7 @@ static int tpda_probe(struct amba_device *adev, const struct amba_id *id)
> desc.pdata = adev->dev.platform_data;
> desc.dev = &adev->dev;
> desc.access = CSDEV_ACCESS_IOMEM(base);
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> return PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
> index 7214e65097ec9ac69f6c7c9278bcd28d25945c9e..ec1e9a585f90a02f06db27d6dfb22091eb66cbd9 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.c
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.c
> @@ -1392,6 +1392,7 @@ static int tpdm_probe(struct amba_device *adev, const struct amba_id *id)
> desc.dev = &adev->dev;
> desc.access = CSDEV_ACCESS_IOMEM(base);
> desc.groups = tpdm_attr_grps;
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> return PTR_ERR(drvdata->csdev);
> diff --git a/drivers/hwtracing/coresight/coresight-tpiu.c b/drivers/hwtracing/coresight/coresight-tpiu.c
> index 9463afdbda8ad74eee78c72185fe7603f81b7888..3ade05e268e31dd2572b84e91f9448fcf317f2ab 100644
> --- a/drivers/hwtracing/coresight/coresight-tpiu.c
> +++ b/drivers/hwtracing/coresight/coresight-tpiu.c
> @@ -171,6 +171,7 @@ static int __tpiu_probe(struct device *dev, struct resource *res)
> desc.ops = &tpiu_cs_ops;
> desc.pdata = pdata;
> desc.dev = dev;
> + desc.cpu = -1;
> drvdata->csdev = coresight_register(&desc);
>
> if (!IS_ERR(drvdata->csdev))
> diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c
> index 7a226316c48fa516293bf4e88e4009c8606485d5..3fd379f327eb4f82665b216856d43ec39e4e7d10 100644
> --- a/drivers/hwtracing/coresight/coresight-trbe.c
> +++ b/drivers/hwtracing/coresight/coresight-trbe.c
> @@ -1288,6 +1288,7 @@ static void arm_trbe_register_coresight_cpu(struct trbe_drvdata *drvdata, int cp
> desc.ops = &arm_trbe_cs_ops;
> desc.groups = arm_trbe_groups;
> desc.dev = dev;
> + desc.cpu = cpu;
> trbe_csdev = coresight_register(&desc);
> if (IS_ERR(trbe_csdev))
> goto cpu_clear;
> diff --git a/drivers/hwtracing/coresight/ultrasoc-smb.c b/drivers/hwtracing/coresight/ultrasoc-smb.c
> index 26cfc939e5bd810295a336f392ac282ccf316f9f..e5897767d9ae2c21ef39e9280dea211c110bd168 100644
> --- a/drivers/hwtracing/coresight/ultrasoc-smb.c
> +++ b/drivers/hwtracing/coresight/ultrasoc-smb.c
> @@ -483,6 +483,7 @@ static int smb_register_sink(struct platform_device *pdev,
> return -ENOMEM;
> }
> desc.access = CSDEV_ACCESS_IOMEM(drvdata->base);
> + desc.cpu = -1;
>
> drvdata->csdev = coresight_register(&desc);
> if (IS_ERR(drvdata->csdev))
> diff --git a/include/linux/coresight.h b/include/linux/coresight.h
> index 3e5e5acd0c7fcde7d312d440da4355faaf682c7b..222597ec7a089e10ad763df206917e90f34bb5c2 100644
> --- a/include/linux/coresight.h
> +++ b/include/linux/coresight.h
> @@ -153,6 +153,7 @@ struct csdev_access {
> * in the component's sysfs sub-directory.
> * @name: name for the coresight device, also shown under sysfs.
> * @access: Describe access to the device
> + * @cpu: The CPU this component is affined to (-1 for not CPU bound).
> */
> struct coresight_desc {
> enum coresight_dev_type type;
> @@ -163,6 +164,7 @@ struct coresight_desc {
> const struct attribute_group **groups;
> const char *name;
> struct csdev_access access;
> + int cpu;
> };
>
> /**
> @@ -261,6 +263,7 @@ struct coresight_trace_id_map {
> * CS_MODE_SYSFS. Otherwise it must be accessed from inside the
> * spinlock.
> * @orphan: true if the component has connections that haven't been linked.
> + * @cpu: The CPU this component is affined to (-1 for not CPU bound).
> * @sysfs_sink_activated: 'true' when a sink has been selected for use via sysfs
> * by writing a 1 to the 'enable_sink' file. A sink can be
> * activated but not yet enabled. Enabling for a _sink_ happens
> @@ -287,6 +290,7 @@ struct coresight_device {
> atomic_t mode;
> int refcnt;
> bool orphan;
> + int cpu;
> /* sink specific fields */
> bool sysfs_sink_activated;
> struct dev_ext_attribute *ea;
>
> --
> 2.34.1
>
Regards
Mike
--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK
More information about the linux-arm-kernel
mailing list