Thread (54 messages) 54 messages, 2 authors, 2020-09-30

Re: [PATCH 18/19] coresight: etm4x: Add support for sysreg only devices

From: Mike Leach <hidden>
Date: 2020-09-18 15:42:57

Hi Suzuki,

On Fri, 11 Sep 2020 at 09:41, Suzuki K Poulose [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Add support for devices with system instruction access only.
They don't have a memory mapped interface and thus are not
AMBA devices.

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <redacted>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
---
 drivers/hwtracing/coresight/coresight-etm4x.c | 42 ++++++++++++++++++-
 1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 7d5f942c2108..212713ffa37e 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -26,6 +26,7 @@
 #include <linux/seq_file.h>
 #include <linux/uaccess.h>
 #include <linux/perf_event.h>
+#include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/property.h>
 #include <asm/sections.h>
@@ -1712,6 +1713,20 @@ static int etm4_probe_amba(struct amba_device *adev, const struct amba_id *id)
        return ret;
 }

+static int etm4_probe_platform_dev(struct platform_device *pdev)
+{
+       int ret;
+
+       pm_runtime_get_noresume(&pdev->dev);
+       pm_runtime_set_active(&pdev->dev);
+       pm_runtime_enable(&pdev->dev);
+
Right about here is where I would expect the sysreg access to
TRCDEVARCH etc, to determine if this is an ETM device that can be
supported by the driver.
This matches approximately the similar ID table checks that the AMBA
driver did to ensure a valid device match.
This logically separates "is this a device we support" from "what
features does this supported device have"
quoted hunk ↗ jump to hunk
+       ret = etm4_probe(&pdev->dev, NULL);
+
+       pm_runtime_put(&pdev->dev);
+       return ret;
+}
+
 static struct amba_cs_uci_id uci_id_etm4[] = {
        {
                /*  ETMv4 UCI data */
@@ -1749,6 +1764,20 @@ static struct amba_driver etm4x_amba_driver = {
        .id_table       = etm4_ids,
 };

+static const struct of_device_id etm4_4_match[] = {
+       { .compatible   = "arm,coresight-etm-v4.4" },
+       {}
+};
+
+static struct platform_driver etm4_platform_driver = {
+       .probe          = etm4_probe_platform_dev,
+       .driver                 = {
+               .name                   = "coresight-etm4x",
+               .of_match_table         = etm4_4_match,
+               .suppress_bind_attrs    = true,
+       },
+};
+
 static int __init etm4x_init(void)
 {
        int ret;
@@ -1761,10 +1790,19 @@ static int __init etm4x_init(void)

        ret = amba_driver_register(&etm4x_amba_driver);
        if (ret) {
-               pr_err("Error registering etm4x driver\n");
-               etm4_pm_clear();
+               pr_err("Error registering etm4x AMBA driver\n");
+               goto clear_pm;
        }

+       ret = platform_driver_register(&etm4_platform_driver);
+       if (!ret)
+               return 0;
+
+       pr_err("Error registering etm4x platform driver\n");
+       amba_driver_unregister(&etm4x_amba_driver);
+
+clear_pm:
+       etm4_pm_clear();
        return ret;
 }
 device_initcall(etm4x_init);
--
2.24.1
Regards


Mike

--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help