mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 06:40:54 +07:00
coresight: etm: Clean up device specific data
Track the coresight device instead of the real device. Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ec62db1b2f
commit
aaff762328
@ -208,7 +208,6 @@ struct etm_config {
|
|||||||
/**
|
/**
|
||||||
* struct etm_drvdata - specifics associated to an ETM component
|
* struct etm_drvdata - specifics associated to an ETM component
|
||||||
* @base: memory mapped base address for this component.
|
* @base: memory mapped base address for this component.
|
||||||
* @dev: the device entity associated to this component.
|
|
||||||
* @atclk: optional clock for the core parts of the ETM.
|
* @atclk: optional clock for the core parts of the ETM.
|
||||||
* @csdev: component vitals needed by the framework.
|
* @csdev: component vitals needed by the framework.
|
||||||
* @spinlock: only one at a time pls.
|
* @spinlock: only one at a time pls.
|
||||||
@ -232,7 +231,6 @@ struct etm_config {
|
|||||||
*/
|
*/
|
||||||
struct etm_drvdata {
|
struct etm_drvdata {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct device *dev;
|
|
||||||
struct clk *atclk;
|
struct clk *atclk;
|
||||||
struct coresight_device *csdev;
|
struct coresight_device *csdev;
|
||||||
spinlock_t spinlock;
|
spinlock_t spinlock;
|
||||||
@ -260,7 +258,7 @@ static inline void etm_writel(struct etm_drvdata *drvdata,
|
|||||||
{
|
{
|
||||||
if (drvdata->use_cp14) {
|
if (drvdata->use_cp14) {
|
||||||
if (etm_writel_cp14(off, val)) {
|
if (etm_writel_cp14(off, val)) {
|
||||||
dev_err(drvdata->dev,
|
dev_err(&drvdata->csdev->dev,
|
||||||
"invalid CP14 access to ETM reg: %#x", off);
|
"invalid CP14 access to ETM reg: %#x", off);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -274,7 +272,7 @@ static inline unsigned int etm_readl(struct etm_drvdata *drvdata, u32 off)
|
|||||||
|
|
||||||
if (drvdata->use_cp14) {
|
if (drvdata->use_cp14) {
|
||||||
if (etm_readl_cp14(off, &val)) {
|
if (etm_readl_cp14(off, &val)) {
|
||||||
dev_err(drvdata->dev,
|
dev_err(&drvdata->csdev->dev,
|
||||||
"invalid CP14 access to ETM reg: %#x", off);
|
"invalid CP14 access to ETM reg: %#x", off);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -48,7 +48,7 @@ static ssize_t etmsr_show(struct device *dev,
|
|||||||
unsigned long flags, val;
|
unsigned long flags, val;
|
||||||
struct etm_drvdata *drvdata = dev_get_drvdata(dev->parent);
|
struct etm_drvdata *drvdata = dev_get_drvdata(dev->parent);
|
||||||
|
|
||||||
pm_runtime_get_sync(drvdata->dev);
|
pm_runtime_get_sync(dev->parent);
|
||||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||||
CS_UNLOCK(drvdata->base);
|
CS_UNLOCK(drvdata->base);
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ static ssize_t etmsr_show(struct device *dev,
|
|||||||
|
|
||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||||
pm_runtime_put(drvdata->dev);
|
pm_runtime_put(dev->parent);
|
||||||
|
|
||||||
return sprintf(buf, "%#lx\n", val);
|
return sprintf(buf, "%#lx\n", val);
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@ static ssize_t mode_store(struct device *dev,
|
|||||||
|
|
||||||
if (config->mode & ETM_MODE_STALL) {
|
if (config->mode & ETM_MODE_STALL) {
|
||||||
if (!(drvdata->etmccr & ETMCCR_FIFOFULL)) {
|
if (!(drvdata->etmccr & ETMCCR_FIFOFULL)) {
|
||||||
dev_warn(drvdata->dev, "stall mode not supported\n");
|
dev_warn(dev, "stall mode not supported\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
}
|
}
|
||||||
@ -141,7 +141,7 @@ static ssize_t mode_store(struct device *dev,
|
|||||||
|
|
||||||
if (config->mode & ETM_MODE_TIMESTAMP) {
|
if (config->mode & ETM_MODE_TIMESTAMP) {
|
||||||
if (!(drvdata->etmccer & ETMCCER_TIMESTAMP)) {
|
if (!(drvdata->etmccer & ETMCCER_TIMESTAMP)) {
|
||||||
dev_warn(drvdata->dev, "timestamp not supported\n");
|
dev_warn(dev, "timestamp not supported\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
}
|
}
|
||||||
@ -945,7 +945,7 @@ static ssize_t seq_curr_state_show(struct device *dev,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
pm_runtime_get_sync(drvdata->dev);
|
pm_runtime_get_sync(dev->parent);
|
||||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||||
|
|
||||||
CS_UNLOCK(drvdata->base);
|
CS_UNLOCK(drvdata->base);
|
||||||
@ -953,7 +953,7 @@ static ssize_t seq_curr_state_show(struct device *dev,
|
|||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||||
pm_runtime_put(drvdata->dev);
|
pm_runtime_put(dev->parent);
|
||||||
out:
|
out:
|
||||||
return sprintf(buf, "%#lx\n", val);
|
return sprintf(buf, "%#lx\n", val);
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ static void etm_set_prog(struct etm_drvdata *drvdata)
|
|||||||
*/
|
*/
|
||||||
isb();
|
isb();
|
||||||
if (coresight_timeout_etm(drvdata, ETMSR, ETMSR_PROG_BIT, 1)) {
|
if (coresight_timeout_etm(drvdata, ETMSR, ETMSR_PROG_BIT, 1)) {
|
||||||
dev_err(drvdata->dev,
|
dev_err(&drvdata->csdev->dev,
|
||||||
"%s: timeout observed when probing at offset %#x\n",
|
"%s: timeout observed when probing at offset %#x\n",
|
||||||
__func__, ETMSR);
|
__func__, ETMSR);
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ static void etm_clr_prog(struct etm_drvdata *drvdata)
|
|||||||
*/
|
*/
|
||||||
isb();
|
isb();
|
||||||
if (coresight_timeout_etm(drvdata, ETMSR, ETMSR_PROG_BIT, 0)) {
|
if (coresight_timeout_etm(drvdata, ETMSR, ETMSR_PROG_BIT, 0)) {
|
||||||
dev_err(drvdata->dev,
|
dev_err(&drvdata->csdev->dev,
|
||||||
"%s: timeout observed when probing at offset %#x\n",
|
"%s: timeout observed when probing at offset %#x\n",
|
||||||
__func__, ETMSR);
|
__func__, ETMSR);
|
||||||
}
|
}
|
||||||
@ -425,7 +425,7 @@ static int etm_enable_hw(struct etm_drvdata *drvdata)
|
|||||||
done:
|
done:
|
||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "cpu: %d enable smp call done: %d\n",
|
dev_dbg(&drvdata->csdev->dev, "cpu: %d enable smp call done: %d\n",
|
||||||
drvdata->cpu, rc);
|
drvdata->cpu, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -455,6 +455,7 @@ int etm_get_trace_id(struct etm_drvdata *drvdata)
|
|||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int trace_id = -1;
|
int trace_id = -1;
|
||||||
|
struct device *etm_dev = drvdata->csdev->dev.parent;
|
||||||
|
|
||||||
if (!drvdata)
|
if (!drvdata)
|
||||||
goto out;
|
goto out;
|
||||||
@ -462,7 +463,7 @@ int etm_get_trace_id(struct etm_drvdata *drvdata)
|
|||||||
if (!local_read(&drvdata->mode))
|
if (!local_read(&drvdata->mode))
|
||||||
return drvdata->traceid;
|
return drvdata->traceid;
|
||||||
|
|
||||||
pm_runtime_get_sync(drvdata->dev);
|
pm_runtime_get_sync(etm_dev);
|
||||||
|
|
||||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||||
|
|
||||||
@ -471,7 +472,7 @@ int etm_get_trace_id(struct etm_drvdata *drvdata)
|
|||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
spin_unlock_irqrestore(&drvdata->spinlock, flags);
|
||||||
pm_runtime_put(drvdata->dev);
|
pm_runtime_put(etm_dev);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return trace_id;
|
return trace_id;
|
||||||
@ -526,7 +527,7 @@ static int etm_enable_sysfs(struct coresight_device *csdev)
|
|||||||
spin_unlock(&drvdata->spinlock);
|
spin_unlock(&drvdata->spinlock);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
dev_dbg(drvdata->dev, "ETM tracing enabled\n");
|
dev_dbg(&csdev->dev, "ETM tracing enabled\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,7 +582,8 @@ static void etm_disable_hw(void *info)
|
|||||||
|
|
||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "cpu: %d disable smp call done\n", drvdata->cpu);
|
dev_dbg(&drvdata->csdev->dev,
|
||||||
|
"cpu: %d disable smp call done\n", drvdata->cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void etm_disable_perf(struct coresight_device *csdev)
|
static void etm_disable_perf(struct coresight_device *csdev)
|
||||||
@ -628,7 +630,7 @@ static void etm_disable_sysfs(struct coresight_device *csdev)
|
|||||||
spin_unlock(&drvdata->spinlock);
|
spin_unlock(&drvdata->spinlock);
|
||||||
cpus_read_unlock();
|
cpus_read_unlock();
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "ETM tracing disabled\n");
|
dev_dbg(&csdev->dev, "ETM tracing disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void etm_disable(struct coresight_device *csdev,
|
static void etm_disable(struct coresight_device *csdev,
|
||||||
@ -803,7 +805,6 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id)
|
|||||||
drvdata->use_cp14 = of_property_read_bool(np, "arm,cp14");
|
drvdata->use_cp14 = of_property_read_bool(np, "arm,cp14");
|
||||||
}
|
}
|
||||||
|
|
||||||
drvdata->dev = &adev->dev;
|
|
||||||
dev_set_drvdata(dev, drvdata);
|
dev_set_drvdata(dev, drvdata);
|
||||||
|
|
||||||
/* Validity for the resource is already checked by the AMBA core */
|
/* Validity for the resource is already checked by the AMBA core */
|
||||||
@ -871,7 +872,8 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pm_runtime_put(&adev->dev);
|
pm_runtime_put(&adev->dev);
|
||||||
dev_info(dev, "%s initialized\n", (char *)coresight_get_uci_data(id));
|
dev_info(&drvdata->csdev->dev,
|
||||||
|
"%s initialized\n", (char *)coresight_get_uci_data(id));
|
||||||
if (boot_enable) {
|
if (boot_enable) {
|
||||||
coresight_enable(drvdata->csdev);
|
coresight_enable(drvdata->csdev);
|
||||||
drvdata->boot_enable = true;
|
drvdata->boot_enable = true;
|
||||||
|
@ -88,6 +88,7 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
|
|||||||
{
|
{
|
||||||
int i, rc;
|
int i, rc;
|
||||||
struct etmv4_config *config = &drvdata->config;
|
struct etmv4_config *config = &drvdata->config;
|
||||||
|
struct device *etm_dev = &drvdata->csdev->dev;
|
||||||
|
|
||||||
CS_UNLOCK(drvdata->base);
|
CS_UNLOCK(drvdata->base);
|
||||||
|
|
||||||
@ -102,7 +103,7 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
|
|||||||
|
|
||||||
/* wait for TRCSTATR.IDLE to go up */
|
/* wait for TRCSTATR.IDLE to go up */
|
||||||
if (coresight_timeout(drvdata->base, TRCSTATR, TRCSTATR_IDLE_BIT, 1))
|
if (coresight_timeout(drvdata->base, TRCSTATR, TRCSTATR_IDLE_BIT, 1))
|
||||||
dev_err(drvdata->dev,
|
dev_err(etm_dev,
|
||||||
"timeout while waiting for Idle Trace Status\n");
|
"timeout while waiting for Idle Trace Status\n");
|
||||||
|
|
||||||
writel_relaxed(config->pe_sel, drvdata->base + TRCPROCSELR);
|
writel_relaxed(config->pe_sel, drvdata->base + TRCPROCSELR);
|
||||||
@ -184,13 +185,13 @@ static int etm4_enable_hw(struct etmv4_drvdata *drvdata)
|
|||||||
|
|
||||||
/* wait for TRCSTATR.IDLE to go back down to '0' */
|
/* wait for TRCSTATR.IDLE to go back down to '0' */
|
||||||
if (coresight_timeout(drvdata->base, TRCSTATR, TRCSTATR_IDLE_BIT, 0))
|
if (coresight_timeout(drvdata->base, TRCSTATR, TRCSTATR_IDLE_BIT, 0))
|
||||||
dev_err(drvdata->dev,
|
dev_err(etm_dev,
|
||||||
"timeout while waiting for Idle Trace Status\n");
|
"timeout while waiting for Idle Trace Status\n");
|
||||||
|
|
||||||
done:
|
done:
|
||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "cpu: %d enable smp call done: %d\n",
|
dev_dbg(etm_dev, "cpu: %d enable smp call done: %d\n",
|
||||||
drvdata->cpu, rc);
|
drvdata->cpu, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -400,7 +401,7 @@ static int etm4_enable_sysfs(struct coresight_device *csdev)
|
|||||||
spin_unlock(&drvdata->spinlock);
|
spin_unlock(&drvdata->spinlock);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
dev_dbg(drvdata->dev, "ETM tracing enabled\n");
|
dev_dbg(&csdev->dev, "ETM tracing enabled\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,7 +462,8 @@ static void etm4_disable_hw(void *info)
|
|||||||
|
|
||||||
CS_LOCK(drvdata->base);
|
CS_LOCK(drvdata->base);
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "cpu: %d disable smp call done\n", drvdata->cpu);
|
dev_dbg(&drvdata->csdev->dev,
|
||||||
|
"cpu: %d disable smp call done\n", drvdata->cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int etm4_disable_perf(struct coresight_device *csdev,
|
static int etm4_disable_perf(struct coresight_device *csdev,
|
||||||
@ -511,7 +513,7 @@ static void etm4_disable_sysfs(struct coresight_device *csdev)
|
|||||||
spin_unlock(&drvdata->spinlock);
|
spin_unlock(&drvdata->spinlock);
|
||||||
cpus_read_unlock();
|
cpus_read_unlock();
|
||||||
|
|
||||||
dev_dbg(drvdata->dev, "ETM tracing disabled\n");
|
dev_dbg(&csdev->dev, "ETM tracing disabled\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void etm4_disable(struct coresight_device *csdev,
|
static void etm4_disable(struct coresight_device *csdev,
|
||||||
@ -1095,7 +1097,6 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
|
|||||||
adev->dev.platform_data = pdata;
|
adev->dev.platform_data = pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
drvdata->dev = &adev->dev;
|
|
||||||
dev_set_drvdata(dev, drvdata);
|
dev_set_drvdata(dev, drvdata);
|
||||||
|
|
||||||
/* Validity for the resource is already checked by the AMBA core */
|
/* Validity for the resource is already checked by the AMBA core */
|
||||||
@ -1157,7 +1158,7 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pm_runtime_put(&adev->dev);
|
pm_runtime_put(&adev->dev);
|
||||||
dev_info(dev, "CPU%d: ETM v%d.%d initialized\n",
|
dev_info(&drvdata->csdev->dev, "CPU%d: ETM v%d.%d initialized\n",
|
||||||
drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
|
drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
|
||||||
|
|
||||||
if (boot_enable) {
|
if (boot_enable) {
|
||||||
|
@ -284,7 +284,6 @@ struct etmv4_config {
|
|||||||
/**
|
/**
|
||||||
* struct etm4_drvdata - specifics associated to an ETM component
|
* struct etm4_drvdata - specifics associated to an ETM component
|
||||||
* @base: Memory mapped base address for this component.
|
* @base: Memory mapped base address for this component.
|
||||||
* @dev: The device entity associated to this component.
|
|
||||||
* @csdev: Component vitals needed by the framework.
|
* @csdev: Component vitals needed by the framework.
|
||||||
* @spinlock: Only one at a time pls.
|
* @spinlock: Only one at a time pls.
|
||||||
* @mode: This tracer's mode, i.e sysFS, Perf or disabled.
|
* @mode: This tracer's mode, i.e sysFS, Perf or disabled.
|
||||||
@ -340,7 +339,6 @@ struct etmv4_config {
|
|||||||
*/
|
*/
|
||||||
struct etmv4_drvdata {
|
struct etmv4_drvdata {
|
||||||
void __iomem *base;
|
void __iomem *base;
|
||||||
struct device *dev;
|
|
||||||
struct coresight_device *csdev;
|
struct coresight_device *csdev;
|
||||||
spinlock_t spinlock;
|
spinlock_t spinlock;
|
||||||
local_t mode;
|
local_t mode;
|
||||||
|
Loading…
Reference in New Issue
Block a user