static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata) { CS_UNLOCK(drvdata->base); tmc_flush_and_stop(drvdata); tmc_disable_hw(drvdata); coresight_disclaim_device_unlocked(drvdata->base); CS_LOCK(drvdata->base); }
static void etm_disable_perf(struct coresight_device *csdev) { struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) return; CS_UNLOCK(drvdata->base); /* Setting the prog bit disables tracing immediately */ etm_set_prog(drvdata); /* * There is no way to know when the tracer will be used again so * power down the tracer. */ etm_set_pwrdwn(drvdata); coresight_disclaim_device_unlocked(drvdata->base); CS_LOCK(drvdata->base); }
static void etm_disable_hw(void *info) { int i; struct etm_drvdata *drvdata = info; struct etm_config *config = &drvdata->config; CS_UNLOCK(drvdata->base); etm_set_prog(drvdata); /* Read back sequencer and counters for post trace analysis */ config->seq_curr_state = (etm_readl(drvdata, ETMSQR) & ETM_SQR_MASK); for (i = 0; i < drvdata->nr_cntr; i++) config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i)); etm_set_pwrdwn(drvdata); coresight_disclaim_device_unlocked(drvdata->base); CS_LOCK(drvdata->base); dev_dbg(&drvdata->csdev->dev, "cpu: %d disable smp call done\n", drvdata->cpu); }
void coresight_disclaim_device(void __iomem *base) { CS_UNLOCK(base); coresight_disclaim_device_unlocked(base); CS_LOCK(base); }