|
@@ -36,6 +36,11 @@ static void __tmc_etb_enable_hw(struct tmc_drvdata *drvdata)
|
|
|
|
|
|
static int tmc_etb_enable_hw(struct tmc_drvdata *drvdata)
|
|
|
{
|
|
|
+ int rc = coresight_claim_device(drvdata->base);
|
|
|
+
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+
|
|
|
__tmc_etb_enable_hw(drvdata);
|
|
|
return 0;
|
|
|
}
|
|
@@ -63,7 +68,7 @@ static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
|
|
|
+static void __tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
|
|
|
{
|
|
|
CS_UNLOCK(drvdata->base);
|
|
|
|
|
@@ -79,6 +84,12 @@ static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
|
|
|
CS_LOCK(drvdata->base);
|
|
|
}
|
|
|
|
|
|
+static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
|
|
|
+{
|
|
|
+ coresight_disclaim_device(drvdata);
|
|
|
+ __tmc_etb_disable_hw(drvdata);
|
|
|
+}
|
|
|
+
|
|
|
static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
|
|
|
{
|
|
|
CS_UNLOCK(drvdata->base);
|
|
@@ -97,6 +108,11 @@ static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
|
|
|
|
|
|
static int tmc_etf_enable_hw(struct tmc_drvdata *drvdata)
|
|
|
{
|
|
|
+ int rc = coresight_claim_device(drvdata->base);
|
|
|
+
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+
|
|
|
__tmc_etf_enable_hw(drvdata);
|
|
|
return 0;
|
|
|
}
|
|
@@ -107,7 +123,7 @@ static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata)
|
|
|
|
|
|
tmc_flush_and_stop(drvdata);
|
|
|
tmc_disable_hw(drvdata);
|
|
|
-
|
|
|
+ coresight_disclaim_device_unlocked(drvdata->base);
|
|
|
CS_LOCK(drvdata->base);
|
|
|
}
|
|
|
|
|
@@ -553,7 +569,7 @@ int tmc_read_prepare_etb(struct tmc_drvdata *drvdata)
|
|
|
|
|
|
/* Disable the TMC if need be */
|
|
|
if (drvdata->mode == CS_MODE_SYSFS)
|
|
|
- tmc_etb_disable_hw(drvdata);
|
|
|
+ __tmc_etb_disable_hw(drvdata);
|
|
|
|
|
|
drvdata->reading = true;
|
|
|
out:
|