Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Driver for the NXP ISP1760 chip
0004  *
0005  * Copyright 2021 Linaro, Rui Miguel Silva
0006  * Copyright 2014 Laurent Pinchart
0007  * Copyright 2007 Sebastian Siewior
0008  *
0009  * Contacts:
0010  *     Sebastian Siewior <bigeasy@linutronix.de>
0011  *     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
0012  *     Rui Miguel Silva <rui.silva@linaro.org>
0013  */
0014 
0015 #ifndef _ISP176x_REGS_H_
0016 #define _ISP176x_REGS_H_
0017 
0018 /* -----------------------------------------------------------------------------
0019  * Host Controller
0020  */
0021 
0022 /* ISP1760/31 */
0023 /* EHCI capability registers */
0024 #define ISP176x_HC_VERSION      0x002
0025 #define ISP176x_HC_HCSPARAMS        0x004
0026 #define ISP176x_HC_HCCPARAMS        0x008
0027 
0028 /* EHCI operational registers */
0029 #define ISP176x_HC_USBCMD       0x020
0030 #define ISP176x_HC_USBSTS       0x024
0031 #define ISP176x_HC_FRINDEX      0x02c
0032 
0033 #define ISP176x_HC_CONFIGFLAG       0x060
0034 #define ISP176x_HC_PORTSC1      0x064
0035 
0036 #define ISP176x_HC_ISO_PTD_DONEMAP  0x130
0037 #define ISP176x_HC_ISO_PTD_SKIPMAP  0x134
0038 #define ISP176x_HC_ISO_PTD_LASTPTD  0x138
0039 #define ISP176x_HC_INT_PTD_DONEMAP  0x140
0040 #define ISP176x_HC_INT_PTD_SKIPMAP  0x144
0041 #define ISP176x_HC_INT_PTD_LASTPTD  0x148
0042 #define ISP176x_HC_ATL_PTD_DONEMAP  0x150
0043 #define ISP176x_HC_ATL_PTD_SKIPMAP  0x154
0044 #define ISP176x_HC_ATL_PTD_LASTPTD  0x158
0045 
0046 /* Configuration Register */
0047 #define ISP176x_HC_HW_MODE_CTRL     0x300
0048 #define ISP176x_HC_CHIP_ID      0x304
0049 #define ISP176x_HC_SCRATCH      0x308
0050 #define ISP176x_HC_RESET        0x30c
0051 #define ISP176x_HC_BUFFER_STATUS    0x334
0052 #define ISP176x_HC_MEMORY       0x33c
0053 
0054 /* Interrupt Register */
0055 #define ISP176x_HC_INTERRUPT        0x310
0056 #define ISP176x_HC_INTERRUPT_ENABLE 0x314
0057 #define ISP176x_HC_ISO_IRQ_MASK_OR  0x318
0058 #define ISP176x_HC_INT_IRQ_MASK_OR  0x31c
0059 #define ISP176x_HC_ATL_IRQ_MASK_OR  0x320
0060 #define ISP176x_HC_ISO_IRQ_MASK_AND 0x324
0061 #define ISP176x_HC_INT_IRQ_MASK_AND 0x328
0062 #define ISP176x_HC_ATL_IRQ_MASK_AND 0x32c
0063 
0064 #define ISP176x_HC_OTG_CTRL     0x374
0065 #define ISP176x_HC_OTG_CTRL_SET     0x374
0066 #define ISP176x_HC_OTG_CTRL_CLEAR   0x376
0067 
0068 enum isp176x_host_controller_fields {
0069     /* HC_PORTSC1 */
0070     PORT_OWNER, PORT_POWER, PORT_LSTATUS, PORT_RESET, PORT_SUSPEND,
0071     PORT_RESUME, PORT_PE, PORT_CSC, PORT_CONNECT,
0072     /* HC_HCSPARAMS */
0073     HCS_PPC, HCS_N_PORTS,
0074     /* HC_HCCPARAMS */
0075     HCC_ISOC_CACHE, HCC_ISOC_THRES,
0076     /* HC_USBCMD */
0077     CMD_LRESET, CMD_RESET, CMD_RUN,
0078     /* HC_USBSTS */
0079     STS_PCD,
0080     /* HC_FRINDEX */
0081     HC_FRINDEX,
0082     /* HC_CONFIGFLAG */
0083     FLAG_CF,
0084     /* ISO/INT/ATL PTD */
0085     HC_ISO_PTD_DONEMAP, HC_ISO_PTD_SKIPMAP, HC_ISO_PTD_LASTPTD,
0086     HC_INT_PTD_DONEMAP, HC_INT_PTD_SKIPMAP, HC_INT_PTD_LASTPTD,
0087     HC_ATL_PTD_DONEMAP, HC_ATL_PTD_SKIPMAP, HC_ATL_PTD_LASTPTD,
0088     /* HC_HW_MODE_CTRL */
0089     ALL_ATX_RESET, HW_ANA_DIGI_OC, HW_DEV_DMA, HW_COMN_IRQ, HW_COMN_DMA,
0090     HW_DATA_BUS_WIDTH, HW_DACK_POL_HIGH, HW_DREQ_POL_HIGH, HW_INTR_HIGH_ACT,
0091     HW_INTF_LOCK, HW_INTR_EDGE_TRIG, HW_GLOBAL_INTR_EN,
0092     /* HC_CHIP_ID */
0093     HC_CHIP_ID_HIGH, HC_CHIP_ID_LOW, HC_CHIP_REV,
0094     /* HC_SCRATCH */
0095     HC_SCRATCH,
0096     /* HC_RESET */
0097     SW_RESET_RESET_ATX, SW_RESET_RESET_HC, SW_RESET_RESET_ALL,
0098     /* HC_BUFFER_STATUS */
0099     ISO_BUF_FILL, INT_BUF_FILL, ATL_BUF_FILL,
0100     /* HC_MEMORY */
0101     MEM_BANK_SEL, MEM_START_ADDR,
0102     /* HC_DATA */
0103     HC_DATA,
0104     /* HC_INTERRUPT */
0105     HC_INTERRUPT,
0106     /* HC_INTERRUPT_ENABLE */
0107     HC_INT_IRQ_ENABLE, HC_ATL_IRQ_ENABLE,
0108     /* INTERRUPT MASKS */
0109     HC_ISO_IRQ_MASK_OR, HC_INT_IRQ_MASK_OR, HC_ATL_IRQ_MASK_OR,
0110     HC_ISO_IRQ_MASK_AND, HC_INT_IRQ_MASK_AND, HC_ATL_IRQ_MASK_AND,
0111     /* HW_OTG_CTRL_SET */
0112     HW_OTG_DISABLE, HW_SW_SEL_HC_DC, HW_VBUS_DRV, HW_SEL_CP_EXT,
0113     HW_DM_PULLDOWN, HW_DP_PULLDOWN, HW_DP_PULLUP, HW_HC_2_DIS,
0114     /* HW_OTG_CTRL_CLR */
0115     HW_OTG_DISABLE_CLEAR, HW_SW_SEL_HC_DC_CLEAR, HW_VBUS_DRV_CLEAR,
0116     HW_SEL_CP_EXT_CLEAR, HW_DM_PULLDOWN_CLEAR, HW_DP_PULLDOWN_CLEAR,
0117     HW_DP_PULLUP_CLEAR, HW_HC_2_DIS_CLEAR,
0118     /* Last element */
0119     HC_FIELD_MAX,
0120 };
0121 
0122 /* ISP1763 */
0123 /* EHCI operational registers */
0124 #define ISP1763_HC_USBCMD       0x8c
0125 #define ISP1763_HC_USBSTS       0x90
0126 #define ISP1763_HC_FRINDEX      0x98
0127 
0128 #define ISP1763_HC_CONFIGFLAG       0x9c
0129 #define ISP1763_HC_PORTSC1      0xa0
0130 
0131 #define ISP1763_HC_ISO_PTD_DONEMAP  0xa4
0132 #define ISP1763_HC_ISO_PTD_SKIPMAP  0xa6
0133 #define ISP1763_HC_ISO_PTD_LASTPTD  0xa8
0134 #define ISP1763_HC_INT_PTD_DONEMAP  0xaa
0135 #define ISP1763_HC_INT_PTD_SKIPMAP  0xac
0136 #define ISP1763_HC_INT_PTD_LASTPTD  0xae
0137 #define ISP1763_HC_ATL_PTD_DONEMAP  0xb0
0138 #define ISP1763_HC_ATL_PTD_SKIPMAP  0xb2
0139 #define ISP1763_HC_ATL_PTD_LASTPTD  0xb4
0140 
0141 /* Configuration Register */
0142 #define ISP1763_HC_HW_MODE_CTRL     0xb6
0143 #define ISP1763_HC_CHIP_REV     0x70
0144 #define ISP1763_HC_CHIP_ID      0x72
0145 #define ISP1763_HC_SCRATCH      0x78
0146 #define ISP1763_HC_RESET        0xb8
0147 #define ISP1763_HC_BUFFER_STATUS    0xba
0148 #define ISP1763_HC_MEMORY       0xc4
0149 #define ISP1763_HC_DATA         0xc6
0150 
0151 /* Interrupt Register */
0152 #define ISP1763_HC_INTERRUPT        0xd4
0153 #define ISP1763_HC_INTERRUPT_ENABLE 0xd6
0154 #define ISP1763_HC_ISO_IRQ_MASK_OR  0xd8
0155 #define ISP1763_HC_INT_IRQ_MASK_OR  0xda
0156 #define ISP1763_HC_ATL_IRQ_MASK_OR  0xdc
0157 #define ISP1763_HC_ISO_IRQ_MASK_AND 0xde
0158 #define ISP1763_HC_INT_IRQ_MASK_AND 0xe0
0159 #define ISP1763_HC_ATL_IRQ_MASK_AND 0xe2
0160 
0161 #define ISP1763_HC_OTG_CTRL_SET     0xe4
0162 #define ISP1763_HC_OTG_CTRL_CLEAR   0xe6
0163 
0164 /* -----------------------------------------------------------------------------
0165  * Peripheral Controller
0166  */
0167 
0168 #define DC_IEPTX(n)         (1 << (11 + 2 * (n)))
0169 #define DC_IEPRX(n)         (1 << (10 + 2 * (n)))
0170 #define DC_IEPRXTX(n)           (3 << (10 + 2 * (n)))
0171 
0172 #define ISP176x_DC_CDBGMOD_ACK      BIT(6)
0173 #define ISP176x_DC_DDBGMODIN_ACK    BIT(4)
0174 #define ISP176x_DC_DDBGMODOUT_ACK   BIT(2)
0175 
0176 #define ISP176x_DC_IEP0SETUP        BIT(8)
0177 #define ISP176x_DC_IEVBUS       BIT(7)
0178 #define ISP176x_DC_IEHS_STA     BIT(5)
0179 #define ISP176x_DC_IERESM       BIT(4)
0180 #define ISP176x_DC_IESUSP       BIT(3)
0181 #define ISP176x_DC_IEBRST       BIT(0)
0182 
0183 #define ISP176x_HW_OTG_DISABLE_CLEAR    BIT(26)
0184 #define ISP176x_HW_SW_SEL_HC_DC_CLEAR   BIT(23)
0185 #define ISP176x_HW_VBUS_DRV_CLEAR   BIT(20)
0186 #define ISP176x_HW_SEL_CP_EXT_CLEAR BIT(19)
0187 #define ISP176x_HW_DM_PULLDOWN_CLEAR    BIT(18)
0188 #define ISP176x_HW_DP_PULLDOWN_CLEAR    BIT(17)
0189 #define ISP176x_HW_DP_PULLUP_CLEAR  BIT(16)
0190 #define ISP176x_HW_OTG_DISABLE      BIT(10)
0191 #define ISP176x_HW_SW_SEL_HC_DC     BIT(7)
0192 #define ISP176x_HW_VBUS_DRV     BIT(4)
0193 #define ISP176x_HW_SEL_CP_EXT       BIT(3)
0194 #define ISP176x_HW_DM_PULLDOWN      BIT(2)
0195 #define ISP176x_HW_DP_PULLDOWN      BIT(1)
0196 #define ISP176x_HW_DP_PULLUP        BIT(0)
0197 
0198 #define ISP176x_DC_ENDPTYP_ISOC     0x01
0199 #define ISP176x_DC_ENDPTYP_BULK     0x02
0200 #define ISP176x_DC_ENDPTYP_INTERRUPT    0x03
0201 
0202 /* Initialization Registers */
0203 #define ISP176x_DC_ADDRESS      0x0200
0204 #define ISP176x_DC_MODE         0x020c
0205 #define ISP176x_DC_INTCONF      0x0210
0206 #define ISP176x_DC_DEBUG        0x0212
0207 #define ISP176x_DC_INTENABLE        0x0214
0208 
0209 /* Data Flow Registers */
0210 #define ISP176x_DC_EPMAXPKTSZ       0x0204
0211 #define ISP176x_DC_EPTYPE       0x0208
0212 
0213 #define ISP176x_DC_BUFLEN       0x021c
0214 #define ISP176x_DC_BUFSTAT      0x021e
0215 #define ISP176x_DC_DATAPORT     0x0220
0216 
0217 #define ISP176x_DC_CTRLFUNC     0x0228
0218 #define ISP176x_DC_EPINDEX      0x022c
0219 
0220 /* DMA Registers */
0221 #define ISP176x_DC_DMACMD       0x0230
0222 #define ISP176x_DC_DMATXCOUNT       0x0234
0223 #define ISP176x_DC_DMACONF      0x0238
0224 #define ISP176x_DC_DMAHW        0x023c
0225 #define ISP176x_DC_DMAINTREASON     0x0250
0226 #define ISP176x_DC_DMAINTEN     0x0254
0227 #define ISP176x_DC_DMAEP        0x0258
0228 #define ISP176x_DC_DMABURSTCOUNT    0x0264
0229 
0230 /* General Registers */
0231 #define ISP176x_DC_INTERRUPT        0x0218
0232 #define ISP176x_DC_CHIPID       0x0270
0233 #define ISP176x_DC_FRAMENUM     0x0274
0234 #define ISP176x_DC_SCRATCH      0x0278
0235 #define ISP176x_DC_UNLOCKDEV        0x027c
0236 #define ISP176x_DC_INTPULSEWIDTH    0x0280
0237 #define ISP176x_DC_TESTMODE     0x0284
0238 
0239 enum isp176x_device_controller_fields {
0240     /* DC_ADDRESS */
0241     DC_DEVEN, DC_DEVADDR,
0242     /* DC_MODE */
0243     DC_VBUSSTAT, DC_SFRESET, DC_GLINTENA,
0244     /* DC_INTCONF */
0245     DC_CDBGMOD_ACK, DC_DDBGMODIN_ACK, DC_DDBGMODOUT_ACK, DC_INTPOL,
0246     /* DC_INTENABLE */
0247     DC_IEPRXTX_7, DC_IEPRXTX_6, DC_IEPRXTX_5, DC_IEPRXTX_4, DC_IEPRXTX_3,
0248     DC_IEPRXTX_2, DC_IEPRXTX_1, DC_IEPRXTX_0,
0249     DC_IEP0SETUP, DC_IEVBUS, DC_IEHS_STA, DC_IERESM, DC_IESUSP, DC_IEBRST,
0250     /* DC_EPINDEX */
0251     DC_EP0SETUP, DC_ENDPIDX, DC_EPDIR,
0252     /* DC_CTRLFUNC */
0253     DC_CLBUF, DC_VENDP, DC_DSEN, DC_STATUS, DC_STALL,
0254     /* DC_BUFLEN */
0255     DC_BUFLEN,
0256     /* DC_EPMAXPKTSZ */
0257     DC_FFOSZ,
0258     /* DC_EPTYPE */
0259     DC_EPENABLE, DC_ENDPTYP,
0260     /* DC_FRAMENUM */
0261     DC_FRAMENUM, DC_UFRAMENUM,
0262     /* DC_CHIP_ID */
0263     DC_CHIP_ID_HIGH, DC_CHIP_ID_LOW,
0264     /* DC_SCRATCH */
0265     DC_SCRATCH,
0266     /* Last element */
0267     DC_FIELD_MAX,
0268 };
0269 
0270 /* ISP1763 */
0271 /* Initialization Registers */
0272 #define ISP1763_DC_ADDRESS      0x00
0273 #define ISP1763_DC_MODE         0x0c
0274 #define ISP1763_DC_INTCONF      0x10
0275 #define ISP1763_DC_INTENABLE        0x14
0276 
0277 /* Data Flow Registers */
0278 #define ISP1763_DC_EPMAXPKTSZ       0x04
0279 #define ISP1763_DC_EPTYPE       0x08
0280 
0281 #define ISP1763_DC_BUFLEN       0x1c
0282 #define ISP1763_DC_BUFSTAT      0x1e
0283 #define ISP1763_DC_DATAPORT     0x20
0284 
0285 #define ISP1763_DC_CTRLFUNC     0x28
0286 #define ISP1763_DC_EPINDEX      0x2c
0287 
0288 /* DMA Registers */
0289 #define ISP1763_DC_DMACMD       0x30
0290 #define ISP1763_DC_DMATXCOUNT       0x34
0291 #define ISP1763_DC_DMACONF      0x38
0292 #define ISP1763_DC_DMAHW        0x3c
0293 #define ISP1763_DC_DMAINTREASON     0x50
0294 #define ISP1763_DC_DMAINTEN     0x54
0295 #define ISP1763_DC_DMAEP        0x58
0296 #define ISP1763_DC_DMABURSTCOUNT    0x64
0297 
0298 /* General Registers */
0299 #define ISP1763_DC_INTERRUPT        0x18
0300 #define ISP1763_DC_CHIPID_LOW       0x70
0301 #define ISP1763_DC_CHIPID_HIGH      0x72
0302 #define ISP1763_DC_FRAMENUM     0x74
0303 #define ISP1763_DC_SCRATCH      0x78
0304 #define ISP1763_DC_UNLOCKDEV        0x7c
0305 #define ISP1763_DC_INTPULSEWIDTH    0x80
0306 #define ISP1763_DC_TESTMODE     0x84
0307 
0308 #endif