forked from mirrors/linux
		
	coresight: Fix disabling of CoreSight TPIU
The CoreSight TPIU should be disabled when tracing to other sinks to allow them to operate at full bandwidth. This patch fixes tpiu_disable_hw() to correctly disable the TPIU by configuring the TPIU to stop on flush, initiating a manual flush, waiting for the flush to complete and then waits for the TPIU to indicate it has stopped. Signed-off-by: Robert Walker <robert.walker@arm.com> Tested-by: Mike Leach <mike.leach@linaro.org> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									3703221944
								
							
						
					
					
						commit
						11595db8e1
					
				
					 1 changed files with 10 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue