Loading drivers/hwtracing/coresight/coresight-tmc-etf.c +14 −10 Original line number Diff line number Diff line Loading @@ -584,12 +584,14 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) goto out; } if (drvdata->enable) { /* There is no point in reading a TMC in HW FIFO mode */ mode = readl_relaxed(drvdata->base + TMC_MODE); if (mode != TMC_MODE_CIRCULAR_BUFFER) { ret = -EINVAL; goto out; } } /* Don't interfere if operated from Perf */ if (drvdata->mode == CS_MODE_PERF) { Loading Loading @@ -627,12 +629,14 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) spin_lock_irqsave(&drvdata->spinlock, flags); if (drvdata->enable) { /* There is no point in reading a TMC in HW FIFO mode */ mode = readl_relaxed(drvdata->base + TMC_MODE); if (mode != TMC_MODE_CIRCULAR_BUFFER) { spin_unlock_irqrestore(&drvdata->spinlock, flags); return -EINVAL; } } /* Re-enable the TMC if need be */ if (drvdata->mode == CS_MODE_SYSFS) { Loading drivers/hwtracing/coresight/coresight-tmc-etr.c +6 −0 Original line number Diff line number Diff line Loading @@ -1179,6 +1179,7 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev) drvdata->mode = CS_MODE_SYSFS; atomic_inc(csdev->refcnt); } drvdata->enable = true; out: spin_unlock_irqrestore(&drvdata->spinlock, flags); Loading Loading @@ -1653,6 +1654,11 @@ static int tmc_disable_etr_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); /* Free memory outside the spinlock if need be */ if (drvdata->etr_buf) { tmc_etr_free_sysfs_buf(drvdata->etr_buf); drvdata->etr_buf = NULL; } dev_dbg(&csdev->dev, "TMC-ETR disabled\n"); return 0; } Loading drivers/hwtracing/coresight/coresight-tmc.c +11 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2012,2017,2019 The Linux Foundation. All rights reserved. /* Copyright (c) 2012,2017-2019 The Linux Foundation. All rights reserved. * * Description: CoreSight Trace Memory Controller driver */ Loading Loading @@ -62,11 +62,13 @@ void tmc_flush_and_stop(struct tmc_drvdata *drvdata) void tmc_enable_hw(struct tmc_drvdata *drvdata) { drvdata->enable = true; writel_relaxed(TMC_CTL_CAPT_EN, drvdata->base + TMC_CTL); } void tmc_disable_hw(struct tmc_drvdata *drvdata) { drvdata->enable = false; writel_relaxed(0x0, drvdata->base + TMC_CTL); } Loading Loading @@ -102,6 +104,9 @@ static int tmc_read_prepare(struct tmc_drvdata *drvdata) { int ret = 0; if (!drvdata->enable) return -EPERM; switch (drvdata->config_type) { case TMC_CONFIG_TYPE_ETB: case TMC_CONFIG_TYPE_ETF: Loading Loading @@ -330,16 +335,20 @@ static ssize_t buffer_size_store(struct device *dev, unsigned long val; struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); if (drvdata->enable) { pr_err("ETR is in use, disable it to change the mem_size\n"); return -EINVAL; } /* Only permitted for TMC-ETRs */ if (drvdata->config_type != TMC_CONFIG_TYPE_ETR) return -EPERM; ret = kstrtoul(buf, 0, &val); if (ret) return ret; /* The buffer size should be page aligned */ if (val & (PAGE_SIZE - 1)) return -EINVAL; drvdata->size = val; return size; } Loading drivers/hwtracing/coresight/coresight-tmc.h +1 −0 Original line number Diff line number Diff line Loading @@ -209,6 +209,7 @@ struct tmc_drvdata { struct etr_buf *perf_buf; struct coresight_csr *csr; const char *csr_name; bool enable; }; struct etr_buf_operations { Loading drivers/hwtracing/coresight/coresight.c +3 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2012, 2019 The Linux Foundation. All rights reserved. * Copyright (c) 2012, 2017-2019 The Linux Foundation. All rights reserved. */ #include <linux/kernel.h> Loading Loading @@ -263,6 +263,7 @@ static void coresight_disable_sink(struct coresight_device *csdev) if (ret) return; csdev->activated = false; csdev->enable = false; } static int coresight_enable_link(struct coresight_device *csdev, Loading Loading @@ -962,6 +963,7 @@ static ssize_t enable_source_store(struct device *dev, if (ret) return ret; } else { atomic_set(csdev->refcnt, 1); coresight_disable(csdev); } Loading Loading
drivers/hwtracing/coresight/coresight-tmc-etf.c +14 −10 Original line number Diff line number Diff line Loading @@ -584,12 +584,14 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) goto out; } if (drvdata->enable) { /* There is no point in reading a TMC in HW FIFO mode */ mode = readl_relaxed(drvdata->base + TMC_MODE); if (mode != TMC_MODE_CIRCULAR_BUFFER) { ret = -EINVAL; goto out; } } /* Don't interfere if operated from Perf */ if (drvdata->mode == CS_MODE_PERF) { Loading Loading @@ -627,12 +629,14 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) spin_lock_irqsave(&drvdata->spinlock, flags); if (drvdata->enable) { /* There is no point in reading a TMC in HW FIFO mode */ mode = readl_relaxed(drvdata->base + TMC_MODE); if (mode != TMC_MODE_CIRCULAR_BUFFER) { spin_unlock_irqrestore(&drvdata->spinlock, flags); return -EINVAL; } } /* Re-enable the TMC if need be */ if (drvdata->mode == CS_MODE_SYSFS) { Loading
drivers/hwtracing/coresight/coresight-tmc-etr.c +6 −0 Original line number Diff line number Diff line Loading @@ -1179,6 +1179,7 @@ static int tmc_enable_etr_sink_sysfs(struct coresight_device *csdev) drvdata->mode = CS_MODE_SYSFS; atomic_inc(csdev->refcnt); } drvdata->enable = true; out: spin_unlock_irqrestore(&drvdata->spinlock, flags); Loading Loading @@ -1653,6 +1654,11 @@ static int tmc_disable_etr_sink(struct coresight_device *csdev) spin_unlock_irqrestore(&drvdata->spinlock, flags); /* Free memory outside the spinlock if need be */ if (drvdata->etr_buf) { tmc_etr_free_sysfs_buf(drvdata->etr_buf); drvdata->etr_buf = NULL; } dev_dbg(&csdev->dev, "TMC-ETR disabled\n"); return 0; } Loading
drivers/hwtracing/coresight/coresight-tmc.c +11 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0 /* Copyright (c) 2012,2017,2019 The Linux Foundation. All rights reserved. /* Copyright (c) 2012,2017-2019 The Linux Foundation. All rights reserved. * * Description: CoreSight Trace Memory Controller driver */ Loading Loading @@ -62,11 +62,13 @@ void tmc_flush_and_stop(struct tmc_drvdata *drvdata) void tmc_enable_hw(struct tmc_drvdata *drvdata) { drvdata->enable = true; writel_relaxed(TMC_CTL_CAPT_EN, drvdata->base + TMC_CTL); } void tmc_disable_hw(struct tmc_drvdata *drvdata) { drvdata->enable = false; writel_relaxed(0x0, drvdata->base + TMC_CTL); } Loading Loading @@ -102,6 +104,9 @@ static int tmc_read_prepare(struct tmc_drvdata *drvdata) { int ret = 0; if (!drvdata->enable) return -EPERM; switch (drvdata->config_type) { case TMC_CONFIG_TYPE_ETB: case TMC_CONFIG_TYPE_ETF: Loading Loading @@ -330,16 +335,20 @@ static ssize_t buffer_size_store(struct device *dev, unsigned long val; struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); if (drvdata->enable) { pr_err("ETR is in use, disable it to change the mem_size\n"); return -EINVAL; } /* Only permitted for TMC-ETRs */ if (drvdata->config_type != TMC_CONFIG_TYPE_ETR) return -EPERM; ret = kstrtoul(buf, 0, &val); if (ret) return ret; /* The buffer size should be page aligned */ if (val & (PAGE_SIZE - 1)) return -EINVAL; drvdata->size = val; return size; } Loading
drivers/hwtracing/coresight/coresight-tmc.h +1 −0 Original line number Diff line number Diff line Loading @@ -209,6 +209,7 @@ struct tmc_drvdata { struct etr_buf *perf_buf; struct coresight_csr *csr; const char *csr_name; bool enable; }; struct etr_buf_operations { Loading
drivers/hwtracing/coresight/coresight.c +3 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2012, 2019 The Linux Foundation. All rights reserved. * Copyright (c) 2012, 2017-2019 The Linux Foundation. All rights reserved. */ #include <linux/kernel.h> Loading Loading @@ -263,6 +263,7 @@ static void coresight_disable_sink(struct coresight_device *csdev) if (ret) return; csdev->activated = false; csdev->enable = false; } static int coresight_enable_link(struct coresight_device *csdev, Loading Loading @@ -962,6 +963,7 @@ static ssize_t enable_source_store(struct device *dev, if (ret) return ret; } else { atomic_set(csdev->refcnt, 1); coresight_disable(csdev); } Loading