On Fri, Oct 27, 2023 at 12:59:41PM +0530, Anshuman Khandual wrote: > Add support for the tmc devices in the platform driver, which can then be > used on ACPI based platforms. This change would now allow runtime power > management for ACPI based systems. The driver would try to enable the APB > clock if available. > > Cc: Lorenzo Pieralisi <lpieralisi@xxxxxxxxxx> > Cc: Sudeep Holla <sudeep.holla@xxxxxxx> > Cc: Suzuki K Poulose <suzuki.poulose@xxxxxxx> > Cc: Mike Leach <mike.leach@xxxxxxxxxx> > Cc: James Clark <james.clark@xxxxxxx> > Cc: linux-acpi@xxxxxxxxxxxxxxx > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: coresight@xxxxxxxxxxxxxxxx > Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> > --- > drivers/acpi/arm64/amba.c | 2 - > .../hwtracing/coresight/coresight-tmc-core.c | 127 +++++++++++++++--- > drivers/hwtracing/coresight/coresight-tmc.h | 1 + > 3 files changed, 113 insertions(+), 17 deletions(-) [...] > diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c > index 7ec5365e2b64..618bc0b7a1a5 100644 > --- a/drivers/hwtracing/coresight/coresight-tmc-core.c > +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c [...] > @@ -573,9 +579,9 @@ static void tmc_shutdown(struct amba_device *adev) > spin_unlock_irqrestore(&drvdata->spinlock, flags); > } > > -static void tmc_remove(struct amba_device *adev) > +static void __tmc_remove(struct device *dev) > { > - struct tmc_drvdata *drvdata = dev_get_drvdata(&adev->dev); > + struct tmc_drvdata *drvdata = dev_get_drvdata(dev); > > /* > * Since misc_open() holds a refcount on the f_ops, which is > @@ -586,6 +592,11 @@ static void tmc_remove(struct amba_device *adev) > coresight_unregister(drvdata->csdev); > } > > +static void tmc_remove(struct amba_device *adev) > +{ > + __tmc_remove(&adev->dev); > +} > + > static const struct amba_id tmc_ids[] = { > CS_AMBA_ID(0x000bb961), > /* Coresight SoC 600 TMC-ETR/ETS */ > @@ -613,6 +624,92 @@ static struct amba_driver tmc_driver = { > > module_amba_driver(tmc_driver); > > +static int tmc_platform_probe(struct platform_device *pdev) > +{ > + struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + struct tmc_drvdata *drvdata; > + int ret = 0; > + > + drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); > + if (!drvdata) > + return -ENOMEM; > + > + drvdata->pclk = coresight_get_enable_apb_pclk(&pdev->dev); > + if (IS_ERR(drvdata->pclk)) > + return -ENODEV; > + --->8 > + if (res) { > + drvdata->base = devm_ioremap_resource(&pdev->dev, res); > + if (IS_ERR(drvdata->base)) { > + clk_put(drvdata->pclk); > + return PTR_ERR(drvdata->base); > + } > + } > + --- You need drop the above hunk as _tmc_probe() already takes care of that. This is the root cause for the issue I reported in the other thread. Also sorry for the confusion, I had to refer to coresight-tmc-core.c and post the patch to unify module_init/exit but completely mixed up the file/patch and referred coresight-tpiu-core.c instead as that patch was dealing with it. -- Regards, Sudeep