0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef __LINUX_CDNS3_GADGET
0013 #define __LINUX_CDNS3_GADGET
0014 #include <linux/usb/gadget.h>
0015 #include <linux/dma-direction.h>
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071 struct cdns3_usb_regs {
0072 __le32 usb_conf;
0073 __le32 usb_sts;
0074 __le32 usb_cmd;
0075 __le32 usb_itpn;
0076 __le32 usb_lpm;
0077 __le32 usb_ien;
0078 __le32 usb_ists;
0079 __le32 ep_sel;
0080 __le32 ep_traddr;
0081 __le32 ep_cfg;
0082 __le32 ep_cmd;
0083 __le32 ep_sts;
0084 __le32 ep_sts_sid;
0085 __le32 ep_sts_en;
0086 __le32 drbl;
0087 __le32 ep_ien;
0088 __le32 ep_ists;
0089 __le32 usb_pwr;
0090 __le32 usb_conf2;
0091 __le32 usb_cap1;
0092 __le32 usb_cap2;
0093 __le32 usb_cap3;
0094 __le32 usb_cap4;
0095 __le32 usb_cap5;
0096 __le32 usb_cap6;
0097 __le32 usb_cpkt1;
0098 __le32 usb_cpkt2;
0099 __le32 usb_cpkt3;
0100 __le32 ep_dma_ext_addr;
0101 __le32 buf_addr;
0102 __le32 buf_data;
0103 __le32 buf_ctrl;
0104 __le32 dtrans;
0105 __le32 tdl_from_trb;
0106 __le32 tdl_beh;
0107 __le32 ep_tdl;
0108 __le32 tdl_beh2;
0109 __le32 dma_adv_td;
0110 __le32 reserved1[26];
0111 __le32 cfg_reg1;
0112 __le32 dbg_link1;
0113 __le32 dbg_link2;
0114 __le32 cfg_regs[74];
0115 __le32 reserved2[51];
0116 __le32 dma_axi_ctrl;
0117 __le32 dma_axi_id;
0118 __le32 dma_axi_cap;
0119 __le32 dma_axi_ctrl0;
0120 __le32 dma_axi_ctrl1;
0121 };
0122
0123
0124
0125 #define USB_CONF_CFGRST BIT(0)
0126
0127 #define USB_CONF_CFGSET BIT(1)
0128
0129 #define USB_CONF_USB3DIS BIT(3)
0130
0131 #define USB_CONF_USB2DIS BIT(4)
0132
0133 #define USB_CONF_LENDIAN BIT(5)
0134
0135
0136
0137
0138
0139 #define USB_CONF_BENDIAN BIT(6)
0140
0141 #define USB_CONF_SWRST BIT(7)
0142
0143 #define USB_CONF_DSING BIT(8)
0144
0145 #define USB_CONF_DMULT BIT(9)
0146
0147 #define USB_CONF_DMAOFFEN BIT(10)
0148
0149 #define USB_CONF_DMAOFFDS BIT(11)
0150
0151 #define USB_CONF_CFORCE_FS BIT(12)
0152
0153 #define USB_CONF_SFORCE_FS BIT(13)
0154
0155 #define USB_CONF_DEVEN BIT(14)
0156
0157 #define USB_CONF_DEVDS BIT(15)
0158
0159 #define USB_CONF_L1EN BIT(16)
0160
0161 #define USB_CONF_L1DS BIT(17)
0162
0163 #define USB_CONF_CLK2OFFEN BIT(18)
0164
0165 #define USB_CONF_CLK2OFFDS BIT(19)
0166
0167 #define USB_CONF_LGO_L0 BIT(20)
0168
0169 #define USB_CONF_CLK3OFFEN BIT(21)
0170
0171 #define USB_CONF_CLK3OFFDS BIT(22)
0172
0173
0174 #define USB_CONF_U1EN BIT(24)
0175
0176 #define USB_CONF_U1DS BIT(25)
0177
0178 #define USB_CONF_U2EN BIT(26)
0179
0180 #define USB_CONF_U2DS BIT(27)
0181
0182 #define USB_CONF_LGO_U0 BIT(28)
0183
0184 #define USB_CONF_LGO_U1 BIT(29)
0185
0186 #define USB_CONF_LGO_U2 BIT(30)
0187
0188 #define USB_CONF_LGO_SSINACT BIT(31)
0189
0190
0191
0192
0193
0194
0195
0196 #define USB_STS_CFGSTS_MASK BIT(0)
0197 #define USB_STS_CFGSTS(p) ((p) & USB_STS_CFGSTS_MASK)
0198
0199
0200
0201
0202
0203 #define USB_STS_OV_MASK BIT(1)
0204 #define USB_STS_OV(p) ((p) & USB_STS_OV_MASK)
0205
0206
0207
0208
0209
0210 #define USB_STS_USB3CONS_MASK BIT(2)
0211 #define USB_STS_USB3CONS(p) ((p) & USB_STS_USB3CONS_MASK)
0212
0213
0214
0215
0216
0217
0218 #define USB_STS_DTRANS_MASK BIT(3)
0219 #define USB_STS_DTRANS(p) ((p) & USB_STS_DTRANS_MASK)
0220
0221
0222
0223
0224
0225
0226
0227
0228 #define USB_STS_USBSPEED_MASK GENMASK(6, 4)
0229 #define USB_STS_USBSPEED(p) (((p) & USB_STS_USBSPEED_MASK) >> 4)
0230 #define USB_STS_LS (0x1 << 4)
0231 #define USB_STS_FS (0x2 << 4)
0232 #define USB_STS_HS (0x3 << 4)
0233 #define USB_STS_SS (0x4 << 4)
0234 #define DEV_UNDEFSPEED(p) (((p) & USB_STS_USBSPEED_MASK) == (0x0 << 4))
0235 #define DEV_LOWSPEED(p) (((p) & USB_STS_USBSPEED_MASK) == USB_STS_LS)
0236 #define DEV_FULLSPEED(p) (((p) & USB_STS_USBSPEED_MASK) == USB_STS_FS)
0237 #define DEV_HIGHSPEED(p) (((p) & USB_STS_USBSPEED_MASK) == USB_STS_HS)
0238 #define DEV_SUPERSPEED(p) (((p) & USB_STS_USBSPEED_MASK) == USB_STS_SS)
0239
0240
0241
0242
0243
0244 #define USB_STS_ENDIAN_MASK BIT(7)
0245 #define USB_STS_ENDIAN(p) ((p) & USB_STS_ENDIAN_MASK)
0246
0247
0248
0249
0250
0251
0252 #define USB_STS_CLK2OFF_MASK BIT(8)
0253 #define USB_STS_CLK2OFF(p) ((p) & USB_STS_CLK2OFF_MASK)
0254
0255
0256
0257
0258
0259
0260 #define USB_STS_CLK3OFF_MASK BIT(9)
0261 #define USB_STS_CLK3OFF(p) ((p) & USB_STS_CLK3OFF_MASK)
0262
0263
0264
0265
0266
0267 #define USB_STS_IN_RST_MASK BIT(10)
0268 #define USB_STS_IN_RST(p) ((p) & USB_STS_IN_RST_MASK)
0269
0270
0271
0272
0273
0274
0275 #define USB_STS_TDL_TRB_ENABLED BIT(11)
0276
0277
0278
0279
0280
0281 #define USB_STS_DEVS_MASK BIT(14)
0282 #define USB_STS_DEVS(p) ((p) & USB_STS_DEVS_MASK)
0283
0284
0285
0286
0287
0288 #define USB_STS_ADDRESSED_MASK BIT(15)
0289 #define USB_STS_ADDRESSED(p) ((p) & USB_STS_ADDRESSED_MASK)
0290
0291
0292
0293
0294
0295 #define USB_STS_L1ENS_MASK BIT(16)
0296 #define USB_STS_L1ENS(p) ((p) & USB_STS_L1ENS_MASK)
0297
0298
0299
0300
0301
0302 #define USB_STS_VBUSS_MASK BIT(17)
0303 #define USB_STS_VBUSS(p) ((p) & USB_STS_VBUSS_MASK)
0304
0305
0306
0307
0308
0309
0310
0311 #define USB_STS_LPMST_MASK GENMASK(19, 18)
0312 #define DEV_L0_STATE(p) (((p) & USB_STS_LPMST_MASK) == (0x0 << 18))
0313 #define DEV_L1_STATE(p) (((p) & USB_STS_LPMST_MASK) == (0x1 << 18))
0314 #define DEV_L2_STATE(p) (((p) & USB_STS_LPMST_MASK) == (0x2 << 18))
0315 #define DEV_L3_STATE(p) (((p) & USB_STS_LPMST_MASK) == (0x3 << 18))
0316
0317
0318
0319
0320
0321 #define USB_STS_USB2CONS_MASK BIT(20)
0322 #define USB_STS_USB2CONS(p) ((p) & USB_STS_USB2CONS_MASK)
0323
0324
0325
0326
0327
0328 #define USB_STS_DISABLE_HS_MASK BIT(21)
0329 #define USB_STS_DISABLE_HS(p) ((p) & USB_STS_DISABLE_HS_MASK)
0330
0331
0332
0333
0334
0335 #define USB_STS_U1ENS_MASK BIT(24)
0336 #define USB_STS_U1ENS(p) ((p) & USB_STS_U1ENS_MASK)
0337
0338
0339
0340
0341
0342 #define USB_STS_U2ENS_MASK BIT(25)
0343 #define USB_STS_U2ENS(p) ((p) & USB_STS_U2ENS_MASK)
0344
0345
0346
0347
0348 #define USB_STS_LST_MASK GENMASK(29, 26)
0349 #define DEV_LST_U0 (((p) & USB_STS_LST_MASK) == (0x0 << 26))
0350 #define DEV_LST_U1 (((p) & USB_STS_LST_MASK) == (0x1 << 26))
0351 #define DEV_LST_U2 (((p) & USB_STS_LST_MASK) == (0x2 << 26))
0352 #define DEV_LST_U3 (((p) & USB_STS_LST_MASK) == (0x3 << 26))
0353 #define DEV_LST_DISABLED (((p) & USB_STS_LST_MASK) == (0x4 << 26))
0354 #define DEV_LST_RXDETECT (((p) & USB_STS_LST_MASK) == (0x5 << 26))
0355 #define DEV_LST_INACTIVE (((p) & USB_STS_LST_MASK) == (0x6 << 26))
0356 #define DEV_LST_POLLING (((p) & USB_STS_LST_MASK) == (0x7 << 26))
0357 #define DEV_LST_RECOVERY (((p) & USB_STS_LST_MASK) == (0x8 << 26))
0358 #define DEV_LST_HOT_RESET (((p) & USB_STS_LST_MASK) == (0x9 << 26))
0359 #define DEV_LST_COMP_MODE (((p) & USB_STS_LST_MASK) == (0xa << 26))
0360 #define DEV_LST_LB_STATE (((p) & USB_STS_LST_MASK) == (0xb << 26))
0361
0362
0363
0364
0365
0366 #define USB_STS_DMAOFF_MASK BIT(30)
0367 #define USB_STS_DMAOFF(p) ((p) & USB_STS_DMAOFF_MASK)
0368
0369
0370
0371
0372
0373 #define USB_STS_ENDIAN2_MASK BIT(31)
0374 #define USB_STS_ENDIAN2(p) ((p) & USB_STS_ENDIAN2_MASK)
0375
0376
0377
0378 #define USB_CMD_SET_ADDR BIT(0)
0379
0380
0381
0382
0383
0384
0385
0386 #define USB_CMD_FADDR_MASK GENMASK(7, 1)
0387 #define USB_CMD_FADDR(p) (((p) << 1) & USB_CMD_FADDR_MASK)
0388
0389 #define USB_CMD_SDNFW BIT(8)
0390
0391 #define USB_CMD_STMODE BIT(9)
0392
0393 #define USB_STS_TMODE_SEL_MASK GENMASK(11, 10)
0394 #define USB_STS_TMODE_SEL(p) (((p) << 10) & USB_STS_TMODE_SEL_MASK)
0395
0396
0397
0398
0399 #define USB_CMD_SDNLTM BIT(12)
0400
0401 #define USB_CMD_SPKT BIT(13)
0402
0403 #define USB_CMD_DNFW_INT_MASK GENMASK(23, 16)
0404 #define USB_STS_DNFW_INT(p) (((p) << 16) & USB_CMD_DNFW_INT_MASK)
0405
0406
0407
0408
0409 #define USB_CMD_DNLTM_BELT_MASK GENMASK(27, 16)
0410 #define USB_STS_DNLTM_BELT(p) (((p) << 16) & USB_CMD_DNLTM_BELT_MASK)
0411
0412
0413
0414
0415
0416
0417
0418 #define USB_ITPN_MASK GENMASK(13, 0)
0419 #define USB_ITPN(p) ((p) & USB_ITPN_MASK)
0420
0421
0422
0423 #define USB_LPM_HIRD_MASK GENMASK(3, 0)
0424 #define USB_LPM_HIRD(p) ((p) & USB_LPM_HIRD_MASK)
0425
0426 #define USB_LPM_BRW BIT(4)
0427
0428
0429
0430 #define USB_IEN_CONIEN BIT(0)
0431
0432 #define USB_IEN_DISIEN BIT(1)
0433
0434 #define USB_IEN_UWRESIEN BIT(2)
0435
0436 #define USB_IEN_UHRESIEN BIT(3)
0437
0438 #define USB_IEN_U3ENTIEN BIT(4)
0439
0440 #define USB_IEN_U3EXTIEN BIT(5)
0441
0442 #define USB_IEN_U2ENTIEN BIT(6)
0443
0444 #define USB_IEN_U2EXTIEN BIT(7)
0445
0446 #define USB_IEN_U1ENTIEN BIT(8)
0447
0448 #define USB_IEN_U1EXTIEN BIT(9)
0449
0450 #define USB_IEN_ITPIEN BIT(10)
0451
0452 #define USB_IEN_WAKEIEN BIT(11)
0453
0454 #define USB_IEN_SPKTIEN BIT(12)
0455
0456 #define USB_IEN_CON2IEN BIT(16)
0457
0458 #define USB_IEN_DIS2IEN BIT(17)
0459
0460 #define USB_IEN_U2RESIEN BIT(18)
0461
0462 #define USB_IEN_L2ENTIEN BIT(20)
0463
0464 #define USB_IEN_L2EXTIEN BIT(21)
0465
0466 #define USB_IEN_L1ENTIEN BIT(24)
0467
0468 #define USB_IEN_L1EXTIEN BIT(25)
0469
0470 #define USB_IEN_CFGRESIEN BIT(26)
0471
0472 #define USB_IEN_UWRESSIEN BIT(28)
0473
0474 #define USB_IEN_UWRESEIEN BIT(29)
0475
0476 #define USB_IEN_INIT (USB_IEN_U2RESIEN | USB_ISTS_DIS2I | USB_IEN_CON2IEN \
0477 | USB_IEN_UHRESIEN | USB_IEN_UWRESIEN | USB_IEN_DISIEN \
0478 | USB_IEN_CONIEN | USB_IEN_U3EXTIEN | USB_IEN_L2ENTIEN \
0479 | USB_IEN_L2EXTIEN | USB_IEN_L1ENTIEN | USB_IEN_U3ENTIEN)
0480
0481
0482
0483 #define USB_ISTS_CONI BIT(0)
0484
0485 #define USB_ISTS_DISI BIT(1)
0486
0487 #define USB_ISTS_UWRESI BIT(2)
0488
0489 #define USB_ISTS_UHRESI BIT(3)
0490
0491 #define USB_ISTS_U3ENTI BIT(4)
0492
0493 #define USB_ISTS_U3EXTI BIT(5)
0494
0495 #define USB_ISTS_U2ENTI BIT(6)
0496
0497 #define USB_ISTS_U2EXTI BIT(7)
0498
0499 #define USB_ISTS_U1ENTI BIT(8)
0500
0501 #define USB_ISTS_U1EXTI BIT(9)
0502
0503 #define USB_ISTS_ITPI BIT(10)
0504
0505 #define USB_ISTS_WAKEI BIT(11)
0506
0507 #define USB_ISTS_SPKTI BIT(12)
0508
0509 #define USB_ISTS_CON2I BIT(16)
0510
0511 #define USB_ISTS_DIS2I BIT(17)
0512
0513 #define USB_ISTS_U2RESI BIT(18)
0514
0515 #define USB_ISTS_L2ENTI BIT(20)
0516
0517 #define USB_ISTS_L2EXTI BIT(21)
0518
0519 #define USB_ISTS_L1ENTI BIT(24)
0520
0521 #define USB_ISTS_L1EXTI BIT(25)
0522
0523 #define USB_ISTS_CFGRESI BIT(26)
0524
0525 #define USB_ISTS_UWRESSI BIT(28)
0526
0527 #define USB_ISTS_UWRESEI BIT(29)
0528
0529
0530 #define EP_SEL_EPNO_MASK GENMASK(3, 0)
0531
0532 #define EP_SEL_EPNO(p) ((p) & EP_SEL_EPNO_MASK)
0533
0534 #define EP_SEL_DIR BIT(7)
0535
0536 #define select_ep_in(nr) (EP_SEL_EPNO(p) | EP_SEL_DIR)
0537 #define select_ep_out (EP_SEL_EPNO(p))
0538
0539
0540
0541 #define EP_TRADDR_TRADDR(p) ((p))
0542
0543
0544
0545 #define EP_CFG_ENABLE BIT(0)
0546
0547
0548
0549
0550
0551
0552 #define EP_CFG_EPTYPE_MASK GENMASK(2, 1)
0553 #define EP_CFG_EPTYPE(p) (((p) << 1) & EP_CFG_EPTYPE_MASK)
0554
0555 #define EP_CFG_STREAM_EN BIT(3)
0556
0557 #define EP_CFG_TDL_CHK BIT(4)
0558
0559 #define EP_CFG_SID_CHK BIT(5)
0560
0561 #define EP_CFG_EPENDIAN BIT(7)
0562
0563 #define EP_CFG_MAXBURST_MASK GENMASK(11, 8)
0564 #define EP_CFG_MAXBURST(p) (((p) << 8) & EP_CFG_MAXBURST_MASK)
0565 #define EP_CFG_MAXBURST_MAX 15
0566
0567 #define EP_CFG_MULT_MASK GENMASK(15, 14)
0568 #define EP_CFG_MULT(p) (((p) << 14) & EP_CFG_MULT_MASK)
0569 #define EP_CFG_MULT_MAX 2
0570
0571 #define EP_CFG_MAXPKTSIZE_MASK GENMASK(26, 16)
0572 #define EP_CFG_MAXPKTSIZE(p) (((p) << 16) & EP_CFG_MAXPKTSIZE_MASK)
0573
0574 #define EP_CFG_BUFFERING_MASK GENMASK(31, 27)
0575 #define EP_CFG_BUFFERING(p) (((p) << 27) & EP_CFG_BUFFERING_MASK)
0576 #define EP_CFG_BUFFERING_MAX 15
0577
0578
0579
0580 #define EP_CMD_EPRST BIT(0)
0581
0582 #define EP_CMD_SSTALL BIT(1)
0583
0584 #define EP_CMD_CSTALL BIT(2)
0585
0586 #define EP_CMD_ERDY BIT(3)
0587
0588 #define EP_CMD_REQ_CMPL BIT(5)
0589
0590 #define EP_CMD_DRDY BIT(6)
0591
0592 #define EP_CMD_DFLUSH BIT(7)
0593
0594
0595
0596
0597
0598 #define EP_CMD_STDL BIT(8)
0599
0600
0601
0602
0603 #define EP_CMD_TDL_MASK GENMASK(15, 9)
0604 #define EP_CMD_TDL_SET(p) (((p) << 9) & EP_CMD_TDL_MASK)
0605 #define EP_CMD_TDL_GET(p) (((p) & EP_CMD_TDL_MASK) >> 9)
0606 #define EP_CMD_TDL_MAX (EP_CMD_TDL_MASK >> 9)
0607
0608
0609 #define EP_CMD_ERDY_SID_MASK GENMASK(31, 16)
0610 #define EP_CMD_ERDY_SID(p) (((p) << 16) & EP_CMD_ERDY_SID_MASK)
0611
0612
0613
0614 #define EP_STS_SETUP BIT(0)
0615
0616 #define EP_STS_STALL(p) ((p) & BIT(1))
0617
0618 #define EP_STS_IOC BIT(2)
0619
0620 #define EP_STS_ISP BIT(3)
0621
0622 #define EP_STS_DESCMIS BIT(4)
0623
0624 #define EP_STS_STREAMR BIT(5)
0625
0626 #define EP_STS_MD_EXIT BIT(6)
0627
0628 #define EP_STS_TRBERR BIT(7)
0629
0630 #define EP_STS_NRDY BIT(8)
0631
0632 #define EP_STS_DBUSY BIT(9)
0633
0634 #define EP_STS_BUFFEMPTY(p) ((p) & BIT(10))
0635
0636 #define EP_STS_CCS(p) ((p) & BIT(11))
0637
0638 #define EP_STS_PRIME BIT(12)
0639
0640 #define EP_STS_SIDERR BIT(13)
0641
0642 #define EP_STS_OUTSMM BIT(14)
0643
0644 #define EP_STS_ISOERR BIT(15)
0645
0646 #define EP_STS_HOSTPP(p) ((p) & BIT(16))
0647
0648 #define EP_STS_SPSMST_MASK GENMASK(18, 17)
0649 #define EP_STS_SPSMST_DISABLED(p) (((p) & EP_STS_SPSMST_MASK) >> 17)
0650 #define EP_STS_SPSMST_IDLE(p) (((p) & EP_STS_SPSMST_MASK) >> 17)
0651 #define EP_STS_SPSMST_START_STREAM(p) (((p) & EP_STS_SPSMST_MASK) >> 17)
0652 #define EP_STS_SPSMST_MOVE_DATA(p) (((p) & EP_STS_SPSMST_MASK) >> 17)
0653
0654 #define EP_STS_IOT BIT(19)
0655
0656 #define EP_STS_OUTQ_NO_MASK GENMASK(27, 24)
0657 #define EP_STS_OUTQ_NO(p) (((p) & EP_STS_OUTQ_NO_MASK) >> 24)
0658
0659 #define EP_STS_OUTQ_VAL_MASK BIT(28)
0660 #define EP_STS_OUTQ_VAL(p) ((p) & EP_STS_OUTQ_VAL_MASK)
0661
0662 #define EP_STS_STPWAIT BIT(31)
0663
0664
0665
0666 #define EP_STS_SID_MASK GENMASK(15, 0)
0667 #define EP_STS_SID(p) ((p) & EP_STS_SID_MASK)
0668
0669
0670
0671 #define EP_STS_EN_SETUPEN BIT(0)
0672
0673 #define EP_STS_EN_DESCMISEN BIT(4)
0674
0675 #define EP_STS_EN_STREAMREN BIT(5)
0676
0677 #define EP_STS_EN_MD_EXITEN BIT(6)
0678
0679 #define EP_STS_EN_TRBERREN BIT(7)
0680
0681 #define EP_STS_EN_NRDYEN BIT(8)
0682
0683 #define EP_STS_EN_PRIMEEEN BIT(12)
0684
0685 #define EP_STS_EN_SIDERREN BIT(13)
0686
0687 #define EP_STS_EN_OUTSMMEN BIT(14)
0688
0689 #define EP_STS_EN_ISOERREN BIT(15)
0690
0691 #define EP_STS_EN_IOTEN BIT(19)
0692
0693 #define EP_STS_EN_STPWAITEN BIT(31)
0694
0695
0696 #define DB_VALUE_BY_INDEX(index) (1 << (index))
0697 #define DB_VALUE_EP0_OUT BIT(0)
0698 #define DB_VALUE_EP0_IN BIT(16)
0699
0700
0701 #define EP_IEN(index) (1 << (index))
0702 #define EP_IEN_EP_OUT0 BIT(0)
0703 #define EP_IEN_EP_IN0 BIT(16)
0704
0705
0706 #define EP_ISTS(index) (1 << (index))
0707 #define EP_ISTS_EP_OUT0 BIT(0)
0708 #define EP_ISTS_EP_IN0 BIT(16)
0709
0710
0711
0712 #define PUSB_PWR_PSO_EN BIT(0)
0713
0714 #define PUSB_PWR_PSO_DS BIT(1)
0715
0716
0717
0718
0719
0720 #define PUSB_PWR_STB_CLK_SWITCH_EN BIT(8)
0721
0722
0723
0724
0725 #define PUSB_PWR_STB_CLK_SWITCH_DONE BIT(9)
0726
0727 #define PUSB_PWR_FST_REG_ACCESS_STAT BIT(30)
0728
0729 #define PUSB_PWR_FST_REG_ACCESS BIT(31)
0730
0731
0732
0733
0734
0735
0736
0737 #define USB_CONF2_DIS_TDL_TRB BIT(1)
0738
0739
0740
0741
0742
0743 #define USB_CONF2_EN_TDL_TRB BIT(2)
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755 #define USB_CAP1_SFR_TYPE_MASK GENMASK(3, 0)
0756 #define DEV_SFR_TYPE_OCP(p) (((p) & USB_CAP1_SFR_TYPE_MASK) == 0x0)
0757 #define DEV_SFR_TYPE_AHB(p) (((p) & USB_CAP1_SFR_TYPE_MASK) == 0x1)
0758 #define DEV_SFR_TYPE_PLB(p) (((p) & USB_CAP1_SFR_TYPE_MASK) == 0x2)
0759 #define DEV_SFR_TYPE_AXI(p) (((p) & USB_CAP1_SFR_TYPE_MASK) == 0x3)
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769 #define USB_CAP1_SFR_WIDTH_MASK GENMASK(7, 4)
0770 #define DEV_SFR_WIDTH_8(p) (((p) & USB_CAP1_SFR_WIDTH_MASK) == (0x0 << 4))
0771 #define DEV_SFR_WIDTH_16(p) (((p) & USB_CAP1_SFR_WIDTH_MASK) == (0x1 << 4))
0772 #define DEV_SFR_WIDTH_32(p) (((p) & USB_CAP1_SFR_WIDTH_MASK) == (0x2 << 4))
0773 #define DEV_SFR_WIDTH_64(p) (((p) & USB_CAP1_SFR_WIDTH_MASK) == (0x3 << 4))
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783 #define USB_CAP1_DMA_TYPE_MASK GENMASK(11, 8)
0784 #define DEV_DMA_TYPE_OCP(p) (((p) & USB_CAP1_DMA_TYPE_MASK) == (0x0 << 8))
0785 #define DEV_DMA_TYPE_AHB(p) (((p) & USB_CAP1_DMA_TYPE_MASK) == (0x1 << 8))
0786 #define DEV_DMA_TYPE_PLB(p) (((p) & USB_CAP1_DMA_TYPE_MASK) == (0x2 << 8))
0787 #define DEV_DMA_TYPE_AXI(p) (((p) & USB_CAP1_DMA_TYPE_MASK) == (0x3 << 8))
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797 #define USB_CAP1_DMA_WIDTH_MASK GENMASK(15, 12)
0798 #define DEV_DMA_WIDTH_32(p) (((p) & USB_CAP1_DMA_WIDTH_MASK) == (0x2 << 12))
0799 #define DEV_DMA_WIDTH_64(p) (((p) & USB_CAP1_DMA_WIDTH_MASK) == (0x3 << 12))
0800
0801
0802
0803
0804
0805
0806
0807 #define USB_CAP1_U3PHY_TYPE_MASK GENMASK(19, 16)
0808 #define DEV_U3PHY_PIPE(p) (((p) & USB_CAP1_U3PHY_TYPE_MASK) == (0x0 << 16))
0809 #define DEV_U3PHY_RMMI(p) (((p) & USB_CAP1_U3PHY_TYPE_MASK) == (0x1 << 16))
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821 #define USB_CAP1_U3PHY_WIDTH_MASK GENMASK(23, 20)
0822 #define DEV_U3PHY_WIDTH_8(p) \
0823 (((p) & USB_CAP1_U3PHY_WIDTH_MASK) == (0x0 << 20))
0824 #define DEV_U3PHY_WIDTH_16(p) \
0825 (((p) & USB_CAP1_U3PHY_WIDTH_MASK) == (0x1 << 16))
0826 #define DEV_U3PHY_WIDTH_32(p) \
0827 (((p) & USB_CAP1_U3PHY_WIDTH_MASK) == (0x2 << 20))
0828 #define DEV_U3PHY_WIDTH_64(p) \
0829 (((p) & USB_CAP1_U3PHY_WIDTH_MASK) == (0x3 << 16))
0830
0831
0832
0833
0834
0835
0836
0837 #define USB_CAP1_U2PHY_EN(p) ((p) & BIT(24))
0838
0839
0840
0841
0842
0843
0844 #define DEV_U2PHY_ULPI(p) ((p) & BIT(25))
0845
0846
0847
0848
0849
0850
0851
0852 #define DEV_U2PHY_WIDTH_16(p) ((p) & BIT(26))
0853
0854
0855
0856
0857
0858 #define USB_CAP1_OTG_READY(p) ((p) & BIT(27))
0859
0860
0861
0862
0863
0864
0865 #define USB_CAP1_TDL_FROM_TRB(p) ((p) & BIT(28))
0866
0867
0868
0869
0870
0871
0872
0873 #define USB_CAP2_ACTUAL_MEM_SIZE(p) ((p) & GENMASK(7, 0))
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888 #define USB_CAP2_MAX_MEM_SIZE(p) ((p) & GENMASK(11, 8))
0889
0890
0891 #define EP_IS_IMPLEMENTED(reg, index) ((reg) & (1 << (index)))
0892
0893
0894 #define EP_SUPPORT_ISO(reg, index) ((reg) & (1 << (index)))
0895
0896
0897 #define EP_SUPPORT_STREAM(reg, index) ((reg) & (1 << (index)))
0898
0899
0900
0901 #define GET_DEV_BASE_VERSION(p) ((p) & GENMASK(23, 0))
0902
0903 #define GET_DEV_CUSTOM_VERSION(p) ((p) & GENMASK(31, 24))
0904
0905 #define DEV_VER_NXP_V1 0x00024502
0906 #define DEV_VER_TI_V1 0x00024509
0907 #define DEV_VER_V2 0x0002450C
0908 #define DEV_VER_V3 0x0002450d
0909
0910
0911
0912
0913
0914
0915 #define DBG_LINK1_LFPS_MIN_DET_U1_EXIT(p) ((p) & GENMASK(7, 0))
0916
0917
0918
0919
0920 #define DBG_LINK1_LFPS_MIN_GEN_U1_EXIT_MASK GENMASK(15, 8)
0921 #define DBG_LINK1_LFPS_MIN_GEN_U1_EXIT(p) (((p) << 8) & GENMASK(15, 8))
0922
0923
0924
0925
0926
0927
0928
0929
0930 #define DBG_LINK1_RXDET_BREAK_DIS BIT(16)
0931
0932 #define DBG_LINK1_LFPS_GEN_PING(p) (((p) << 17) & GENMASK(21, 17))
0933
0934
0935
0936
0937
0938 #define DBG_LINK1_LFPS_MIN_DET_U1_EXIT_SET BIT(24)
0939
0940
0941
0942
0943
0944 #define DBG_LINK1_LFPS_MIN_GEN_U1_EXIT_SET BIT(25)
0945
0946
0947
0948
0949
0950 #define DBG_LINK1_RXDET_BREAK_DIS_SET BIT(26)
0951
0952
0953
0954
0955
0956 #define DBG_LINK1_LFPS_GEN_PING_SET BIT(27)
0957
0958
0959
0960 #define DMA_AXI_CTRL_MARPROT(p) ((p) & GENMASK(2, 0))
0961
0962 #define DMA_AXI_CTRL_MAWPROT(p) (((p) & GENMASK(2, 0)) << 16)
0963 #define DMA_AXI_CTRL_NON_SECURE 0x02
0964
0965 #define gadget_to_cdns3_device(g) (container_of(g, struct cdns3_device, gadget))
0966
0967 #define ep_to_cdns3_ep(ep) (container_of(ep, struct cdns3_endpoint, endpoint))
0968
0969
0970
0971
0972
0973 #define TRBS_PER_SEGMENT 600
0974
0975 #define ISO_MAX_INTERVAL 10
0976
0977 #define MAX_TRB_LENGTH BIT(16)
0978
0979 #if TRBS_PER_SEGMENT < 2
0980 #error "Incorrect TRBS_PER_SEGMENT. Minimal Transfer Ring size is 2."
0981 #endif
0982
0983 #define TRBS_PER_STREAM_SEGMENT 2
0984
0985 #if TRBS_PER_STREAM_SEGMENT < 2
0986 #error "Incorrect TRBS_PER_STREAMS_SEGMENT. Minimal Transfer Ring size is 2."
0987 #endif
0988
0989
0990
0991
0992
0993
0994
0995
0996 #define TRBS_PER_ISOC_SEGMENT (ISO_MAX_INTERVAL * 8)
0997
0998 #define GET_TRBS_PER_SEGMENT(ep_type) ((ep_type) == USB_ENDPOINT_XFER_ISOC ? \
0999 TRBS_PER_ISOC_SEGMENT : TRBS_PER_SEGMENT)
1000
1001
1002
1003
1004
1005
1006
1007
1008 struct cdns3_trb {
1009 __le32 buffer;
1010 __le32 length;
1011 __le32 control;
1012 };
1013
1014 #define TRB_SIZE (sizeof(struct cdns3_trb))
1015 #define TRB_RING_SIZE (TRB_SIZE * TRBS_PER_SEGMENT)
1016 #define TRB_STREAM_RING_SIZE (TRB_SIZE * TRBS_PER_STREAM_SEGMENT)
1017 #define TRB_ISO_RING_SIZE (TRB_SIZE * TRBS_PER_ISOC_SEGMENT)
1018 #define TRB_CTRL_RING_SIZE (TRB_SIZE * 2)
1019
1020
1021 #define TRB_TYPE_BITMASK GENMASK(15, 10)
1022 #define TRB_TYPE(p) ((p) << 10)
1023 #define TRB_FIELD_TO_TYPE(p) (((p) & TRB_TYPE_BITMASK) >> 10)
1024
1025
1026
1027 #define TRB_NORMAL 1
1028
1029 #define TRB_LINK 6
1030
1031
1032 #define TRB_CYCLE BIT(0)
1033
1034
1035
1036 #define TRB_TOGGLE BIT(1)
1037
1038
1039
1040
1041 #define TRB_SMM BIT(1)
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051 #define TRB_SP BIT(1)
1052
1053
1054 #define TRB_ISP BIT(2)
1055
1056 #define TRB_FIFO_MODE BIT(3)
1057
1058 #define TRB_CHAIN BIT(4)
1059
1060 #define TRB_IOC BIT(5)
1061
1062
1063 #define TRB_STREAM_ID_BITMASK GENMASK(31, 16)
1064 #define TRB_STREAM_ID(p) ((p) << 16)
1065 #define TRB_FIELD_TO_STREAMID(p) (((p) & TRB_STREAM_ID_BITMASK) >> 16)
1066
1067
1068 #define TRB_TDL_HS_SIZE(p) (((p) << 16) & GENMASK(31, 16))
1069 #define TRB_TDL_HS_SIZE_GET(p) (((p) & GENMASK(31, 16)) >> 16)
1070
1071
1072 #define TRB_LEN(p) ((p) & GENMASK(16, 0))
1073
1074
1075 #define TRB_TDL_SS_SIZE(p) (((p) << 17) & GENMASK(23, 17))
1076 #define TRB_TDL_SS_SIZE_GET(p) (((p) & GENMASK(23, 17)) >> 17)
1077
1078
1079 #define TRB_BURST_LEN(p) ((unsigned int)((p) << 24) & GENMASK(31, 24))
1080 #define TRB_BURST_LEN_GET(p) (((p) & GENMASK(31, 24)) >> 24)
1081
1082
1083 #define TRB_BUFFER(p) ((p) & GENMASK(31, 0))
1084
1085
1086
1087
1088
1089 #define USB_DEVICE_MAX_ADDRESS 127
1090
1091
1092 #define CDNS3_EP_MAX_PACKET_LIMIT 1024
1093 #define CDNS3_EP_MAX_STREAMS 15
1094 #define CDNS3_EP0_MAX_PACKET_LIMIT 512
1095
1096
1097 #define CDNS3_ENDPOINTS_MAX_COUNT 32
1098 #define CDNS3_EP_ZLP_BUF_SIZE 1024
1099
1100 #define CDNS3_MAX_NUM_DESCMISS_BUF 32
1101 #define CDNS3_DESCMIS_BUF_SIZE 2048
1102 #define CDNS3_WA2_NUM_BUFFERS 128
1103
1104
1105
1106 struct cdns3_device;
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135 struct cdns3_endpoint {
1136 struct usb_ep endpoint;
1137 struct list_head pending_req_list;
1138 struct list_head deferred_req_list;
1139 struct list_head wa2_descmiss_req_list;
1140 int wa2_counter;
1141
1142 struct cdns3_trb *trb_pool;
1143 dma_addr_t trb_pool_dma;
1144
1145 struct cdns3_device *cdns3_dev;
1146 char name[20];
1147
1148 #define EP_ENABLED BIT(0)
1149 #define EP_STALLED BIT(1)
1150 #define EP_STALL_PENDING BIT(2)
1151 #define EP_WEDGE BIT(3)
1152 #define EP_TRANSFER_STARTED BIT(4)
1153 #define EP_UPDATE_EP_TRBADDR BIT(5)
1154 #define EP_PENDING_REQUEST BIT(6)
1155 #define EP_RING_FULL BIT(7)
1156 #define EP_CLAIMED BIT(8)
1157 #define EP_DEFERRED_DRDY BIT(9)
1158 #define EP_QUIRK_ISO_OUT_EN BIT(10)
1159 #define EP_QUIRK_END_TRANSFER BIT(11)
1160 #define EP_QUIRK_EXTRA_BUF_DET BIT(12)
1161 #define EP_QUIRK_EXTRA_BUF_EN BIT(13)
1162 #define EP_TDLCHK_EN BIT(15)
1163 #define EP_CONFIGURED BIT(16)
1164 u32 flags;
1165
1166 struct cdns3_request *descmis_req;
1167
1168 u8 dir;
1169 u8 num;
1170 u8 type;
1171 int interval;
1172
1173 int free_trbs;
1174 int num_trbs;
1175 int alloc_ring_size;
1176 u8 pcs;
1177 u8 ccs;
1178 int enqueue;
1179 int dequeue;
1180 u8 trb_burst_size;
1181
1182 unsigned int wa1_set:1;
1183 struct cdns3_trb *wa1_trb;
1184 unsigned int wa1_trb_index;
1185 unsigned int wa1_cycle_bit:1;
1186
1187
1188 unsigned int use_streams:1;
1189 unsigned int prime_flag:1;
1190 u32 ep_sts_pending;
1191 u16 last_stream_id;
1192 u16 pending_tdl;
1193 unsigned int stream_sg_idx;
1194 };
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205 struct cdns3_aligned_buf {
1206 void *buf;
1207 dma_addr_t dma;
1208 u32 size;
1209 enum dma_data_direction dir;
1210 unsigned in_use:1;
1211 struct list_head list;
1212 };
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229 struct cdns3_request {
1230 struct usb_request request;
1231 struct cdns3_endpoint *priv_ep;
1232 struct cdns3_trb *trb;
1233 int start_trb;
1234 int end_trb;
1235 struct cdns3_aligned_buf *aligned_buf;
1236 #define REQUEST_PENDING BIT(0)
1237 #define REQUEST_INTERNAL BIT(1)
1238 #define REQUEST_INTERNAL_CH BIT(2)
1239 #define REQUEST_ZLP BIT(3)
1240 #define REQUEST_UNALIGNED BIT(4)
1241 u32 flags;
1242 struct list_head list;
1243 int finished_trb;
1244 int num_of_trb;
1245 };
1246
1247 #define to_cdns3_request(r) (container_of(r, struct cdns3_request, request))
1248
1249
1250 #define CDNS3_SETUP_STAGE 0x0
1251 #define CDNS3_DATA_STAGE 0x1
1252 #define CDNS3_STATUS_STAGE 0x2
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287 struct cdns3_device {
1288 struct device *dev;
1289 struct device *sysdev;
1290
1291 struct usb_gadget gadget;
1292 struct usb_gadget_driver *gadget_driver;
1293
1294 #define CDNS_REVISION_V0 0x00024501
1295 #define CDNS_REVISION_V1 0x00024509
1296 u32 dev_ver;
1297
1298
1299 spinlock_t lock;
1300
1301 struct cdns3_usb_regs __iomem *regs;
1302
1303 struct dma_pool *eps_dma_pool;
1304 struct usb_ctrlrequest *setup_buf;
1305 dma_addr_t setup_dma;
1306 void *zlp_buf;
1307
1308 u8 ep0_stage;
1309 int ep0_data_dir;
1310
1311 struct cdns3_endpoint *eps[CDNS3_ENDPOINTS_MAX_COUNT];
1312
1313 struct list_head aligned_buf_list;
1314 struct work_struct aligned_buf_wq;
1315
1316 u32 selected_ep;
1317 u16 isoch_delay;
1318
1319 unsigned wait_for_setup:1;
1320 unsigned u1_allowed:1;
1321 unsigned u2_allowed:1;
1322 unsigned is_selfpowered:1;
1323 unsigned setup_pending:1;
1324 unsigned hw_configured_flag:1;
1325 unsigned wake_up_flag:1;
1326 unsigned status_completion_no_call:1;
1327 unsigned using_streams:1;
1328 int out_mem_is_allocated;
1329
1330 struct work_struct pending_status_wq;
1331 struct usb_request *pending_status_request;
1332
1333
1334 u16 onchip_buffers;
1335 u16 onchip_used_size;
1336
1337 u16 ep_buf_size;
1338 u16 ep_iso_burst;
1339 };
1340
1341 void cdns3_set_register_bit(void __iomem *ptr, u32 mask);
1342 dma_addr_t cdns3_trb_virt_to_dma(struct cdns3_endpoint *priv_ep,
1343 struct cdns3_trb *trb);
1344 enum usb_device_speed cdns3_get_speed(struct cdns3_device *priv_dev);
1345 void cdns3_pending_setup_status_handler(struct work_struct *work);
1346 void cdns3_hw_reset_eps_config(struct cdns3_device *priv_dev);
1347 void cdns3_set_hw_configuration(struct cdns3_device *priv_dev);
1348 void cdns3_select_ep(struct cdns3_device *priv_dev, u32 ep);
1349 void cdns3_allow_enable_l1(struct cdns3_device *priv_dev, int enable);
1350 struct usb_request *cdns3_next_request(struct list_head *list);
1351 void cdns3_rearm_transfer(struct cdns3_endpoint *priv_ep, u8 rearm);
1352 int cdns3_allocate_trb_pool(struct cdns3_endpoint *priv_ep);
1353 u8 cdns3_ep_addr_to_index(u8 ep_addr);
1354 int cdns3_gadget_ep_set_wedge(struct usb_ep *ep);
1355 int cdns3_gadget_ep_set_halt(struct usb_ep *ep, int value);
1356 void __cdns3_gadget_ep_set_halt(struct cdns3_endpoint *priv_ep);
1357 int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep);
1358 struct usb_request *cdns3_gadget_ep_alloc_request(struct usb_ep *ep,
1359 gfp_t gfp_flags);
1360 void cdns3_gadget_ep_free_request(struct usb_ep *ep,
1361 struct usb_request *request);
1362 int cdns3_gadget_ep_dequeue(struct usb_ep *ep, struct usb_request *request);
1363 void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep,
1364 struct cdns3_request *priv_req,
1365 int status);
1366
1367 int cdns3_init_ep0(struct cdns3_device *priv_dev,
1368 struct cdns3_endpoint *priv_ep);
1369 void cdns3_ep0_config(struct cdns3_device *priv_dev);
1370 int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable);
1371 void cdns3_check_ep0_interrupt_proceed(struct cdns3_device *priv_dev, int dir);
1372 int __cdns3_gadget_wakeup(struct cdns3_device *priv_dev);
1373
1374 #endif