2 * OMAP EHCI port support
3 * Based on LINUX KERNEL
4 * drivers/usb/host/ehci-omap.c and drivers/mfd/omap-usb-host.c
6 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com*
7 * Author: Govindraj R <govindraj.raja@ti.com>
9 * SPDX-License-Identifier: GPL-2.0
12 #ifndef _OMAP_COMMON_EHCI_H_
13 #define _OMAP_COMMON_EHCI_H_
15 enum usbhs_omap_port_mode
{
16 OMAP_USBHS_PORT_MODE_UNUSED
,
17 OMAP_EHCI_PORT_MODE_PHY
,
18 OMAP_EHCI_PORT_MODE_TLL
,
19 OMAP_EHCI_PORT_MODE_HSIC
,
22 #ifdef CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS
23 #define OMAP_HS_USB_PORTS CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS
25 #define OMAP_HS_USB_PORTS 3
28 #define is_ehci_phy_mode(x) ((x) == OMAP_EHCI_PORT_MODE_PHY)
29 #define is_ehci_tll_mode(x) ((x) == OMAP_EHCI_PORT_MODE_TLL)
30 #define is_ehci_hsic_mode(x) ((x) == OMAP_EHCI_PORT_MODE_HSIC)
32 /* Values of UHH_REVISION - Note: these are not given in the TRM */
33 #define OMAP_USBHS_REV1 0x00000010 /* OMAP3 */
34 #define OMAP_USBHS_REV2 0x50700100 /* OMAP4 */
35 #define OMAP_USBHS_REV2_1 0x50700101 /* OMAP5 */
37 /* UHH Register Set */
38 #define OMAP_UHH_HOSTCONFIG_INCR4_BURST_EN (1 << 2)
39 #define OMAP_UHH_HOSTCONFIG_INCR8_BURST_EN (1 << 3)
40 #define OMAP_UHH_HOSTCONFIG_INCR16_BURST_EN (1 << 4)
41 #define OMAP_UHH_HOSTCONFIG_INCRX_ALIGN_EN (1 << 5)
43 #define OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS 1
44 #define OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS (1 << 11)
45 #define OMAP_UHH_HOSTCONFIG_ULPI_P3_BYPASS (1 << 12)
46 #define OMAP4_UHH_HOSTCONFIG_APP_START_CLK (1 << 31)
48 #define OMAP_P1_MODE_CLEAR (3 << 16)
49 #define OMAP_P1_MODE_TLL (1 << 16)
50 #define OMAP_P1_MODE_HSIC (3 << 16)
51 #define OMAP_P2_MODE_CLEAR (3 << 18)
52 #define OMAP_P2_MODE_TLL (1 << 18)
53 #define OMAP_P2_MODE_HSIC (3 << 18)
54 #define OMAP_P3_MODE_CLEAR (3 << 20)
55 #define OMAP_P3_MODE_HSIC (3 << 20)
57 /* EHCI Register Set */
58 #define EHCI_INSNREG04_DISABLE_UNSUSPEND (1 << 5)
59 #define EHCI_INSNREG05_ULPI_CONTROL_SHIFT 31
60 #define EHCI_INSNREG05_ULPI_PORTSEL_SHIFT 24
61 #define EHCI_INSNREG05_ULPI_OPSEL_SHIFT 22
62 #define EHCI_INSNREG05_ULPI_REGADD_SHIFT 16
64 #define OMAP_REV1_TLL_CHANNEL_COUNT 3
65 #define OMAP_REV2_TLL_CHANNEL_COUNT 2
67 /* TLL Register Set */
68 #define OMAP_TLL_CHANNEL_CONF(num) (0x004 * num)
69 #define OMAP_TLL_CHANNEL_CONF_DRVVBUS (1 << 16)
70 #define OMAP_TLL_CHANNEL_CONF_CHRGVBUS (1 << 15)
71 #define OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF (1 << 11)
72 #define OMAP_TLL_CHANNEL_CONF_CHANMODE_TRANSPARENT_UTMI (2 << 1)
73 #define OMAP_TLL_CHANNEL_CONF_CHANEN 1
75 struct omap_usbhs_board_data
{
76 enum usbhs_omap_port_mode port_mode
[OMAP_HS_USB_PORTS
];
81 u32 hwinfo
; /* 0x04 */
88 u32 shared_conf
; /* 0x30 */
90 u32 channel_conf
; /* 0x40 */
95 u32 hwinfo
; /* 0x04 */
100 u32 hostconfig
; /* 0x40 */
101 u32 debugcsr
; /* 0x44 */
105 u32 hccapbase
; /* 0x00 */
106 u32 hcsparams
; /* 0x04 */
107 u32 hccparams
; /* 0x08 */
109 u32 usbcmd
; /* 0x10 */
110 u32 usbsts
; /* 0x14 */
111 u32 usbintr
; /* 0x18 */
112 u32 frindex
; /* 0x1c */
113 u32 ctrldssegment
; /* 0x20 */
114 u32 periodiclistbase
; /* 0x24 */
115 u32 asysnclistaddr
; /* 0x28 */
117 u32 configflag
; /* 0x50 */
118 u32 portsc_i
; /* 0x54 */
120 u32 insreg00
; /* 0x90 */
121 u32 insreg01
; /* 0x94 */
122 u32 insreg02
; /* 0x98 */
123 u32 insreg03
; /* 0x9c */
124 u32 insreg04
; /* 0xa0 */
125 u32 insreg05_utmi_ulpi
; /* 0xa4 */
126 u32 insreg06
; /* 0xa8 */
127 u32 insreg07
; /* 0xac */
128 u32 insreg08
; /* 0xb0 */
132 * FIXME: forward declaration of this structs needed because omap got the
133 * ehci implementation backwards. move out ehci_hcd_x from board files
138 int omap_ehci_hcd_init(int index
, struct omap_usbhs_board_data
*usbhs_pdata
,
139 struct ehci_hccr
**hccr
, struct ehci_hcor
**hcor
);
140 int omap_ehci_hcd_stop(void);
142 #endif /* _OMAP_COMMON_EHCI_H_ */