xref: /linux/drivers/usb/dwc3/io.h (revision 23c48a124b469cee2eb0c75e6d22d366d1caa118)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * io.h - DesignWare USB3 DRD IO Header
4  *
5  * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com
6  *
7  * Authors: Felipe Balbi <balbi@ti.com>,
8  *	    Sebastian Andrzej Siewior <bigeasy@linutronix.de>
9  */
10 
11 #ifndef __DRIVERS_USB_DWC3_IO_H
12 #define __DRIVERS_USB_DWC3_IO_H
13 
14 #include <linux/io.h>
15 #include "trace.h"
16 #include "debug.h"
17 #include "core.h"
18 
19 static inline u32 dwc3_readl(void __iomem *base, u32 offset)
20 {
21 	u32 value;
22 
23 	/*
24 	 * We requested the mem region starting from the Globals address
25 	 * space, see dwc3_probe in core.c.
26 	 * However, the offsets are given starting from xHCI address space.
27 	 */
28 	value = readl(base + offset - DWC3_GLOBALS_REGS_START);
29 
30 	/*
31 	 * When tracing we want to make it easy to find the correct address on
32 	 * documentation, so we revert it back to the proper addresses, the
33 	 * same way they are described on SNPS documentation
34 	 */
35 	trace_dwc3_readl(base - DWC3_GLOBALS_REGS_START, offset, value);
36 
37 	return value;
38 }
39 
40 static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value)
41 {
42 	/*
43 	 * We requested the mem region starting from the Globals address
44 	 * space, see dwc3_probe in core.c.
45 	 * However, the offsets are given starting from xHCI address space.
46 	 */
47 	writel(value, base + offset - DWC3_GLOBALS_REGS_START);
48 
49 	/*
50 	 * When tracing we want to make it easy to find the correct address on
51 	 * documentation, so we revert it back to the proper addresses, the
52 	 * same way they are described on SNPS documentation
53 	 */
54 	trace_dwc3_writel(base - DWC3_GLOBALS_REGS_START, offset, value);
55 }
56 
57 #endif /* __DRIVERS_USB_DWC3_IO_H */
58