coresight: tmc: Cleanup power management
[linux-2.6-microblaze.git] / drivers / hwtracing / coresight / coresight-tmc.c
index 2a02da3..c6a5462 100644 (file)
@@ -340,6 +340,8 @@ static inline bool tmc_etr_can_use_sg(struct tmc_drvdata *drvdata)
 static int tmc_etr_setup_caps(struct tmc_drvdata *drvdata,
                             u32 devid, void *dev_caps)
 {
+       int rc;
+
        u32 dma_mask = 0;
 
        /* Set the unadvertised capabilities */
@@ -369,7 +371,10 @@ static int tmc_etr_setup_caps(struct tmc_drvdata *drvdata,
                dma_mask = 40;
        }
 
-       return dma_set_mask_and_coherent(drvdata->dev, DMA_BIT_MASK(dma_mask));
+       rc = dma_set_mask_and_coherent(drvdata->dev, DMA_BIT_MASK(dma_mask));
+       if (rc)
+               dev_err(drvdata->dev, "Failed to setup DMA mask: %d\n", rc);
+       return rc;
 }
 
 static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
@@ -427,8 +432,6 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
                drvdata->size = readl_relaxed(drvdata->base + TMC_RSZ) * 4;
        }
 
-       pm_runtime_put(&adev->dev);
-
        desc.pdata = pdata;
        desc.dev = dev;
        desc.groups = coresight_tmc_groups;
@@ -471,6 +474,8 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
        ret = misc_register(&drvdata->miscdev);
        if (ret)
                coresight_unregister(drvdata->csdev);
+       else
+               pm_runtime_put(&adev->dev);
 out:
        return ret;
 }