mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 11:11:26 +02:00
coresight: Populate CPU ID into coresight_device
Add a new flag CORESIGHT_DESC_CPU_BOUND to indicate components that
are CPU bound. Populate CPU ID into the coresight_device structure;
otherwise, set CPU ID to -1 for non CPU bound devices.
Use the {0} initializer to clear coresight_desc structures to avoid
uninitialized values.
Tested-by: Jie Gan <jie.gan@oss.qualcomm.com>
Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Tested-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20260515-arm_coresight_path_power_management_improvement-v14-4-f88c4a3ecfe9@arm.com
This commit is contained in:
parent
10be00dd73
commit
da2bfe3377
|
|
@ -514,7 +514,7 @@ static int __catu_probe(struct device *dev, struct resource *res)
|
|||
int ret = 0;
|
||||
u32 dma_mask;
|
||||
struct catu_drvdata *drvdata;
|
||||
struct coresight_desc catu_desc;
|
||||
struct coresight_desc catu_desc = { 0 };
|
||||
struct coresight_platform_data *pdata = NULL;
|
||||
void __iomem *base;
|
||||
|
||||
|
|
|
|||
|
|
@ -1350,6 +1350,19 @@ coresight_init_device(struct coresight_desc *desc)
|
|||
csdev->access = desc->access;
|
||||
csdev->orphan = true;
|
||||
|
||||
if (desc->flags & CORESIGHT_DESC_CPU_BOUND) {
|
||||
csdev->cpu = desc->cpu;
|
||||
} else {
|
||||
/* A per-CPU source or sink must set CPU_BOUND flag */
|
||||
if (coresight_is_percpu_source(csdev) ||
|
||||
coresight_is_percpu_sink(csdev)) {
|
||||
kfree(csdev);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
csdev->cpu = -1;
|
||||
}
|
||||
|
||||
csdev->dev.type = &coresight_dev_type[desc->type];
|
||||
csdev->dev.groups = desc->groups;
|
||||
csdev->dev.parent = desc->dev;
|
||||
|
|
|
|||
|
|
@ -659,7 +659,7 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
void __iomem *base;
|
||||
struct device *dev = &adev->dev;
|
||||
struct cti_drvdata *drvdata = NULL;
|
||||
struct coresight_desc cti_desc;
|
||||
struct coresight_desc cti_desc = { 0 };
|
||||
struct coresight_platform_data *pdata = NULL;
|
||||
struct resource *res = &adev->res;
|
||||
|
||||
|
|
@ -702,11 +702,14 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
|
|||
* eCPU ID. System CTIs will have the name cti_sys<I> where I is an
|
||||
* index allocated by order of discovery.
|
||||
*/
|
||||
if (drvdata->ctidev.cpu >= 0)
|
||||
if (drvdata->ctidev.cpu >= 0) {
|
||||
cti_desc.cpu = drvdata->ctidev.cpu;
|
||||
cti_desc.flags = CORESIGHT_DESC_CPU_BOUND;
|
||||
cti_desc.name = devm_kasprintf(dev, GFP_KERNEL, "cti_cpu%d",
|
||||
drvdata->ctidev.cpu);
|
||||
else
|
||||
} else {
|
||||
cti_desc.name = coresight_alloc_device_name("cti_sys", dev);
|
||||
}
|
||||
if (!cti_desc.name)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -891,6 +891,8 @@ 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;
|
||||
desc.flags = CORESIGHT_DESC_CPU_BOUND;
|
||||
drvdata->csdev = coresight_register(&desc);
|
||||
if (IS_ERR(drvdata->csdev))
|
||||
return PTR_ERR(drvdata->csdev);
|
||||
|
|
|
|||
|
|
@ -2291,6 +2291,8 @@ 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;
|
||||
desc.flags = CORESIGHT_DESC_CPU_BOUND;
|
||||
drvdata->csdev = coresight_register(&desc);
|
||||
if (IS_ERR(drvdata->csdev))
|
||||
return PTR_ERR(drvdata->csdev);
|
||||
|
|
|
|||
|
|
@ -1289,6 +1289,8 @@ 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;
|
||||
desc.flags = CORESIGHT_DESC_CPU_BOUND;
|
||||
trbe_csdev = coresight_register(&desc);
|
||||
if (IS_ERR(trbe_csdev))
|
||||
goto cpu_clear;
|
||||
|
|
|
|||
|
|
@ -141,6 +141,8 @@ struct csdev_access {
|
|||
.base = (_addr), \
|
||||
})
|
||||
|
||||
#define CORESIGHT_DESC_CPU_BOUND BIT(0)
|
||||
|
||||
/**
|
||||
* struct coresight_desc - description of a component required from drivers
|
||||
* @type: as defined by @coresight_dev_type.
|
||||
|
|
@ -153,6 +155,8 @@ 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
|
||||
* @flags: The descritpion flags.
|
||||
* @cpu: The CPU this component is affined to.
|
||||
*/
|
||||
struct coresight_desc {
|
||||
enum coresight_dev_type type;
|
||||
|
|
@ -163,6 +167,8 @@ struct coresight_desc {
|
|||
const struct attribute_group **groups;
|
||||
const char *name;
|
||||
struct csdev_access access;
|
||||
u32 flags;
|
||||
int cpu;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -260,6 +266,7 @@ struct coresight_trace_id_map {
|
|||
* device's spinlock when the coresight_mutex held and mode ==
|
||||
* CS_MODE_SYSFS. Otherwise it must be accessed from inside the
|
||||
* spinlock.
|
||||
* @cpu: The CPU this component is affined to (-1 for not CPU bound).
|
||||
* @orphan: true if the component has connections that haven't been linked.
|
||||
* @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
|
||||
|
|
@ -286,6 +293,7 @@ struct coresight_device {
|
|||
struct device dev;
|
||||
atomic_t mode;
|
||||
int refcnt;
|
||||
int cpu;
|
||||
bool orphan;
|
||||
/* sink specific fields */
|
||||
bool sysfs_sink_activated;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user