On 01/12/2023 06:20, 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.
[...]
-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;
- dev_set_drvdata(&pdev->dev, drvdata);
- pm_runtime_get_noresume(&pdev->dev);
- pm_runtime_set_active(&pdev->dev);
- pm_runtime_enable(&pdev->dev);
- ret = __tmc_probe(&pdev->dev, res, NULL);
- if (ret) {
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
- }
I'm not sure if these pm_runtime()s are right because there is already a put inside of __tmc_probe() if it fails. If you unload and then reload all the coresight modules with these patches you get these errors which are new:
coresight-tpiu-platform ARMHC979:00: Unbalanced pm_runtime_enable! CSCFG registered etm0 coresight etm0: CPU0: etm v4.2 initialized CSCFG registered etm1 coresight etm1: CPU1: etm v4.2 initialized CSCFG registered etm2 coresight etm2: CPU2: etm v4.2 initialized CSCFG registered etm3 coresight etm3: CPU3: etm v4.2 initialized coresight-tmc-platform ARMHC97C:00: Unbalanced pm_runtime_enable! coresight-tmc-platform ARMHC97C:01: Unbalanced pm_runtime_enable! coresight-tmc-platform ARMHC97C:02: Unbalanced pm_runtime_enable! coresight-tmc-platform ARMHC97C:03: Unbalanced pm_runtime_enable!
It might be worth testing all of these pm_runtime()s, including the error case ones, because loading and unloading the modules doesn't even include the error scenarios, so there are probably more bad ones in there too.