io.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /**
  3. * io.h - DesignWare USB3 DRD IO Header
  4. *
  5. * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
  6. *
  7. * Authors: Felipe Balbi <balbi@ti.com>,
  8. * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
  9. *
  10. * Taken from Linux Kernel v3.19-rc1 (drivers/usb/dwc3/io.h) and ported
  11. * to uboot.
  12. *
  13. * commit 2c4cbe6e5a : usb: dwc3: add tracepoints to aid debugging
  14. *
  15. */
  16. #ifndef __DRIVERS_USB_DWC3_IO_H
  17. #define __DRIVERS_USB_DWC3_IO_H
  18. #include <asm/io.h>
  19. #define CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE
  20. static inline u32 dwc3_readl(void __iomem *base, u32 offset)
  21. {
  22. unsigned long offs = offset - DWC3_GLOBALS_REGS_START;
  23. u32 value;
  24. /*
  25. * We requested the mem region starting from the Globals address
  26. * space, see dwc3_probe in core.c.
  27. * However, the offsets are given starting from xHCI address space.
  28. */
  29. value = readl(base + offs);
  30. return value;
  31. }
  32. static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value)
  33. {
  34. unsigned long offs = offset - DWC3_GLOBALS_REGS_START;
  35. /*
  36. * We requested the mem region starting from the Globals address
  37. * space, see dwc3_probe in core.c.
  38. * However, the offsets are given starting from xHCI address space.
  39. */
  40. writel(value, base + offs);
  41. }
  42. static inline void dwc3_flush_cache(uintptr_t addr, int length)
  43. {
  44. flush_dcache_range(addr, addr + ROUND(length, CACHELINE_SIZE));
  45. }
  46. #endif /* __DRIVERS_USB_DWC3_IO_H */