]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
coresight: Refactor driver data allocation
authorLeo Yan <leo.yan@arm.com>
Thu, 31 Jul 2025 12:23:44 +0000 (13:23 +0100)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Tue, 23 Sep 2025 13:14:13 +0000 (14:14 +0100)
The driver data no longer needs to be allocated separately in the static
and dynamic probes. Moved the allocation into the low-level functions to
avoid code duplication.

Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
Tested-by: James Clark <james.clark@linaro.org>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20250731-arm_cs_fix_clock_v4-v6-8-1dfe10bb3f6f@arm.com
drivers/hwtracing/coresight/coresight-catu.c
drivers/hwtracing/coresight/coresight-cpu-debug.c
drivers/hwtracing/coresight/coresight-tmc-core.c

index 0f476a0cbd740c233d039c5c411ca192681e2023..a3ccb7034ae14d7339bc2549bccadf11e28c45e2 100644 (file)
@@ -515,11 +515,17 @@ static int __catu_probe(struct device *dev, struct resource *res)
 {
        int ret = 0;
        u32 dma_mask;
-       struct catu_drvdata *drvdata = dev_get_drvdata(dev);
+       struct catu_drvdata *drvdata;
        struct coresight_desc catu_desc;
        struct coresight_platform_data *pdata = NULL;
        void __iomem *base;
 
+       drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
+       if (!drvdata)
+               return -ENOMEM;
+
+       dev_set_drvdata(dev, drvdata);
+
        ret = coresight_get_enable_clocks(dev, &drvdata->pclk, &drvdata->atclk);
        if (ret)
                return ret;
@@ -580,14 +586,8 @@ out:
 
 static int catu_probe(struct amba_device *adev, const struct amba_id *id)
 {
-       struct catu_drvdata *drvdata;
        int ret;
 
-       drvdata = devm_kzalloc(&adev->dev, sizeof(*drvdata), GFP_KERNEL);
-       if (!drvdata)
-               return -ENOMEM;
-
-       amba_set_drvdata(adev, drvdata);
        ret = __catu_probe(&adev->dev, &adev->res);
        if (!ret)
                pm_runtime_put(&adev->dev);
@@ -627,18 +627,12 @@ static struct amba_driver catu_driver = {
 static int catu_platform_probe(struct platform_device *pdev)
 {
        struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       struct catu_drvdata *drvdata;
        int ret = 0;
 
-       drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
-       if (!drvdata)
-               return -ENOMEM;
-
        pm_runtime_get_noresume(&pdev->dev);
        pm_runtime_set_active(&pdev->dev);
        pm_runtime_enable(&pdev->dev);
 
-       dev_set_drvdata(&pdev->dev, drvdata);
        ret = __catu_probe(&pdev->dev, res);
        pm_runtime_put(&pdev->dev);
        if (ret)
index 5f6db2fb95d4623a0bab08828ae00442870abd7d..3edfb5d3d02056afcaab4da575d1101c68aeac80 100644 (file)
@@ -562,10 +562,16 @@ static void debug_func_exit(void)
 
 static int __debug_probe(struct device *dev, struct resource *res)
 {
-       struct debug_drvdata *drvdata = dev_get_drvdata(dev);
+       struct debug_drvdata *drvdata;
        void __iomem *base;
        int ret;
 
+       drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
+       if (!drvdata)
+               return -ENOMEM;
+
+       dev_set_drvdata(dev, drvdata);
+
        ret = coresight_get_enable_clocks(dev, &drvdata->pclk, NULL);
        if (ret)
                return ret;
@@ -629,13 +635,6 @@ err:
 
 static int debug_probe(struct amba_device *adev, const struct amba_id *id)
 {
-       struct debug_drvdata *drvdata;
-
-       drvdata = devm_kzalloc(&adev->dev, sizeof(*drvdata), GFP_KERNEL);
-       if (!drvdata)
-               return -ENOMEM;
-
-       amba_set_drvdata(adev, drvdata);
        return __debug_probe(&adev->dev, &adev->res);
 }
 
@@ -694,14 +693,8 @@ static struct amba_driver debug_driver = {
 static int debug_platform_probe(struct platform_device *pdev)
 {
        struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       struct debug_drvdata *drvdata;
        int ret = 0;
 
-       drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL);
-       if (!drvdata)
-               return -ENOMEM;
-
-       dev_set_drvdata(&pdev->dev, drvdata);
        pm_runtime_get_noresume(&pdev->dev);
        pm_runtime_set_active(&pdev->dev);
        pm_runtime_enable(&pdev->dev);
index 25c987e2d114881a4e4d8f6ed1791d183a64da5a..36599c431be6203e871fdcb8de569cc6701c52bb 100644 (file)
@@ -775,10 +775,16 @@ static int __tmc_probe(struct device *dev, struct resource *res)
        u32 devid;
        void __iomem *base;
        struct coresight_platform_data *pdata = NULL;
-       struct tmc_drvdata *drvdata = dev_get_drvdata(dev);
+       struct tmc_drvdata *drvdata;
        struct coresight_desc desc = { 0 };
        struct coresight_dev_list *dev_list = NULL;
 
+       drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
+       if (!drvdata)
+               return -ENOMEM;
+
+       dev_set_drvdata(dev, drvdata);
+
        ret = coresight_get_enable_clocks(dev, &drvdata->pclk, &drvdata->atclk);
        if (ret)
                return ret;
@@ -888,14 +894,8 @@ out:
 
 static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
 {
-       struct tmc_drvdata *drvdata;
        int ret;
 
-       drvdata = devm_kzalloc(&adev->dev, sizeof(*drvdata), GFP_KERNEL);
-       if (!drvdata)
-               return -ENOMEM;
-
-       amba_set_drvdata(adev, drvdata);
        ret = __tmc_probe(&adev->dev, &adev->res);
        if (!ret)
                pm_runtime_put(&adev->dev);
@@ -972,14 +972,8 @@ static struct 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;
-
-       dev_set_drvdata(&pdev->dev, drvdata);
        pm_runtime_get_noresume(&pdev->dev);
        pm_runtime_set_active(&pdev->dev);
        pm_runtime_enable(&pdev->dev);