| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| // clang-format off |
| |
| #include <hw/reg.h> |
| |
| #define DWC3_READ32(a) readl(a) |
| #define DWC3_WRITE32(a, v) writel(v, a) |
| #define DWC3_READ64(a) readll(a) |
| #define DWC3_WRITE64(a, v) writell(v, a) |
| |
| #define DWC3_MASK(start, count) (((1 << (count)) - 1) << (start)) |
| #define DWC3_GET_BITS32(src, start, count) ((DWC3_READ32(src) & DWC3_MASK(start, count)) >> (start)) |
| #define DWC3_SET_BITS32(dest, start, count, value) \ |
| DWC3_WRITE32(dest, (DWC3_READ32(dest) & ~DWC3_MASK(start, count)) | \ |
| (((value) << (start)) & DWC3_MASK(start, count))) |
| |
| // XHCI register offsets |
| #define CAPLENGTH 0x0000 // Host Controller Operational Registers |
| #define CAPLENGTH_HCIVERSION_START 16 |
| #define CAPLENGTH_HCIVERSION_BITS 16 |
| #define CAPLENGTH_CAPLENGTH_START 0 |
| #define CAPLENGTH_CAPLENGTH_BITS 8 |
| |
| #define HCSPARAMS1 0x0004 // Structural Parameters 1 Register |
| #define HCSPARAMS1_MAXPORTS_START 24 |
| #define HCSPARAMS1_MAXPORTS_BITS 8 |
| #define HCSPARAMS1_MAXINTRS_START 8 |
| #define HCSPARAMS1_MAXINTRS_BITS 11 |
| #define HCSPARAMS1_MAXSLOTS_START 0 |
| #define HCSPARAMS1_MAXSLOTS_BITS 8 |
| |
| #define HCSPARAMS2 0x0008 // Structural Parameters 2 Register |
| #define HCSPARAMS2_MAXSCRATCHPADBUFS_START 27 |
| #define HCSPARAMS2_MAXSCRATCHPADBUFS_BITS 5 |
| #define HCSPARAMS2_SPR (1 << 26) |
| #define HCSPARAMS2_MAXSCRATCHPADBUFS_HI_START 21 |
| #define HCSPARAMS2_MAXSCRATCHPADBUFS_HI_BITS 5 |
| #define HCSPARAMS2_ERSTMAX_START 4 |
| #define HCSPARAMS2_ERSTMAX_BITS 4 |
| #define HCSPARAMS2_IST_START 0 |
| #define HCSPARAMS2_IST_BITS 4 |
| |
| #define HCSPARAMS3 0x000c // Structural Parameters 3 Register |
| #define HCSPARAMS3_U2_DEVICE_EXIT_LAT_START 16 |
| #define HCSPARAMS3_U2_DEVICE_EXIT_LAT_BITS 16 |
| #define HCSPARAMS3_U1_DEVICE_EXIT_LAT_START 0 |
| #define HCSPARAMS3_U1_DEVICE_EXIT_LAT_BITS 8 |
| |
| #define HCCPARAMS1 0x0010 // Capability Parameters 1 Register |
| #define HCCPARAMS1_XECP_START 16 |
| #define HCCPARAMS1_XECP_BITS 16 |
| #define HCCPARAMS1_MAXPSASIZE_START 12 |
| #define HCCPARAMS1_MAXPSASIZE_BITS 4 |
| #define HCCPARAMS1_CFC (1 << 11) |
| #define HCCPARAMS1_SEC (1 << 10) |
| #define HCCPARAMS1_SPC (1 << 9) |
| #define HCCPARAMS1_PAE (1 << 8) |
| #define HCCPARAMS1_NSS (1 << 7) |
| #define HCCPARAMS1_LTC (1 << 6) |
| #define HCCPARAMS1_LHRC (1 << 5) |
| #define HCCPARAMS1_PIND (1 << 4) |
| #define HCCPARAMS1_PPC (1 << 3) |
| #define HCCPARAMS1_CSZ (1 << 2) |
| #define HCCPARAMS1_BNC (1 << 1) |
| #define HCCPARAMS1_AC64 (1 << 0) |
| |
| #define DBOFF 0x0014 // Doorbell Offset Register |
| #define RTSOFF 0x0018 // Runtime Register Space Offset Register |
| |
| #define HCCPARAMS2 0x001c // Host Controller Capability Parameters 2 |
| #define HCCPARAMS2_ETC (1 << 6) |
| #define HCCPARAMS2_CIC (1 << 5) |
| #define HCCPARAMS2_LEC (1 << 4) |
| #define HCCPARAMS2_CTC (1 << 3) |
| #define HCCPARAMS2_FSC (1 << 2) |
| #define HCCPARAMS2_CMC (1 << 1) |
| #define HCCPARAMS2_U3C (1 << 0) |
| |
| // Global register offsets |
| #define GSBUSCFG0 0xc100 // Global SoC Bus Configuration Register 0 |
| #define GSBUSCFG1 0xc104 // Global SoC Bus Configuration Register 1 |
| #define GTXTHRCFG 0xc108 // Global Tx Threshold Control Register |
| #define GRXTHRCFG 0xc10c // Global Rx Threshold Control Register |
| |
| #define GCTL 0xc110 // Global Core Control Register |
| #define GCTL_PWRDNSCALE(n) (((n) & 0x1fff) << 19) |
| #define GCTL_PWRDNSCALE_START 19 |
| #define GCTL_PWRDNSCALE_BITS 13 |
| #define GCTL_MASTERFILTBYPASS (1 << 18) |
| #define GCTL_BYPSSETADDR (1 << 17) |
| #define GCTL_U2RSTECN (1 << 16) |
| #define GCTL_FRMSCLDWN_START 14 |
| #define GCTL_FRMSCLDWN_BITS 2 |
| #define GCTL_PRTCAPDIR_START 12 |
| #define GCTL_PRTCAPDIR_BITS 2 |
| #define GCTL_PRTCAPDIR_HOST (1 << GCTL_PRTCAPDIR_START) |
| #define GCTL_PRTCAPDIR_DEVICE (2 << GCTL_PRTCAPDIR_START) |
| #define GCTL_PRTCAPDIR_OTG (3 << GCTL_PRTCAPDIR_START) |
| #define GCTL_PRTCAPDIR_MASK (3 << GCTL_PRTCAPDIR_START) |
| #define GCTL_CORESOFTRESET (1 << 11) |
| #define GCTL_U1_U2_TIMER_SCALE (1 << 9) |
| #define GCTL_DEBUGATTACH (1 << 8) |
| #define GCTL_SCALEDOWN_START 4 |
| #define GCTL_SCALEDOWN_BITS 2 |
| #define GCTL_DISSCRAMBLE (1 << 3) |
| #define GCTL_U2EXIT_LFPS (1 << 2) |
| #define GCTL_GBL_HIBERNATION_EN (1 << 1) |
| #define GCTL_DSBLCLKGTNG (1 << 0) |
| |
| #define GPMSTS 0xc114 // Global Power Management Status Register |
| #define GSTS 0xc118 // Global Status Register |
| #define GSTS_CBELT_START 18 |
| #define GSTS_CBELT_BITS 4 |
| #define GSTS_CBELT(s) (((s) >> GSTS_CBELT_START) & ((1 << GSTS_CBELT_START) - 1)) |
| #define GSTS_SSIC_IP (1 << 11) |
| #define GSTS_OTG_IP (1 << 10) |
| #define GSTS_BC_IP (1 << 9) |
| #define GSTS_ADP_IP (1 << 8) |
| #define GSTS_HOST_IP (1 << 7) |
| #define GSTS_DEVICE_IP (1 << 6) |
| #define GSTS_CSR_TIMEOUT (1 << 5) |
| #define GSTS_BUSERRADDRVLD (1 << 4) |
| #define GSTS_CURMOD_START 0 |
| #define GSTS_CURMOD_BITS 2 |
| #define GSTS_CURMOD(s) (((s) >> GSTS_CURMOD_START) & ((1 << GSTS_CURMOD_BITS) - 1)) |
| |
| |
| |
| #define GUCTL1 0xc11c // Global User Control Register 1 |
| #define USB31_IP_NAME 0xc120 // IP NAME REGISTER |
| #define GGPIO 0xc124 // Global General Purpose Input/Output Register |
| #define GUID 0xc128 // Global User ID Register |
| #define GUCTL 0xc12c // Global User Control Register |
| #define GBUSERRADDR 0xc130 // Global Soc Bus Error Address Register |
| #define GBUSERRADDRLO 0xc130 // Global Soc Bus Error Address Register - Low |
| #define GBUSERRADDRHI 0xc134 // Global Soc Bus Error Address Register - High |
| #define GPRTBIMAP 0xc138 // Global SS Port to Bus Instance Mapping Register - Low |
| #define GPRTBIMAPHI 0xc13c // Global SS Port to Bus Instance Mapping Register - High |
| |
| #define GHWPARAMS0 0xc140 // Global Hardware Parameters Register 0 |
| #define GHWPARAMS0_AWIDTH_START 24 |
| #define GHWPARAMS0_AWIDTH_BITS 8 |
| #define GHWPARAMS0_AWIDTH(p) (((p) >> GHWPARAMS0_AWIDTH_START) & \ |
| ((1 << GHWPARAMS0_AWIDTH_BITS) - 1)) |
| #define GHWPARAMS0_SDWIDTH_START 16 |
| #define GHWPARAMS0_SDWIDTH_BITS 8 |
| #define GHWPARAMS0_SDWIDTH(p) (((p) >> GHWPARAMS0_SDWIDTH_START) & \ |
| ((1 << GHWPARAMS0_SDWIDTH_BITS) - 1)) |
| #define GHWPARAMS0_MDWIDTH_START 8 |
| #define GHWPARAMS0_MDWIDTH_BITS 8 |
| #define GHWPARAMS0_MDWIDTH(p) (((p) >> GHWPARAMS0_MDWIDTH_START) & \ |
| ((1 << GHWPARAMS0_MDWIDTH_BITS) - 1)) |
| #define GHWPARAMS0_SBUS_TYPE_START 6 |
| #define GHWPARAMS0_SBUS_TYPE_BITS 2 |
| #define GHWPARAMS0_SBUS_TYPE(p) (((p) >> GHWPARAMS0_SBUS_TYPE_START) & \ |
| ((1 << GHWPARAMS0_SBUS_TYPE_BITS) - 1)) |
| #define GHWPARAMS0_MBUS_TYPE_START 3 |
| #define GHWPARAMS0_MBUS_TYPE_BITS 3 |
| #define GHWPARAMS0_MBUS_TYPE(p) (((p) >> GHWPARAMS0_MBUS_TYPE_START) & \ |
| ((1 << GHWPARAMS0_MBUS_TYPE_BITS) - 1)) |
| #define GHWPARAMS0_MODE_START 0 |
| #define GHWPARAMS0_MODE_BITS 3 |
| #define GHWPARAMS0_MODE(p) (((p) >> GHWPARAMS0_MODE_START) & \ |
| ((1 << GHWPARAMS0_MODE_BITS) - 1)) |
| |
| #define GHWPARAMS1 0xc144 // Global Hardware Parameters Register 1 |
| #define GHWPARAMS2 0xc148 // Global Hardware Parameters Register 2 |
| #define GHWPARAMS3 0xc14c // Global Hardware Parameters Register 3 |
| #define GHWPARAMS4 0xc150 // Global Hardware Parameters Register 4 |
| #define GHWPARAMS5 0xc154 // Global Hardware Parameters Register 5 |
| #define GHWPARAMS6 0xc158 // Global Hardware Parameters Register 6 |
| #define GHWPARAMS7 0xc15c // Global Hardware Parameters Register 7 |
| #define GDBGFIFOSPACE 0xc160 // Global Debug Queue/FIFO Space Available Register |
| #define GBMUCTL 0xc164 // Global BMU Control Register |
| #define GDBGBMU 0xc16c // Global Debug BMU Register |
| #define GDBGLSPMUX_HST 0xc170 // Global Debug LSP MUX Register in host mode |
| #define GDBGLSPMUX_DEV 0xc170 // Global Debug LSP MUX Register |
| #define GDBGLSP 0xc174 // Global Debug LSP Register |
| #define GDBGEPINFO0 0xc178 // Global Debug Endpoint Information Register 0 |
| #define GDBGEPINFO1 0xc17c // Global Debug Endpoint Information Register 1 |
| #define GPRTBIMAP_HS 0xc180 // Global High-Speed Port to Bus Instance Mapping Register |
| #define GPRTBIMAP_HSLO 0xc180 // Global High-Speed Port to Bus Instance Mapping Register - Low |
| #define GPRTBIMAP_HSHI 0xc184 // Global High-Speed Port to Bus Instance Mapping Register - High |
| #define GPRTBIMAP_FS 0xc188 // Global Full/Low-Speed Port to Bus Instance Mapping Register |
| #define GPRTBIMAP_FSLO 0xc188 // Global Full/Low-Speed Port to Bus Instance Mapping Register - Low |
| #define GPRTBIMAP_FSHI 0xc18c // Global Full/Low-Speed Port to Bus Instance Mapping Register - High |
| #define GHMSOCBWOR 0xc190 // Global Host Mode SoC Bandwidth Override Register |
| #define GERRINJCTL_1 0xc194 // Global Error Injection 1 Control Register |
| #define GERRINJCTL_2 0xc194 // Global Error Injection 2 Control Register |
| #define USB31_VER_NUMBER 0xc1a0 // USB31 IP VERSION NUMBER |
| #define USB31_VER_TYPE 0xc1a4 // USB31 IP VERSION TYPE |
| #define GSYSBLKWINCTRL 0xc1b0 // System Bus Blocking Window Control |
| //#defineGUSB3RMMICTL(n) varies |
| #define GUSB2PHYCFG(n) (0xc200 + 4 * (n)) // Global USB2 PHY Configuration Register |
| #define GUSB2PHYCFG_PHYSOFTRST (1 << 31) |
| #define GUSB2PHYCFG_ULPI_LPM_WITH_OPMODE_CHK (1 << 29) |
| #define GUSB2PHYCFG_HSIC_CON_WIDTH_ADJ(n) (((n) & 0x3) << 27) |
| #define GUSB2PHYCFG_INV_SEL_HSIC (1 << 26) |
| #define GUSB2PHYCFG_LSTRD(n) (((n) & 0x7) << 22) |
| #define GUSB2PHYCFG_LSIPD(n) (((n) & 0x7) << 19) |
| #define GUSB2PHYCFG_ULPIEXTVBUSINDICATOR (1 << 18) |
| #define GUSB2PHYCFG_ULPIEXTVBUSDRV (1 << 17) |
| #define GUSB2PHYCFG_ULPIAUTORES (1 << 15) |
| #define GUSB2PHYCFG_USBTRDTIM(n) (((n) & 0xf) << 10) |
| #define GUSB2PHYCFG_USBTRDTIM_MASK (0xf << 10) |
| #define GUSB2PHYCFG_XCVRDLY (1 << 9) |
| #define GUSB2PHYCFG_ENBLSLPM (1 << 8) |
| #define GUSB2PHYCFG_PHYSEL (1 << 7) |
| #define GUSB2PHYCFG_SUSPENDUSB20 (1 << 6) |
| #define GUSB2PHYCFG_FSINTF (1 << 5) |
| #define GUSB2PHYCFG_ULPI_UTMI_SEL (1 << 4) |
| #define GUSB2PHYCFG_PHYIF (1 << 3) |
| #define GUSB2PHYCFG_TOUTCAL(n) (((n) & 0x7) << 0) |
| |
| #define GUSB2I2CCTL(n) (0xc240 + 4 * (n)) // Reserved Register |
| #define GUSB2PHYACC_UTMI(n) (0xc280 + 4 * (n)) // Global USB 2.0 UTMI PHY Vendor Control Register |
| #define GUSB2PHYACC_ULPI(n) (0xc280 + 4 * (n)) // Global USB 2.0 UTMI PHY Vendor Control Register |
| |
| #define GUSB3PIPECTL(n) (0xc2c0 + 4 * (n)) // Global USB 3.1 PIPE Control Register |
| #define GUSB3PIPECTL_PHY_SOFT_RST (1 << 31) // USB3 PHY Soft Reset |
| #define GUSB3PIPECTL_HST_PRT_CMPL (1 << 30) |
| #define GUSB3PIPECTL_DIS_RX_DET_P3 (1 << 28) |
| #define GUSB3PIPECTL_UX_EXIT_IN_PX (1 << 27) |
| #define GUSB3PIPECTL_PING_ENHANCE_EN (1 << 26) |
| #define GUSB3PIPECTL_U1U2_EXIT_FAIL_TO_RECOV (1 << 25) |
| #define GUSB3PIPECTL_REQUEST_P1P2P3 (1 << 24) |
| #define GUSB3PIPECTL_START_RX_DET_U3_RX_DET (1 << 23) |
| #define GUSB3PIPECTL_DIS_RX_DET_U3_RX_DET (1 << 22) |
| #define GUSB3PIPECTL_DELAY_P1P2P3(n) (((n) & 0x7) << 19) |
| #define GUSB3PIPECTL_DELAYP1TRANS (1 << 18) |
| #define GUSB3PIPECTL_SUSPENDENABLE (1 << 17) |
| #define GUSB3PIPECTL_DATWIDTH(n) (((n) & 0x3) << 15) |
| #define GUSB3PIPECTL_ABORT_RX_DET_IN_U2 (1 << 14) |
| #define GUSB3PIPECTL_SKIP_RX_DET (1 << 13) |
| #define GUSB3PIPECTL_LFPS_P0_ALGN (1 << 12) |
| #define GUSB3PIPECTL_P3P2_TRAN_OK (1 << 11) |
| #define GUSB3PIPECTL_P3_EX_SIG_P3 (1 << 10) |
| #define GUSB3PIPECTL_LFPSFILTER (1 << 9) |
| #define GUSB3PIPECTL_RX_DETECT_TO_POLLING_LFPS_CONTROL (1 << 8) |
| #define GUSB3PIPECTL_SSIC_EN (1 << 7) |
| #define GUSB3PIPECTL_TX_SWING (1 << 6) |
| #define GUSB3PIPECTL_TX_MARGIN(n) (((n) & 0x7) << 3) |
| #define GUSB3PIPECTL_SS_TX_DE_EMPHASIS(n) (((n) & 0x3) << 1) |
| #define GUSB3PIPECTL_ELASTIC_BUFFER_MODE (1 << 0) |
| |
| #define GTXFIFOSIZ(n) (0xc300 + 0x7c * (n)) // Global Transmit FIFO Size Register |
| #define GRXFIFOSIZ(n) (0xc380 + 0x7c * (n)) // Global Receive FIFO Size Register |
| #define GEVNTADR(n) (0xc400 + 0x10 * (n)) // Global Event Buffer Address Register |
| #define GEVNTADRLO(n) (0xc400 + 0x10 * (n)) // Global Event Buffer Address Register - Low |
| #define GEVNTADRHI(n) (0xc404 + 0x10 * (n)) // Global Event Buffer Address Register - High |
| |
| #define GEVNTSIZ(n) (0xc408 + 0x10 * (n)) // Global Event Buffer Size Register |
| #define GEVNTSIZ_EVNTINTRPTMASK (1 << 31) // Event Interrupt Mask |
| |
| #define GEVNTCOUNT(n) (0xc40c + 0x10 * (n)) // Global Event Buffer Size Register |
| #define GEVNTCOUNT_EVNT_HANDLER_BUSY (1 << 31) // Event Handler Busy |
| #define GEVNTCOUNT_EVNTCOUNT_MASK 0xffff // Mask for Event Count |
| |
| #define GHWPARAMS8 0xc600 // Global Hardware Parameters Register 8 |
| #define GSMACCTL 0xc604 // Global SMAC CONTROL REGISTER |
| #define GUCTL2 0xc608 // Global User Control Register 2 |
| #define GUCTL3 0xc60c // Global User Control Register 3 |
| #define GTXFIFOPRIDEV 0xc610 // Global Device TXFIFO DMA Priority Register |
| #define GTXFIFOPRIHST 0xc618 // Global Host TXFIFO DMA Priority Register |
| #define GRXFIFOPRIHST 0xc61c // Global Host RXFIFO DMA Priority Register |
| #define GFIFOPRIDBC 0xc620 // Global Host Debug Capability DMA Priority Register |
| #define GDMAHLRATIO 0xc624 // Global Host FIFO DMA High-Low Priority Ratio Register |
| #define GOSTDDMA_ASYNC 0xc628 // Global Number of Async Outstanding DMA Register |
| #define GOSTDDMA_PRD 0xc62c // Global Number of Periodic Outstanding DMA Register |
| #define GFLADJ 0xc630 // Global Frame Length Adjustment Register |
| #define GUSB2RHBCTL(n) (0xc640 + 4 * (n)) // Global USB2 PHY Configuration Register |
| |
| // Device mode register offsets |
| #define DCFG 0xc700 // Device Configuration Register |
| #define DCFG_STOP_ON_DISCONNECT (1 << 24) |
| #define DCFG_IGN_STRM_PP (1 << 23) |
| #define DCFG_LPMCAP (1 << 22) |
| #define DCFG_NUMP_START 17 |
| #define DCFG_NUMP_BITS 5 |
| #define DCFG_INTRNUM_START 12 |
| #define DCFG_INTRNUM_BITS 5 |
| #define DCFG_DEVADDR_START 3 |
| #define DCFG_DEVADDR_BITS 7 |
| #define DCFG_DEVSPD_START 0 |
| #define DCFG_DEVSPD_BITS 3 |
| #define DCFG_DEVSPD_HIGH 0 |
| #define DCFG_DEVSPD_FULL 1 |
| #define DCFG_DEVSPD_LOW 2 |
| #define DCFG_DEVSPD_SUPER 4 |
| |
| #define DCTL 0xc704 // Device Control Register |
| #define DCTL_RUN_STOP (1 << 31) |
| #define DCTL_CSFTRST (1 << 30) |
| #define DCFG_HIRDTHRES_START 24 |
| #define DCFG_HIRDTHRES_BITS 5 |
| #define DCFG_LPM_NYET_THRES_START 20 |
| #define DCFG_LPM_NYET_THRES_BITS 4 |
| #define DCTL_KEEP_CONNECT (1 << 19) |
| #define DCTL_L1_HIBERNATION_EN (1 << 18) |
| #define DCTL_CRS (1 << 17) |
| #define DCTL_CSS (1 << 16) |
| #define DCTL_INITU2ENA (1 << 12) |
| #define DCTL_ACCEPTU2ENA (1 << 11) |
| #define DCTL_INITU1ENA (1 << 10) |
| #define DCTL_ACCEPTU1ENA (1 << 9) |
| #define DCTL_ACCEPTU1ENA (1 << 9) |
| #define DCFG_ULSTCHNGREQ_START 5 |
| #define DCFG_ULSTCHNGREQ_BITS 4 |
| #define DCFG_TSTCTL_START 1 |
| #define DCFG_TSTCTL_BITS 4 |
| |
| #define DEVTEN 0xc708 // Device Event Enable Register |
| #define DEVTEN_LDMEVTEN (1 << 15) |
| #define DEVTEN_L1WKUPEVTEN (1 << 14) |
| #define DEVTEN_STOP_ON_DISCONNECT_EN (1 << 13) |
| #define DEVTEN_VENDEVTSTRCVDEN (1 << 12) |
| #define DEVTEN_ERRTICERREVTEN (1 << 9) |
| #define DEVTEN_L1SUSPEN (1 << 8) |
| #define DEVTEN_SOFTEVTEN (1 << 7) |
| #define DEVTEN_U3_L2_SUSP_EN (1 << 6) |
| #define DEVTEN_HIBERNATION_REQ_EVT_EN (1 << 5) |
| #define DEVTEN_WKUPEVTEN (1 << 4) |
| #define DEVTEN_ULSTCNGEN (1 << 3) |
| #define DEVTEN_CONNECTDONEEVTEN (1 << 2) |
| #define DEVTEN_USBRSTEVTEN (1 << 1) |
| #define DEVTEN_DISSCONNEVTEN (1 << 0) |
| |
| #define DSTS 0xc70c // Device Status Register |
| #define DSTS_DCNRD (1 << 29) |
| #define DSTS_SRE (1 << 28) |
| #define DSTS_RSS (1 << 25) |
| #define DSTS_SSS (1 << 24) |
| #define DSTS_COREIDLE (1 << 23) |
| #define DSTS_DEVCTRLHLT (1 << 22) |
| #define DSTS_USBLNKST_START 18 |
| #define DSTS_USBLNKST_BITS 4 |
| #define DSTS_USBLNKST(s) (((s) >> DSTS_USBLNKST_START) & \ |
| ((1 << DSTS_USBLNKST_BITS) - 1)) |
| #define DSTS_RXFIFOEMPTY (1 << 17) |
| #define DSTS_SOFFN_START 3 |
| #define DSTS_SOFFN_BITS 14 |
| #define DSTS_SOFFN(s) (((s) >> DSTS_SOFFN_START) & \ |
| ((1 << DSTS_SOFFN_BITS) - 1)) |
| #define DSTS_CONNECTSPD_START 0 |
| #define DSTS_CONNECTSPD_BITS 3 |
| #define DSTS_CONNECTSPD(s) (((s) >> DSTS_CONNECTSPD_START) & \ |
| ((1 << DSTS_CONNECTSPD_BITS) - 1)) |
| |
| // DSTS link state in SS node |
| #define DSTS_USBLNKST_U0 0x0 |
| #define DSTS_USBLNKST_U1 0x1 |
| #define DSTS_USBLNKST_U2 0x2 |
| #define DSTS_USBLNKST_U3 0x3 |
| #define DSTS_USBLNKST_ESS_DIS 0x4 |
| #define DSTS_USBLNKST_RX_DET 0x5 |
| #define DSTS_USBLNKST_ESS_INACT 0x6 |
| #define DSTS_USBLNKST_POLL 0x7 |
| #define DSTS_USBLNKST_RECOV 0x8 |
| #define DSTS_USBLNKST_HRESET 0x9 |
| #define DSTS_USBLNKST_CMPLY 0xa |
| #define DSTS_USBLNKST_LPBK 0xb |
| #define DSTS_USBLNKST_RESUME_RESET 0xf |
| |
| // DSTS link state in HS/FS/LS node |
| #define DSTS_USBLNKST_ON 0x0 |
| #define DSTS_USBLNKST_SLEEP 0x2 |
| #define DSTS_USBLNKST_SUSPEND 0x3 |
| #define DSTS_USBLNKST_DISCONNECTED 0x4 |
| #define DSTS_USBLNKST_EARLY_SUSPEND 0x5 |
| #define DSTS_USBLNKST_RESET 0xe |
| #define DSTS_USBLNKST_RESUME 0xf |
| |
| // DSTS connection speed |
| #define DSTS_CONNECTSPD_HIGH 0 |
| #define DSTS_CONNECTSPD_FULL 1 |
| #define DSTS_CONNECTSPD_SUPER 4 |
| #define DSTS_CONNECTSPD_ENHANCED_SUPER 5 |
| |
| #define DGCMDPAR 0xc710 // Device Generic Command Parameter Register |
| |
| #define DGCMD 0xc714 // Device Generic Command Register |
| #define DGCMD_CMDSTATUS_START 12 |
| #define DGCMD_CMDSTATUS_BITS 4 |
| #define DGCMD_CMDACT (1 << 10) |
| #define DGCMD_CMDIOC (1 << 8) |
| #define DGCMD_CMDTYP_START 0 |
| #define DGCMD_CMDTYP_BITS 8 |
| |
| #define DALEPENA 0xc720 // Device Active USB Endpoint Enable Register |
| #define DLDMENA 0xc724 // Device LDM Request Control Register |
| |
| #define DEPCMDPAR2(n) (0xc800 + 0x10 * (n)) // Endpoint-n Command Parameter 2 Register |
| #define DEPCMDPAR1(n) (0xc804 + 0x10 * (n)) // Endpoint-n Command Parameter 1 Register |
| #define DEPCMDPAR0(n) (0xc808 + 0x10 * (n)) // Endpoint-n Command Parameter 0 Register |
| |
| #define DEPCMD(n) (0xc80c + 0x10 * (n)) // Endpoint-n Command Parameter 0 Register |
| #define DEPCMD_COMMANDPARAM_START 16 // Command Parameters |
| #define DEPCMD_COMMANDPARAM_BITS 16 |
| #define DEPCMD_CMDSTATUS_START 12 // Command Completion Status |
| #define DEPCMD_CMDSTATUS_BITS 4 |
| #define DEPCMD_HIPRI_FORCERM (1 << 11) // HighPriority/ForceRM |
| #define DEPCMD_CMDACT (1 << 10) // Command Active |
| #define DEPCMD_CMDIOC (1 << 8) // Command Interrupt on Complete |
| #define DEPCMD_CMDTYP(n) (((n) & 0xf) >> 0) |
| |
| // Command Types for DEPCMD |
| #define DEPCFG 1 // Set Endpoint Configuration |
| #define DEPXFERCFG 2 // Set Endpoint Transfer Resource Configuration |
| #define DEPGETSTATE 3 // Get EndpointState |
| #define DEPSSTALL 4 // Set Stall |
| #define DEPCSTALL 5 // Clear Stall |
| #define DEPSTRTXFER 6 // Start Transfer |
| #define DEPUPDXFER 7 // Update Transfer |
| #define DEPENDXFER 8 // End Transfer |
| #define DEPSTARTCFG 9 // Start New Configuration |
| |
| #define DEPCMD_RESOURCE_INDEX(n) (((n) & 0x7f) << 16) |
| |
| // DEPCFG Params 0 |
| #define DEPCFG_ACTION_INITIALIZE (0 << 30) |
| #define DEPCFG_ACTION_RESTORE (1 << 30) |
| #define DEPCFG_ACTION_MODIFY (2 << 30) |
| #define DEPCFG_BURST_SIZE(n) ((((n) - 1) & 0xf) << 22) |
| #define DEPCFG_FIFO_NUM(n) (((n) & 0x1f) << 17) |
| #define DEPCFG_INTERNAL_RETRY (1 << 15) |
| #define DEPCFG_MAX_PACKET_SIZE(n) (((n) & 0x7ff) << 3) |
| #define DEPCFG_EP_TYPE(n) (((n) & 0x3) << 1) |
| |
| // DEPCFG Params 1 |
| #define DEPCFG_FIFO_BASED (1 << 31) |
| #define DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25) |
| #define DEPCFG_STREAM_CAPABLE (1 << 24) |
| #define DEPCFG_INTERVAL(n) (((n) & 0xff) << 16) |
| #define DEPCFG_EBC (1 << 15) // External Buffer Control |
| #define DEPCFG_EBC_NO_WRITE_BACK (1 << 14) // Don't write back HWO bit to the TRB descriptor |
| #define DEPCFG_STREAM_EVT_EN (1 << 13) |
| #define DEPCFG_XFER_NOT_READY_EN (1 << 10) |
| #define DEPCFG_XFER_IN_PROGRESS_EN (1 << 9) |
| #define DEPCFG_XFER_COMPLETE_EN (1 << 8) |
| #define DEPCFG_INTR_NUM(n) (((n) & 0x1f) << 0) |
| |
| // DEPXFERCFG Params 0 |
| #define DEPXFERCFG_NUM_XFER_RES(n) (((n) & 0xff) << 0) |
| |
| #define DEV_IMOD(n) (0xca00 + 4 * (n)) // Device Interrupt Moderation Register |
| |
| // OTG and Battery Charger register offsets |
| #define OCFG 0xcc00 // OTG Configuration Register |
| #define OCFG_DISPRTPWRCUTOFF (1 << 5) |
| #define OCFG_OTGHIBDISMASK (1 << 4) |
| #define OCFG_OTGSFTRSTMSK (1 << 3) |
| #define OCFG_HNPCAP (1 << 1) |
| #define OCFG_SRPCAP (1 << 0) |
| |
| #define OCTL 0xcc04 // OTG Control Register |
| #define OCTL_OTG3_GOERR (1 << 7) |
| #define OCTL_PERIMODE (1 << 6) |
| #define OCTL_PRTPWRCTL (1 << 5) |
| #define OCTL_HNPREQ (1 << 4) |
| #define OCTL_SESREQ (1 << 3) |
| #define OCTL_TERMSELDLPULSE (1 << 2) |
| #define OCTL_DEVSETHNPEN (1 << 1) |
| #define OCTL_HSTSETHNPEN (1 << 0) |
| |
| #define OEVT 0xcc08 // OTG Event Register |
| #define OEVT_DEVICEMOD (1 << 31) |
| #define OEVT_OTGXHCIRUNSTPSETEVNT (1 << 27) |
| #define OEVT_OTGDEVRUNSTPSETEVNT (1 << 26) |
| #define OEVT_OTGHIBENTRYEVNT (1 << 25) |
| #define OEVT_OTGCONIDSTSCHNGEVNT (1 << 24) |
| #define OEVT_HRRCONFNOTIFEVNT (1 << 23) |
| #define OEVT_HRRINITNOTIFEVNT (1 << 22) |
| #define OEVT_OTGADEVIDLEEVNT (1 << 21) |
| #define OEVT_OTGADEVBHOSTENDEVNT (1 << 20) |
| #define OEVT_OTGADEVHOSTEVNT (1 << 19) |
| #define OEVT_OTGADEVHNPCHNGEVNT (1 << 18) |
| #define OEVT_OTGADEVSRPDETEVNT (1 << 17) |
| #define OEVT_OTGADEVSESSENDDETEVNT (1 << 16) |
| #define OEVT_OTGBDEVBHOSTENDEVNT (1 << 11) |
| #define OEVT_OTGBDEVHNPCHNGEVNT (1 << 10) |
| #define OEVT_OTGBDEVSESSVLDDETEVNT (1 << 9) |
| #define OEVT_OTGBDEVVBUSCHNGEVNT (1 << 8) |
| |
| #define OEVTEN 0xcc0c // OTG Event Enable Register |
| |
| #define OSTS 0xcc10 // OTG Status Register |
| #define OSTS_OTGSTATE_START 8 |
| #define OSTS_OTGSTATE_BITS 4 |
| #define OSTS_PERIPHERALSTATE (1 << 4) |
| #define OSTS_XHCIPRTPOWER (1 << 3) |
| #define OSTS_BSESVLD (1 << 2) |
| #define OSTS_ASESVLD (1 << 1) |
| #define OSTS_CONIDSTS (1 << 0) |
| |
| #define BCFG 0xcc30 // BC Configuration Register |
| #define BCFG_IDDIG_SEL (1 << 1) // IDDIG Select |
| #define BCFG_CHIRP_EN (1 << 0) // Chirp Enable |
| |
| #define BCEVT 0xcc38 // BC Event Register |
| #define BCEVT_MV_CHNG_EVNT (1 << 24) // Multi-Valued Input Changed Event |
| #define BCEVT_MULT_VAL_ID_BC(e) ((e) & 0x1f) // Multi-Valued ID Pin |
| |
| #define BCEVTEN 0xcc3c // BC Event Enable Register |
| #define BCEVTEN_CHNG_EVNT_ENA (1 << 24) // Multi-Valued Input Changed Event Enable |
| |
| // Link register offsets |
| #define LU1LFPSRXTIM(n) (0xd000 + 0x80 * (n)) // U1_LFPS_RX_TIMER_REG |
| #define LU1LFPSTXTIM(n) (0xd004 + 0x80 * (n)) // U1 LFPS TX TIMER REGISTER |
| #define LU2LFPSRXTIM(n) (0xd008 + 0x80 * (n)) // U1 LFPS RX TIMER REGISTER |
| #define LU2LFPSTXTIM(n) (0xd00c + 0x80 * (n)) // U2 LFPS TX TIMER REG REGISTER |
| #define LU3LFPSRXTIM(n) (0xd010 + 0x80 * (n)) // U3 LFPS RX TIMER REGS REGISTER |
| #define LU3LFPSTXTIM(n) (0xd014 + 0x80 * (n)) // U3 LFPS TX TIMER REGS REGISTER |
| #define LPINGLFPSTIM(n) (0xd018 + 0x80 * (n)) // PING LFPS TIMER REGISTER |
| #define LPOLLLFPSTXTIM(n) (0xd01c + 0x80 * (n)) // POLL LFPS TX TIMER REGISTER |
| #define LSKIPFREQ(n) (0xd020 + 0x80 * (n)) // SKIP FREQUENCY REGISTER |
| #define LLUCTL(n) (0xd024 + 0x80 * (n)) // TX TS1 COUNT REGISTER |
| #define LPTMDPDELAY(n) (0xd028 + 0x80 * (n)) // PTM DATAPATH DELAY REGISTER |
| #define LSCDTIM1(n) (0xd02c + 0x80 * (n)) // SCD TIMER 1 REGISTER |
| #define LSCDTIM2(n) (0xd030 + 0x80 * (n)) // SCD TIMER 2 REGISTER |
| #define LSCDTIM3(n) (0xd034 + 0x80 * (n)) // SCD TIMER 3 REGISTER |
| #define LSCDTIM4(n) (0xd038 + 0x80 * (n)) // SCD TIMER 4 REGISTER |
| #define LLPBMTIM1(n) (0xd03c + 0x80 * (n)) // LPBM TIMER 1 REGISTER |
| #define LLPBMTIM2(n) (0xd040 + 0x80 * (n)) // LPBM TIMER 2 REGISTER |
| #define LLPBMTXTIM(n) (0xd044 + 0x80 * (n)) // LPBM TX TIMER REGISTER |
| #define LLINKERRINJ(n) (0xd048 + 0x80 * (n)) // LINK ERROR TYPE INJECT REGISTER |
| #define LLINKERRINJEN(n) (0xd04c + 0x80 * (n)) // LINK ERROR INJECT ENABLE REGISTER |
| #define GDBGLTSSM(n) (0xd050 + 0x80 * (n)) // Global Debug LTSSM Register |
| #define GDBGLNMCC(n) (0xd054 + 0x80 * (n)) // Global Debug LNMCC Register |
| #define LLINKDBGCTRL(n) (0xd058 + 0x80 * (n)) // LINK DEBUG CONTROL REGISTER |
| #define LLINKDBGCNTTRIG(n) (0xd05c + 0x80 * (n)) // LINK DEBUG COUNT TRIGGER REGISTER |
| #define LCSR_TX_DEEMPH(n) (0xd060 + 0x80 * (n)) // LCSR_TX_DEEMPH REGISTER |
| #define LCSR_TX_DEEMPH_1(n) (0xd064 + 0x80 * (n)) // LCSR_TX_DEEMPH_1 REGISTER |
| #define LCSR_TX_DEEMPH_2(n) (0xd068 + 0x80 * (n)) // LCSR_TX_DEEMPH_2 REGISTER |
| #define LCSR_TX_DEEMPH_3(n) (0xd06c + 0x80 * (n)) // LCSR_TX_DEEMPH_3 REGISTER |
| #define LCSRPTMDEBUG1(n) (0xd070 + 0x80 * (n)) // LCSRPTMDEBUG1 REGISTER |
| #define LCSRPTMDEBUG2(n) (0xd074 + 0x80 * (n)) // LCSRPTMDELAY2 REGISTER |