All of lore.kernel.org
 help / color / mirror / Atom feed
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org, mike.leach@linaro.org,
	mathieu.poirier@linaro.org, coresight@lists.linaro.org,
	Suzuki K Poulose <suzuki.poulose@arm.com>
Subject: [RFC PATCH 12/14] coresight: etm4x: Refactor probing routine
Date: Wed, 22 Jul 2020 18:20:38 +0100	[thread overview]
Message-ID: <20200722172040.1299289-13-suzuki.poulose@arm.com> (raw)
In-Reply-To: <20200722172040.1299289-1-suzuki.poulose@arm.com>

CoreSight ETM with system register access may not have a
memory mapped i/o access. Refactor the ETM specific probing
into a common routine to allow reusing the code for such ETMs.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
---
 drivers/hwtracing/coresight/coresight-etm4x.c | 64 ++++++++++++-------
 1 file changed, 41 insertions(+), 23 deletions(-)

diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 831206f7f306..e91af23ac419 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -1541,27 +1541,43 @@ static bool etm4_cpu_supports_sysreg(int cpu)
 	return sys_reg_support;
 }
 
-static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
+static int etm4_probe_common(struct device *dev, void __iomem *base)
 {
 	int ret, cpu;
 	bool sys_reg = false;
-	void __iomem *base;
-	struct device *dev = &adev->dev;
 	struct coresight_platform_data *pdata = NULL;
 	struct etmv4_drvdata *drvdata;
-	struct resource *res = &adev->res;
 	struct coresight_desc desc = { 0 };
 
+	cpu = coresight_get_cpu(dev);
+	if (cpu < 0)
+		return cpu;
+
 	cpu = coresight_get_cpu(dev);
 	if (cpu < 0 || !cpu_online(cpu))
 		return -EPROBE_DEFER;
 
 	sys_reg = etm4_cpu_supports_sysreg(cpu);
+	if (sys_reg) {
+		desc.access = (struct csdev_access){
+			.no_iomem = true,
+			.read = etm4x_sysreg_read,
+			.write = etm4x_sysreg_write,
+		};
+	} else if (base) {
+		desc.access.base = base;
+	} else {
+		dev_crit(dev, "etm4x: Unable to detect access\n");
+		return -ENODEV;
+	}
+
+
 
 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
 	if (!drvdata)
 		return -ENOMEM;
 
+	drvdata->base = base;
 	drvdata->cpu = cpu;
 	dev_set_drvdata(dev, drvdata);
 
@@ -1579,22 +1595,6 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 	if (fwnode_property_present(dev_fwnode(dev), "qcom,skip-power-up"))
 		drvdata->skip_power_up = true;
 
-	if (sys_reg) {
-		desc.access = (struct csdev_access){
-			.no_iomem = true,
-			.read = etm4x_sysreg_read,
-			.write = etm4x_sysreg_write,
-		};
-	} else {
-		/* Validity for the resource is already checked by the AMBA core */
-		base = devm_ioremap_resource(dev, res);
-		if (IS_ERR(base))
-			return PTR_ERR(base);
-
-		drvdata->base = base;
-		desc.access.base = base;
-	}
-
 	spin_lock_init(&drvdata->spinlock);
 
 	desc.name = devm_kasprintf(dev, GFP_KERNEL, "etm%d", drvdata->cpu);
@@ -1630,7 +1630,7 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 		ret = PTR_ERR(pdata);
 		goto err_arch_supported;
 	}
-	adev->dev.platform_data = pdata;
+	dev->platform_data = pdata;
 
 	desc.type = CORESIGHT_DEV_TYPE_SOURCE;
 	desc.subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_PROC;
@@ -1650,7 +1650,6 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 		goto err_arch_supported;
 	}
 
-	pm_runtime_put(&adev->dev);
 	dev_info(&drvdata->csdev->dev, "CPU%d: ETM v%d.%d initialized\n",
 		 drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
 	if (sys_reg)
@@ -1669,6 +1668,25 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 	return ret;
 }
 
+static int etm4_probe_amba(struct amba_device *adev, const struct amba_id *id)
+{
+	void __iomem *base;
+	struct device *dev = &adev->dev;
+	struct resource *res = &adev->res;
+	int ret;
+
+	/* Validity for the resource is already checked by the AMBA core */
+	base = devm_ioremap_resource(dev, res);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	ret = etm4_probe_common(dev, base);
+	if (!ret)
+		pm_runtime_put(&adev->dev);
+
+	return ret;
+}
+
 static struct amba_cs_uci_id uci_id_etm4[] = {
 	{
 		/*  ETMv4 UCI data */
@@ -1700,7 +1718,7 @@ static struct amba_driver etm4x_driver = {
 		.name   = "coresight-etm4x",
 		.suppress_bind_attrs = true,
 	},
-	.probe		= etm4_probe,
+	.probe		= etm4_probe_amba,
 	.id_table	= etm4_ids,
 };
 builtin_amba_driver(etm4x_driver);
-- 
2.24.1


WARNING: multiple messages have this Message-ID (diff)
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: coresight@lists.linaro.org,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	linux-kernel@vger.kernel.org, mathieu.poirier@linaro.org,
	mike.leach@linaro.org
Subject: [RFC PATCH 12/14] coresight: etm4x: Refactor probing routine
Date: Wed, 22 Jul 2020 18:20:38 +0100	[thread overview]
Message-ID: <20200722172040.1299289-13-suzuki.poulose@arm.com> (raw)
In-Reply-To: <20200722172040.1299289-1-suzuki.poulose@arm.com>

CoreSight ETM with system register access may not have a
memory mapped i/o access. Refactor the ETM specific probing
into a common routine to allow reusing the code for such ETMs.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
---
 drivers/hwtracing/coresight/coresight-etm4x.c | 64 ++++++++++++-------
 1 file changed, 41 insertions(+), 23 deletions(-)

diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 831206f7f306..e91af23ac419 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -1541,27 +1541,43 @@ static bool etm4_cpu_supports_sysreg(int cpu)
 	return sys_reg_support;
 }
 
-static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
+static int etm4_probe_common(struct device *dev, void __iomem *base)
 {
 	int ret, cpu;
 	bool sys_reg = false;
-	void __iomem *base;
-	struct device *dev = &adev->dev;
 	struct coresight_platform_data *pdata = NULL;
 	struct etmv4_drvdata *drvdata;
-	struct resource *res = &adev->res;
 	struct coresight_desc desc = { 0 };
 
+	cpu = coresight_get_cpu(dev);
+	if (cpu < 0)
+		return cpu;
+
 	cpu = coresight_get_cpu(dev);
 	if (cpu < 0 || !cpu_online(cpu))
 		return -EPROBE_DEFER;
 
 	sys_reg = etm4_cpu_supports_sysreg(cpu);
+	if (sys_reg) {
+		desc.access = (struct csdev_access){
+			.no_iomem = true,
+			.read = etm4x_sysreg_read,
+			.write = etm4x_sysreg_write,
+		};
+	} else if (base) {
+		desc.access.base = base;
+	} else {
+		dev_crit(dev, "etm4x: Unable to detect access\n");
+		return -ENODEV;
+	}
+
+
 
 	drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
 	if (!drvdata)
 		return -ENOMEM;
 
+	drvdata->base = base;
 	drvdata->cpu = cpu;
 	dev_set_drvdata(dev, drvdata);
 
@@ -1579,22 +1595,6 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 	if (fwnode_property_present(dev_fwnode(dev), "qcom,skip-power-up"))
 		drvdata->skip_power_up = true;
 
-	if (sys_reg) {
-		desc.access = (struct csdev_access){
-			.no_iomem = true,
-			.read = etm4x_sysreg_read,
-			.write = etm4x_sysreg_write,
-		};
-	} else {
-		/* Validity for the resource is already checked by the AMBA core */
-		base = devm_ioremap_resource(dev, res);
-		if (IS_ERR(base))
-			return PTR_ERR(base);
-
-		drvdata->base = base;
-		desc.access.base = base;
-	}
-
 	spin_lock_init(&drvdata->spinlock);
 
 	desc.name = devm_kasprintf(dev, GFP_KERNEL, "etm%d", drvdata->cpu);
@@ -1630,7 +1630,7 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 		ret = PTR_ERR(pdata);
 		goto err_arch_supported;
 	}
-	adev->dev.platform_data = pdata;
+	dev->platform_data = pdata;
 
 	desc.type = CORESIGHT_DEV_TYPE_SOURCE;
 	desc.subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_PROC;
@@ -1650,7 +1650,6 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 		goto err_arch_supported;
 	}
 
-	pm_runtime_put(&adev->dev);
 	dev_info(&drvdata->csdev->dev, "CPU%d: ETM v%d.%d initialized\n",
 		 drvdata->cpu, drvdata->arch >> 4, drvdata->arch & 0xf);
 	if (sys_reg)
@@ -1669,6 +1668,25 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
 	return ret;
 }
 
+static int etm4_probe_amba(struct amba_device *adev, const struct amba_id *id)
+{
+	void __iomem *base;
+	struct device *dev = &adev->dev;
+	struct resource *res = &adev->res;
+	int ret;
+
+	/* Validity for the resource is already checked by the AMBA core */
+	base = devm_ioremap_resource(dev, res);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	ret = etm4_probe_common(dev, base);
+	if (!ret)
+		pm_runtime_put(&adev->dev);
+
+	return ret;
+}
+
 static struct amba_cs_uci_id uci_id_etm4[] = {
 	{
 		/*  ETMv4 UCI data */
@@ -1700,7 +1718,7 @@ static struct amba_driver etm4x_driver = {
 		.name   = "coresight-etm4x",
 		.suppress_bind_attrs = true,
 	},
-	.probe		= etm4_probe,
+	.probe		= etm4_probe_amba,
 	.id_table	= etm4_ids,
 };
 builtin_amba_driver(etm4x_driver);
-- 
2.24.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2020-07-22 17:21 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-22 17:20 [RFC PATCH 00/14] coresight: Support for ETMv4.4 system instructions Suzuki K Poulose
2020-07-22 17:20 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 01/14] coresight: etm4x: Skip save/restore before device registration Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-29 18:01   ` Mathieu Poirier
2020-07-29 18:01     ` Mathieu Poirier
2020-07-30 14:45     ` Suzuki K Poulose
2020-07-30 14:45       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 02/14] coresight: Introduce device access abstraction Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-24  4:40   ` kernel test robot
2020-07-29 19:56   ` Mathieu Poirier
2020-07-29 19:56     ` Mathieu Poirier
2020-07-30 14:58     ` Suzuki K Poulose
2020-07-30 14:58       ` Suzuki K Poulose
2020-07-29 20:56   ` kernel test robot
2020-07-22 17:20 ` [RFC PATCH 03/14] coresight: tpiu: Use coresight " Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-29 21:01   ` Mathieu Poirier
2020-07-29 21:01     ` Mathieu Poirier
2020-07-31 11:36     ` Suzuki K Poulose
2020-07-31 11:36       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 04/14] coresight: etm4x: Free up argument of etm4_init_arch_data Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-30 17:31   ` Mathieu Poirier
2020-07-30 17:31     ` Mathieu Poirier
2020-07-31  9:39     ` Suzuki K Poulose
2020-07-31  9:39       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 05/14] coresight: Convert coresight_timeout to use access abstraction Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-30 18:00   ` Mathieu Poirier
2020-07-30 18:00     ` Mathieu Poirier
2020-07-22 17:20 ` [RFC PATCH 06/14] coresight: Convert claim and lock operations to use access wrappers Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-27  6:04   ` kernel test robot
2020-07-27 17:56   ` kernel test robot
2020-07-28  9:47     ` Suzuki K Poulose
2020-07-30 19:54   ` Mathieu Poirier
2020-07-30 19:54     ` Mathieu Poirier
2020-07-31  9:46     ` Suzuki K Poulose
2020-07-31  9:46       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 07/14] coresight: etm4x: Always read the registers on the host CPU Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-30 19:56   ` Mathieu Poirier
2020-07-30 19:56     ` Mathieu Poirier
2020-07-22 17:20 ` [RFC PATCH 08/14] coresight: etm4x: Convert all register accesses Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-30 20:20   ` Mathieu Poirier
2020-07-30 20:20     ` Mathieu Poirier
2020-07-31  9:49     ` Suzuki K Poulose
2020-07-31  9:49       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 09/14] coresight: etm4x: Add sysreg access helpers Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-30 21:41   ` Mathieu Poirier
2020-07-30 21:41     ` Mathieu Poirier
2020-07-31  9:51     ` Suzuki K Poulose
2020-07-31  9:51       ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 10/14] coresight: etm4x: Define DEVARCH register fields Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 11/14] coresight: etm4x: Detect system register access support Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-22 17:20 ` Suzuki K Poulose [this message]
2020-07-22 17:20   ` [RFC PATCH 12/14] coresight: etm4x: Refactor probing routine Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 13/14] coresight: etm4x: Add support for sysreg only devices Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 14/14] dts: bindings: coresight: ETMv4.4 system register access only units Suzuki K Poulose
2020-07-22 17:20   ` Suzuki K Poulose
2020-07-23 17:27   ` Rob Herring
2020-07-23 17:27     ` Rob Herring
2020-07-29 17:20   ` Mathieu Poirier
2020-07-29 17:20     ` Mathieu Poirier
2020-07-30 16:38     ` Suzuki K Poulose
2020-07-30 16:38       ` Suzuki K Poulose
2020-08-10 20:14       ` Mathieu Poirier
2020-08-10 20:14         ` Mathieu Poirier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200722172040.1299289-13-suzuki.poulose@arm.com \
    --to=suzuki.poulose@arm.com \
    --cc=coresight@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=mike.leach@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.