|
@@ -46,8 +46,11 @@
|
|
|
#define TPIU_ITATBCTR0 0xef8
|
|
|
|
|
|
/** register definition **/
|
|
|
+/* FFSR - 0x300 */
|
|
|
+#define FFSR_FT_STOPPED BIT(1)
|
|
|
/* FFCR - 0x304 */
|
|
|
#define FFCR_FON_MAN BIT(6)
|
|
|
+#define FFCR_STOP_FI BIT(12)
|
|
|
|
|
|
/**
|
|
|
* @base: memory mapped base address for this component.
|
|
@@ -85,10 +88,14 @@ static void tpiu_disable_hw(struct tpiu_drvdata *drvdata)
|
|
|
{
|
|
|
CS_UNLOCK(drvdata->base);
|
|
|
|
|
|
- /* Clear formatter controle reg. */
|
|
|
- writel_relaxed(0x0, drvdata->base + TPIU_FFCR);
|
|
|
+ /* Clear formatter and stop on flush */
|
|
|
+ writel_relaxed(FFCR_STOP_FI, drvdata->base + TPIU_FFCR);
|
|
|
/* Generate manual flush */
|
|
|
- writel_relaxed(FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
|
|
|
+ writel_relaxed(FFCR_STOP_FI | FFCR_FON_MAN, drvdata->base + TPIU_FFCR);
|
|
|
+ /* Wait for flush to complete */
|
|
|
+ coresight_timeout(drvdata->base, TPIU_FFCR, FFCR_FON_MAN, 0);
|
|
|
+ /* Wait for formatter to stop */
|
|
|
+ coresight_timeout(drvdata->base, TPIU_FFSR, FFSR_FT_STOPPED, 1);
|
|
|
|
|
|
CS_LOCK(drvdata->base);
|
|
|
}
|