On 11/22/23 22:34, Sudeep Holla wrote: > 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. Dropped. > 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. >