Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
0002 /*
0003  * hw.h - DesignWare HS OTG Controller hardware definitions
0004  *
0005  * Copyright 2004-2013 Synopsys, Inc.
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions, and the following disclaimer,
0012  *    without modification.
0013  * 2. Redistributions in binary form must reproduce the above copyright
0014  *    notice, this list of conditions and the following disclaimer in the
0015  *    documentation and/or other materials provided with the distribution.
0016  * 3. The names of the above-listed copyright holders may not be used
0017  *    to endorse or promote products derived from this software without
0018  *    specific prior written permission.
0019  *
0020  * ALTERNATIVELY, this software may be distributed under the terms of the
0021  * GNU General Public License ("GPL") as published by the Free Software
0022  * Foundation; either version 2 of the License, or (at your option) any
0023  * later version.
0024  *
0025  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
0026  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
0027  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
0028  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
0029  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
0030  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
0031  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
0032  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
0033  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
0034  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
0035  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0036  */
0037 
0038 #ifndef __DWC2_HW_H__
0039 #define __DWC2_HW_H__
0040 
0041 #define HSOTG_REG(x)    (x)
0042 
0043 #define GOTGCTL             HSOTG_REG(0x000)
0044 #define GOTGCTL_CHIRPEN         BIT(27)
0045 #define GOTGCTL_MULT_VALID_BC_MASK  (0x1f << 22)
0046 #define GOTGCTL_MULT_VALID_BC_SHIFT 22
0047 #define GOTGCTL_CURMODE_HOST        BIT(21)
0048 #define GOTGCTL_OTGVER          BIT(20)
0049 #define GOTGCTL_BSESVLD         BIT(19)
0050 #define GOTGCTL_ASESVLD         BIT(18)
0051 #define GOTGCTL_DBNC_SHORT      BIT(17)
0052 #define GOTGCTL_CONID_B         BIT(16)
0053 #define GOTGCTL_DBNCE_FLTR_BYPASS   BIT(15)
0054 #define GOTGCTL_DEVHNPEN        BIT(11)
0055 #define GOTGCTL_HSTSETHNPEN     BIT(10)
0056 #define GOTGCTL_HNPREQ          BIT(9)
0057 #define GOTGCTL_HSTNEGSCS       BIT(8)
0058 #define GOTGCTL_BVALOVAL        BIT(7)
0059 #define GOTGCTL_BVALOEN         BIT(6)
0060 #define GOTGCTL_AVALOVAL        BIT(5)
0061 #define GOTGCTL_AVALOEN         BIT(4)
0062 #define GOTGCTL_VBVALOVAL       BIT(3)
0063 #define GOTGCTL_VBVALOEN        BIT(2)
0064 #define GOTGCTL_SESREQ          BIT(1)
0065 #define GOTGCTL_SESREQSCS       BIT(0)
0066 
0067 #define GOTGINT             HSOTG_REG(0x004)
0068 #define GOTGINT_DBNCE_DONE      BIT(19)
0069 #define GOTGINT_A_DEV_TOUT_CHG      BIT(18)
0070 #define GOTGINT_HST_NEG_DET     BIT(17)
0071 #define GOTGINT_HST_NEG_SUC_STS_CHNG    BIT(9)
0072 #define GOTGINT_SES_REQ_SUC_STS_CHNG    BIT(8)
0073 #define GOTGINT_SES_END_DET     BIT(2)
0074 
0075 #define GAHBCFG             HSOTG_REG(0x008)
0076 #define GAHBCFG_AHB_SINGLE      BIT(23)
0077 #define GAHBCFG_NOTI_ALL_DMA_WRIT   BIT(22)
0078 #define GAHBCFG_REM_MEM_SUPP        BIT(21)
0079 #define GAHBCFG_P_TXF_EMP_LVL       BIT(8)
0080 #define GAHBCFG_NP_TXF_EMP_LVL      BIT(7)
0081 #define GAHBCFG_DMA_EN          BIT(5)
0082 #define GAHBCFG_HBSTLEN_MASK        (0xf << 1)
0083 #define GAHBCFG_HBSTLEN_SHIFT       1
0084 #define GAHBCFG_HBSTLEN_SINGLE      0
0085 #define GAHBCFG_HBSTLEN_INCR        1
0086 #define GAHBCFG_HBSTLEN_INCR4       3
0087 #define GAHBCFG_HBSTLEN_INCR8       5
0088 #define GAHBCFG_HBSTLEN_INCR16      7
0089 #define GAHBCFG_GLBL_INTR_EN        BIT(0)
0090 #define GAHBCFG_CTRL_MASK       (GAHBCFG_P_TXF_EMP_LVL | \
0091                      GAHBCFG_NP_TXF_EMP_LVL | \
0092                      GAHBCFG_DMA_EN | \
0093                      GAHBCFG_GLBL_INTR_EN)
0094 
0095 #define GUSBCFG             HSOTG_REG(0x00C)
0096 #define GUSBCFG_FORCEDEVMODE        BIT(30)
0097 #define GUSBCFG_FORCEHOSTMODE       BIT(29)
0098 #define GUSBCFG_TXENDDELAY      BIT(28)
0099 #define GUSBCFG_ICTRAFFICPULLREMOVE BIT(27)
0100 #define GUSBCFG_ICUSBCAP        BIT(26)
0101 #define GUSBCFG_ULPI_INT_PROT_DIS   BIT(25)
0102 #define GUSBCFG_INDICATORPASSTHROUGH    BIT(24)
0103 #define GUSBCFG_INDICATORCOMPLEMENT BIT(23)
0104 #define GUSBCFG_TERMSELDLPULSE      BIT(22)
0105 #define GUSBCFG_ULPI_INT_VBUS_IND   BIT(21)
0106 #define GUSBCFG_ULPI_EXT_VBUS_DRV   BIT(20)
0107 #define GUSBCFG_ULPI_CLK_SUSP_M     BIT(19)
0108 #define GUSBCFG_ULPI_AUTO_RES       BIT(18)
0109 #define GUSBCFG_ULPI_FS_LS      BIT(17)
0110 #define GUSBCFG_OTG_UTMI_FS_SEL     BIT(16)
0111 #define GUSBCFG_PHY_LP_CLK_SEL      BIT(15)
0112 #define GUSBCFG_USBTRDTIM_MASK      (0xf << 10)
0113 #define GUSBCFG_USBTRDTIM_SHIFT     10
0114 #define GUSBCFG_HNPCAP          BIT(9)
0115 #define GUSBCFG_SRPCAP          BIT(8)
0116 #define GUSBCFG_DDRSEL          BIT(7)
0117 #define GUSBCFG_PHYSEL          BIT(6)
0118 #define GUSBCFG_FSINTF          BIT(5)
0119 #define GUSBCFG_ULPI_UTMI_SEL       BIT(4)
0120 #define GUSBCFG_PHYIF16         BIT(3)
0121 #define GUSBCFG_PHYIF8          (0 << 3)
0122 #define GUSBCFG_TOUTCAL_MASK        (0x7 << 0)
0123 #define GUSBCFG_TOUTCAL_SHIFT       0
0124 #define GUSBCFG_TOUTCAL_LIMIT       0x7
0125 #define GUSBCFG_TOUTCAL(_x)     ((_x) << 0)
0126 
0127 #define GRSTCTL             HSOTG_REG(0x010)
0128 #define GRSTCTL_AHBIDLE         BIT(31)
0129 #define GRSTCTL_DMAREQ          BIT(30)
0130 #define GRSTCTL_CSFTRST_DONE        BIT(29)
0131 #define GRSTCTL_TXFNUM_MASK     (0x1f << 6)
0132 #define GRSTCTL_TXFNUM_SHIFT        6
0133 #define GRSTCTL_TXFNUM_LIMIT        0x1f
0134 #define GRSTCTL_TXFNUM(_x)      ((_x) << 6)
0135 #define GRSTCTL_TXFFLSH         BIT(5)
0136 #define GRSTCTL_RXFFLSH         BIT(4)
0137 #define GRSTCTL_IN_TKNQ_FLSH        BIT(3)
0138 #define GRSTCTL_FRMCNTRRST      BIT(2)
0139 #define GRSTCTL_HSFTRST         BIT(1)
0140 #define GRSTCTL_CSFTRST         BIT(0)
0141 
0142 #define GINTSTS             HSOTG_REG(0x014)
0143 #define GINTMSK             HSOTG_REG(0x018)
0144 #define GINTSTS_WKUPINT         BIT(31)
0145 #define GINTSTS_SESSREQINT      BIT(30)
0146 #define GINTSTS_DISCONNINT      BIT(29)
0147 #define GINTSTS_CONIDSTSCHNG        BIT(28)
0148 #define GINTSTS_LPMTRANRCVD     BIT(27)
0149 #define GINTSTS_PTXFEMP         BIT(26)
0150 #define GINTSTS_HCHINT          BIT(25)
0151 #define GINTSTS_PRTINT          BIT(24)
0152 #define GINTSTS_RESETDET        BIT(23)
0153 #define GINTSTS_FET_SUSP        BIT(22)
0154 #define GINTSTS_INCOMPL_IP      BIT(21)
0155 #define GINTSTS_INCOMPL_SOOUT       BIT(21)
0156 #define GINTSTS_INCOMPL_SOIN        BIT(20)
0157 #define GINTSTS_OEPINT          BIT(19)
0158 #define GINTSTS_IEPINT          BIT(18)
0159 #define GINTSTS_EPMIS           BIT(17)
0160 #define GINTSTS_RESTOREDONE     BIT(16)
0161 #define GINTSTS_EOPF            BIT(15)
0162 #define GINTSTS_ISOUTDROP       BIT(14)
0163 #define GINTSTS_ENUMDONE        BIT(13)
0164 #define GINTSTS_USBRST          BIT(12)
0165 #define GINTSTS_USBSUSP         BIT(11)
0166 #define GINTSTS_ERLYSUSP        BIT(10)
0167 #define GINTSTS_I2CINT          BIT(9)
0168 #define GINTSTS_ULPI_CK_INT     BIT(8)
0169 #define GINTSTS_GOUTNAKEFF      BIT(7)
0170 #define GINTSTS_GINNAKEFF       BIT(6)
0171 #define GINTSTS_NPTXFEMP        BIT(5)
0172 #define GINTSTS_RXFLVL          BIT(4)
0173 #define GINTSTS_SOF         BIT(3)
0174 #define GINTSTS_OTGINT          BIT(2)
0175 #define GINTSTS_MODEMIS         BIT(1)
0176 #define GINTSTS_CURMODE_HOST        BIT(0)
0177 
0178 #define GRXSTSR             HSOTG_REG(0x01C)
0179 #define GRXSTSP             HSOTG_REG(0x020)
0180 #define GRXSTS_FN_MASK          (0x7f << 25)
0181 #define GRXSTS_FN_SHIFT         25
0182 #define GRXSTS_PKTSTS_MASK      (0xf << 17)
0183 #define GRXSTS_PKTSTS_SHIFT     17
0184 #define GRXSTS_PKTSTS_GLOBALOUTNAK  1
0185 #define GRXSTS_PKTSTS_OUTRX     2
0186 #define GRXSTS_PKTSTS_HCHIN     2
0187 #define GRXSTS_PKTSTS_OUTDONE       3
0188 #define GRXSTS_PKTSTS_HCHIN_XFER_COMP   3
0189 #define GRXSTS_PKTSTS_SETUPDONE     4
0190 #define GRXSTS_PKTSTS_DATATOGGLEERR 5
0191 #define GRXSTS_PKTSTS_SETUPRX       6
0192 #define GRXSTS_PKTSTS_HCHHALTED     7
0193 #define GRXSTS_HCHNUM_MASK      (0xf << 0)
0194 #define GRXSTS_HCHNUM_SHIFT     0
0195 #define GRXSTS_DPID_MASK        (0x3 << 15)
0196 #define GRXSTS_DPID_SHIFT       15
0197 #define GRXSTS_BYTECNT_MASK     (0x7ff << 4)
0198 #define GRXSTS_BYTECNT_SHIFT        4
0199 #define GRXSTS_EPNUM_MASK       (0xf << 0)
0200 #define GRXSTS_EPNUM_SHIFT      0
0201 
0202 #define GRXFSIZ             HSOTG_REG(0x024)
0203 #define GRXFSIZ_DEPTH_MASK      (0xffff << 0)
0204 #define GRXFSIZ_DEPTH_SHIFT     0
0205 
0206 #define GNPTXFSIZ           HSOTG_REG(0x028)
0207 /* Use FIFOSIZE_* constants to access this register */
0208 
0209 #define GNPTXSTS            HSOTG_REG(0x02C)
0210 #define GNPTXSTS_NP_TXQ_TOP_MASK        (0x7f << 24)
0211 #define GNPTXSTS_NP_TXQ_TOP_SHIFT       24
0212 #define GNPTXSTS_NP_TXQ_SPC_AVAIL_MASK      (0xff << 16)
0213 #define GNPTXSTS_NP_TXQ_SPC_AVAIL_SHIFT     16
0214 #define GNPTXSTS_NP_TXQ_SPC_AVAIL_GET(_v)   (((_v) >> 16) & 0xff)
0215 #define GNPTXSTS_NP_TXF_SPC_AVAIL_MASK      (0xffff << 0)
0216 #define GNPTXSTS_NP_TXF_SPC_AVAIL_SHIFT     0
0217 #define GNPTXSTS_NP_TXF_SPC_AVAIL_GET(_v)   (((_v) >> 0) & 0xffff)
0218 
0219 #define GI2CCTL             HSOTG_REG(0x0030)
0220 #define GI2CCTL_BSYDNE          BIT(31)
0221 #define GI2CCTL_RW          BIT(30)
0222 #define GI2CCTL_I2CDATSE0       BIT(28)
0223 #define GI2CCTL_I2CDEVADDR_MASK     (0x3 << 26)
0224 #define GI2CCTL_I2CDEVADDR_SHIFT    26
0225 #define GI2CCTL_I2CSUSPCTL      BIT(25)
0226 #define GI2CCTL_ACK         BIT(24)
0227 #define GI2CCTL_I2CEN           BIT(23)
0228 #define GI2CCTL_ADDR_MASK       (0x7f << 16)
0229 #define GI2CCTL_ADDR_SHIFT      16
0230 #define GI2CCTL_REGADDR_MASK        (0xff << 8)
0231 #define GI2CCTL_REGADDR_SHIFT       8
0232 #define GI2CCTL_RWDATA_MASK     (0xff << 0)
0233 #define GI2CCTL_RWDATA_SHIFT        0
0234 
0235 #define GPVNDCTL            HSOTG_REG(0x0034)
0236 #define GGPIO               HSOTG_REG(0x0038)
0237 #define GGPIO_STM32_OTG_GCCFG_PWRDWN    BIT(16)
0238 #define GGPIO_STM32_OTG_GCCFG_VBDEN BIT(21)
0239 #define GGPIO_STM32_OTG_GCCFG_IDEN  BIT(22)
0240 
0241 #define GUID                HSOTG_REG(0x003c)
0242 #define GSNPSID             HSOTG_REG(0x0040)
0243 #define GHWCFG1             HSOTG_REG(0x0044)
0244 #define GSNPSID_ID_MASK         GENMASK(31, 16)
0245 
0246 #define GHWCFG2             HSOTG_REG(0x0048)
0247 #define GHWCFG2_OTG_ENABLE_IC_USB       BIT(31)
0248 #define GHWCFG2_DEV_TOKEN_Q_DEPTH_MASK      (0x1f << 26)
0249 #define GHWCFG2_DEV_TOKEN_Q_DEPTH_SHIFT     26
0250 #define GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK  (0x3 << 24)
0251 #define GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT 24
0252 #define GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK    (0x3 << 22)
0253 #define GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT   22
0254 #define GHWCFG2_MULTI_PROC_INT          BIT(20)
0255 #define GHWCFG2_DYNAMIC_FIFO            BIT(19)
0256 #define GHWCFG2_PERIO_EP_SUPPORTED      BIT(18)
0257 #define GHWCFG2_NUM_HOST_CHAN_MASK      (0xf << 14)
0258 #define GHWCFG2_NUM_HOST_CHAN_SHIFT     14
0259 #define GHWCFG2_NUM_DEV_EP_MASK         (0xf << 10)
0260 #define GHWCFG2_NUM_DEV_EP_SHIFT        10
0261 #define GHWCFG2_FS_PHY_TYPE_MASK        (0x3 << 8)
0262 #define GHWCFG2_FS_PHY_TYPE_SHIFT       8
0263 #define GHWCFG2_FS_PHY_TYPE_NOT_SUPPORTED   0
0264 #define GHWCFG2_FS_PHY_TYPE_DEDICATED       1
0265 #define GHWCFG2_FS_PHY_TYPE_SHARED_UTMI     2
0266 #define GHWCFG2_FS_PHY_TYPE_SHARED_ULPI     3
0267 #define GHWCFG2_HS_PHY_TYPE_MASK        (0x3 << 6)
0268 #define GHWCFG2_HS_PHY_TYPE_SHIFT       6
0269 #define GHWCFG2_HS_PHY_TYPE_NOT_SUPPORTED   0
0270 #define GHWCFG2_HS_PHY_TYPE_UTMI        1
0271 #define GHWCFG2_HS_PHY_TYPE_ULPI        2
0272 #define GHWCFG2_HS_PHY_TYPE_UTMI_ULPI       3
0273 #define GHWCFG2_POINT2POINT         BIT(5)
0274 #define GHWCFG2_ARCHITECTURE_MASK       (0x3 << 3)
0275 #define GHWCFG2_ARCHITECTURE_SHIFT      3
0276 #define GHWCFG2_SLAVE_ONLY_ARCH         0
0277 #define GHWCFG2_EXT_DMA_ARCH            1
0278 #define GHWCFG2_INT_DMA_ARCH            2
0279 #define GHWCFG2_OP_MODE_MASK            (0x7 << 0)
0280 #define GHWCFG2_OP_MODE_SHIFT           0
0281 #define GHWCFG2_OP_MODE_HNP_SRP_CAPABLE     0
0282 #define GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE    1
0283 #define GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE  2
0284 #define GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE  3
0285 #define GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE   4
0286 #define GHWCFG2_OP_MODE_SRP_CAPABLE_HOST    5
0287 #define GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST 6
0288 #define GHWCFG2_OP_MODE_UNDEFINED       7
0289 
0290 #define GHWCFG3             HSOTG_REG(0x004c)
0291 #define GHWCFG3_DFIFO_DEPTH_MASK        (0xffff << 16)
0292 #define GHWCFG3_DFIFO_DEPTH_SHIFT       16
0293 #define GHWCFG3_OTG_LPM_EN          BIT(15)
0294 #define GHWCFG3_BC_SUPPORT          BIT(14)
0295 #define GHWCFG3_OTG_ENABLE_HSIC         BIT(13)
0296 #define GHWCFG3_ADP_SUPP            BIT(12)
0297 #define GHWCFG3_SYNCH_RESET_TYPE        BIT(11)
0298 #define GHWCFG3_OPTIONAL_FEATURES       BIT(10)
0299 #define GHWCFG3_VENDOR_CTRL_IF          BIT(9)
0300 #define GHWCFG3_I2C             BIT(8)
0301 #define GHWCFG3_OTG_FUNC            BIT(7)
0302 #define GHWCFG3_PACKET_SIZE_CNTR_WIDTH_MASK (0x7 << 4)
0303 #define GHWCFG3_PACKET_SIZE_CNTR_WIDTH_SHIFT    4
0304 #define GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK   (0xf << 0)
0305 #define GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT  0
0306 
0307 #define GHWCFG4             HSOTG_REG(0x0050)
0308 #define GHWCFG4_DESC_DMA_DYN            BIT(31)
0309 #define GHWCFG4_DESC_DMA            BIT(30)
0310 #define GHWCFG4_NUM_IN_EPS_MASK         (0xf << 26)
0311 #define GHWCFG4_NUM_IN_EPS_SHIFT        26
0312 #define GHWCFG4_DED_FIFO_EN         BIT(25)
0313 #define GHWCFG4_DED_FIFO_SHIFT      25
0314 #define GHWCFG4_SESSION_END_FILT_EN     BIT(24)
0315 #define GHWCFG4_B_VALID_FILT_EN         BIT(23)
0316 #define GHWCFG4_A_VALID_FILT_EN         BIT(22)
0317 #define GHWCFG4_VBUS_VALID_FILT_EN      BIT(21)
0318 #define GHWCFG4_IDDIG_FILT_EN           BIT(20)
0319 #define GHWCFG4_NUM_DEV_MODE_CTRL_EP_MASK   (0xf << 16)
0320 #define GHWCFG4_NUM_DEV_MODE_CTRL_EP_SHIFT  16
0321 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK    (0x3 << 14)
0322 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_SHIFT   14
0323 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_8       0
0324 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_16      1
0325 #define GHWCFG4_UTMI_PHY_DATA_WIDTH_8_OR_16 2
0326 #define GHWCFG4_ACG_SUPPORTED           BIT(12)
0327 #define GHWCFG4_IPG_ISOC_SUPPORTED      BIT(11)
0328 #define GHWCFG4_SERVICE_INTERVAL_SUPPORTED      BIT(10)
0329 #define GHWCFG4_XHIBER              BIT(7)
0330 #define GHWCFG4_HIBER               BIT(6)
0331 #define GHWCFG4_MIN_AHB_FREQ            BIT(5)
0332 #define GHWCFG4_POWER_OPTIMIZ           BIT(4)
0333 #define GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK    (0xf << 0)
0334 #define GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT   0
0335 
0336 #define GLPMCFG             HSOTG_REG(0x0054)
0337 #define GLPMCFG_INVSELHSIC      BIT(31)
0338 #define GLPMCFG_HSICCON         BIT(30)
0339 #define GLPMCFG_RSTRSLPSTS      BIT(29)
0340 #define GLPMCFG_ENBESL          BIT(28)
0341 #define GLPMCFG_LPM_RETRYCNT_STS_MASK   (0x7 << 25)
0342 #define GLPMCFG_LPM_RETRYCNT_STS_SHIFT  25
0343 #define GLPMCFG_SNDLPM          BIT(24)
0344 #define GLPMCFG_RETRY_CNT_MASK      (0x7 << 21)
0345 #define GLPMCFG_RETRY_CNT_SHIFT     21
0346 #define GLPMCFG_LPM_REJECT_CTRL_CONTROL BIT(21)
0347 #define GLPMCFG_LPM_ACCEPT_CTRL_ISOC    BIT(22)
0348 #define GLPMCFG_LPM_CHNL_INDX_MASK  (0xf << 17)
0349 #define GLPMCFG_LPM_CHNL_INDX_SHIFT 17
0350 #define GLPMCFG_L1RESUMEOK      BIT(16)
0351 #define GLPMCFG_SLPSTS          BIT(15)
0352 #define GLPMCFG_COREL1RES_MASK      (0x3 << 13)
0353 #define GLPMCFG_COREL1RES_SHIFT     13
0354 #define GLPMCFG_HIRD_THRES_MASK     (0x1f << 8)
0355 #define GLPMCFG_HIRD_THRES_SHIFT    8
0356 #define GLPMCFG_HIRD_THRES_EN       (0x10 << 8)
0357 #define GLPMCFG_ENBLSLPM        BIT(7)
0358 #define GLPMCFG_BREMOTEWAKE     BIT(6)
0359 #define GLPMCFG_HIRD_MASK       (0xf << 2)
0360 #define GLPMCFG_HIRD_SHIFT      2
0361 #define GLPMCFG_APPL1RES        BIT(1)
0362 #define GLPMCFG_LPMCAP          BIT(0)
0363 
0364 #define GPWRDN              HSOTG_REG(0x0058)
0365 #define GPWRDN_MULT_VAL_ID_BC_MASK  (0x1f << 24)
0366 #define GPWRDN_MULT_VAL_ID_BC_SHIFT 24
0367 #define GPWRDN_ADP_INT          BIT(23)
0368 #define GPWRDN_BSESSVLD         BIT(22)
0369 #define GPWRDN_IDSTS            BIT(21)
0370 #define GPWRDN_LINESTATE_MASK       (0x3 << 19)
0371 #define GPWRDN_LINESTATE_SHIFT      19
0372 #define GPWRDN_STS_CHGINT_MSK       BIT(18)
0373 #define GPWRDN_STS_CHGINT       BIT(17)
0374 #define GPWRDN_SRP_DET_MSK      BIT(16)
0375 #define GPWRDN_SRP_DET          BIT(15)
0376 #define GPWRDN_CONNECT_DET_MSK      BIT(14)
0377 #define GPWRDN_CONNECT_DET      BIT(13)
0378 #define GPWRDN_DISCONN_DET_MSK      BIT(12)
0379 #define GPWRDN_DISCONN_DET      BIT(11)
0380 #define GPWRDN_RST_DET_MSK      BIT(10)
0381 #define GPWRDN_RST_DET          BIT(9)
0382 #define GPWRDN_LNSTSCHG_MSK     BIT(8)
0383 #define GPWRDN_LNSTSCHG         BIT(7)
0384 #define GPWRDN_DIS_VBUS         BIT(6)
0385 #define GPWRDN_PWRDNSWTCH       BIT(5)
0386 #define GPWRDN_PWRDNRSTN        BIT(4)
0387 #define GPWRDN_PWRDNCLMP        BIT(3)
0388 #define GPWRDN_RESTORE          BIT(2)
0389 #define GPWRDN_PMUACTV          BIT(1)
0390 #define GPWRDN_PMUINTSEL        BIT(0)
0391 
0392 #define GDFIFOCFG           HSOTG_REG(0x005c)
0393 #define GDFIFOCFG_EPINFOBASE_MASK   (0xffff << 16)
0394 #define GDFIFOCFG_EPINFOBASE_SHIFT  16
0395 #define GDFIFOCFG_GDFIFOCFG_MASK    (0xffff << 0)
0396 #define GDFIFOCFG_GDFIFOCFG_SHIFT   0
0397 
0398 #define ADPCTL              HSOTG_REG(0x0060)
0399 #define ADPCTL_AR_MASK          (0x3 << 27)
0400 #define ADPCTL_AR_SHIFT         27
0401 #define ADPCTL_ADP_TMOUT_INT_MSK    BIT(26)
0402 #define ADPCTL_ADP_SNS_INT_MSK      BIT(25)
0403 #define ADPCTL_ADP_PRB_INT_MSK      BIT(24)
0404 #define ADPCTL_ADP_TMOUT_INT        BIT(23)
0405 #define ADPCTL_ADP_SNS_INT      BIT(22)
0406 #define ADPCTL_ADP_PRB_INT      BIT(21)
0407 #define ADPCTL_ADPENA           BIT(20)
0408 #define ADPCTL_ADPRES           BIT(19)
0409 #define ADPCTL_ENASNS           BIT(18)
0410 #define ADPCTL_ENAPRB           BIT(17)
0411 #define ADPCTL_RTIM_MASK        (0x7ff << 6)
0412 #define ADPCTL_RTIM_SHIFT       6
0413 #define ADPCTL_PRB_PER_MASK     (0x3 << 4)
0414 #define ADPCTL_PRB_PER_SHIFT        4
0415 #define ADPCTL_PRB_DELTA_MASK       (0x3 << 2)
0416 #define ADPCTL_PRB_DELTA_SHIFT      2
0417 #define ADPCTL_PRB_DSCHRG_MASK      (0x3 << 0)
0418 #define ADPCTL_PRB_DSCHRG_SHIFT     0
0419 
0420 #define GREFCLK                 HSOTG_REG(0x0064)
0421 #define GREFCLK_REFCLKPER_MASK          (0x1ffff << 15)
0422 #define GREFCLK_REFCLKPER_SHIFT         15
0423 #define GREFCLK_REF_CLK_MODE            BIT(14)
0424 #define GREFCLK_SOF_CNT_WKUP_ALERT_MASK     (0x3ff)
0425 #define GREFCLK_SOF_CNT_WKUP_ALERT_SHIFT    0
0426 
0427 #define GINTMSK2            HSOTG_REG(0x0068)
0428 #define GINTMSK2_WKUP_ALERT_INT_MSK BIT(0)
0429 
0430 #define GINTSTS2            HSOTG_REG(0x006c)
0431 #define GINTSTS2_WKUP_ALERT_INT     BIT(0)
0432 
0433 #define HPTXFSIZ            HSOTG_REG(0x100)
0434 /* Use FIFOSIZE_* constants to access this register */
0435 
0436 #define DPTXFSIZN(_a)           HSOTG_REG(0x104 + (((_a) - 1) * 4))
0437 /* Use FIFOSIZE_* constants to access this register */
0438 
0439 /* These apply to the GNPTXFSIZ, HPTXFSIZ and DPTXFSIZN registers */
0440 #define FIFOSIZE_DEPTH_MASK     (0xffff << 16)
0441 #define FIFOSIZE_DEPTH_SHIFT        16
0442 #define FIFOSIZE_STARTADDR_MASK     (0xffff << 0)
0443 #define FIFOSIZE_STARTADDR_SHIFT    0
0444 #define FIFOSIZE_DEPTH_GET(_x)      (((_x) >> 16) & 0xffff)
0445 
0446 /* Device mode registers */
0447 
0448 #define DCFG                HSOTG_REG(0x800)
0449 #define DCFG_DESCDMA_EN         BIT(23)
0450 #define DCFG_EPMISCNT_MASK      (0x1f << 18)
0451 #define DCFG_EPMISCNT_SHIFT     18
0452 #define DCFG_EPMISCNT_LIMIT     0x1f
0453 #define DCFG_EPMISCNT(_x)       ((_x) << 18)
0454 #define DCFG_IPG_ISOC_SUPPORDED     BIT(17)
0455 #define DCFG_PERFRINT_MASK      (0x3 << 11)
0456 #define DCFG_PERFRINT_SHIFT     11
0457 #define DCFG_PERFRINT_LIMIT     0x3
0458 #define DCFG_PERFRINT(_x)       ((_x) << 11)
0459 #define DCFG_DEVADDR_MASK       (0x7f << 4)
0460 #define DCFG_DEVADDR_SHIFT      4
0461 #define DCFG_DEVADDR_LIMIT      0x7f
0462 #define DCFG_DEVADDR(_x)        ((_x) << 4)
0463 #define DCFG_NZ_STS_OUT_HSHK        BIT(2)
0464 #define DCFG_DEVSPD_MASK        (0x3 << 0)
0465 #define DCFG_DEVSPD_SHIFT       0
0466 #define DCFG_DEVSPD_HS          0
0467 #define DCFG_DEVSPD_FS          1
0468 #define DCFG_DEVSPD_LS          2
0469 #define DCFG_DEVSPD_FS48        3
0470 
0471 #define DCTL                HSOTG_REG(0x804)
0472 #define DCTL_SERVICE_INTERVAL_SUPPORTED BIT(19)
0473 #define DCTL_PWRONPRGDONE       BIT(11)
0474 #define DCTL_CGOUTNAK           BIT(10)
0475 #define DCTL_SGOUTNAK           BIT(9)
0476 #define DCTL_CGNPINNAK          BIT(8)
0477 #define DCTL_SGNPINNAK          BIT(7)
0478 #define DCTL_TSTCTL_MASK        (0x7 << 4)
0479 #define DCTL_TSTCTL_SHIFT       4
0480 #define DCTL_GOUTNAKSTS         BIT(3)
0481 #define DCTL_GNPINNAKSTS        BIT(2)
0482 #define DCTL_SFTDISCON          BIT(1)
0483 #define DCTL_RMTWKUPSIG         BIT(0)
0484 
0485 #define DSTS                HSOTG_REG(0x808)
0486 #define DSTS_SOFFN_MASK         (0x3fff << 8)
0487 #define DSTS_SOFFN_SHIFT        8
0488 #define DSTS_SOFFN_LIMIT        0x3fff
0489 #define DSTS_SOFFN(_x)          ((_x) << 8)
0490 #define DSTS_ERRATICERR         BIT(3)
0491 #define DSTS_ENUMSPD_MASK       (0x3 << 1)
0492 #define DSTS_ENUMSPD_SHIFT      1
0493 #define DSTS_ENUMSPD_HS         0
0494 #define DSTS_ENUMSPD_FS         1
0495 #define DSTS_ENUMSPD_LS         2
0496 #define DSTS_ENUMSPD_FS48       3
0497 #define DSTS_SUSPSTS            BIT(0)
0498 
0499 #define DIEPMSK             HSOTG_REG(0x810)
0500 #define DIEPMSK_NAKMSK          BIT(13)
0501 #define DIEPMSK_BNAININTRMSK        BIT(9)
0502 #define DIEPMSK_TXFIFOUNDRNMSK      BIT(8)
0503 #define DIEPMSK_TXFIFOEMPTY     BIT(7)
0504 #define DIEPMSK_INEPNAKEFFMSK       BIT(6)
0505 #define DIEPMSK_INTKNEPMISMSK       BIT(5)
0506 #define DIEPMSK_INTKNTXFEMPMSK      BIT(4)
0507 #define DIEPMSK_TIMEOUTMSK      BIT(3)
0508 #define DIEPMSK_AHBERRMSK       BIT(2)
0509 #define DIEPMSK_EPDISBLDMSK     BIT(1)
0510 #define DIEPMSK_XFERCOMPLMSK        BIT(0)
0511 
0512 #define DOEPMSK             HSOTG_REG(0x814)
0513 #define DOEPMSK_BNAMSK          BIT(9)
0514 #define DOEPMSK_BACK2BACKSETUP      BIT(6)
0515 #define DOEPMSK_STSPHSERCVDMSK      BIT(5)
0516 #define DOEPMSK_OUTTKNEPDISMSK      BIT(4)
0517 #define DOEPMSK_SETUPMSK        BIT(3)
0518 #define DOEPMSK_AHBERRMSK       BIT(2)
0519 #define DOEPMSK_EPDISBLDMSK     BIT(1)
0520 #define DOEPMSK_XFERCOMPLMSK        BIT(0)
0521 
0522 #define DAINT               HSOTG_REG(0x818)
0523 #define DAINTMSK            HSOTG_REG(0x81C)
0524 #define DAINT_OUTEP_SHIFT       16
0525 #define DAINT_OUTEP(_x)         (1 << ((_x) + 16))
0526 #define DAINT_INEP(_x)          (1 << (_x))
0527 
0528 #define DTKNQR1             HSOTG_REG(0x820)
0529 #define DTKNQR2             HSOTG_REG(0x824)
0530 #define DTKNQR3             HSOTG_REG(0x830)
0531 #define DTKNQR4             HSOTG_REG(0x834)
0532 #define DIEPEMPMSK          HSOTG_REG(0x834)
0533 
0534 #define DVBUSDIS            HSOTG_REG(0x828)
0535 #define DVBUSPULSE          HSOTG_REG(0x82C)
0536 
0537 #define DIEPCTL0            HSOTG_REG(0x900)
0538 #define DIEPCTL(_a)         HSOTG_REG(0x900 + ((_a) * 0x20))
0539 
0540 #define DOEPCTL0            HSOTG_REG(0xB00)
0541 #define DOEPCTL(_a)         HSOTG_REG(0xB00 + ((_a) * 0x20))
0542 
0543 /* EP0 specialness:
0544  * bits[29..28] - reserved (no SetD0PID, SetD1PID)
0545  * bits[25..22] - should always be zero, this isn't a periodic endpoint
0546  * bits[10..0]  - MPS setting different for EP0
0547  */
0548 #define D0EPCTL_MPS_MASK        (0x3 << 0)
0549 #define D0EPCTL_MPS_SHIFT       0
0550 #define D0EPCTL_MPS_64          0
0551 #define D0EPCTL_MPS_32          1
0552 #define D0EPCTL_MPS_16          2
0553 #define D0EPCTL_MPS_8           3
0554 
0555 #define DXEPCTL_EPENA           BIT(31)
0556 #define DXEPCTL_EPDIS           BIT(30)
0557 #define DXEPCTL_SETD1PID        BIT(29)
0558 #define DXEPCTL_SETODDFR        BIT(29)
0559 #define DXEPCTL_SETD0PID        BIT(28)
0560 #define DXEPCTL_SETEVENFR       BIT(28)
0561 #define DXEPCTL_SNAK            BIT(27)
0562 #define DXEPCTL_CNAK            BIT(26)
0563 #define DXEPCTL_TXFNUM_MASK     (0xf << 22)
0564 #define DXEPCTL_TXFNUM_SHIFT        22
0565 #define DXEPCTL_TXFNUM_LIMIT        0xf
0566 #define DXEPCTL_TXFNUM(_x)      ((_x) << 22)
0567 #define DXEPCTL_STALL           BIT(21)
0568 #define DXEPCTL_SNP         BIT(20)
0569 #define DXEPCTL_EPTYPE_MASK     (0x3 << 18)
0570 #define DXEPCTL_EPTYPE_CONTROL      (0x0 << 18)
0571 #define DXEPCTL_EPTYPE_ISO      (0x1 << 18)
0572 #define DXEPCTL_EPTYPE_BULK     (0x2 << 18)
0573 #define DXEPCTL_EPTYPE_INTERRUPT    (0x3 << 18)
0574 
0575 #define DXEPCTL_NAKSTS          BIT(17)
0576 #define DXEPCTL_DPID            BIT(16)
0577 #define DXEPCTL_EOFRNUM         BIT(16)
0578 #define DXEPCTL_USBACTEP        BIT(15)
0579 #define DXEPCTL_NEXTEP_MASK     (0xf << 11)
0580 #define DXEPCTL_NEXTEP_SHIFT        11
0581 #define DXEPCTL_NEXTEP_LIMIT        0xf
0582 #define DXEPCTL_NEXTEP(_x)      ((_x) << 11)
0583 #define DXEPCTL_MPS_MASK        (0x7ff << 0)
0584 #define DXEPCTL_MPS_SHIFT       0
0585 #define DXEPCTL_MPS_LIMIT       0x7ff
0586 #define DXEPCTL_MPS(_x)         ((_x) << 0)
0587 
0588 #define DIEPINT(_a)         HSOTG_REG(0x908 + ((_a) * 0x20))
0589 #define DOEPINT(_a)         HSOTG_REG(0xB08 + ((_a) * 0x20))
0590 #define DXEPINT_SETUP_RCVD      BIT(15)
0591 #define DXEPINT_NYETINTRPT      BIT(14)
0592 #define DXEPINT_NAKINTRPT       BIT(13)
0593 #define DXEPINT_BBLEERRINTRPT       BIT(12)
0594 #define DXEPINT_PKTDRPSTS       BIT(11)
0595 #define DXEPINT_BNAINTR         BIT(9)
0596 #define DXEPINT_TXFIFOUNDRN     BIT(8)
0597 #define DXEPINT_OUTPKTERR       BIT(8)
0598 #define DXEPINT_TXFEMP          BIT(7)
0599 #define DXEPINT_INEPNAKEFF      BIT(6)
0600 #define DXEPINT_BACK2BACKSETUP      BIT(6)
0601 #define DXEPINT_INTKNEPMIS      BIT(5)
0602 #define DXEPINT_STSPHSERCVD     BIT(5)
0603 #define DXEPINT_INTKNTXFEMP     BIT(4)
0604 #define DXEPINT_OUTTKNEPDIS     BIT(4)
0605 #define DXEPINT_TIMEOUT         BIT(3)
0606 #define DXEPINT_SETUP           BIT(3)
0607 #define DXEPINT_AHBERR          BIT(2)
0608 #define DXEPINT_EPDISBLD        BIT(1)
0609 #define DXEPINT_XFERCOMPL       BIT(0)
0610 
0611 #define DIEPTSIZ0           HSOTG_REG(0x910)
0612 #define DIEPTSIZ0_PKTCNT_MASK       (0x3 << 19)
0613 #define DIEPTSIZ0_PKTCNT_SHIFT      19
0614 #define DIEPTSIZ0_PKTCNT_LIMIT      0x3
0615 #define DIEPTSIZ0_PKTCNT(_x)        ((_x) << 19)
0616 #define DIEPTSIZ0_XFERSIZE_MASK     (0x7f << 0)
0617 #define DIEPTSIZ0_XFERSIZE_SHIFT    0
0618 #define DIEPTSIZ0_XFERSIZE_LIMIT    0x7f
0619 #define DIEPTSIZ0_XFERSIZE(_x)      ((_x) << 0)
0620 
0621 #define DOEPTSIZ0           HSOTG_REG(0xB10)
0622 #define DOEPTSIZ0_SUPCNT_MASK       (0x3 << 29)
0623 #define DOEPTSIZ0_SUPCNT_SHIFT      29
0624 #define DOEPTSIZ0_SUPCNT_LIMIT      0x3
0625 #define DOEPTSIZ0_SUPCNT(_x)        ((_x) << 29)
0626 #define DOEPTSIZ0_PKTCNT        BIT(19)
0627 #define DOEPTSIZ0_XFERSIZE_MASK     (0x7f << 0)
0628 #define DOEPTSIZ0_XFERSIZE_SHIFT    0
0629 
0630 #define DIEPTSIZ(_a)            HSOTG_REG(0x910 + ((_a) * 0x20))
0631 #define DOEPTSIZ(_a)            HSOTG_REG(0xB10 + ((_a) * 0x20))
0632 #define DXEPTSIZ_MC_MASK        (0x3 << 29)
0633 #define DXEPTSIZ_MC_SHIFT       29
0634 #define DXEPTSIZ_MC_LIMIT       0x3
0635 #define DXEPTSIZ_MC(_x)         ((_x) << 29)
0636 #define DXEPTSIZ_PKTCNT_MASK        (0x3ff << 19)
0637 #define DXEPTSIZ_PKTCNT_SHIFT       19
0638 #define DXEPTSIZ_PKTCNT_LIMIT       0x3ff
0639 #define DXEPTSIZ_PKTCNT_GET(_v)     (((_v) >> 19) & 0x3ff)
0640 #define DXEPTSIZ_PKTCNT(_x)     ((_x) << 19)
0641 #define DXEPTSIZ_XFERSIZE_MASK      (0x7ffff << 0)
0642 #define DXEPTSIZ_XFERSIZE_SHIFT     0
0643 #define DXEPTSIZ_XFERSIZE_LIMIT     0x7ffff
0644 #define DXEPTSIZ_XFERSIZE_GET(_v)   (((_v) >> 0) & 0x7ffff)
0645 #define DXEPTSIZ_XFERSIZE(_x)       ((_x) << 0)
0646 
0647 #define DIEPDMA(_a)         HSOTG_REG(0x914 + ((_a) * 0x20))
0648 #define DOEPDMA(_a)         HSOTG_REG(0xB14 + ((_a) * 0x20))
0649 
0650 #define DTXFSTS(_a)         HSOTG_REG(0x918 + ((_a) * 0x20))
0651 
0652 #define PCGCTL              HSOTG_REG(0x0e00)
0653 #define PCGCTL_IF_DEV_MODE      BIT(31)
0654 #define PCGCTL_P2HD_PRT_SPD_MASK    (0x3 << 29)
0655 #define PCGCTL_P2HD_PRT_SPD_SHIFT   29
0656 #define PCGCTL_P2HD_DEV_ENUM_SPD_MASK   (0x3 << 27)
0657 #define PCGCTL_P2HD_DEV_ENUM_SPD_SHIFT  27
0658 #define PCGCTL_MAC_DEV_ADDR_MASK    (0x7f << 20)
0659 #define PCGCTL_MAC_DEV_ADDR_SHIFT   20
0660 #define PCGCTL_MAX_TERMSEL      BIT(19)
0661 #define PCGCTL_MAX_XCVRSELECT_MASK  (0x3 << 17)
0662 #define PCGCTL_MAX_XCVRSELECT_SHIFT 17
0663 #define PCGCTL_PORT_POWER       BIT(16)
0664 #define PCGCTL_PRT_CLK_SEL_MASK     (0x3 << 14)
0665 #define PCGCTL_PRT_CLK_SEL_SHIFT    14
0666 #define PCGCTL_ESS_REG_RESTORED     BIT(13)
0667 #define PCGCTL_EXTND_HIBER_SWITCH   BIT(12)
0668 #define PCGCTL_EXTND_HIBER_PWRCLMP  BIT(11)
0669 #define PCGCTL_ENBL_EXTND_HIBER     BIT(10)
0670 #define PCGCTL_RESTOREMODE      BIT(9)
0671 #define PCGCTL_RESETAFTSUSP     BIT(8)
0672 #define PCGCTL_DEEP_SLEEP       BIT(7)
0673 #define PCGCTL_PHY_IN_SLEEP     BIT(6)
0674 #define PCGCTL_ENBL_SLEEP_GATING    BIT(5)
0675 #define PCGCTL_RSTPDWNMODULE        BIT(3)
0676 #define PCGCTL_PWRCLMP          BIT(2)
0677 #define PCGCTL_GATEHCLK         BIT(1)
0678 #define PCGCTL_STOPPCLK         BIT(0)
0679 
0680 #define PCGCCTL1                        HSOTG_REG(0xe04)
0681 #define PCGCCTL1_TIMER                  (0x3 << 1)
0682 #define PCGCCTL1_GATEEN                 BIT(0)
0683 
0684 #define EPFIFO(_a)          HSOTG_REG(0x1000 + ((_a) * 0x1000))
0685 
0686 /* Host Mode Registers */
0687 
0688 #define HCFG                HSOTG_REG(0x0400)
0689 #define HCFG_MODECHTIMEN        BIT(31)
0690 #define HCFG_PERSCHEDENA        BIT(26)
0691 #define HCFG_FRLISTEN_MASK      (0x3 << 24)
0692 #define HCFG_FRLISTEN_SHIFT     24
0693 #define HCFG_FRLISTEN_8             (0 << 24)
0694 #define FRLISTEN_8_SIZE             8
0695 #define HCFG_FRLISTEN_16            BIT(24)
0696 #define FRLISTEN_16_SIZE            16
0697 #define HCFG_FRLISTEN_32            (2 << 24)
0698 #define FRLISTEN_32_SIZE            32
0699 #define HCFG_FRLISTEN_64            (3 << 24)
0700 #define FRLISTEN_64_SIZE            64
0701 #define HCFG_DESCDMA            BIT(23)
0702 #define HCFG_RESVALID_MASK      (0xff << 8)
0703 #define HCFG_RESVALID_SHIFT     8
0704 #define HCFG_ENA32KHZ           BIT(7)
0705 #define HCFG_FSLSSUPP           BIT(2)
0706 #define HCFG_FSLSPCLKSEL_MASK       (0x3 << 0)
0707 #define HCFG_FSLSPCLKSEL_SHIFT      0
0708 #define HCFG_FSLSPCLKSEL_30_60_MHZ  0
0709 #define HCFG_FSLSPCLKSEL_48_MHZ     1
0710 #define HCFG_FSLSPCLKSEL_6_MHZ      2
0711 
0712 #define HFIR                HSOTG_REG(0x0404)
0713 #define HFIR_FRINT_MASK         (0xffff << 0)
0714 #define HFIR_FRINT_SHIFT        0
0715 #define HFIR_RLDCTRL            BIT(16)
0716 
0717 #define HFNUM               HSOTG_REG(0x0408)
0718 #define HFNUM_FRREM_MASK        (0xffff << 16)
0719 #define HFNUM_FRREM_SHIFT       16
0720 #define HFNUM_FRNUM_MASK        (0xffff << 0)
0721 #define HFNUM_FRNUM_SHIFT       0
0722 #define HFNUM_MAX_FRNUM         0x3fff
0723 
0724 #define HPTXSTS             HSOTG_REG(0x0410)
0725 #define TXSTS_QTOP_ODD          BIT(31)
0726 #define TXSTS_QTOP_CHNEP_MASK       (0xf << 27)
0727 #define TXSTS_QTOP_CHNEP_SHIFT      27
0728 #define TXSTS_QTOP_TOKEN_MASK       (0x3 << 25)
0729 #define TXSTS_QTOP_TOKEN_SHIFT      25
0730 #define TXSTS_QTOP_TERMINATE        BIT(24)
0731 #define TXSTS_QSPCAVAIL_MASK        (0xff << 16)
0732 #define TXSTS_QSPCAVAIL_SHIFT       16
0733 #define TXSTS_FSPCAVAIL_MASK        (0xffff << 0)
0734 #define TXSTS_FSPCAVAIL_SHIFT       0
0735 
0736 #define HAINT               HSOTG_REG(0x0414)
0737 #define HAINTMSK            HSOTG_REG(0x0418)
0738 #define HFLBADDR            HSOTG_REG(0x041c)
0739 
0740 #define HPRT0               HSOTG_REG(0x0440)
0741 #define HPRT0_SPD_MASK          (0x3 << 17)
0742 #define HPRT0_SPD_SHIFT         17
0743 #define HPRT0_SPD_HIGH_SPEED        0
0744 #define HPRT0_SPD_FULL_SPEED        1
0745 #define HPRT0_SPD_LOW_SPEED     2
0746 #define HPRT0_TSTCTL_MASK       (0xf << 13)
0747 #define HPRT0_TSTCTL_SHIFT      13
0748 #define HPRT0_PWR           BIT(12)
0749 #define HPRT0_LNSTS_MASK        (0x3 << 10)
0750 #define HPRT0_LNSTS_SHIFT       10
0751 #define HPRT0_RST           BIT(8)
0752 #define HPRT0_SUSP          BIT(7)
0753 #define HPRT0_RES           BIT(6)
0754 #define HPRT0_OVRCURRCHG        BIT(5)
0755 #define HPRT0_OVRCURRACT        BIT(4)
0756 #define HPRT0_ENACHG            BIT(3)
0757 #define HPRT0_ENA           BIT(2)
0758 #define HPRT0_CONNDET           BIT(1)
0759 #define HPRT0_CONNSTS           BIT(0)
0760 
0761 #define HCCHAR(_ch)         HSOTG_REG(0x0500 + 0x20 * (_ch))
0762 #define HCCHAR_CHENA            BIT(31)
0763 #define HCCHAR_CHDIS            BIT(30)
0764 #define HCCHAR_ODDFRM           BIT(29)
0765 #define HCCHAR_DEVADDR_MASK     (0x7f << 22)
0766 #define HCCHAR_DEVADDR_SHIFT        22
0767 #define HCCHAR_MULTICNT_MASK        (0x3 << 20)
0768 #define HCCHAR_MULTICNT_SHIFT       20
0769 #define HCCHAR_EPTYPE_MASK      (0x3 << 18)
0770 #define HCCHAR_EPTYPE_SHIFT     18
0771 #define HCCHAR_LSPDDEV          BIT(17)
0772 #define HCCHAR_EPDIR            BIT(15)
0773 #define HCCHAR_EPNUM_MASK       (0xf << 11)
0774 #define HCCHAR_EPNUM_SHIFT      11
0775 #define HCCHAR_MPS_MASK         (0x7ff << 0)
0776 #define HCCHAR_MPS_SHIFT        0
0777 
0778 #define HCSPLT(_ch)         HSOTG_REG(0x0504 + 0x20 * (_ch))
0779 #define HCSPLT_SPLTENA          BIT(31)
0780 #define HCSPLT_COMPSPLT         BIT(16)
0781 #define HCSPLT_XACTPOS_MASK     (0x3 << 14)
0782 #define HCSPLT_XACTPOS_SHIFT        14
0783 #define HCSPLT_XACTPOS_MID      0
0784 #define HCSPLT_XACTPOS_END      1
0785 #define HCSPLT_XACTPOS_BEGIN        2
0786 #define HCSPLT_XACTPOS_ALL      3
0787 #define HCSPLT_HUBADDR_MASK     (0x7f << 7)
0788 #define HCSPLT_HUBADDR_SHIFT        7
0789 #define HCSPLT_PRTADDR_MASK     (0x7f << 0)
0790 #define HCSPLT_PRTADDR_SHIFT        0
0791 
0792 #define HCINT(_ch)          HSOTG_REG(0x0508 + 0x20 * (_ch))
0793 #define HCINTMSK(_ch)           HSOTG_REG(0x050c + 0x20 * (_ch))
0794 #define HCINTMSK_RESERVED14_31      (0x3ffff << 14)
0795 #define HCINTMSK_FRM_LIST_ROLL      BIT(13)
0796 #define HCINTMSK_XCS_XACT       BIT(12)
0797 #define HCINTMSK_BNA            BIT(11)
0798 #define HCINTMSK_DATATGLERR     BIT(10)
0799 #define HCINTMSK_FRMOVRUN       BIT(9)
0800 #define HCINTMSK_BBLERR         BIT(8)
0801 #define HCINTMSK_XACTERR        BIT(7)
0802 #define HCINTMSK_NYET           BIT(6)
0803 #define HCINTMSK_ACK            BIT(5)
0804 #define HCINTMSK_NAK            BIT(4)
0805 #define HCINTMSK_STALL          BIT(3)
0806 #define HCINTMSK_AHBERR         BIT(2)
0807 #define HCINTMSK_CHHLTD         BIT(1)
0808 #define HCINTMSK_XFERCOMPL      BIT(0)
0809 
0810 #define HCTSIZ(_ch)         HSOTG_REG(0x0510 + 0x20 * (_ch))
0811 #define TSIZ_DOPNG          BIT(31)
0812 #define TSIZ_SC_MC_PID_MASK     (0x3 << 29)
0813 #define TSIZ_SC_MC_PID_SHIFT        29
0814 #define TSIZ_SC_MC_PID_DATA0        0
0815 #define TSIZ_SC_MC_PID_DATA2        1
0816 #define TSIZ_SC_MC_PID_DATA1        2
0817 #define TSIZ_SC_MC_PID_MDATA        3
0818 #define TSIZ_SC_MC_PID_SETUP        3
0819 #define TSIZ_PKTCNT_MASK        (0x3ff << 19)
0820 #define TSIZ_PKTCNT_SHIFT       19
0821 #define TSIZ_NTD_MASK           (0xff << 8)
0822 #define TSIZ_NTD_SHIFT          8
0823 #define TSIZ_SCHINFO_MASK       (0xff << 0)
0824 #define TSIZ_SCHINFO_SHIFT      0
0825 #define TSIZ_XFERSIZE_MASK      (0x7ffff << 0)
0826 #define TSIZ_XFERSIZE_SHIFT     0
0827 
0828 #define HCDMA(_ch)          HSOTG_REG(0x0514 + 0x20 * (_ch))
0829 
0830 #define HCDMAB(_ch)         HSOTG_REG(0x051c + 0x20 * (_ch))
0831 
0832 #define HCFIFO(_ch)         HSOTG_REG(0x1000 + 0x1000 * (_ch))
0833 
0834 /**
0835  * struct dwc2_dma_desc - DMA descriptor structure,
0836  * used for both host and gadget modes
0837  *
0838  * @status: DMA descriptor status quadlet
0839  * @buf:    DMA descriptor data buffer pointer
0840  *
0841  * DMA Descriptor structure contains two quadlets:
0842  * Status quadlet and Data buffer pointer.
0843  */
0844 struct dwc2_dma_desc {
0845     u32 status;
0846     u32 buf;
0847 } __packed;
0848 
0849 /* Host Mode DMA descriptor status quadlet */
0850 
0851 #define HOST_DMA_A          BIT(31)
0852 #define HOST_DMA_STS_MASK       (0x3 << 28)
0853 #define HOST_DMA_STS_SHIFT      28
0854 #define HOST_DMA_STS_PKTERR     BIT(28)
0855 #define HOST_DMA_EOL            BIT(26)
0856 #define HOST_DMA_IOC            BIT(25)
0857 #define HOST_DMA_SUP            BIT(24)
0858 #define HOST_DMA_ALT_QTD        BIT(23)
0859 #define HOST_DMA_QTD_OFFSET_MASK    (0x3f << 17)
0860 #define HOST_DMA_QTD_OFFSET_SHIFT   17
0861 #define HOST_DMA_ISOC_NBYTES_MASK   (0xfff << 0)
0862 #define HOST_DMA_ISOC_NBYTES_SHIFT  0
0863 #define HOST_DMA_NBYTES_MASK        (0x1ffff << 0)
0864 #define HOST_DMA_NBYTES_SHIFT       0
0865 #define HOST_DMA_NBYTES_LIMIT       131071
0866 
0867 /* Device Mode DMA descriptor status quadlet */
0868 
0869 #define DEV_DMA_BUFF_STS_MASK       (0x3 << 30)
0870 #define DEV_DMA_BUFF_STS_SHIFT      30
0871 #define DEV_DMA_BUFF_STS_HREADY     0
0872 #define DEV_DMA_BUFF_STS_DMABUSY    1
0873 #define DEV_DMA_BUFF_STS_DMADONE    2
0874 #define DEV_DMA_BUFF_STS_HBUSY      3
0875 #define DEV_DMA_STS_MASK        (0x3 << 28)
0876 #define DEV_DMA_STS_SHIFT       28
0877 #define DEV_DMA_STS_SUCC        0
0878 #define DEV_DMA_STS_BUFF_FLUSH      1
0879 #define DEV_DMA_STS_BUFF_ERR        3
0880 #define DEV_DMA_L           BIT(27)
0881 #define DEV_DMA_SHORT           BIT(26)
0882 #define DEV_DMA_IOC         BIT(25)
0883 #define DEV_DMA_SR          BIT(24)
0884 #define DEV_DMA_MTRF            BIT(23)
0885 #define DEV_DMA_ISOC_PID_MASK       (0x3 << 23)
0886 #define DEV_DMA_ISOC_PID_SHIFT      23
0887 #define DEV_DMA_ISOC_PID_DATA0      0
0888 #define DEV_DMA_ISOC_PID_DATA2      1
0889 #define DEV_DMA_ISOC_PID_DATA1      2
0890 #define DEV_DMA_ISOC_PID_MDATA      3
0891 #define DEV_DMA_ISOC_FRNUM_MASK     (0x7ff << 12)
0892 #define DEV_DMA_ISOC_FRNUM_SHIFT    12
0893 #define DEV_DMA_ISOC_TX_NBYTES_MASK (0xfff << 0)
0894 #define DEV_DMA_ISOC_TX_NBYTES_LIMIT    0xfff
0895 #define DEV_DMA_ISOC_RX_NBYTES_MASK (0x7ff << 0)
0896 #define DEV_DMA_ISOC_RX_NBYTES_LIMIT    0x7ff
0897 #define DEV_DMA_ISOC_NBYTES_SHIFT   0
0898 #define DEV_DMA_NBYTES_MASK     (0xffff << 0)
0899 #define DEV_DMA_NBYTES_SHIFT        0
0900 #define DEV_DMA_NBYTES_LIMIT        0xffff
0901 
0902 #define MAX_DMA_DESC_NUM_GENERIC    64
0903 #define MAX_DMA_DESC_NUM_HS_ISOC    256
0904 
0905 #endif /* __DWC2_HW_H__ */