uboot/arch/arm/include/asm/ehci-omap.h
<<
>>
Prefs
   1/*
   2 * OMAP EHCI port support
   3 * Based on LINUX KERNEL
   4 * drivers/usb/host/ehci-omap.c and drivers/mfd/omap-usb-host.c
   5 *
   6 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com*
   7 * Author: Govindraj R <govindraj.raja@ti.com>
   8 *
   9 * This program is free software: you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License version 2  of
  11 * the License as published by the Free Software Foundation.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
  20 */
  21
  22#ifndef _OMAP_COMMON_EHCI_H_
  23#define _OMAP_COMMON_EHCI_H_
  24
  25enum usbhs_omap_port_mode {
  26        OMAP_USBHS_PORT_MODE_UNUSED,
  27        OMAP_EHCI_PORT_MODE_PHY,
  28        OMAP_EHCI_PORT_MODE_TLL,
  29        OMAP_EHCI_PORT_MODE_HSIC,
  30};
  31
  32#ifdef CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS
  33#define OMAP_HS_USB_PORTS       CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS
  34#else
  35#define OMAP_HS_USB_PORTS       3
  36#endif
  37
  38#define is_ehci_phy_mode(x)     ((x) == OMAP_EHCI_PORT_MODE_PHY)
  39#define is_ehci_tll_mode(x)     ((x) == OMAP_EHCI_PORT_MODE_TLL)
  40#define is_ehci_hsic_mode(x)    ((x) == OMAP_EHCI_PORT_MODE_HSIC)
  41
  42/* Values of UHH_REVISION - Note: these are not given in the TRM */
  43#define OMAP_USBHS_REV1                                 0x00000010 /* OMAP3 */
  44#define OMAP_USBHS_REV2                                 0x50700100 /* OMAP4 */
  45#define OMAP_USBHS_REV2_1                               0x50700101 /* OMAP5 */
  46
  47/* UHH Register Set */
  48#define OMAP_UHH_HOSTCONFIG_INCR4_BURST_EN              (1 << 2)
  49#define OMAP_UHH_HOSTCONFIG_INCR8_BURST_EN              (1 << 3)
  50#define OMAP_UHH_HOSTCONFIG_INCR16_BURST_EN             (1 << 4)
  51#define OMAP_UHH_HOSTCONFIG_INCRX_ALIGN_EN              (1 << 5)
  52
  53#define OMAP_UHH_HOSTCONFIG_ULPI_P1_BYPASS              1
  54#define OMAP_UHH_HOSTCONFIG_ULPI_P2_BYPASS              (1 << 11)
  55#define OMAP_UHH_HOSTCONFIG_ULPI_P3_BYPASS              (1 << 12)
  56#define OMAP4_UHH_HOSTCONFIG_APP_START_CLK              (1 << 31)
  57
  58#define OMAP_P1_MODE_CLEAR                              (3 << 16)
  59#define OMAP_P1_MODE_TLL                                (1 << 16)
  60#define OMAP_P1_MODE_HSIC                               (3 << 16)
  61#define OMAP_P2_MODE_CLEAR                              (3 << 18)
  62#define OMAP_P2_MODE_TLL                                (1 << 18)
  63#define OMAP_P2_MODE_HSIC                               (3 << 18)
  64#define OMAP_P3_MODE_CLEAR                              (3 << 20)
  65#define OMAP_P3_MODE_HSIC                               (3 << 20)
  66
  67/* EHCI Register Set */
  68#define EHCI_INSNREG04_DISABLE_UNSUSPEND                (1 << 5)
  69#define EHCI_INSNREG05_ULPI_CONTROL_SHIFT               31
  70#define EHCI_INSNREG05_ULPI_PORTSEL_SHIFT               24
  71#define EHCI_INSNREG05_ULPI_OPSEL_SHIFT                 22
  72#define EHCI_INSNREG05_ULPI_REGADD_SHIFT                16
  73
  74#define OMAP_REV1_TLL_CHANNEL_COUNT                     3
  75#define OMAP_REV2_TLL_CHANNEL_COUNT                     2
  76
  77/* TLL Register Set */
  78#define OMAP_TLL_CHANNEL_CONF(num)                      (0x004 * num)
  79#define OMAP_TLL_CHANNEL_CONF_DRVVBUS                   (1 << 16)
  80#define OMAP_TLL_CHANNEL_CONF_CHRGVBUS                  (1 << 15)
  81#define OMAP_TLL_CHANNEL_CONF_ULPINOBITSTUFF            (1 << 11)
  82#define OMAP_TLL_CHANNEL_CONF_CHANMODE_TRANSPARENT_UTMI (2 << 1)
  83#define OMAP_TLL_CHANNEL_CONF_CHANEN                    1
  84
  85struct omap_usbhs_board_data {
  86        enum usbhs_omap_port_mode port_mode[OMAP_HS_USB_PORTS];
  87};
  88
  89struct omap_usbtll {
  90        u32 rev;                /* 0x00 */
  91        u32 hwinfo;             /* 0x04 */
  92        u8 reserved1[0x8];
  93        u32 sysc;               /* 0x10 */
  94        u32 syss;               /* 0x14 */
  95        u32 irqst;              /* 0x18 */
  96        u32 irqen;              /* 0x1c */
  97        u8 reserved2[0x10];
  98        u32 shared_conf;        /* 0x30 */
  99        u8 reserved3[0xc];
 100        u32 channel_conf;       /* 0x40 */
 101};
 102
 103struct omap_uhh {
 104        u32 rev;        /* 0x00 */
 105        u32 hwinfo;     /* 0x04 */
 106        u8 reserved1[0x8];
 107        u32 sysc;       /* 0x10 */
 108        u32 syss;       /* 0x14 */
 109        u8 reserved2[0x28];
 110        u32 hostconfig; /* 0x40 */
 111        u32 debugcsr;   /* 0x44 */
 112};
 113
 114struct omap_ehci {
 115        u32 hccapbase;          /* 0x00 */
 116        u32 hcsparams;          /* 0x04 */
 117        u32 hccparams;          /* 0x08 */
 118        u8 reserved1[0x04];
 119        u32 usbcmd;             /* 0x10 */
 120        u32 usbsts;             /* 0x14 */
 121        u32 usbintr;            /* 0x18 */
 122        u32 frindex;            /* 0x1c */
 123        u32 ctrldssegment;      /* 0x20 */
 124        u32 periodiclistbase;   /* 0x24 */
 125        u32 asysnclistaddr;     /* 0x28 */
 126        u8 reserved2[0x24];
 127        u32 configflag;         /* 0x50 */
 128        u32 portsc_i;           /* 0x54 */
 129        u8 reserved3[0x38];
 130        u32 insreg00;           /* 0x90 */
 131        u32 insreg01;           /* 0x94 */
 132        u32 insreg02;           /* 0x98 */
 133        u32 insreg03;           /* 0x9c */
 134        u32 insreg04;           /* 0xa0 */
 135        u32 insreg05_utmi_ulpi; /* 0xa4 */
 136        u32 insreg06;           /* 0xa8 */
 137        u32 insreg07;           /* 0xac */
 138        u32 insreg08;           /* 0xb0 */
 139};
 140
 141/*
 142 * FIXME: forward declaration of this structs needed because omap got the
 143 * ehci implementation backwards. move out ehci_hcd_x from board files
 144 */
 145struct ehci_hccr;
 146struct ehci_hcor;
 147
 148int omap_ehci_hcd_init(int index, struct omap_usbhs_board_data *usbhs_pdata,
 149                       struct ehci_hccr **hccr, struct ehci_hcor **hcor);
 150int omap_ehci_hcd_stop(void);
 151
 152#endif /* _OMAP_COMMON_EHCI_H_ */
 153