 2c4cbe6e5a
			
		
	
	
	2c4cbe6e5a
	
	
	
		
			
			When we're debugging hard-to-reproduce and time-sensitive use cases, printk() poses too much overhead. That's when the kernel's tracing infrastructure comes into play. This patch implements a few initial tracepoints for the dwc3 driver. More traces can be added as necessary in order to ease the task of debugging dwc3. Reviewed-by: Paul Zimmerman <paulz@synopsys.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * io.h - DesignWare USB3 DRD IO Header
 | |
|  *
 | |
|  * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
 | |
|  *
 | |
|  * Authors: Felipe Balbi <balbi@ti.com>,
 | |
|  *	    Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2  of
 | |
|  * the License as published by the Free Software Foundation.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  */
 | |
| 
 | |
| #ifndef __DRIVERS_USB_DWC3_IO_H
 | |
| #define __DRIVERS_USB_DWC3_IO_H
 | |
| 
 | |
| #include <linux/io.h>
 | |
| #include "trace.h"
 | |
| #include "debug.h"
 | |
| #include "core.h"
 | |
| 
 | |
| static inline u32 dwc3_readl(void __iomem *base, u32 offset)
 | |
| {
 | |
| 	u32 offs = offset - DWC3_GLOBALS_REGS_START;
 | |
| 	u32 value;
 | |
| 
 | |
| 	/*
 | |
| 	 * We requested the mem region starting from the Globals address
 | |
| 	 * space, see dwc3_probe in core.c.
 | |
| 	 * However, the offsets are given starting from xHCI address space.
 | |
| 	 */
 | |
| 	value = readl(base + offs);
 | |
| 
 | |
| 	/*
 | |
| 	 * When tracing we want to make it easy to find the correct address on
 | |
| 	 * documentation, so we revert it back to the proper addresses, the
 | |
| 	 * same way they are described on SNPS documentation
 | |
| 	 */
 | |
| 	dwc3_trace(trace_dwc3_readl, "addr %p value %08x",
 | |
| 			base - DWC3_GLOBALS_REGS_START + offset, value);
 | |
| 
 | |
| 	return value;
 | |
| }
 | |
| 
 | |
| static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value)
 | |
| {
 | |
| 	u32 offs = offset - DWC3_GLOBALS_REGS_START;
 | |
| 
 | |
| 	/*
 | |
| 	 * We requested the mem region starting from the Globals address
 | |
| 	 * space, see dwc3_probe in core.c.
 | |
| 	 * However, the offsets are given starting from xHCI address space.
 | |
| 	 */
 | |
| 	writel(value, base + offs);
 | |
| 
 | |
| 	/*
 | |
| 	 * When tracing we want to make it easy to find the correct address on
 | |
| 	 * documentation, so we revert it back to the proper addresses, the
 | |
| 	 * same way they are described on SNPS documentation
 | |
| 	 */
 | |
| 	dwc3_trace(trace_dwc3_writel, "addr %p value %08x",
 | |
| 			base - DWC3_GLOBALS_REGS_START + offset, value);
 | |
| }
 | |
| 
 | |
| #endif /* __DRIVERS_USB_DWC3_IO_H */
 |