staging: octeon-usb: use a single .h file
authorAaro Koskinen <aaro.koskinen@iki.fi>
Thu, 10 Oct 2013 20:25:30 +0000 (23:25 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 11 Oct 2013 22:45:59 +0000 (15:45 -0700)
Merge USBC and USBN register definitions into a single header
file. Although all HW definitions are purely internal to the driver,
it's better to keep them separate due to the large size of the file.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/octeon-usb/cvmx-usbcx-defs.h [deleted file]
drivers/staging/octeon-usb/cvmx-usbnx-defs.h [deleted file]
drivers/staging/octeon-usb/octeon-hcd.c
drivers/staging/octeon-usb/octeon-hcd.h [new file with mode: 0644]

diff --git a/drivers/staging/octeon-usb/cvmx-usbcx-defs.h b/drivers/staging/octeon-usb/cvmx-usbcx-defs.h
deleted file mode 100644 (file)
index d349d77..0000000
+++ /dev/null
@@ -1,1528 +0,0 @@
-/***********************license start***************
- * Copyright (c) 2003-2010  Cavium Networks (support@cavium.com). All rights
- * reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *
- *   * Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the following
- *     disclaimer in the documentation and/or other materials provided
- *     with the distribution.
-
- *   * Neither the name of Cavium Networks nor the names of
- *     its contributors may be used to endorse or promote products
- *     derived from this software without specific prior written
- *     permission.
-
- * This Software, including technical data, may be subject to U.S. export
- * control laws, including the U.S. Export Administration Act and its associated
- * regulations, and may be subject to export or import  regulations in other
- * countries.
-
- * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
- * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
- * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
- * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION
- * OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
- * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
- * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
- * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
- * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
- * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
- ***********************license end**************************************/
-
-
-/**
- * cvmx-usbcx-defs.h
- *
- * Configuration and status register (CSR) type definitions for
- * Octeon usbcx.
- *
- */
-#ifndef __CVMX_USBCX_TYPEDEFS_H__
-#define __CVMX_USBCX_TYPEDEFS_H__
-
-#define CVMX_USBCXBASE 0x00016F0010000000ull
-#define CVMX_USBCXREG1(reg, bid) \
-       (CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
-        ((bid) & 1) * 0x100000000000ull)
-#define CVMX_USBCXREG2(reg, bid, off) \
-       (CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
-        (((off) & 7) + ((bid) & 1) * 0x8000000000ull) * 32)
-
-#define CVMX_USBCX_GAHBCFG(bid)                CVMX_USBCXREG1(0x008, bid)
-#define CVMX_USBCX_GHWCFG3(bid)                CVMX_USBCXREG1(0x04c, bid)
-#define CVMX_USBCX_GINTMSK(bid)                CVMX_USBCXREG1(0x018, bid)
-#define CVMX_USBCX_GINTSTS(bid)                CVMX_USBCXREG1(0x014, bid)
-#define CVMX_USBCX_GNPTXFSIZ(bid)      CVMX_USBCXREG1(0x028, bid)
-#define CVMX_USBCX_GNPTXSTS(bid)       CVMX_USBCXREG1(0x02c, bid)
-#define CVMX_USBCX_GOTGCTL(bid)                CVMX_USBCXREG1(0x000, bid)
-#define CVMX_USBCX_GRSTCTL(bid)                CVMX_USBCXREG1(0x010, bid)
-#define CVMX_USBCX_GRXFSIZ(bid)                CVMX_USBCXREG1(0x024, bid)
-#define CVMX_USBCX_GRXSTSPH(bid)       CVMX_USBCXREG1(0x020, bid)
-#define CVMX_USBCX_GUSBCFG(bid)                CVMX_USBCXREG1(0x00c, bid)
-#define CVMX_USBCX_HAINT(bid)          CVMX_USBCXREG1(0x414, bid)
-#define CVMX_USBCX_HAINTMSK(bid)       CVMX_USBCXREG1(0x418, bid)
-#define CVMX_USBCX_HCCHARX(off, bid)   CVMX_USBCXREG2(0x500, bid, off)
-#define CVMX_USBCX_HCFG(bid)           CVMX_USBCXREG1(0x400, bid)
-#define CVMX_USBCX_HCINTMSKX(off, bid) CVMX_USBCXREG2(0x50c, bid, off)
-#define CVMX_USBCX_HCINTX(off, bid)    CVMX_USBCXREG2(0x508, bid, off)
-#define CVMX_USBCX_HCSPLTX(off, bid)   CVMX_USBCXREG2(0x504, bid, off)
-#define CVMX_USBCX_HCTSIZX(off, bid)   CVMX_USBCXREG2(0x510, bid, off)
-#define CVMX_USBCX_HFIR(bid)           CVMX_USBCXREG1(0x404, bid)
-#define CVMX_USBCX_HFNUM(bid)          CVMX_USBCXREG1(0x408, bid)
-#define CVMX_USBCX_HPRT(bid)           CVMX_USBCXREG1(0x440, bid)
-#define CVMX_USBCX_HPTXFSIZ(bid)       CVMX_USBCXREG1(0x100, bid)
-#define CVMX_USBCX_HPTXSTS(bid)                CVMX_USBCXREG1(0x410, bid)
-
-/**
- * cvmx_usbc#_gahbcfg
- *
- * Core AHB Configuration Register (GAHBCFG)
- *
- * This register can be used to configure the core after power-on or a change in
- * mode of operation. This register mainly contains AHB system-related
- * configuration parameters. The AHB is the processor interface to the O2P USB
- * core. In general, software need not know about this interface except to
- * program the values as specified.
- *
- * The application must program this register as part of the O2P USB core
- * initialization. Do not change this register after the initial programming.
- */
-union cvmx_usbcx_gahbcfg {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gahbcfg_s
-        * @ptxfemplvl: Periodic TxFIFO Empty Level (PTxFEmpLvl)
-        *      Software should set this bit to 0x1.
-        *      Indicates when the Periodic TxFIFO Empty Interrupt bit in the
-        *      Core Interrupt register (GINTSTS.PTxFEmp) is triggered. This
-        *      bit is used only in Slave mode.
-        *      * 1'b0: GINTSTS.PTxFEmp interrupt indicates that the Periodic
-        *      TxFIFO is half empty
-        *      * 1'b1: GINTSTS.PTxFEmp interrupt indicates that the Periodic
-        *      TxFIFO is completely empty
-        * @nptxfemplvl: Non-Periodic TxFIFO Empty Level (NPTxFEmpLvl)
-        *      Software should set this bit to 0x1.
-        *      Indicates when the Non-Periodic TxFIFO Empty Interrupt bit in
-        *      the Core Interrupt register (GINTSTS.NPTxFEmp) is triggered.
-        *      This bit is used only in Slave mode.
-        *      * 1'b0: GINTSTS.NPTxFEmp interrupt indicates that the Non-
-        *      Periodic TxFIFO is half empty
-        *      * 1'b1: GINTSTS.NPTxFEmp interrupt indicates that the Non-
-        *      Periodic TxFIFO is completely empty
-        * @dmaen: DMA Enable (DMAEn)
-        *      * 1'b0: Core operates in Slave mode
-        *      * 1'b1: Core operates in a DMA mode
-        * @hbstlen: Burst Length/Type (HBstLen)
-        *      This field has not effect and should be left as 0x0.
-        * @glblintrmsk: Global Interrupt Mask (GlblIntrMsk)
-        *      Software should set this field to 0x1.
-        *      The application uses this bit to mask or unmask the interrupt
-        *      line assertion to itself. Irrespective of this bit's setting,
-        *      the interrupt status registers are updated by the core.
-        *      * 1'b0: Mask the interrupt assertion to the application.
-        *      * 1'b1: Unmask the interrupt assertion to the application.
-        */
-       struct cvmx_usbcx_gahbcfg_s {
-               uint32_t reserved_9_31  : 23;
-               uint32_t ptxfemplvl     : 1;
-               uint32_t nptxfemplvl    : 1;
-               uint32_t reserved_6_6   : 1;
-               uint32_t dmaen          : 1;
-               uint32_t hbstlen        : 4;
-               uint32_t glblintrmsk    : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_ghwcfg3
- *
- * User HW Config3 Register (GHWCFG3)
- *
- * This register contains the configuration options of the O2P USB core.
- */
-union cvmx_usbcx_ghwcfg3 {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_ghwcfg3_s
-        * @dfifodepth: DFIFO Depth (DfifoDepth)
-        *      This value is in terms of 32-bit words.
-        *      * Minimum value is 32
-        *      * Maximum value is 32768
-        * @ahbphysync: AHB and PHY Synchronous (AhbPhySync)
-        *      Indicates whether AHB and PHY clocks are synchronous to
-        *      each other.
-        *      * 1'b0: No
-        *      * 1'b1: Yes
-        *      This bit is tied to 1.
-        * @rsttype: Reset Style for Clocked always Blocks in RTL (RstType)
-        *      * 1'b0: Asynchronous reset is used in the core
-        *      * 1'b1: Synchronous reset is used in the core
-        * @optfeature: Optional Features Removed (OptFeature)
-        *      Indicates whether the User ID register, GPIO interface ports,
-        *      and SOF toggle and counter ports were removed for gate count
-        *      optimization.
-        * @vendor_control_interface_support: Vendor Control Interface Support
-        *      * 1'b0: Vendor Control Interface is not available on the core.
-        *      * 1'b1: Vendor Control Interface is available.
-        * @i2c_selection: I2C Selection
-        *      * 1'b0: I2C Interface is not available on the core.
-        *      * 1'b1: I2C Interface is available on the core.
-        * @otgen: OTG Function Enabled (OtgEn)
-        *      The application uses this bit to indicate the O2P USB core's
-        *      OTG capabilities.
-        *      * 1'b0: Not OTG capable
-        *      * 1'b1: OTG Capable
-        * @pktsizewidth: Width of Packet Size Counters (PktSizeWidth)
-        *      * 3'b000: 4 bits
-        *      * 3'b001: 5 bits
-        *      * 3'b010: 6 bits
-        *      * 3'b011: 7 bits
-        *      * 3'b100: 8 bits
-        *      * 3'b101: 9 bits
-        *      * 3'b110: 10 bits
-        *      * Others: Reserved
-        * @xfersizewidth: Width of Transfer Size Counters (XferSizeWidth)
-        *      * 4'b0000: 11 bits
-        *      * 4'b0001: 12 bits
-        *      - ...
-        *      * 4'b1000: 19 bits
-        *      * Others: Reserved
-        */
-       struct cvmx_usbcx_ghwcfg3_s {
-               uint32_t dfifodepth                             : 16;
-               uint32_t reserved_13_15                         : 3;
-               uint32_t ahbphysync                             : 1;
-               uint32_t rsttype                                : 1;
-               uint32_t optfeature                             : 1;
-               uint32_t vendor_control_interface_support       : 1;
-               uint32_t i2c_selection                          : 1;
-               uint32_t otgen                                  : 1;
-               uint32_t pktsizewidth                           : 3;
-               uint32_t xfersizewidth                          : 4;
-       } s;
-};
-
-/**
- * cvmx_usbc#_gintmsk
- *
- * Core Interrupt Mask Register (GINTMSK)
- *
- * This register works with the Core Interrupt register to interrupt the
- * application. When an interrupt bit is masked, the interrupt associated with
- * that bit will not be generated. However, the Core Interrupt (GINTSTS)
- * register bit corresponding to that interrupt will still be set.
- * Mask interrupt: 1'b0, Unmask interrupt: 1'b1
- */
-union cvmx_usbcx_gintmsk {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gintmsk_s
-        * @wkupintmsk: Resume/Remote Wakeup Detected Interrupt Mask
-        *      (WkUpIntMsk)
-        * @sessreqintmsk: Session Request/New Session Detected Interrupt Mask
-        *      (SessReqIntMsk)
-        * @disconnintmsk: Disconnect Detected Interrupt Mask (DisconnIntMsk)
-        * @conidstschngmsk: Connector ID Status Change Mask (ConIDStsChngMsk)
-        * @ptxfempmsk: Periodic TxFIFO Empty Mask (PTxFEmpMsk)
-        * @hchintmsk: Host Channels Interrupt Mask (HChIntMsk)
-        * @prtintmsk: Host Port Interrupt Mask (PrtIntMsk)
-        * @fetsuspmsk: Data Fetch Suspended Mask (FetSuspMsk)
-        * @incomplpmsk: Incomplete Periodic Transfer Mask (incomplPMsk)
-        *      Incomplete Isochronous OUT Transfer Mask
-        *      (incompISOOUTMsk)
-        * @incompisoinmsk: Incomplete Isochronous IN Transfer Mask
-        *                  (incompISOINMsk)
-        * @oepintmsk: OUT Endpoints Interrupt Mask (OEPIntMsk)
-        * @inepintmsk: IN Endpoints Interrupt Mask (INEPIntMsk)
-        * @epmismsk: Endpoint Mismatch Interrupt Mask (EPMisMsk)
-        * @eopfmsk: End of Periodic Frame Interrupt Mask (EOPFMsk)
-        * @isooutdropmsk: Isochronous OUT Packet Dropped Interrupt Mask
-        *      (ISOOutDropMsk)
-        * @enumdonemsk: Enumeration Done Mask (EnumDoneMsk)
-        * @usbrstmsk: USB Reset Mask (USBRstMsk)
-        * @usbsuspmsk: USB Suspend Mask (USBSuspMsk)
-        * @erlysuspmsk: Early Suspend Mask (ErlySuspMsk)
-        * @i2cint: I2C Interrupt Mask (I2CINT)
-        * @ulpickintmsk: ULPI Carkit Interrupt Mask (ULPICKINTMsk)
-        *      I2C Carkit Interrupt Mask (I2CCKINTMsk)
-        * @goutnakeffmsk: Global OUT NAK Effective Mask (GOUTNakEffMsk)
-        * @ginnakeffmsk: Global Non-Periodic IN NAK Effective Mask
-        *                (GINNakEffMsk)
-        * @nptxfempmsk: Non-Periodic TxFIFO Empty Mask (NPTxFEmpMsk)
-        * @rxflvlmsk: Receive FIFO Non-Empty Mask (RxFLvlMsk)
-        * @sofmsk: Start of (micro)Frame Mask (SofMsk)
-        * @otgintmsk: OTG Interrupt Mask (OTGIntMsk)
-        * @modemismsk: Mode Mismatch Interrupt Mask (ModeMisMsk)
-        */
-       struct cvmx_usbcx_gintmsk_s {
-               uint32_t wkupintmsk             : 1;
-               uint32_t sessreqintmsk          : 1;
-               uint32_t disconnintmsk          : 1;
-               uint32_t conidstschngmsk        : 1;
-               uint32_t reserved_27_27         : 1;
-               uint32_t ptxfempmsk             : 1;
-               uint32_t hchintmsk              : 1;
-               uint32_t prtintmsk              : 1;
-               uint32_t reserved_23_23         : 1;
-               uint32_t fetsuspmsk             : 1;
-               uint32_t incomplpmsk            : 1;
-               uint32_t incompisoinmsk         : 1;
-               uint32_t oepintmsk              : 1;
-               uint32_t inepintmsk             : 1;
-               uint32_t epmismsk               : 1;
-               uint32_t reserved_16_16         : 1;
-               uint32_t eopfmsk                : 1;
-               uint32_t isooutdropmsk          : 1;
-               uint32_t enumdonemsk            : 1;
-               uint32_t usbrstmsk              : 1;
-               uint32_t usbsuspmsk             : 1;
-               uint32_t erlysuspmsk            : 1;
-               uint32_t i2cint                 : 1;
-               uint32_t ulpickintmsk           : 1;
-               uint32_t goutnakeffmsk          : 1;
-               uint32_t ginnakeffmsk           : 1;
-               uint32_t nptxfempmsk            : 1;
-               uint32_t rxflvlmsk              : 1;
-               uint32_t sofmsk                 : 1;
-               uint32_t otgintmsk              : 1;
-               uint32_t modemismsk             : 1;
-               uint32_t reserved_0_0           : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_gintsts
- *
- * Core Interrupt Register (GINTSTS)
- *
- * This register interrupts the application for system-level events in the
- * current mode of operation (Device mode or Host mode). It is shown in
- * Interrupt. Some of the bits in this register are valid only in Host mode,
- * while others are valid in Device mode only. This register also indicates the
- * current mode of operation. In order to clear the interrupt status bits of
- * type R_SS_WC, the application must write 1'b1 into the bit. The FIFO status
- * interrupts are read only; once software reads from or writes to the FIFO
- * while servicing these interrupts, FIFO interrupt conditions are cleared
- * automatically.
- */
-union cvmx_usbcx_gintsts {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gintsts_s
-        * @wkupint: Resume/Remote Wakeup Detected Interrupt (WkUpInt)
-        *      In Device mode, this interrupt is asserted when a resume is
-        *      detected on the USB. In Host mode, this interrupt is asserted
-        *      when a remote wakeup is detected on the USB.
-        *      For more information on how to use this interrupt, see "Partial
-        *      Power-Down and Clock Gating Programming Model" on
-        *      page 353.
-        * @sessreqint: Session Request/New Session Detected Interrupt
-        *              (SessReqInt)
-        *      In Host mode, this interrupt is asserted when a session request
-        *      is detected from the device. In Device mode, this interrupt is
-        *      asserted when the utmiotg_bvalid signal goes high.
-        *      For more information on how to use this interrupt, see "Partial
-        *      Power-Down and Clock Gating Programming Model" on
-        *      page 353.
-        * @disconnint: Disconnect Detected Interrupt (DisconnInt)
-        *      Asserted when a device disconnect is detected.
-        * @conidstschng: Connector ID Status Change (ConIDStsChng)
-        *      The core sets this bit when there is a change in connector ID
-        *      status.
-        * @ptxfemp: Periodic TxFIFO Empty (PTxFEmp)
-        *      Asserted when the Periodic Transmit FIFO is either half or
-        *      completely empty and there is space for at least one entry to be
-        *      written in the Periodic Request Queue. The half or completely
-        *      empty status is determined by the Periodic TxFIFO Empty Level
-        *      bit in the Core AHB Configuration register
-        *      (GAHBCFG.PTxFEmpLvl).
-        * @hchint: Host Channels Interrupt (HChInt)
-        *      The core sets this bit to indicate that an interrupt is pending
-        *      on one of the channels of the core (in Host mode). The
-        *      application must read the Host All Channels Interrupt (HAINT)
-        *      register to determine the exact number of the channel on which
-        *      the interrupt occurred, and then read the corresponding Host
-        *      Channel-n Interrupt (HCINTn) register to determine the exact
-        *      cause of the interrupt. The application must clear the
-        *      appropriate status bit in the HCINTn register to clear this bit.
-        * @prtint: Host Port Interrupt (PrtInt)
-        *      The core sets this bit to indicate a change in port status of
-        *      one of the O2P USB core ports in Host mode. The application must
-        *      read the Host Port Control and Status (HPRT) register to
-        *      determine the exact event that caused this interrupt. The
-        *      application must clear the appropriate status bit in the Host
-        *      Port Control and Status register to clear this bit.
-        * @fetsusp: Data Fetch Suspended (FetSusp)
-        *      This interrupt is valid only in DMA mode. This interrupt
-        *      indicates that the core has stopped fetching data for IN
-        *      endpoints due to the unavailability of TxFIFO space or Request
-        *      Queue space. This interrupt is used by the application for an
-        *      endpoint mismatch algorithm.
-        * @incomplp: Incomplete Periodic Transfer (incomplP)
-        *      In Host mode, the core sets this interrupt bit when there are
-        *      incomplete periodic transactions still pending which are
-        *      scheduled for the current microframe.
-        *      Incomplete Isochronous OUT Transfer (incompISOOUT)
-        *      The Device mode, the core sets this interrupt to indicate that
-        *      there is at least one isochronous OUT endpoint on which the
-        *      transfer is not completed in the current microframe. This
-        *      interrupt is asserted along with the End of Periodic Frame
-        *      Interrupt (EOPF) bit in this register.
-        * @incompisoin: Incomplete Isochronous IN Transfer (incompISOIN)
-        *      The core sets this interrupt to indicate that there is at least
-        *      one isochronous IN endpoint on which the transfer is not
-        *      completed in the current microframe. This interrupt is asserted
-        *      along with the End of Periodic Frame Interrupt (EOPF) bit in
-        *      this register.
-        * @oepint: OUT Endpoints Interrupt (OEPInt)
-        *      The core sets this bit to indicate that an interrupt is pending
-        *      on one of the OUT endpoints of the core (in Device mode). The
-        *      application must read the Device All Endpoints Interrupt
-        *      (DAINT) register to determine the exact number of the OUT
-        *      endpoint on which the interrupt occurred, and then read the
-        *      corresponding Device OUT Endpoint-n Interrupt (DOEPINTn)
-        *      register to determine the exact cause of the interrupt. The
-        *      application must clear the appropriate status bit in the
-        *      corresponding DOEPINTn register to clear this bit.
-        * @iepint: IN Endpoints Interrupt (IEPInt)
-        *      The core sets this bit to indicate that an interrupt is pending
-        *      on one of the IN endpoints of the core (in Device mode). The
-        *      application must read the Device All Endpoints Interrupt
-        *      (DAINT) register to determine the exact number of the IN
-        *      endpoint on which the interrupt occurred, and then read the
-        *      corresponding Device IN Endpoint-n Interrupt (DIEPINTn)
-        *      register to determine the exact cause of the interrupt. The
-        *      application must clear the appropriate status bit in the
-        *      corresponding DIEPINTn register to clear this bit.
-        * @epmis: Endpoint Mismatch Interrupt (EPMis)
-        *      Indicates that an IN token has been received for a non-periodic
-        *      endpoint, but the data for another endpoint is present in the
-        *      top of the Non-Periodic Transmit FIFO and the IN endpoint
-        *      mismatch count programmed by the application has expired.
-        * @eopf: End of Periodic Frame Interrupt (EOPF)
-        *      Indicates that the period specified in the Periodic Frame
-        *      Interval field of the Device Configuration register
-        *      (DCFG.PerFrInt) has been reached in the current microframe.
-        * @isooutdrop: Isochronous OUT Packet Dropped Interrupt (ISOOutDrop)
-        *      The core sets this bit when it fails to write an isochronous OUT
-        *      packet into the RxFIFO because the RxFIFO doesn't have
-        *      enough space to accommodate a maximum packet size packet
-        *      for the isochronous OUT endpoint.
-        * @enumdone: Enumeration Done (EnumDone)
-        *      The core sets this bit to indicate that speed enumeration is
-        *      complete. The application must read the Device Status (DSTS)
-        *      register to obtain the enumerated speed.
-        * @usbrst: USB Reset (USBRst)
-        *      The core sets this bit to indicate that a reset is detected on
-        *      the USB.
-        * @usbsusp: USB Suspend (USBSusp)
-        *      The core sets this bit to indicate that a suspend was detected
-        *      on the USB. The core enters the Suspended state when there
-        *      is no activity on the phy_line_state_i signal for an extended
-        *      period of time.
-        * @erlysusp: Early Suspend (ErlySusp)
-        *      The core sets this bit to indicate that an Idle state has been
-        *      detected on the USB for 3 ms.
-        * @i2cint: I2C Interrupt (I2CINT)
-        *      This bit is always 0x0.
-        * @ulpickint: ULPI Carkit Interrupt (ULPICKINT)
-        *      This bit is always 0x0.
-        * @goutnakeff: Global OUT NAK Effective (GOUTNakEff)
-        *      Indicates that the Set Global OUT NAK bit in the Device Control
-        *      register (DCTL.SGOUTNak), set by the application, has taken
-        *      effect in the core. This bit can be cleared by writing the Clear
-        *      Global OUT NAK bit in the Device Control register
-        *      (DCTL.CGOUTNak).
-        * @ginnakeff: Global IN Non-Periodic NAK Effective (GINNakEff)
-        *      Indicates that the Set Global Non-Periodic IN NAK bit in the
-        *      Device Control register (DCTL.SGNPInNak), set by the
-        *      application, has taken effect in the core. That is, the core has
-        *      sampled the Global IN NAK bit set by the application. This bit
-        *      can be cleared by clearing the Clear Global Non-Periodic IN
-        *      NAK bit in the Device Control register (DCTL.CGNPInNak).
-        *      This interrupt does not necessarily mean that a NAK handshake
-        *      is sent out on the USB. The STALL bit takes precedence over
-        *      the NAK bit.
-        * @nptxfemp: Non-Periodic TxFIFO Empty (NPTxFEmp)
-        *      This interrupt is asserted when the Non-Periodic TxFIFO is
-        *      either half or completely empty, and there is space for at least
-        *      one entry to be written to the Non-Periodic Transmit Request
-        *      Queue. The half or completely empty status is determined by
-        *      the Non-Periodic TxFIFO Empty Level bit in the Core AHB
-        *      Configuration register (GAHBCFG.NPTxFEmpLvl).
-        * @rxflvl: RxFIFO Non-Empty (RxFLvl)
-        *      Indicates that there is at least one packet pending to be read
-        *      from the RxFIFO.
-        * @sof: Start of (micro)Frame (Sof)
-        *      In Host mode, the core sets this bit to indicate that an SOF
-        *      (FS), micro-SOF (HS), or Keep-Alive (LS) is transmitted on the
-        *      USB. The application must write a 1 to this bit to clear the
-        *      interrupt.
-        *      In Device mode, in the core sets this bit to indicate that an
-        *      SOF token has been received on the USB. The application can read
-        *      the Device Status register to get the current (micro)frame
-        *      number. This interrupt is seen only when the core is operating
-        *      at either HS or FS.
-        * @otgint: OTG Interrupt (OTGInt)
-        *      The core sets this bit to indicate an OTG protocol event. The
-        *      application must read the OTG Interrupt Status (GOTGINT)
-        *      register to determine the exact event that caused this
-        *      interrupt. The application must clear the appropriate status bit
-        *      in the GOTGINT register to clear this bit.
-        * @modemis: Mode Mismatch Interrupt (ModeMis)
-        *      The core sets this bit when the application is trying to access:
-        *      * A Host mode register, when the core is operating in Device
-        *      mode
-        *      * A Device mode register, when the core is operating in Host
-        *      mode
-        *      The register access is completed on the AHB with an OKAY
-        *      response, but is ignored by the core internally and doesn't
-        *      affect the operation of the core.
-        * @curmod: Current Mode of Operation (CurMod)
-        *      Indicates the current mode of operation.
-        *      * 1'b0: Device mode
-        *      * 1'b1: Host mode
-        */
-       struct cvmx_usbcx_gintsts_s {
-               uint32_t wkupint        : 1;
-               uint32_t sessreqint     : 1;
-               uint32_t disconnint     : 1;
-               uint32_t conidstschng   : 1;
-               uint32_t reserved_27_27 : 1;
-               uint32_t ptxfemp        : 1;
-               uint32_t hchint         : 1;
-               uint32_t prtint         : 1;
-               uint32_t reserved_23_23 : 1;
-               uint32_t fetsusp        : 1;
-               uint32_t incomplp       : 1;
-               uint32_t incompisoin    : 1;
-               uint32_t oepint         : 1;
-               uint32_t iepint         : 1;
-               uint32_t epmis          : 1;
-               uint32_t reserved_16_16 : 1;
-               uint32_t eopf           : 1;
-               uint32_t isooutdrop     : 1;
-               uint32_t enumdone       : 1;
-               uint32_t usbrst         : 1;
-               uint32_t usbsusp        : 1;
-               uint32_t erlysusp       : 1;
-               uint32_t i2cint         : 1;
-               uint32_t ulpickint      : 1;
-               uint32_t goutnakeff     : 1;
-               uint32_t ginnakeff      : 1;
-               uint32_t nptxfemp       : 1;
-               uint32_t rxflvl         : 1;
-               uint32_t sof            : 1;
-               uint32_t otgint         : 1;
-               uint32_t modemis        : 1;
-               uint32_t curmod         : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_gnptxfsiz
- *
- * Non-Periodic Transmit FIFO Size Register (GNPTXFSIZ)
- *
- * The application can program the RAM size and the memory start address for the
- * Non-Periodic TxFIFO.
- */
-union cvmx_usbcx_gnptxfsiz {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gnptxfsiz_s
-        * @nptxfdep: Non-Periodic TxFIFO Depth (NPTxFDep)
-        *      This value is in terms of 32-bit words.
-        *      Minimum value is 16
-        *      Maximum value is 32768
-        * @nptxfstaddr: Non-Periodic Transmit RAM Start Address (NPTxFStAddr)
-        *      This field contains the memory start address for Non-Periodic
-        *      Transmit FIFO RAM.
-        */
-       struct cvmx_usbcx_gnptxfsiz_s {
-               uint32_t nptxfdep       : 16;
-               uint32_t nptxfstaddr    : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_gnptxsts
- *
- * Non-Periodic Transmit FIFO/Queue Status Register (GNPTXSTS)
- *
- * This read-only register contains the free space information for the
- * Non-Periodic TxFIFO and the Non-Periodic Transmit Request Queue.
- */
-union cvmx_usbcx_gnptxsts {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gnptxsts_s
-        * @nptxqtop: Top of the Non-Periodic Transmit Request Queue (NPTxQTop)
-        *      Entry in the Non-Periodic Tx Request Queue that is currently
-        *      being processed by the MAC.
-        *      * Bits [30:27]: Channel/endpoint number
-        *      * Bits [26:25]:
-        *      - 2'b00: IN/OUT token
-        *      - 2'b01: Zero-length transmit packet (device IN/host OUT)
-        *      - 2'b10: PING/CSPLIT token
-        *      - 2'b11: Channel halt command
-        *      * Bit [24]: Terminate (last entry for selected channel/endpoint)
-        * @nptxqspcavail: Non-Periodic Transmit Request Queue Space Available
-        *      (NPTxQSpcAvail)
-        *      Indicates the amount of free space available in the Non-
-        *      Periodic Transmit Request Queue. This queue holds both IN
-        *      and OUT requests in Host mode. Device mode has only IN
-        *      requests.
-        *      * 8'h0: Non-Periodic Transmit Request Queue is full
-        *      * 8'h1: 1 location available
-        *      * 8'h2: 2 locations available
-        *      * n: n locations available (0..8)
-        *      * Others: Reserved
-        * @nptxfspcavail: Non-Periodic TxFIFO Space Avail (NPTxFSpcAvail)
-        *      Indicates the amount of free space available in the Non-
-        *      Periodic TxFIFO.
-        *      Values are in terms of 32-bit words.
-        *      * 16'h0: Non-Periodic TxFIFO is full
-        *      * 16'h1: 1 word available
-        *      * 16'h2: 2 words available
-        *      * 16'hn: n words available (where 0..32768)
-        *      * 16'h8000: 32768 words available
-        *      * Others: Reserved
-        */
-       struct cvmx_usbcx_gnptxsts_s {
-               uint32_t reserved_31_31 : 1;
-               uint32_t nptxqtop       : 7;
-               uint32_t nptxqspcavail  : 8;
-               uint32_t nptxfspcavail  : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_grstctl
- *
- * Core Reset Register (GRSTCTL)
- *
- * The application uses this register to reset various hardware features inside
- * the core.
- */
-union cvmx_usbcx_grstctl {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_grstctl_s
-        * @ahbidle: AHB Master Idle (AHBIdle)
-        *      Indicates that the AHB Master State Machine is in the IDLE
-        *      condition.
-        * @dmareq: DMA Request Signal (DMAReq)
-        *      Indicates that the DMA request is in progress. Used for debug.
-        * @txfnum: TxFIFO Number (TxFNum)
-        *      This is the FIFO number that must be flushed using the TxFIFO
-        *      Flush bit. This field must not be changed until the core clears
-        *      the TxFIFO Flush bit.
-        *      * 5'h0: Non-Periodic TxFIFO flush
-        *      * 5'h1: Periodic TxFIFO 1 flush in Device mode or Periodic
-        *      TxFIFO flush in Host mode
-        *      * 5'h2: Periodic TxFIFO 2 flush in Device mode
-        *      - ...
-        *      * 5'hF: Periodic TxFIFO 15 flush in Device mode
-        *      * 5'h10: Flush all the Periodic and Non-Periodic TxFIFOs in the
-        *      core
-        * @txfflsh: TxFIFO Flush (TxFFlsh)
-        *      This bit selectively flushes a single or all transmit FIFOs, but
-        *      cannot do so if the core is in the midst of a transaction.
-        *      The application must only write this bit after checking that the
-        *      core is neither writing to the TxFIFO nor reading from the
-        *      TxFIFO.
-        *      The application must wait until the core clears this bit before
-        *      performing any operations. This bit takes 8 clocks (of phy_clk
-        *      or hclk, whichever is slower) to clear.
-        * @rxfflsh: RxFIFO Flush (RxFFlsh)
-        *      The application can flush the entire RxFIFO using this bit, but
-        *      must first ensure that the core is not in the middle of a
-        *      transaction.
-        *      The application must only write to this bit after checking that
-        *      the core is neither reading from the RxFIFO nor writing to the
-        *      RxFIFO.
-        *      The application must wait until the bit is cleared before
-        *      performing any other operations. This bit will take 8 clocks
-        *      (slowest of PHY or AHB clock) to clear.
-        * @intknqflsh: IN Token Sequence Learning Queue Flush (INTknQFlsh)
-        *      The application writes this bit to flush the IN Token Sequence
-        *      Learning Queue.
-        * @frmcntrrst: Host Frame Counter Reset (FrmCntrRst)
-        *      The application writes this bit to reset the (micro)frame number
-        *      counter inside the core. When the (micro)frame counter is reset,
-        *      the subsequent SOF sent out by the core will have a
-        *      (micro)frame number of 0.
-        * @hsftrst: HClk Soft Reset (HSftRst)
-        *      The application uses this bit to flush the control logic in the
-        *      AHB Clock domain. Only AHB Clock Domain pipelines are reset.
-        *      * FIFOs are not flushed with this bit.
-        *      * All state machines in the AHB clock domain are reset to the
-        *      Idle state after terminating the transactions on the AHB,
-        *      following the protocol.
-        *      * CSR control bits used by the AHB clock domain state
-        *      machines are cleared.
-        *      * To clear this interrupt, status mask bits that control the
-        *      interrupt status and are generated by the AHB clock domain
-        *      state machine are cleared.
-        *      * Because interrupt status bits are not cleared, the application
-        *      can get the status of any core events that occurred after it set
-        *      this bit.
-        *      This is a self-clearing bit that the core clears after all
-        *      necessary logic is reset in the core. This may take several
-        *      clocks, depending on the core's current state.
-        * @csftrst: Core Soft Reset (CSftRst)
-        *      Resets the hclk and phy_clock domains as follows:
-        *      * Clears the interrupts and all the CSR registers except the
-        *      following register bits:
-        *      - PCGCCTL.RstPdwnModule
-        *      - PCGCCTL.GateHclk
-        *      - PCGCCTL.PwrClmp
-        *      - PCGCCTL.StopPPhyLPwrClkSelclk
-        *      - GUSBCFG.PhyLPwrClkSel
-        *      - GUSBCFG.DDRSel
-        *      - GUSBCFG.PHYSel
-        *      - GUSBCFG.FSIntf
-        *      - GUSBCFG.ULPI_UTMI_Sel
-        *      - GUSBCFG.PHYIf
-        *      - HCFG.FSLSPclkSel
-        *      - DCFG.DevSpd
-        *      * All module state machines (except the AHB Slave Unit) are
-        *      reset to the IDLE state, and all the transmit FIFOs and the
-        *      receive FIFO are flushed.
-        *      * Any transactions on the AHB Master are terminated as soon
-        *      as possible, after gracefully completing the last data phase of
-        *      an AHB transfer. Any transactions on the USB are terminated
-        *      immediately.
-        *      The application can write to this bit any time it wants to reset
-        *      the core. This is a self-clearing bit and the core clears this
-        *      bit after all the necessary logic is reset in the core, which
-        *      may take several clocks, depending on the current state of the
-        *      core. Once this bit is cleared software should wait at least 3
-        *      PHY clocks before doing any access to the PHY domain
-        *      (synchronization delay). Software should also should check that
-        *      bit 31 of this register is 1 (AHB Master is IDLE) before
-        *      starting any operation.
-        *      Typically software reset is used during software development
-        *      and also when you dynamically change the PHY selection bits
-        *      in the USB configuration registers listed above. When you
-        *      change the PHY, the corresponding clock for the PHY is
-        *      selected and used in the PHY domain. Once a new clock is
-        *      selected, the PHY domain has to be reset for proper operation.
-        */
-       struct cvmx_usbcx_grstctl_s {
-               uint32_t ahbidle        : 1;
-               uint32_t dmareq         : 1;
-               uint32_t reserved_11_29 : 19;
-               uint32_t txfnum         : 5;
-               uint32_t txfflsh        : 1;
-               uint32_t rxfflsh        : 1;
-               uint32_t intknqflsh     : 1;
-               uint32_t frmcntrrst     : 1;
-               uint32_t hsftrst        : 1;
-               uint32_t csftrst        : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_grxfsiz
- *
- * Receive FIFO Size Register (GRXFSIZ)
- *
- * The application can program the RAM size that must be allocated to the
- * RxFIFO.
- */
-union cvmx_usbcx_grxfsiz {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_grxfsiz_s
-        * @rxfdep: RxFIFO Depth (RxFDep)
-        *      This value is in terms of 32-bit words.
-        *      * Minimum value is 16
-        *      * Maximum value is 32768
-        */
-       struct cvmx_usbcx_grxfsiz_s {
-               uint32_t reserved_16_31 : 16;
-               uint32_t rxfdep         : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_grxstsph
- *
- * Receive Status Read and Pop Register, Host Mode (GRXSTSPH)
- *
- * A read to the Receive Status Read and Pop register returns and additionally
- * pops the top data entry out of the RxFIFO.
- * This Description is only valid when the core is in Host Mode. For Device Mode
- * use USBC_GRXSTSPD instead.
- * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the
- *      same offset in the O2P USB core. The offset difference shown in this
- *      document is for software clarity and is actually ignored by the
- *       hardware.
- */
-union cvmx_usbcx_grxstsph {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_grxstsph_s
-        * @pktsts: Packet Status (PktSts)
-        *      Indicates the status of the received packet
-        *      * 4'b0010: IN data packet received
-        *      * 4'b0011: IN transfer completed (triggers an interrupt)
-        *      * 4'b0101: Data toggle error (triggers an interrupt)
-        *      * 4'b0111: Channel halted (triggers an interrupt)
-        *      * Others: Reserved
-        * @dpid: Data PID (DPID)
-        *      * 2'b00: DATA0
-        *      * 2'b10: DATA1
-        *      * 2'b01: DATA2
-        *      * 2'b11: MDATA
-        * @bcnt: Byte Count (BCnt)
-        *      Indicates the byte count of the received IN data packet
-        * @chnum: Channel Number (ChNum)
-        *      Indicates the channel number to which the current received
-        *      packet belongs.
-        */
-       struct cvmx_usbcx_grxstsph_s {
-               uint32_t reserved_21_31 : 11;
-               uint32_t pktsts         : 4;
-               uint32_t dpid           : 2;
-               uint32_t bcnt           : 11;
-               uint32_t chnum          : 4;
-       } s;
-};
-
-/**
- * cvmx_usbc#_gusbcfg
- *
- * Core USB Configuration Register (GUSBCFG)
- *
- * This register can be used to configure the core after power-on or a changing
- * to Host mode or Device mode. It contains USB and USB-PHY related
- * configuration parameters. The application must program this register before
- * starting any transactions on either the AHB or the USB. Do not make changes
- * to this register after the initial programming.
- */
-union cvmx_usbcx_gusbcfg {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_gusbcfg_s
-        * @otgi2csel: UTMIFS or I2C Interface Select (OtgI2CSel)
-        *      This bit is always 0x0.
-        * @phylpwrclksel: PHY Low-Power Clock Select (PhyLPwrClkSel)
-        *      Software should set this bit to 0x0.
-        *      Selects either 480-MHz or 48-MHz (low-power) PHY mode. In
-        *      FS and LS modes, the PHY can usually operate on a 48-MHz
-        *      clock to save power.
-        *      * 1'b0: 480-MHz Internal PLL clock
-        *      * 1'b1: 48-MHz External Clock
-        *      In 480 MHz mode, the UTMI interface operates at either 60 or
-        *      30-MHz, depending upon whether 8- or 16-bit data width is
-        *      selected. In 48-MHz mode, the UTMI interface operates at 48
-        *      MHz in FS mode and at either 48 or 6 MHz in LS mode
-        *      (depending on the PHY vendor).
-        *      This bit drives the utmi_fsls_low_power core output signal, and
-        *      is valid only for UTMI+ PHYs.
-        * @usbtrdtim: USB Turnaround Time (USBTrdTim)
-        *      Sets the turnaround time in PHY clocks.
-        *      Specifies the response time for a MAC request to the Packet
-        *      FIFO Controller (PFC) to fetch data from the DFIFO (SPRAM).
-        *      This must be programmed to 0x5.
-        * @hnpcap: HNP-Capable (HNPCap)
-        *      This bit is always 0x0.
-        * @srpcap: SRP-Capable (SRPCap)
-        *      This bit is always 0x0.
-        * @ddrsel: ULPI DDR Select (DDRSel)
-        *      Software should set this bit to 0x0.
-        * @physel: USB 2.0 High-Speed PHY or USB 1.1 Full-Speed Serial
-        *      Software should set this bit to 0x0.
-        * @fsintf: Full-Speed Serial Interface Select (FSIntf)
-        *      Software should set this bit to 0x0.
-        * @ulpi_utmi_sel: ULPI or UTMI+ Select (ULPI_UTMI_Sel)
-        *      This bit is always 0x0.
-        * @phyif: PHY Interface (PHYIf)
-        *      This bit is always 0x1.
-        * @toutcal: HS/FS Timeout Calibration (TOutCal)
-        *      The number of PHY clocks that the application programs in this
-        *      field is added to the high-speed/full-speed interpacket timeout
-        *      duration in the core to account for any additional delays
-        *      introduced by the PHY. This may be required, since the delay
-        *      introduced by the PHY in generating the linestate condition may
-        *      vary from one PHY to another.
-        *      The USB standard timeout value for high-speed operation is
-        *      736 to 816 (inclusive) bit times. The USB standard timeout
-        *      value for full-speed operation is 16 to 18 (inclusive) bit
-        *      times. The application must program this field based on the
-        *      speed of enumeration. The number of bit times added per PHY
-        *      clock are:
-        *      High-speed operation:
-        *      * One 30-MHz PHY clock = 16 bit times
-        *      * One 60-MHz PHY clock = 8 bit times
-        *      Full-speed operation:
-        *      * One 30-MHz PHY clock = 0.4 bit times
-        *      * One 60-MHz PHY clock = 0.2 bit times
-        *      * One 48-MHz PHY clock = 0.25 bit times
-        */
-       struct cvmx_usbcx_gusbcfg_s {
-               uint32_t reserved_17_31 : 15;
-               uint32_t otgi2csel      : 1;
-               uint32_t phylpwrclksel  : 1;
-               uint32_t reserved_14_14 : 1;
-               uint32_t usbtrdtim      : 4;
-               uint32_t hnpcap         : 1;
-               uint32_t srpcap         : 1;
-               uint32_t ddrsel         : 1;
-               uint32_t physel         : 1;
-               uint32_t fsintf         : 1;
-               uint32_t ulpi_utmi_sel  : 1;
-               uint32_t phyif          : 1;
-               uint32_t toutcal        : 3;
-       } s;
-};
-
-/**
- * cvmx_usbc#_haint
- *
- * Host All Channels Interrupt Register (HAINT)
- *
- * When a significant event occurs on a channel, the Host All Channels Interrupt
- * register interrupts the application using the Host Channels Interrupt bit of
- * the Core Interrupt register (GINTSTS.HChInt). This is shown in Interrupt.
- * There is one interrupt bit per channel, up to a maximum of 16 bits. Bits in
- * this register are set and cleared when the application sets and clears bits
- * in the corresponding Host Channel-n Interrupt register.
- */
-union cvmx_usbcx_haint {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_haint_s
-        * @haint: Channel Interrupts (HAINT)
-        *      One bit per channel: Bit 0 for Channel 0, bit 15 for Channel 15
-        */
-       struct cvmx_usbcx_haint_s {
-               uint32_t reserved_16_31 : 16;
-               uint32_t haint          : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_haintmsk
- *
- * Host All Channels Interrupt Mask Register (HAINTMSK)
- *
- * The Host All Channel Interrupt Mask register works with the Host All Channel
- * Interrupt register to interrupt the application when an event occurs on a
- * channel. There is one interrupt mask bit per channel, up to a maximum of 16
- * bits.
- * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
- */
-union cvmx_usbcx_haintmsk {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_haintmsk_s
-        * @haintmsk: Channel Interrupt Mask (HAINTMsk)
-        *      One bit per channel: Bit 0 for channel 0, bit 15 for channel 15
-        */
-       struct cvmx_usbcx_haintmsk_s {
-               uint32_t reserved_16_31 : 16;
-               uint32_t haintmsk       : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hcchar#
- *
- * Host Channel-n Characteristics Register (HCCHAR)
- *
- */
-union cvmx_usbcx_hccharx {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hccharx_s
-        * @chena: Channel Enable (ChEna)
-        *      This field is set by the application and cleared by the OTG
-        *      host.
-        *      * 1'b0: Channel disabled
-        *      * 1'b1: Channel enabled
-        * @chdis: Channel Disable (ChDis)
-        *      The application sets this bit to stop transmitting/receiving
-        *      data on a channel, even before the transfer for that channel is
-        *      complete. The application must wait for the Channel Disabled
-        *      interrupt before treating the channel as disabled.
-        * @oddfrm: Odd Frame (OddFrm)
-        *      This field is set (reset) by the application to indicate that
-        *      the OTG host must perform a transfer in an odd (micro)frame.
-        *      This field is applicable for only periodic (isochronous and
-        *      interrupt) transactions.
-        *      * 1'b0: Even (micro)frame
-        *      * 1'b1: Odd (micro)frame
-        * @devaddr: Device Address (DevAddr)
-        *      This field selects the specific device serving as the data
-        *      source or sink.
-        * @ec: Multi Count (MC) / Error Count (EC)
-        *      When the Split Enable bit of the Host Channel-n Split Control
-        *      register (HCSPLTn.SpltEna) is reset (1'b0), this field indicates
-        *      to the host the number of transactions that should be executed
-        *      per microframe for this endpoint.
-        *      * 2'b00: Reserved. This field yields undefined results.
-        *      * 2'b01: 1 transaction
-        *      * 2'b10: 2 transactions to be issued for this endpoint per
-        *      microframe
-        *      * 2'b11: 3 transactions to be issued for this endpoint per
-        *      microframe
-        *      When HCSPLTn.SpltEna is set (1'b1), this field indicates the
-        *      number of immediate retries to be performed for a periodic split
-        *      transactions on transaction errors. This field must be set to at
-        *      least 2'b01.
-        * @eptype: Endpoint Type (EPType)
-        *      Indicates the transfer type selected.
-        *      * 2'b00: Control
-        *      * 2'b01: Isochronous
-        *      * 2'b10: Bulk
-        *      * 2'b11: Interrupt
-        * @lspddev: Low-Speed Device (LSpdDev)
-        *      This field is set by the application to indicate that this
-        *      channel is communicating to a low-speed device.
-        * @epdir: Endpoint Direction (EPDir)
-        *      Indicates whether the transaction is IN or OUT.
-        *      * 1'b0: OUT
-        *      * 1'b1: IN
-        * @epnum: Endpoint Number (EPNum)
-        *      Indicates the endpoint number on the device serving as the
-        *      data source or sink.
-        * @mps: Maximum Packet Size (MPS)
-        *      Indicates the maximum packet size of the associated endpoint.
-        */
-       struct cvmx_usbcx_hccharx_s {
-               uint32_t chena          : 1;
-               uint32_t chdis          : 1;
-               uint32_t oddfrm         : 1;
-               uint32_t devaddr        : 7;
-               uint32_t ec             : 2;
-               uint32_t eptype         : 2;
-               uint32_t lspddev        : 1;
-               uint32_t reserved_16_16 : 1;
-               uint32_t epdir          : 1;
-               uint32_t epnum          : 4;
-               uint32_t mps            : 11;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hcfg
- *
- * Host Configuration Register (HCFG)
- *
- * This register configures the core after power-on. Do not make changes to this
- * register after initializing the host.
- */
-union cvmx_usbcx_hcfg {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hcfg_s
-        * @fslssupp: FS- and LS-Only Support (FSLSSupp)
-        *      The application uses this bit to control the core's enumeration
-        *      speed. Using this bit, the application can make the core
-        *      enumerate as a FS host, even if the connected device supports
-        *      HS traffic. Do not make changes to this field after initial
-        *      programming.
-        *      * 1'b0: HS/FS/LS, based on the maximum speed supported by
-        *      the connected device
-        *      * 1'b1: FS/LS-only, even if the connected device can support HS
-        * @fslspclksel: FS/LS PHY Clock Select (FSLSPclkSel)
-        *      When the core is in FS Host mode
-        *      * 2'b00: PHY clock is running at 30/60 MHz
-        *      * 2'b01: PHY clock is running at 48 MHz
-        *      * Others: Reserved
-        *      When the core is in LS Host mode
-        *      * 2'b00: PHY clock is running at 30/60 MHz. When the
-        *      UTMI+/ULPI PHY Low Power mode is not selected, use
-        *      30/60 MHz.
-        *      * 2'b01: PHY clock is running at 48 MHz. When the UTMI+
-        *      PHY Low Power mode is selected, use 48MHz if the PHY
-        *      supplies a 48 MHz clock during LS mode.
-        *      * 2'b10: PHY clock is running at 6 MHz. In USB 1.1 FS mode,
-        *      use 6 MHz when the UTMI+ PHY Low Power mode is
-        *      selected and the PHY supplies a 6 MHz clock during LS
-        *      mode. If you select a 6 MHz clock during LS mode, you must
-        *      do a soft reset.
-        *      * 2'b11: Reserved
-        */
-       struct cvmx_usbcx_hcfg_s {
-               uint32_t reserved_3_31  : 29;
-               uint32_t fslssupp       : 1;
-               uint32_t fslspclksel    : 2;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hcint#
- *
- * Host Channel-n Interrupt Register (HCINT)
- *
- * This register indicates the status of a channel with respect to USB- and
- * AHB-related events. The application must read this register when the Host
- * Channels Interrupt bit of the Core Interrupt register (GINTSTS.HChInt) is
- * set. Before the application can read this register, it must first read
- * the Host All Channels Interrupt (HAINT) register to get the exact channel
- * number for the Host Channel-n Interrupt register. The application must clear
- * the appropriate bit in this register to clear the corresponding bits in the
- * HAINT and GINTSTS registers.
- */
-union cvmx_usbcx_hcintx {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hcintx_s
-        * @datatglerr: Data Toggle Error (DataTglErr)
-        * @frmovrun: Frame Overrun (FrmOvrun)
-        * @bblerr: Babble Error (BblErr)
-        * @xacterr: Transaction Error (XactErr)
-        * @nyet: NYET Response Received Interrupt (NYET)
-        * @ack: ACK Response Received Interrupt (ACK)
-        * @nak: NAK Response Received Interrupt (NAK)
-        * @stall: STALL Response Received Interrupt (STALL)
-        * @ahberr: This bit is always 0x0.
-        * @chhltd: Channel Halted (ChHltd)
-        *      Indicates the transfer completed abnormally either because of
-        *      any USB transaction error or in response to disable request by
-        *      the application.
-        * @xfercompl: Transfer Completed (XferCompl)
-        *      Transfer completed normally without any errors.
-        */
-       struct cvmx_usbcx_hcintx_s {
-               uint32_t reserved_11_31 : 21;
-               uint32_t datatglerr     : 1;
-               uint32_t frmovrun       : 1;
-               uint32_t bblerr         : 1;
-               uint32_t xacterr        : 1;
-               uint32_t nyet           : 1;
-               uint32_t ack            : 1;
-               uint32_t nak            : 1;
-               uint32_t stall          : 1;
-               uint32_t ahberr         : 1;
-               uint32_t chhltd         : 1;
-               uint32_t xfercompl      : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hcintmsk#
- *
- * Host Channel-n Interrupt Mask Register (HCINTMSKn)
- *
- * This register reflects the mask for each channel status described in the
- * previous section.
- * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
- */
-union cvmx_usbcx_hcintmskx {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hcintmskx_s
-        * @datatglerrmsk: Data Toggle Error Mask (DataTglErrMsk)
-        * @frmovrunmsk: Frame Overrun Mask (FrmOvrunMsk)
-        * @bblerrmsk: Babble Error Mask (BblErrMsk)
-        * @xacterrmsk: Transaction Error Mask (XactErrMsk)
-        * @nyetmsk: NYET Response Received Interrupt Mask (NyetMsk)
-        * @ackmsk: ACK Response Received Interrupt Mask (AckMsk)
-        * @nakmsk: NAK Response Received Interrupt Mask (NakMsk)
-        * @stallmsk: STALL Response Received Interrupt Mask (StallMsk)
-        * @ahberrmsk: AHB Error Mask (AHBErrMsk)
-        * @chhltdmsk: Channel Halted Mask (ChHltdMsk)
-        * @xfercomplmsk: Transfer Completed Mask (XferComplMsk)
-        */
-       struct cvmx_usbcx_hcintmskx_s {
-               uint32_t reserved_11_31 : 21;
-               uint32_t datatglerrmsk  : 1;
-               uint32_t frmovrunmsk    : 1;
-               uint32_t bblerrmsk      : 1;
-               uint32_t xacterrmsk     : 1;
-               uint32_t nyetmsk        : 1;
-               uint32_t ackmsk         : 1;
-               uint32_t nakmsk         : 1;
-               uint32_t stallmsk       : 1;
-               uint32_t ahberrmsk      : 1;
-               uint32_t chhltdmsk      : 1;
-               uint32_t xfercomplmsk   : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hcsplt#
- *
- * Host Channel-n Split Control Register (HCSPLT)
- *
- */
-union cvmx_usbcx_hcspltx {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hcspltx_s
-        * @spltena: Split Enable (SpltEna)
-        *      The application sets this field to indicate that this channel is
-        *      enabled to perform split transactions.
-        * @compsplt: Do Complete Split (CompSplt)
-        *      The application sets this field to request the OTG host to
-        *      perform a complete split transaction.
-        * @xactpos: Transaction Position (XactPos)
-        *      This field is used to determine whether to send all, first,
-        *      middle, or last payloads with each OUT transaction.
-        *      * 2'b11: All. This is the entire data payload is of this
-        *      transaction (which is less than or equal to 188 bytes).
-        *      * 2'b10: Begin. This is the first data payload of this
-        *      transaction (which is larger than 188 bytes).
-        *      * 2'b00: Mid. This is the middle payload of this transaction
-        *      (which is larger than 188 bytes).
-        *      * 2'b01: End. This is the last payload of this transaction
-        *      (which is larger than 188 bytes).
-        * @hubaddr: Hub Address (HubAddr)
-        *      This field holds the device address of the transaction
-        *      translator's hub.
-        * @prtaddr: Port Address (PrtAddr)
-        *      This field is the port number of the recipient transaction
-        *      translator.
-        */
-       struct cvmx_usbcx_hcspltx_s {
-               uint32_t spltena        : 1;
-               uint32_t reserved_17_30 : 14;
-               uint32_t compsplt       : 1;
-               uint32_t xactpos        : 2;
-               uint32_t hubaddr        : 7;
-               uint32_t prtaddr        : 7;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hctsiz#
- *
- * Host Channel-n Transfer Size Register (HCTSIZ)
- *
- */
-union cvmx_usbcx_hctsizx {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hctsizx_s
-        * @dopng: Do Ping (DoPng)
-        *      Setting this field to 1 directs the host to do PING protocol.
-        * @pid: PID (Pid)
-        *      The application programs this field with the type of PID to use
-        *      for the initial transaction. The host will maintain this field
-        *      for the rest of the transfer.
-        *      * 2'b00: DATA0
-        *      * 2'b01: DATA2
-        *      * 2'b10: DATA1
-        *      * 2'b11: MDATA (non-control)/SETUP (control)
-        * @pktcnt: Packet Count (PktCnt)
-        *      This field is programmed by the application with the expected
-        *      number of packets to be transmitted (OUT) or received (IN).
-        *      The host decrements this count on every successful
-        *      transmission or reception of an OUT/IN packet. Once this count
-        *      reaches zero, the application is interrupted to indicate normal
-        *      completion.
-        * @xfersize: Transfer Size (XferSize)
-        *      For an OUT, this field is the number of data bytes the host will
-        *      send during the transfer.
-        *      For an IN, this field is the buffer size that the application
-        *      has reserved for the transfer. The application is expected to
-        *      program this field as an integer multiple of the maximum packet
-        *      size for IN transactions (periodic and non-periodic).
-        */
-       struct cvmx_usbcx_hctsizx_s {
-               uint32_t dopng          : 1;
-               uint32_t pid            : 2;
-               uint32_t pktcnt         : 10;
-               uint32_t xfersize       : 19;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hfir
- *
- * Host Frame Interval Register (HFIR)
- *
- * This register stores the frame interval information for the current speed to
- * which the O2P USB core has enumerated.
- */
-union cvmx_usbcx_hfir {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hfir_s
-        * @frint: Frame Interval (FrInt)
-        *      The value that the application programs to this field specifies
-        *      the interval between two consecutive SOFs (FS) or micro-
-        *      SOFs (HS) or Keep-Alive tokens (HS). This field contains the
-        *      number of PHY clocks that constitute the required frame
-        *      interval. The default value set in this field for a FS operation
-        *      when the PHY clock frequency is 60 MHz. The application can
-        *      write a value to this register only after the Port Enable bit of
-        *      the Host Port Control and Status register (HPRT.PrtEnaPort)
-        *      has been set. If no value is programmed, the core calculates
-        *      the value based on the PHY clock specified in the FS/LS PHY
-        *      Clock Select field of the Host Configuration register
-        *      (HCFG.FSLSPclkSel). Do not change the value of this field
-        *      after the initial configuration.
-        *      * 125 us (PHY clock frequency for HS)
-        *      * 1 ms (PHY clock frequency for FS/LS)
-        */
-       struct cvmx_usbcx_hfir_s {
-               uint32_t reserved_16_31 : 16;
-               uint32_t frint          : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hfnum
- *
- * Host Frame Number/Frame Time Remaining Register (HFNUM)
- *
- * This register indicates the current frame number.
- * It also indicates the time remaining (in terms of the number of PHY clocks)
- * in the current (micro)frame.
- */
-union cvmx_usbcx_hfnum {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hfnum_s
-        * @frrem: Frame Time Remaining (FrRem)
-        *      Indicates the amount of time remaining in the current
-        *      microframe (HS) or frame (FS/LS), in terms of PHY clocks.
-        *      This field decrements on each PHY clock. When it reaches
-        *      zero, this field is reloaded with the value in the Frame
-        *      Interval register and a new SOF is transmitted on the USB.
-        * @frnum: Frame Number (FrNum)
-        *      This field increments when a new SOF is transmitted on the
-        *      USB, and is reset to 0 when it reaches 16'h3FFF.
-        */
-       struct cvmx_usbcx_hfnum_s {
-               uint32_t frrem  : 16;
-               uint32_t frnum  : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hprt
- *
- * Host Port Control and Status Register (HPRT)
- *
- * This register is available in both Host and Device modes.
- * Currently, the OTG Host supports only one port.
- * A single register holds USB port-related information such as USB reset,
- * enable, suspend, resume, connect status, and test mode for each port. The
- * R_SS_WC bits in this register can trigger an interrupt to the application
- * through the Host Port Interrupt bit of the Core Interrupt register
- * (GINTSTS.PrtInt). On a Port Interrupt, the application must read this
- * register and clear the bit that caused the interrupt. For the R_SS_WC bits,
- * the application must write a 1 to the bit to clear the interrupt.
- */
-union cvmx_usbcx_hprt {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hprt_s
-        * @prtspd: Port Speed (PrtSpd)
-        *      Indicates the speed of the device attached to this port.
-        *      * 2'b00: High speed
-        *      * 2'b01: Full speed
-        *      * 2'b10: Low speed
-        *      * 2'b11: Reserved
-        * @prttstctl: Port Test Control (PrtTstCtl)
-        *      The application writes a nonzero value to this field to put
-        *      the port into a Test mode, and the corresponding pattern is
-        *      signaled on the port.
-        *      * 4'b0000: Test mode disabled
-        *      * 4'b0001: Test_J mode
-        *      * 4'b0010: Test_K mode
-        *      * 4'b0011: Test_SE0_NAK mode
-        *      * 4'b0100: Test_Packet mode
-        *      * 4'b0101: Test_Force_Enable
-        *      * Others: Reserved
-        *      PrtSpd must be zero (i.e. the interface must be in high-speed
-        *      mode) to use the PrtTstCtl test modes.
-        * @prtpwr: Port Power (PrtPwr)
-        *      The application uses this field to control power to this port,
-        *      and the core clears this bit on an overcurrent condition.
-        *      * 1'b0: Power off
-        *      * 1'b1: Power on
-        * @prtlnsts: Port Line Status (PrtLnSts)
-        *      Indicates the current logic level USB data lines
-        *      * Bit [10]: Logic level of D-
-        *      * Bit [11]: Logic level of D+
-        * @prtrst: Port Reset (PrtRst)
-        *      When the application sets this bit, a reset sequence is
-        *      started on this port. The application must time the reset
-        *      period and clear this bit after the reset sequence is
-        *      complete.
-        *      * 1'b0: Port not in reset
-        *      * 1'b1: Port in reset
-        *      The application must leave this bit set for at least a
-        *      minimum duration mentioned below to start a reset on the
-        *      port. The application can leave it set for another 10 ms in
-        *      addition to the required minimum duration, before clearing
-        *      the bit, even though there is no maximum limit set by the
-        *      USB standard.
-        *      * High speed: 50 ms
-        *      * Full speed/Low speed: 10 ms
-        * @prtsusp: Port Suspend (PrtSusp)
-        *      The application sets this bit to put this port in Suspend
-        *      mode. The core only stops sending SOFs when this is set.
-        *      To stop the PHY clock, the application must set the Port
-        *      Clock Stop bit, which will assert the suspend input pin of
-        *      the PHY.
-        *      The read value of this bit reflects the current suspend
-        *      status of the port. This bit is cleared by the core after a
-        *      remote wakeup signal is detected or the application sets
-        *      the Port Reset bit or Port Resume bit in this register or the
-        *      Resume/Remote Wakeup Detected Interrupt bit or
-        *      Disconnect Detected Interrupt bit in the Core Interrupt
-        *      register (GINTSTS.WkUpInt or GINTSTS.DisconnInt,
-        *      respectively).
-        *      * 1'b0: Port not in Suspend mode
-        *      * 1'b1: Port in Suspend mode
-        * @prtres: Port Resume (PrtRes)
-        *      The application sets this bit to drive resume signaling on
-        *      the port. The core continues to drive the resume signal
-        *      until the application clears this bit.
-        *      If the core detects a USB remote wakeup sequence, as
-        *      indicated by the Port Resume/Remote Wakeup Detected
-        *      Interrupt bit of the Core Interrupt register
-        *      (GINTSTS.WkUpInt), the core starts driving resume
-        *      signaling without application intervention and clears this bit
-        *      when it detects a disconnect condition. The read value of
-        *      this bit indicates whether the core is currently driving
-        *      resume signaling.
-        *      * 1'b0: No resume driven
-        *      * 1'b1: Resume driven
-        * @prtovrcurrchng: Port Overcurrent Change (PrtOvrCurrChng)
-        *      The core sets this bit when the status of the Port
-        *      Overcurrent Active bit (bit 4) in this register changes.
-        * @prtovrcurract: Port Overcurrent Active (PrtOvrCurrAct)
-        *      Indicates the overcurrent condition of the port.
-        *      * 1'b0: No overcurrent condition
-        *      * 1'b1: Overcurrent condition
-        * @prtenchng: Port Enable/Disable Change (PrtEnChng)
-        *      The core sets this bit when the status of the Port Enable bit
-        *      [2] of this register changes.
-        * @prtena: Port Enable (PrtEna)
-        *      A port is enabled only by the core after a reset sequence,
-        *      and is disabled by an overcurrent condition, a disconnect
-        *      condition, or by the application clearing this bit. The
-        *      application cannot set this bit by a register write. It can only
-        *      clear it to disable the port. This bit does not trigger any
-        *      interrupt to the application.
-        *      * 1'b0: Port disabled
-        *      * 1'b1: Port enabled
-        * @prtconndet: Port Connect Detected (PrtConnDet)
-        *      The core sets this bit when a device connection is detected
-        *      to trigger an interrupt to the application using the Host Port
-        *      Interrupt bit of the Core Interrupt register (GINTSTS.PrtInt).
-        *      The application must write a 1 to this bit to clear the
-        *      interrupt.
-        * @prtconnsts: Port Connect Status (PrtConnSts)
-        *      * 0: No device is attached to the port.
-        *      * 1: A device is attached to the port.
-        */
-       struct cvmx_usbcx_hprt_s {
-               uint32_t reserved_19_31 : 13;
-               uint32_t prtspd         : 2;
-               uint32_t prttstctl      : 4;
-               uint32_t prtpwr         : 1;
-               uint32_t prtlnsts       : 2;
-               uint32_t reserved_9_9   : 1;
-               uint32_t prtrst         : 1;
-               uint32_t prtsusp        : 1;
-               uint32_t prtres         : 1;
-               uint32_t prtovrcurrchng : 1;
-               uint32_t prtovrcurract  : 1;
-               uint32_t prtenchng      : 1;
-               uint32_t prtena         : 1;
-               uint32_t prtconndet     : 1;
-               uint32_t prtconnsts     : 1;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hptxfsiz
- *
- * Host Periodic Transmit FIFO Size Register (HPTXFSIZ)
- *
- * This register holds the size and the memory start address of the Periodic
- * TxFIFO, as shown in Figures 310 and 311.
- */
-union cvmx_usbcx_hptxfsiz {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hptxfsiz_s
-        * @ptxfsize: Host Periodic TxFIFO Depth (PTxFSize)
-        *      This value is in terms of 32-bit words.
-        *      * Minimum value is 16
-        *      * Maximum value is 32768
-        * @ptxfstaddr: Host Periodic TxFIFO Start Address (PTxFStAddr)
-        */
-       struct cvmx_usbcx_hptxfsiz_s {
-               uint32_t ptxfsize       : 16;
-               uint32_t ptxfstaddr     : 16;
-       } s;
-};
-
-/**
- * cvmx_usbc#_hptxsts
- *
- * Host Periodic Transmit FIFO/Queue Status Register (HPTXSTS)
- *
- * This read-only register contains the free space information for the Periodic
- * TxFIFO and the Periodic Transmit Request Queue
- */
-union cvmx_usbcx_hptxsts {
-       uint32_t u32;
-       /**
-        * struct cvmx_usbcx_hptxsts_s
-        * @ptxqtop: Top of the Periodic Transmit Request Queue (PTxQTop)
-        *      This indicates the entry in the Periodic Tx Request Queue that
-        *      is currently being processes by the MAC.
-        *      This register is used for debugging.
-        *      * Bit [31]: Odd/Even (micro)frame
-        *      - 1'b0: send in even (micro)frame
-        *      - 1'b1: send in odd (micro)frame
-        *      * Bits [30:27]: Channel/endpoint number
-        *      * Bits [26:25]: Type
-        *      - 2'b00: IN/OUT
-        *      - 2'b01: Zero-length packet
-        *      - 2'b10: CSPLIT
-        *      - 2'b11: Disable channel command
-        *      * Bit [24]: Terminate (last entry for the selected
-        *      channel/endpoint)
-        * @ptxqspcavail: Periodic Transmit Request Queue Space Available
-        *      (PTxQSpcAvail)
-        *      Indicates the number of free locations available to be written
-        *      in the Periodic Transmit Request Queue. This queue holds both
-        *      IN and OUT requests.
-        *      * 8'h0: Periodic Transmit Request Queue is full
-        *      * 8'h1: 1 location available
-        *      * 8'h2: 2 locations available
-        *      * n: n locations available (0..8)
-        *      * Others: Reserved
-        * @ptxfspcavail: Periodic Transmit Data FIFO Space Available
-        *                (PTxFSpcAvail)
-        *      Indicates the number of free locations available to be written
-        *      to in the Periodic TxFIFO.
-        *      Values are in terms of 32-bit words
-        *      * 16'h0: Periodic TxFIFO is full
-        *      * 16'h1: 1 word available
-        *      * 16'h2: 2 words available
-        *      * 16'hn: n words available (where 0..32768)
-        *      * 16'h8000: 32768 words available
-        *      * Others: Reserved
-        */
-       struct cvmx_usbcx_hptxsts_s {
-               uint32_t ptxqtop        : 8;
-               uint32_t ptxqspcavail   : 8;
-               uint32_t ptxfspcavail   : 16;
-       } s;
-};
-
-#endif
diff --git a/drivers/staging/octeon-usb/cvmx-usbnx-defs.h b/drivers/staging/octeon-usb/cvmx-usbnx-defs.h
deleted file mode 100644 (file)
index 6a1c777..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-/***********************license start***************
- * Copyright (c) 2003-2010  Cavium Networks (support@cavium.com). All rights
- * reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *
- *   * Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the following
- *     disclaimer in the documentation and/or other materials provided
- *     with the distribution.
-
- *   * Neither the name of Cavium Networks nor the names of
- *     its contributors may be used to endorse or promote products
- *     derived from this software without specific prior written
- *     permission.
-
- * This Software, including technical data, may be subject to U.S. export
- * control laws, including the U.S. Export Administration Act and its associated
- * regulations, and may be subject to export or import  regulations in other
- * countries.
-
- * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
- * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
- * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
- * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION
- * OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
- * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
- * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
- * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
- * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
- * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
- ***********************license end**************************************/
-
-
-/**
- * cvmx-usbnx-defs.h
- *
- * Configuration and status register (CSR) type definitions for
- * Octeon usbnx.
- *
- */
-#ifndef __CVMX_USBNX_TYPEDEFS_H__
-#define __CVMX_USBNX_TYPEDEFS_H__
-
-#define CVMX_USBNXBID1(bid) (((bid) & 1) * 0x10000000ull)
-#define CVMX_USBNXBID2(bid) (((bid) & 1) * 0x100000000000ull)
-
-#define CVMX_USBNXREG1(reg, bid) \
-       (CVMX_ADD_IO_SEG(0x0001180068000000ull | reg) + CVMX_USBNXBID1(bid))
-#define CVMX_USBNXREG2(reg, bid) \
-       (CVMX_ADD_IO_SEG(0x00016F0000000000ull | reg) + CVMX_USBNXBID2(bid))
-
-#define CVMX_USBNX_CLK_CTL(bid)                CVMX_USBNXREG1(0x10, bid)
-#define CVMX_USBNX_DMA0_INB_CHN0(bid)  CVMX_USBNXREG2(0x818, bid)
-#define CVMX_USBNX_DMA0_OUTB_CHN0(bid) CVMX_USBNXREG2(0x858, bid)
-#define CVMX_USBNX_USBP_CTL_STATUS(bid)        CVMX_USBNXREG1(0x18, bid)
-
-/**
- * cvmx_usbn#_clk_ctl
- *
- * USBN_CLK_CTL = USBN's Clock Control
- *
- * This register is used to control the frequency of the hclk and the
- * hreset and phy_rst signals.
- */
-union cvmx_usbnx_clk_ctl {
-       uint64_t u64;
-       /**
-        * struct cvmx_usbnx_clk_ctl_s
-        * @divide2: The 'hclk' used by the USB subsystem is derived
-        *      from the eclk.
-        *      Also see the field DIVIDE. DIVIDE2<1> must currently
-        *      be zero because it is not implemented, so the maximum
-        *      ratio of eclk/hclk is currently 16.
-        *      The actual divide number for hclk is:
-        *      (DIVIDE2 + 1) * (DIVIDE + 1)
-        * @hclk_rst: When this field is '0' the HCLK-DIVIDER used to
-        *      generate the hclk in the USB Subsystem is held
-        *      in reset. This bit must be set to '0' before
-        *      changing the value os DIVIDE in this register.
-        *      The reset to the HCLK_DIVIDERis also asserted
-        *      when core reset is asserted.
-        * @p_x_on: Force USB-PHY on during suspend.
-        *      '1' USB-PHY XO block is powered-down during
-        *      suspend.
-        *      '0' USB-PHY XO block is powered-up during
-        *      suspend.
-        *      The value of this field must be set while POR is
-        *      active.
-        * @p_rtype: PHY reference clock type
-        *      On CN50XX/CN52XX/CN56XX the values are:
-        *              '0' The USB-PHY uses a 12MHz crystal as a clock source
-        *                  at the USB_XO and USB_XI pins.
-        *              '1' Reserved.
-        *              '2' The USB_PHY uses 12/24/48MHz 2.5V board clock at the
-        *                  USB_XO pin. USB_XI should be tied to ground in this
-        *                  case.
-        *              '3' Reserved.
-        *      On CN3xxx bits 14 and 15 are p_xenbn and p_rclk and values are:
-        *              '0' Reserved.
-        *              '1' Reserved.
-        *              '2' The PHY PLL uses the XO block output as a reference.
-        *                  The XO block uses an external clock supplied on the
-        *                  XO pin. USB_XI should be tied to ground for this
-        *                  usage.
-        *              '3' The XO block uses the clock from a crystal.
-        * @p_com_on: '0' Force USB-PHY XO Bias, Bandgap and PLL to
-        *      remain powered in Suspend Mode.
-        *      '1' The USB-PHY XO Bias, Bandgap and PLL are
-        *      powered down in suspend mode.
-        *      The value of this field must be set while POR is
-        *      active.
-        * @p_c_sel: Phy clock speed select.
-        *      Selects the reference clock / crystal frequency.
-        *      '11': Reserved
-        *      '10': 48 MHz (reserved when a crystal is used)
-        *      '01': 24 MHz (reserved when a crystal is used)
-        *      '00': 12 MHz
-        *      The value of this field must be set while POR is
-        *      active.
-        *      NOTE: if a crystal is used as a reference clock,
-        *      this field must be set to 12 MHz.
-        * @cdiv_byp: Used to enable the bypass input to the USB_CLK_DIV.
-        * @sd_mode: Scaledown mode for the USBC. Control timing events
-        *      in the USBC, for normal operation this must be '0'.
-        * @s_bist: Starts bist on the hclk memories, during the '0'
-        *      to '1' transition.
-        * @por: Power On Reset for the PHY.
-        *      Resets all the PHYS registers and state machines.
-        * @enable: When '1' allows the generation of the hclk. When
-        *      '0' the hclk will not be generated. SEE DIVIDE
-        *      field of this register.
-        * @prst: When this field is '0' the reset associated with
-        *      the phy_clk functionality in the USB Subsystem is
-        *      help in reset. This bit should not be set to '1'
-        *      until the time it takes 6 clocks (hclk or phy_clk,
-        *      whichever is slower) has passed. Under normal
-        *      operation once this bit is set to '1' it should not
-        *      be set to '0'.
-        * @hrst: When this field is '0' the reset associated with
-        *      the hclk functioanlity in the USB Subsystem is
-        *      held in reset.This bit should not be set to '1'
-        *      until 12ms after phy_clk is stable. Under normal
-        *      operation, once this bit is set to '1' it should
-        *      not be set to '0'.
-        * @divide: The frequency of 'hclk' used by the USB subsystem
-        *      is the eclk frequency divided by the value of
-        *      (DIVIDE2 + 1) * (DIVIDE + 1), also see the field
-        *      DIVIDE2 of this register.
-        *      The hclk frequency should be less than 125Mhz.
-        *      After writing a value to this field the SW should
-        *      read the field for the value written.
-        *      The ENABLE field of this register should not be set
-        *      until AFTER this field is set and then read.
-        */
-       struct cvmx_usbnx_clk_ctl_s {
-               uint64_t reserved_20_63 : 44;
-               uint64_t divide2        : 2;
-               uint64_t hclk_rst       : 1;
-               uint64_t p_x_on         : 1;
-               uint64_t p_rtype        : 2;
-               uint64_t p_com_on       : 1;
-               uint64_t p_c_sel        : 2;
-               uint64_t cdiv_byp       : 1;
-               uint64_t sd_mode        : 2;
-               uint64_t s_bist         : 1;
-               uint64_t por            : 1;
-               uint64_t enable         : 1;
-               uint64_t prst           : 1;
-               uint64_t hrst           : 1;
-               uint64_t divide         : 3;
-       } s;
-};
-
-/**
- * cvmx_usbn#_usbp_ctl_status
- *
- * USBN_USBP_CTL_STATUS = USBP Control And Status Register
- *
- * Contains general control and status information for the USBN block.
- */
-union cvmx_usbnx_usbp_ctl_status {
-       uint64_t u64;
-       /**
-        * struct cvmx_usbnx_usbp_ctl_status_s
-        * @txrisetune: HS Transmitter Rise/Fall Time Adjustment
-        * @txvreftune: HS DC Voltage Level Adjustment
-        * @txfslstune: FS/LS Source Impedence Adjustment
-        * @txhsxvtune: Transmitter High-Speed Crossover Adjustment
-        * @sqrxtune: Squelch Threshold Adjustment
-        * @compdistune: Disconnect Threshold Adjustment
-        * @otgtune: VBUS Valid Threshold Adjustment
-        * @otgdisable: OTG Block Disable
-        * @portreset: Per_Port Reset
-        * @drvvbus: Drive VBUS
-        * @lsbist: Low-Speed BIST Enable.
-        * @fsbist: Full-Speed BIST Enable.
-        * @hsbist: High-Speed BIST Enable.
-        * @bist_done: PHY Bist Done.
-        *      Asserted at the end of the PHY BIST sequence.
-        * @bist_err: PHY Bist Error.
-        *      Indicates an internal error was detected during
-        *      the BIST sequence.
-        * @tdata_out: PHY Test Data Out.
-        *      Presents either internaly generated signals or
-        *      test register contents, based upon the value of
-        *      test_data_out_sel.
-        * @siddq: Drives the USBP (USB-PHY) SIDDQ input.
-        *      Normally should be set to zero.
-        *      When customers have no intent to use USB PHY
-        *      interface, they should:
-        *      - still provide 3.3V to USB_VDD33, and
-        *      - tie USB_REXT to 3.3V supply, and
-        *      - set USBN*_USBP_CTL_STATUS[SIDDQ]=1
-        * @txpreemphasistune: HS Transmitter Pre-Emphasis Enable
-        * @dma_bmode: When set to 1 the L2C DMA address will be updated
-        *      with byte-counts between packets. When set to 0
-        *      the L2C DMA address is incremented to the next
-        *      4-byte aligned address after adding byte-count.
-        * @usbc_end: Bigendian input to the USB Core. This should be
-        *      set to '0' for operation.
-        * @usbp_bist: PHY, This is cleared '0' to run BIST on the USBP.
-        * @tclk: PHY Test Clock, used to load TDATA_IN to the USBP.
-        * @dp_pulld: PHY DP_PULLDOWN input to the USB-PHY.
-        *      This signal enables the pull-down resistance on
-        *      the D+ line. '1' pull down-resistance is connected
-        *      to D+/ '0' pull down resistance is not connected
-        *      to D+. When an A/B device is acting as a host
-        *      (downstream-facing port), dp_pulldown and
-        *      dm_pulldown are enabled. This must not toggle
-        *      during normal opeartion.
-        * @dm_pulld: PHY DM_PULLDOWN input to the USB-PHY.
-        *      This signal enables the pull-down resistance on
-        *      the D- line. '1' pull down-resistance is connected
-        *      to D-. '0' pull down resistance is not connected
-        *      to D-. When an A/B device is acting as a host
-        *      (downstream-facing port), dp_pulldown and
-        *      dm_pulldown are enabled. This must not toggle
-        *      during normal opeartion.
-        * @hst_mode: When '0' the USB is acting as HOST, when '1'
-        *      USB is acting as device. This field needs to be
-        *      set while the USB is in reset.
-        * @tuning: Transmitter Tuning for High-Speed Operation.
-        *      Tunes the current supply and rise/fall output
-        *      times for high-speed operation.
-        *      [20:19] == 11: Current supply increased
-        *      approximately 9%
-        *      [20:19] == 10: Current supply increased
-        *      approximately 4.5%
-        *      [20:19] == 01: Design default.
-        *      [20:19] == 00: Current supply decreased
-        *      approximately 4.5%
-        *      [22:21] == 11: Rise and fall times are increased.
-        *      [22:21] == 10: Design default.
-        *      [22:21] == 01: Rise and fall times are decreased.
-        *      [22:21] == 00: Rise and fall times are decreased
-        *      further as compared to the 01 setting.
-        * @tx_bs_enh: Transmit Bit Stuffing on [15:8].
-        *      Enables or disables bit stuffing on data[15:8]
-        *      when bit-stuffing is enabled.
-        * @tx_bs_en: Transmit Bit Stuffing on [7:0].
-        *      Enables or disables bit stuffing on data[7:0]
-        *      when bit-stuffing is enabled.
-        * @loop_enb: PHY Loopback Test Enable.
-        *      '1': During data transmission the receive is
-        *      enabled.
-        *      '0': During data transmission the receive is
-        *      disabled.
-        *      Must be '0' for normal operation.
-        * @vtest_enb: Analog Test Pin Enable.
-        *      '1' The PHY's analog_test pin is enabled for the
-        *      input and output of applicable analog test signals.
-        *      '0' THe analog_test pin is disabled.
-        * @bist_enb: Built-In Self Test Enable.
-        *      Used to activate BIST in the PHY.
-        * @tdata_sel: Test Data Out Select.
-        *      '1' test_data_out[3:0] (PHY) register contents
-        *      are output. '0' internaly generated signals are
-        *      output.
-        * @taddr_in: Mode Address for Test Interface.
-        *      Specifies the register address for writing to or
-        *      reading from the PHY test interface register.
-        * @tdata_in: Internal Testing Register Input Data and Select
-        *      This is a test bus. Data is present on [3:0],
-        *      and its corresponding select (enable) is present
-        *      on bits [7:4].
-        * @ate_reset: Reset input from automatic test equipment.
-        *      This is a test signal. When the USB Core is
-        *      powered up (not in Susned Mode), an automatic
-        *      tester can use this to disable phy_clock and
-        *      free_clk, then re-eanable them with an aligned
-        *      phase.
-        *      '1': The phy_clk and free_clk outputs are
-        *      disabled. "0": The phy_clock and free_clk outputs
-        *      are available within a specific period after the
-        *      de-assertion.
-        */
-       struct cvmx_usbnx_usbp_ctl_status_s {
-               uint64_t txrisetune             : 1;
-               uint64_t txvreftune             : 4;
-               uint64_t txfslstune             : 4;
-               uint64_t txhsxvtune             : 2;
-               uint64_t sqrxtune               : 3;
-               uint64_t compdistune            : 3;
-               uint64_t otgtune                : 3;
-               uint64_t otgdisable             : 1;
-               uint64_t portreset              : 1;
-               uint64_t drvvbus                : 1;
-               uint64_t lsbist                 : 1;
-               uint64_t fsbist                 : 1;
-               uint64_t hsbist                 : 1;
-               uint64_t bist_done              : 1;
-               uint64_t bist_err               : 1;
-               uint64_t tdata_out              : 4;
-               uint64_t siddq                  : 1;
-               uint64_t txpreemphasistune      : 1;
-               uint64_t dma_bmode              : 1;
-               uint64_t usbc_end               : 1;
-               uint64_t usbp_bist              : 1;
-               uint64_t tclk                   : 1;
-               uint64_t dp_pulld               : 1;
-               uint64_t dm_pulld               : 1;
-               uint64_t hst_mode               : 1;
-               uint64_t tuning                 : 4;
-               uint64_t tx_bs_enh              : 1;
-               uint64_t tx_bs_en               : 1;
-               uint64_t loop_enb               : 1;
-               uint64_t vtest_enb              : 1;
-               uint64_t bist_enb               : 1;
-               uint64_t tdata_sel              : 1;
-               uint64_t taddr_in               : 4;
-               uint64_t tdata_in               : 8;
-               uint64_t ate_reset              : 1;
-       } s;
-};
-
-#endif
index 2226c7d6066e0ec40b67d5ca36375857d366e10a..da96461855ea7066d4f4c8a33912e9a713942940 100644 (file)
@@ -66,8 +66,7 @@
 #include <asm/octeon/cvmx-sysinfo.h>
 #include <asm/octeon/cvmx-helper-board.h>
 
-#include "cvmx-usbcx-defs.h"
-#include "cvmx-usbnx-defs.h"
+#include "octeon-hcd.h"
 
 /**
  * enum cvmx_usb_speed - the possible USB device speeds
diff --git a/drivers/staging/octeon-usb/octeon-hcd.h b/drivers/staging/octeon-usb/octeon-hcd.h
new file mode 100644 (file)
index 0000000..42fe4fe
--- /dev/null
@@ -0,0 +1,1819 @@
+/*
+ * Octeon HCD hardware register definitions.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Some parts of the code were originally released under BSD license:
+ *
+ * Copyright (c) 2003-2010 Cavium Networks (support@cavium.com). All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   * Redistributions in binary form must reproduce the above
+ *     copyright notice, this list of conditions and the following
+ *     disclaimer in the documentation and/or other materials provided
+ *     with the distribution.
+ *
+ *   * Neither the name of Cavium Networks nor the names of
+ *     its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written
+ *     permission.
+ *
+ * This Software, including technical data, may be subject to U.S. export
+ * control laws, including the U.S. Export Administration Act and its associated
+ * regulations, and may be subject to export or import regulations in other
+ * countries.
+ *
+ * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
+ * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
+ * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
+ * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION
+ * OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
+ * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
+ * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
+ * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
+ * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
+ * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
+ */
+
+#ifndef __OCTEON_HCD_H__
+#define __OCTEON_HCD_H__
+
+#define CVMX_USBCXBASE 0x00016F0010000000ull
+#define CVMX_USBCXREG1(reg, bid) \
+       (CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
+        ((bid) & 1) * 0x100000000000ull)
+#define CVMX_USBCXREG2(reg, bid, off) \
+       (CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
+        (((off) & 7) + ((bid) & 1) * 0x8000000000ull) * 32)
+
+#define CVMX_USBCX_GAHBCFG(bid)                CVMX_USBCXREG1(0x008, bid)
+#define CVMX_USBCX_GHWCFG3(bid)                CVMX_USBCXREG1(0x04c, bid)
+#define CVMX_USBCX_GINTMSK(bid)                CVMX_USBCXREG1(0x018, bid)
+#define CVMX_USBCX_GINTSTS(bid)                CVMX_USBCXREG1(0x014, bid)
+#define CVMX_USBCX_GNPTXFSIZ(bid)      CVMX_USBCXREG1(0x028, bid)
+#define CVMX_USBCX_GNPTXSTS(bid)       CVMX_USBCXREG1(0x02c, bid)
+#define CVMX_USBCX_GOTGCTL(bid)                CVMX_USBCXREG1(0x000, bid)
+#define CVMX_USBCX_GRSTCTL(bid)                CVMX_USBCXREG1(0x010, bid)
+#define CVMX_USBCX_GRXFSIZ(bid)                CVMX_USBCXREG1(0x024, bid)
+#define CVMX_USBCX_GRXSTSPH(bid)       CVMX_USBCXREG1(0x020, bid)
+#define CVMX_USBCX_GUSBCFG(bid)                CVMX_USBCXREG1(0x00c, bid)
+#define CVMX_USBCX_HAINT(bid)          CVMX_USBCXREG1(0x414, bid)
+#define CVMX_USBCX_HAINTMSK(bid)       CVMX_USBCXREG1(0x418, bid)
+#define CVMX_USBCX_HCCHARX(off, bid)   CVMX_USBCXREG2(0x500, bid, off)
+#define CVMX_USBCX_HCFG(bid)           CVMX_USBCXREG1(0x400, bid)
+#define CVMX_USBCX_HCINTMSKX(off, bid) CVMX_USBCXREG2(0x50c, bid, off)
+#define CVMX_USBCX_HCINTX(off, bid)    CVMX_USBCXREG2(0x508, bid, off)
+#define CVMX_USBCX_HCSPLTX(off, bid)   CVMX_USBCXREG2(0x504, bid, off)
+#define CVMX_USBCX_HCTSIZX(off, bid)   CVMX_USBCXREG2(0x510, bid, off)
+#define CVMX_USBCX_HFIR(bid)           CVMX_USBCXREG1(0x404, bid)
+#define CVMX_USBCX_HFNUM(bid)          CVMX_USBCXREG1(0x408, bid)
+#define CVMX_USBCX_HPRT(bid)           CVMX_USBCXREG1(0x440, bid)
+#define CVMX_USBCX_HPTXFSIZ(bid)       CVMX_USBCXREG1(0x100, bid)
+#define CVMX_USBCX_HPTXSTS(bid)                CVMX_USBCXREG1(0x410, bid)
+
+#define CVMX_USBNXBID1(bid) (((bid) & 1) * 0x10000000ull)
+#define CVMX_USBNXBID2(bid) (((bid) & 1) * 0x100000000000ull)
+
+#define CVMX_USBNXREG1(reg, bid) \
+       (CVMX_ADD_IO_SEG(0x0001180068000000ull | reg) + CVMX_USBNXBID1(bid))
+#define CVMX_USBNXREG2(reg, bid) \
+       (CVMX_ADD_IO_SEG(0x00016F0000000000ull | reg) + CVMX_USBNXBID2(bid))
+
+#define CVMX_USBNX_CLK_CTL(bid)                CVMX_USBNXREG1(0x10, bid)
+#define CVMX_USBNX_DMA0_INB_CHN0(bid)  CVMX_USBNXREG2(0x818, bid)
+#define CVMX_USBNX_DMA0_OUTB_CHN0(bid) CVMX_USBNXREG2(0x858, bid)
+#define CVMX_USBNX_USBP_CTL_STATUS(bid)        CVMX_USBNXREG1(0x18, bid)
+
+/**
+ * cvmx_usbc#_gahbcfg
+ *
+ * Core AHB Configuration Register (GAHBCFG)
+ *
+ * This register can be used to configure the core after power-on or a change in
+ * mode of operation. This register mainly contains AHB system-related
+ * configuration parameters. The AHB is the processor interface to the O2P USB
+ * core. In general, software need not know about this interface except to
+ * program the values as specified.
+ *
+ * The application must program this register as part of the O2P USB core
+ * initialization. Do not change this register after the initial programming.
+ */
+union cvmx_usbcx_gahbcfg {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gahbcfg_s
+        * @ptxfemplvl: Periodic TxFIFO Empty Level (PTxFEmpLvl)
+        *      Software should set this bit to 0x1.
+        *      Indicates when the Periodic TxFIFO Empty Interrupt bit in the
+        *      Core Interrupt register (GINTSTS.PTxFEmp) is triggered. This
+        *      bit is used only in Slave mode.
+        *      * 1'b0: GINTSTS.PTxFEmp interrupt indicates that the Periodic
+        *      TxFIFO is half empty
+        *      * 1'b1: GINTSTS.PTxFEmp interrupt indicates that the Periodic
+        *      TxFIFO is completely empty
+        * @nptxfemplvl: Non-Periodic TxFIFO Empty Level (NPTxFEmpLvl)
+        *      Software should set this bit to 0x1.
+        *      Indicates when the Non-Periodic TxFIFO Empty Interrupt bit in
+        *      the Core Interrupt register (GINTSTS.NPTxFEmp) is triggered.
+        *      This bit is used only in Slave mode.
+        *      * 1'b0: GINTSTS.NPTxFEmp interrupt indicates that the Non-
+        *      Periodic TxFIFO is half empty
+        *      * 1'b1: GINTSTS.NPTxFEmp interrupt indicates that the Non-
+        *      Periodic TxFIFO is completely empty
+        * @dmaen: DMA Enable (DMAEn)
+        *      * 1'b0: Core operates in Slave mode
+        *      * 1'b1: Core operates in a DMA mode
+        * @hbstlen: Burst Length/Type (HBstLen)
+        *      This field has not effect and should be left as 0x0.
+        * @glblintrmsk: Global Interrupt Mask (GlblIntrMsk)
+        *      Software should set this field to 0x1.
+        *      The application uses this bit to mask or unmask the interrupt
+        *      line assertion to itself. Irrespective of this bit's setting,
+        *      the interrupt status registers are updated by the core.
+        *      * 1'b0: Mask the interrupt assertion to the application.
+        *      * 1'b1: Unmask the interrupt assertion to the application.
+        */
+       struct cvmx_usbcx_gahbcfg_s {
+               uint32_t reserved_9_31  : 23;
+               uint32_t ptxfemplvl     : 1;
+               uint32_t nptxfemplvl    : 1;
+               uint32_t reserved_6_6   : 1;
+               uint32_t dmaen          : 1;
+               uint32_t hbstlen        : 4;
+               uint32_t glblintrmsk    : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_ghwcfg3
+ *
+ * User HW Config3 Register (GHWCFG3)
+ *
+ * This register contains the configuration options of the O2P USB core.
+ */
+union cvmx_usbcx_ghwcfg3 {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_ghwcfg3_s
+        * @dfifodepth: DFIFO Depth (DfifoDepth)
+        *      This value is in terms of 32-bit words.
+        *      * Minimum value is 32
+        *      * Maximum value is 32768
+        * @ahbphysync: AHB and PHY Synchronous (AhbPhySync)
+        *      Indicates whether AHB and PHY clocks are synchronous to
+        *      each other.
+        *      * 1'b0: No
+        *      * 1'b1: Yes
+        *      This bit is tied to 1.
+        * @rsttype: Reset Style for Clocked always Blocks in RTL (RstType)
+        *      * 1'b0: Asynchronous reset is used in the core
+        *      * 1'b1: Synchronous reset is used in the core
+        * @optfeature: Optional Features Removed (OptFeature)
+        *      Indicates whether the User ID register, GPIO interface ports,
+        *      and SOF toggle and counter ports were removed for gate count
+        *      optimization.
+        * @vendor_control_interface_support: Vendor Control Interface Support
+        *      * 1'b0: Vendor Control Interface is not available on the core.
+        *      * 1'b1: Vendor Control Interface is available.
+        * @i2c_selection: I2C Selection
+        *      * 1'b0: I2C Interface is not available on the core.
+        *      * 1'b1: I2C Interface is available on the core.
+        * @otgen: OTG Function Enabled (OtgEn)
+        *      The application uses this bit to indicate the O2P USB core's
+        *      OTG capabilities.
+        *      * 1'b0: Not OTG capable
+        *      * 1'b1: OTG Capable
+        * @pktsizewidth: Width of Packet Size Counters (PktSizeWidth)
+        *      * 3'b000: 4 bits
+        *      * 3'b001: 5 bits
+        *      * 3'b010: 6 bits
+        *      * 3'b011: 7 bits
+        *      * 3'b100: 8 bits
+        *      * 3'b101: 9 bits
+        *      * 3'b110: 10 bits
+        *      * Others: Reserved
+        * @xfersizewidth: Width of Transfer Size Counters (XferSizeWidth)
+        *      * 4'b0000: 11 bits
+        *      * 4'b0001: 12 bits
+        *      - ...
+        *      * 4'b1000: 19 bits
+        *      * Others: Reserved
+        */
+       struct cvmx_usbcx_ghwcfg3_s {
+               uint32_t dfifodepth                             : 16;
+               uint32_t reserved_13_15                         : 3;
+               uint32_t ahbphysync                             : 1;
+               uint32_t rsttype                                : 1;
+               uint32_t optfeature                             : 1;
+               uint32_t vendor_control_interface_support       : 1;
+               uint32_t i2c_selection                          : 1;
+               uint32_t otgen                                  : 1;
+               uint32_t pktsizewidth                           : 3;
+               uint32_t xfersizewidth                          : 4;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_gintmsk
+ *
+ * Core Interrupt Mask Register (GINTMSK)
+ *
+ * This register works with the Core Interrupt register to interrupt the
+ * application. When an interrupt bit is masked, the interrupt associated with
+ * that bit will not be generated. However, the Core Interrupt (GINTSTS)
+ * register bit corresponding to that interrupt will still be set.
+ * Mask interrupt: 1'b0, Unmask interrupt: 1'b1
+ */
+union cvmx_usbcx_gintmsk {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gintmsk_s
+        * @wkupintmsk: Resume/Remote Wakeup Detected Interrupt Mask
+        *      (WkUpIntMsk)
+        * @sessreqintmsk: Session Request/New Session Detected Interrupt Mask
+        *      (SessReqIntMsk)
+        * @disconnintmsk: Disconnect Detected Interrupt Mask (DisconnIntMsk)
+        * @conidstschngmsk: Connector ID Status Change Mask (ConIDStsChngMsk)
+        * @ptxfempmsk: Periodic TxFIFO Empty Mask (PTxFEmpMsk)
+        * @hchintmsk: Host Channels Interrupt Mask (HChIntMsk)
+        * @prtintmsk: Host Port Interrupt Mask (PrtIntMsk)
+        * @fetsuspmsk: Data Fetch Suspended Mask (FetSuspMsk)
+        * @incomplpmsk: Incomplete Periodic Transfer Mask (incomplPMsk)
+        *      Incomplete Isochronous OUT Transfer Mask
+        *      (incompISOOUTMsk)
+        * @incompisoinmsk: Incomplete Isochronous IN Transfer Mask
+        *                  (incompISOINMsk)
+        * @oepintmsk: OUT Endpoints Interrupt Mask (OEPIntMsk)
+        * @inepintmsk: IN Endpoints Interrupt Mask (INEPIntMsk)
+        * @epmismsk: Endpoint Mismatch Interrupt Mask (EPMisMsk)
+        * @eopfmsk: End of Periodic Frame Interrupt Mask (EOPFMsk)
+        * @isooutdropmsk: Isochronous OUT Packet Dropped Interrupt Mask
+        *      (ISOOutDropMsk)
+        * @enumdonemsk: Enumeration Done Mask (EnumDoneMsk)
+        * @usbrstmsk: USB Reset Mask (USBRstMsk)
+        * @usbsuspmsk: USB Suspend Mask (USBSuspMsk)
+        * @erlysuspmsk: Early Suspend Mask (ErlySuspMsk)
+        * @i2cint: I2C Interrupt Mask (I2CINT)
+        * @ulpickintmsk: ULPI Carkit Interrupt Mask (ULPICKINTMsk)
+        *      I2C Carkit Interrupt Mask (I2CCKINTMsk)
+        * @goutnakeffmsk: Global OUT NAK Effective Mask (GOUTNakEffMsk)
+        * @ginnakeffmsk: Global Non-Periodic IN NAK Effective Mask
+        *                (GINNakEffMsk)
+        * @nptxfempmsk: Non-Periodic TxFIFO Empty Mask (NPTxFEmpMsk)
+        * @rxflvlmsk: Receive FIFO Non-Empty Mask (RxFLvlMsk)
+        * @sofmsk: Start of (micro)Frame Mask (SofMsk)
+        * @otgintmsk: OTG Interrupt Mask (OTGIntMsk)
+        * @modemismsk: Mode Mismatch Interrupt Mask (ModeMisMsk)
+        */
+       struct cvmx_usbcx_gintmsk_s {
+               uint32_t wkupintmsk             : 1;
+               uint32_t sessreqintmsk          : 1;
+               uint32_t disconnintmsk          : 1;
+               uint32_t conidstschngmsk        : 1;
+               uint32_t reserved_27_27         : 1;
+               uint32_t ptxfempmsk             : 1;
+               uint32_t hchintmsk              : 1;
+               uint32_t prtintmsk              : 1;
+               uint32_t reserved_23_23         : 1;
+               uint32_t fetsuspmsk             : 1;
+               uint32_t incomplpmsk            : 1;
+               uint32_t incompisoinmsk         : 1;
+               uint32_t oepintmsk              : 1;
+               uint32_t inepintmsk             : 1;
+               uint32_t epmismsk               : 1;
+               uint32_t reserved_16_16         : 1;
+               uint32_t eopfmsk                : 1;
+               uint32_t isooutdropmsk          : 1;
+               uint32_t enumdonemsk            : 1;
+               uint32_t usbrstmsk              : 1;
+               uint32_t usbsuspmsk             : 1;
+               uint32_t erlysuspmsk            : 1;
+               uint32_t i2cint                 : 1;
+               uint32_t ulpickintmsk           : 1;
+               uint32_t goutnakeffmsk          : 1;
+               uint32_t ginnakeffmsk           : 1;
+               uint32_t nptxfempmsk            : 1;
+               uint32_t rxflvlmsk              : 1;
+               uint32_t sofmsk                 : 1;
+               uint32_t otgintmsk              : 1;
+               uint32_t modemismsk             : 1;
+               uint32_t reserved_0_0           : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_gintsts
+ *
+ * Core Interrupt Register (GINTSTS)
+ *
+ * This register interrupts the application for system-level events in the
+ * current mode of operation (Device mode or Host mode). It is shown in
+ * Interrupt. Some of the bits in this register are valid only in Host mode,
+ * while others are valid in Device mode only. This register also indicates the
+ * current mode of operation. In order to clear the interrupt status bits of
+ * type R_SS_WC, the application must write 1'b1 into the bit. The FIFO status
+ * interrupts are read only; once software reads from or writes to the FIFO
+ * while servicing these interrupts, FIFO interrupt conditions are cleared
+ * automatically.
+ */
+union cvmx_usbcx_gintsts {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gintsts_s
+        * @wkupint: Resume/Remote Wakeup Detected Interrupt (WkUpInt)
+        *      In Device mode, this interrupt is asserted when a resume is
+        *      detected on the USB. In Host mode, this interrupt is asserted
+        *      when a remote wakeup is detected on the USB.
+        *      For more information on how to use this interrupt, see "Partial
+        *      Power-Down and Clock Gating Programming Model" on
+        *      page 353.
+        * @sessreqint: Session Request/New Session Detected Interrupt
+        *              (SessReqInt)
+        *      In Host mode, this interrupt is asserted when a session request
+        *      is detected from the device. In Device mode, this interrupt is
+        *      asserted when the utmiotg_bvalid signal goes high.
+        *      For more information on how to use this interrupt, see "Partial
+        *      Power-Down and Clock Gating Programming Model" on
+        *      page 353.
+        * @disconnint: Disconnect Detected Interrupt (DisconnInt)
+        *      Asserted when a device disconnect is detected.
+        * @conidstschng: Connector ID Status Change (ConIDStsChng)
+        *      The core sets this bit when there is a change in connector ID
+        *      status.
+        * @ptxfemp: Periodic TxFIFO Empty (PTxFEmp)
+        *      Asserted when the Periodic Transmit FIFO is either half or
+        *      completely empty and there is space for at least one entry to be
+        *      written in the Periodic Request Queue. The half or completely
+        *      empty status is determined by the Periodic TxFIFO Empty Level
+        *      bit in the Core AHB Configuration register
+        *      (GAHBCFG.PTxFEmpLvl).
+        * @hchint: Host Channels Interrupt (HChInt)
+        *      The core sets this bit to indicate that an interrupt is pending
+        *      on one of the channels of the core (in Host mode). The
+        *      application must read the Host All Channels Interrupt (HAINT)
+        *      register to determine the exact number of the channel on which
+        *      the interrupt occurred, and then read the corresponding Host
+        *      Channel-n Interrupt (HCINTn) register to determine the exact
+        *      cause of the interrupt. The application must clear the
+        *      appropriate status bit in the HCINTn register to clear this bit.
+        * @prtint: Host Port Interrupt (PrtInt)
+        *      The core sets this bit to indicate a change in port status of
+        *      one of the O2P USB core ports in Host mode. The application must
+        *      read the Host Port Control and Status (HPRT) register to
+        *      determine the exact event that caused this interrupt. The
+        *      application must clear the appropriate status bit in the Host
+        *      Port Control and Status register to clear this bit.
+        * @fetsusp: Data Fetch Suspended (FetSusp)
+        *      This interrupt is valid only in DMA mode. This interrupt
+        *      indicates that the core has stopped fetching data for IN
+        *      endpoints due to the unavailability of TxFIFO space or Request
+        *      Queue space. This interrupt is used by the application for an
+        *      endpoint mismatch algorithm.
+        * @incomplp: Incomplete Periodic Transfer (incomplP)
+        *      In Host mode, the core sets this interrupt bit when there are
+        *      incomplete periodic transactions still pending which are
+        *      scheduled for the current microframe.
+        *      Incomplete Isochronous OUT Transfer (incompISOOUT)
+        *      The Device mode, the core sets this interrupt to indicate that
+        *      there is at least one isochronous OUT endpoint on which the
+        *      transfer is not completed in the current microframe. This
+        *      interrupt is asserted along with the End of Periodic Frame
+        *      Interrupt (EOPF) bit in this register.
+        * @incompisoin: Incomplete Isochronous IN Transfer (incompISOIN)
+        *      The core sets this interrupt to indicate that there is at least
+        *      one isochronous IN endpoint on which the transfer is not
+        *      completed in the current microframe. This interrupt is asserted
+        *      along with the End of Periodic Frame Interrupt (EOPF) bit in
+        *      this register.
+        * @oepint: OUT Endpoints Interrupt (OEPInt)
+        *      The core sets this bit to indicate that an interrupt is pending
+        *      on one of the OUT endpoints of the core (in Device mode). The
+        *      application must read the Device All Endpoints Interrupt
+        *      (DAINT) register to determine the exact number of the OUT
+        *      endpoint on which the interrupt occurred, and then read the
+        *      corresponding Device OUT Endpoint-n Interrupt (DOEPINTn)
+        *      register to determine the exact cause of the interrupt. The
+        *      application must clear the appropriate status bit in the
+        *      corresponding DOEPINTn register to clear this bit.
+        * @iepint: IN Endpoints Interrupt (IEPInt)
+        *      The core sets this bit to indicate that an interrupt is pending
+        *      on one of the IN endpoints of the core (in Device mode). The
+        *      application must read the Device All Endpoints Interrupt
+        *      (DAINT) register to determine the exact number of the IN
+        *      endpoint on which the interrupt occurred, and then read the
+        *      corresponding Device IN Endpoint-n Interrupt (DIEPINTn)
+        *      register to determine the exact cause of the interrupt. The
+        *      application must clear the appropriate status bit in the
+        *      corresponding DIEPINTn register to clear this bit.
+        * @epmis: Endpoint Mismatch Interrupt (EPMis)
+        *      Indicates that an IN token has been received for a non-periodic
+        *      endpoint, but the data for another endpoint is present in the
+        *      top of the Non-Periodic Transmit FIFO and the IN endpoint
+        *      mismatch count programmed by the application has expired.
+        * @eopf: End of Periodic Frame Interrupt (EOPF)
+        *      Indicates that the period specified in the Periodic Frame
+        *      Interval field of the Device Configuration register
+        *      (DCFG.PerFrInt) has been reached in the current microframe.
+        * @isooutdrop: Isochronous OUT Packet Dropped Interrupt (ISOOutDrop)
+        *      The core sets this bit when it fails to write an isochronous OUT
+        *      packet into the RxFIFO because the RxFIFO doesn't have
+        *      enough space to accommodate a maximum packet size packet
+        *      for the isochronous OUT endpoint.
+        * @enumdone: Enumeration Done (EnumDone)
+        *      The core sets this bit to indicate that speed enumeration is
+        *      complete. The application must read the Device Status (DSTS)
+        *      register to obtain the enumerated speed.
+        * @usbrst: USB Reset (USBRst)
+        *      The core sets this bit to indicate that a reset is detected on
+        *      the USB.
+        * @usbsusp: USB Suspend (USBSusp)
+        *      The core sets this bit to indicate that a suspend was detected
+        *      on the USB. The core enters the Suspended state when there
+        *      is no activity on the phy_line_state_i signal for an extended
+        *      period of time.
+        * @erlysusp: Early Suspend (ErlySusp)
+        *      The core sets this bit to indicate that an Idle state has been
+        *      detected on the USB for 3 ms.
+        * @i2cint: I2C Interrupt (I2CINT)
+        *      This bit is always 0x0.
+        * @ulpickint: ULPI Carkit Interrupt (ULPICKINT)
+        *      This bit is always 0x0.
+        * @goutnakeff: Global OUT NAK Effective (GOUTNakEff)
+        *      Indicates that the Set Global OUT NAK bit in the Device Control
+        *      register (DCTL.SGOUTNak), set by the application, has taken
+        *      effect in the core. This bit can be cleared by writing the Clear
+        *      Global OUT NAK bit in the Device Control register
+        *      (DCTL.CGOUTNak).
+        * @ginnakeff: Global IN Non-Periodic NAK Effective (GINNakEff)
+        *      Indicates that the Set Global Non-Periodic IN NAK bit in the
+        *      Device Control register (DCTL.SGNPInNak), set by the
+        *      application, has taken effect in the core. That is, the core has
+        *      sampled the Global IN NAK bit set by the application. This bit
+        *      can be cleared by clearing the Clear Global Non-Periodic IN
+        *      NAK bit in the Device Control register (DCTL.CGNPInNak).
+        *      This interrupt does not necessarily mean that a NAK handshake
+        *      is sent out on the USB. The STALL bit takes precedence over
+        *      the NAK bit.
+        * @nptxfemp: Non-Periodic TxFIFO Empty (NPTxFEmp)
+        *      This interrupt is asserted when the Non-Periodic TxFIFO is
+        *      either half or completely empty, and there is space for at least
+        *      one entry to be written to the Non-Periodic Transmit Request
+        *      Queue. The half or completely empty status is determined by
+        *      the Non-Periodic TxFIFO Empty Level bit in the Core AHB
+        *      Configuration register (GAHBCFG.NPTxFEmpLvl).
+        * @rxflvl: RxFIFO Non-Empty (RxFLvl)
+        *      Indicates that there is at least one packet pending to be read
+        *      from the RxFIFO.
+        * @sof: Start of (micro)Frame (Sof)
+        *      In Host mode, the core sets this bit to indicate that an SOF
+        *      (FS), micro-SOF (HS), or Keep-Alive (LS) is transmitted on the
+        *      USB. The application must write a 1 to this bit to clear the
+        *      interrupt.
+        *      In Device mode, in the core sets this bit to indicate that an
+        *      SOF token has been received on the USB. The application can read
+        *      the Device Status register to get the current (micro)frame
+        *      number. This interrupt is seen only when the core is operating
+        *      at either HS or FS.
+        * @otgint: OTG Interrupt (OTGInt)
+        *      The core sets this bit to indicate an OTG protocol event. The
+        *      application must read the OTG Interrupt Status (GOTGINT)
+        *      register to determine the exact event that caused this
+        *      interrupt. The application must clear the appropriate status bit
+        *      in the GOTGINT register to clear this bit.
+        * @modemis: Mode Mismatch Interrupt (ModeMis)
+        *      The core sets this bit when the application is trying to access:
+        *      * A Host mode register, when the core is operating in Device
+        *      mode
+        *      * A Device mode register, when the core is operating in Host
+        *      mode
+        *      The register access is completed on the AHB with an OKAY
+        *      response, but is ignored by the core internally and doesn't
+        *      affect the operation of the core.
+        * @curmod: Current Mode of Operation (CurMod)
+        *      Indicates the current mode of operation.
+        *      * 1'b0: Device mode
+        *      * 1'b1: Host mode
+        */
+       struct cvmx_usbcx_gintsts_s {
+               uint32_t wkupint        : 1;
+               uint32_t sessreqint     : 1;
+               uint32_t disconnint     : 1;
+               uint32_t conidstschng   : 1;
+               uint32_t reserved_27_27 : 1;
+               uint32_t ptxfemp        : 1;
+               uint32_t hchint         : 1;
+               uint32_t prtint         : 1;
+               uint32_t reserved_23_23 : 1;
+               uint32_t fetsusp        : 1;
+               uint32_t incomplp       : 1;
+               uint32_t incompisoin    : 1;
+               uint32_t oepint         : 1;
+               uint32_t iepint         : 1;
+               uint32_t epmis          : 1;
+               uint32_t reserved_16_16 : 1;
+               uint32_t eopf           : 1;
+               uint32_t isooutdrop     : 1;
+               uint32_t enumdone       : 1;
+               uint32_t usbrst         : 1;
+               uint32_t usbsusp        : 1;
+               uint32_t erlysusp       : 1;
+               uint32_t i2cint         : 1;
+               uint32_t ulpickint      : 1;
+               uint32_t goutnakeff     : 1;
+               uint32_t ginnakeff      : 1;
+               uint32_t nptxfemp       : 1;
+               uint32_t rxflvl         : 1;
+               uint32_t sof            : 1;
+               uint32_t otgint         : 1;
+               uint32_t modemis        : 1;
+               uint32_t curmod         : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_gnptxfsiz
+ *
+ * Non-Periodic Transmit FIFO Size Register (GNPTXFSIZ)
+ *
+ * The application can program the RAM size and the memory start address for the
+ * Non-Periodic TxFIFO.
+ */
+union cvmx_usbcx_gnptxfsiz {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gnptxfsiz_s
+        * @nptxfdep: Non-Periodic TxFIFO Depth (NPTxFDep)
+        *      This value is in terms of 32-bit words.
+        *      Minimum value is 16
+        *      Maximum value is 32768
+        * @nptxfstaddr: Non-Periodic Transmit RAM Start Address (NPTxFStAddr)
+        *      This field contains the memory start address for Non-Periodic
+        *      Transmit FIFO RAM.
+        */
+       struct cvmx_usbcx_gnptxfsiz_s {
+               uint32_t nptxfdep       : 16;
+               uint32_t nptxfstaddr    : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_gnptxsts
+ *
+ * Non-Periodic Transmit FIFO/Queue Status Register (GNPTXSTS)
+ *
+ * This read-only register contains the free space information for the
+ * Non-Periodic TxFIFO and the Non-Periodic Transmit Request Queue.
+ */
+union cvmx_usbcx_gnptxsts {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gnptxsts_s
+        * @nptxqtop: Top of the Non-Periodic Transmit Request Queue (NPTxQTop)
+        *      Entry in the Non-Periodic Tx Request Queue that is currently
+        *      being processed by the MAC.
+        *      * Bits [30:27]: Channel/endpoint number
+        *      * Bits [26:25]:
+        *      - 2'b00: IN/OUT token
+        *      - 2'b01: Zero-length transmit packet (device IN/host OUT)
+        *      - 2'b10: PING/CSPLIT token
+        *      - 2'b11: Channel halt command
+        *      * Bit [24]: Terminate (last entry for selected channel/endpoint)
+        * @nptxqspcavail: Non-Periodic Transmit Request Queue Space Available
+        *      (NPTxQSpcAvail)
+        *      Indicates the amount of free space available in the Non-
+        *      Periodic Transmit Request Queue. This queue holds both IN
+        *      and OUT requests in Host mode. Device mode has only IN
+        *      requests.
+        *      * 8'h0: Non-Periodic Transmit Request Queue is full
+        *      * 8'h1: 1 location available
+        *      * 8'h2: 2 locations available
+        *      * n: n locations available (0..8)
+        *      * Others: Reserved
+        * @nptxfspcavail: Non-Periodic TxFIFO Space Avail (NPTxFSpcAvail)
+        *      Indicates the amount of free space available in the Non-
+        *      Periodic TxFIFO.
+        *      Values are in terms of 32-bit words.
+        *      * 16'h0: Non-Periodic TxFIFO is full
+        *      * 16'h1: 1 word available
+        *      * 16'h2: 2 words available
+        *      * 16'hn: n words available (where 0..32768)
+        *      * 16'h8000: 32768 words available
+        *      * Others: Reserved
+        */
+       struct cvmx_usbcx_gnptxsts_s {
+               uint32_t reserved_31_31 : 1;
+               uint32_t nptxqtop       : 7;
+               uint32_t nptxqspcavail  : 8;
+               uint32_t nptxfspcavail  : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_grstctl
+ *
+ * Core Reset Register (GRSTCTL)
+ *
+ * The application uses this register to reset various hardware features inside
+ * the core.
+ */
+union cvmx_usbcx_grstctl {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_grstctl_s
+        * @ahbidle: AHB Master Idle (AHBIdle)
+        *      Indicates that the AHB Master State Machine is in the IDLE
+        *      condition.
+        * @dmareq: DMA Request Signal (DMAReq)
+        *      Indicates that the DMA request is in progress. Used for debug.
+        * @txfnum: TxFIFO Number (TxFNum)
+        *      This is the FIFO number that must be flushed using the TxFIFO
+        *      Flush bit. This field must not be changed until the core clears
+        *      the TxFIFO Flush bit.
+        *      * 5'h0: Non-Periodic TxFIFO flush
+        *      * 5'h1: Periodic TxFIFO 1 flush in Device mode or Periodic
+        *      TxFIFO flush in Host mode
+        *      * 5'h2: Periodic TxFIFO 2 flush in Device mode
+        *      - ...
+        *      * 5'hF: Periodic TxFIFO 15 flush in Device mode
+        *      * 5'h10: Flush all the Periodic and Non-Periodic TxFIFOs in the
+        *      core
+        * @txfflsh: TxFIFO Flush (TxFFlsh)
+        *      This bit selectively flushes a single or all transmit FIFOs, but
+        *      cannot do so if the core is in the midst of a transaction.
+        *      The application must only write this bit after checking that the
+        *      core is neither writing to the TxFIFO nor reading from the
+        *      TxFIFO.
+        *      The application must wait until the core clears this bit before
+        *      performing any operations. This bit takes 8 clocks (of phy_clk
+        *      or hclk, whichever is slower) to clear.
+        * @rxfflsh: RxFIFO Flush (RxFFlsh)
+        *      The application can flush the entire RxFIFO using this bit, but
+        *      must first ensure that the core is not in the middle of a
+        *      transaction.
+        *      The application must only write to this bit after checking that
+        *      the core is neither reading from the RxFIFO nor writing to the
+        *      RxFIFO.
+        *      The application must wait until the bit is cleared before
+        *      performing any other operations. This bit will take 8 clocks
+        *      (slowest of PHY or AHB clock) to clear.
+        * @intknqflsh: IN Token Sequence Learning Queue Flush (INTknQFlsh)
+        *      The application writes this bit to flush the IN Token Sequence
+        *      Learning Queue.
+        * @frmcntrrst: Host Frame Counter Reset (FrmCntrRst)
+        *      The application writes this bit to reset the (micro)frame number
+        *      counter inside the core. When the (micro)frame counter is reset,
+        *      the subsequent SOF sent out by the core will have a
+        *      (micro)frame number of 0.
+        * @hsftrst: HClk Soft Reset (HSftRst)
+        *      The application uses this bit to flush the control logic in the
+        *      AHB Clock domain. Only AHB Clock Domain pipelines are reset.
+        *      * FIFOs are not flushed with this bit.
+        *      * All state machines in the AHB clock domain are reset to the
+        *      Idle state after terminating the transactions on the AHB,
+        *      following the protocol.
+        *      * CSR control bits used by the AHB clock domain state
+        *      machines are cleared.
+        *      * To clear this interrupt, status mask bits that control the
+        *      interrupt status and are generated by the AHB clock domain
+        *      state machine are cleared.
+        *      * Because interrupt status bits are not cleared, the application
+        *      can get the status of any core events that occurred after it set
+        *      this bit.
+        *      This is a self-clearing bit that the core clears after all
+        *      necessary logic is reset in the core. This may take several
+        *      clocks, depending on the core's current state.
+        * @csftrst: Core Soft Reset (CSftRst)
+        *      Resets the hclk and phy_clock domains as follows:
+        *      * Clears the interrupts and all the CSR registers except the
+        *      following register bits:
+        *      - PCGCCTL.RstPdwnModule
+        *      - PCGCCTL.GateHclk
+        *      - PCGCCTL.PwrClmp
+        *      - PCGCCTL.StopPPhyLPwrClkSelclk
+        *      - GUSBCFG.PhyLPwrClkSel
+        *      - GUSBCFG.DDRSel
+        *      - GUSBCFG.PHYSel
+        *      - GUSBCFG.FSIntf
+        *      - GUSBCFG.ULPI_UTMI_Sel
+        *      - GUSBCFG.PHYIf
+        *      - HCFG.FSLSPclkSel
+        *      - DCFG.DevSpd
+        *      * All module state machines (except the AHB Slave Unit) are
+        *      reset to the IDLE state, and all the transmit FIFOs and the
+        *      receive FIFO are flushed.
+        *      * Any transactions on the AHB Master are terminated as soon
+        *      as possible, after gracefully completing the last data phase of
+        *      an AHB transfer. Any transactions on the USB are terminated
+        *      immediately.
+        *      The application can write to this bit any time it wants to reset
+        *      the core. This is a self-clearing bit and the core clears this
+        *      bit after all the necessary logic is reset in the core, which
+        *      may take several clocks, depending on the current state of the
+        *      core. Once this bit is cleared software should wait at least 3
+        *      PHY clocks before doing any access to the PHY domain
+        *      (synchronization delay). Software should also should check that
+        *      bit 31 of this register is 1 (AHB Master is IDLE) before
+        *      starting any operation.
+        *      Typically software reset is used during software development
+        *      and also when you dynamically change the PHY selection bits
+        *      in the USB configuration registers listed above. When you
+        *      change the PHY, the corresponding clock for the PHY is
+        *      selected and used in the PHY domain. Once a new clock is
+        *      selected, the PHY domain has to be reset for proper operation.
+        */
+       struct cvmx_usbcx_grstctl_s {
+               uint32_t ahbidle        : 1;
+               uint32_t dmareq         : 1;
+               uint32_t reserved_11_29 : 19;
+               uint32_t txfnum         : 5;
+               uint32_t txfflsh        : 1;
+               uint32_t rxfflsh        : 1;
+               uint32_t intknqflsh     : 1;
+               uint32_t frmcntrrst     : 1;
+               uint32_t hsftrst        : 1;
+               uint32_t csftrst        : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_grxfsiz
+ *
+ * Receive FIFO Size Register (GRXFSIZ)
+ *
+ * The application can program the RAM size that must be allocated to the
+ * RxFIFO.
+ */
+union cvmx_usbcx_grxfsiz {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_grxfsiz_s
+        * @rxfdep: RxFIFO Depth (RxFDep)
+        *      This value is in terms of 32-bit words.
+        *      * Minimum value is 16
+        *      * Maximum value is 32768
+        */
+       struct cvmx_usbcx_grxfsiz_s {
+               uint32_t reserved_16_31 : 16;
+               uint32_t rxfdep         : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_grxstsph
+ *
+ * Receive Status Read and Pop Register, Host Mode (GRXSTSPH)
+ *
+ * A read to the Receive Status Read and Pop register returns and additionally
+ * pops the top data entry out of the RxFIFO.
+ * This Description is only valid when the core is in Host Mode. For Device Mode
+ * use USBC_GRXSTSPD instead.
+ * NOTE: GRXSTSPH and GRXSTSPD are physically the same register and share the
+ *      same offset in the O2P USB core. The offset difference shown in this
+ *      document is for software clarity and is actually ignored by the
+ *       hardware.
+ */
+union cvmx_usbcx_grxstsph {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_grxstsph_s
+        * @pktsts: Packet Status (PktSts)
+        *      Indicates the status of the received packet
+        *      * 4'b0010: IN data packet received
+        *      * 4'b0011: IN transfer completed (triggers an interrupt)
+        *      * 4'b0101: Data toggle error (triggers an interrupt)
+        *      * 4'b0111: Channel halted (triggers an interrupt)
+        *      * Others: Reserved
+        * @dpid: Data PID (DPID)
+        *      * 2'b00: DATA0
+        *      * 2'b10: DATA1
+        *      * 2'b01: DATA2
+        *      * 2'b11: MDATA
+        * @bcnt: Byte Count (BCnt)
+        *      Indicates the byte count of the received IN data packet
+        * @chnum: Channel Number (ChNum)
+        *      Indicates the channel number to which the current received
+        *      packet belongs.
+        */
+       struct cvmx_usbcx_grxstsph_s {
+               uint32_t reserved_21_31 : 11;
+               uint32_t pktsts         : 4;
+               uint32_t dpid           : 2;
+               uint32_t bcnt           : 11;
+               uint32_t chnum          : 4;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_gusbcfg
+ *
+ * Core USB Configuration Register (GUSBCFG)
+ *
+ * This register can be used to configure the core after power-on or a changing
+ * to Host mode or Device mode. It contains USB and USB-PHY related
+ * configuration parameters. The application must program this register before
+ * starting any transactions on either the AHB or the USB. Do not make changes
+ * to this register after the initial programming.
+ */
+union cvmx_usbcx_gusbcfg {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_gusbcfg_s
+        * @otgi2csel: UTMIFS or I2C Interface Select (OtgI2CSel)
+        *      This bit is always 0x0.
+        * @phylpwrclksel: PHY Low-Power Clock Select (PhyLPwrClkSel)
+        *      Software should set this bit to 0x0.
+        *      Selects either 480-MHz or 48-MHz (low-power) PHY mode. In
+        *      FS and LS modes, the PHY can usually operate on a 48-MHz
+        *      clock to save power.
+        *      * 1'b0: 480-MHz Internal PLL clock
+        *      * 1'b1: 48-MHz External Clock
+        *      In 480 MHz mode, the UTMI interface operates at either 60 or
+        *      30-MHz, depending upon whether 8- or 16-bit data width is
+        *      selected. In 48-MHz mode, the UTMI interface operates at 48
+        *      MHz in FS mode and at either 48 or 6 MHz in LS mode
+        *      (depending on the PHY vendor).
+        *      This bit drives the utmi_fsls_low_power core output signal, and
+        *      is valid only for UTMI+ PHYs.
+        * @usbtrdtim: USB Turnaround Time (USBTrdTim)
+        *      Sets the turnaround time in PHY clocks.
+        *      Specifies the response time for a MAC request to the Packet
+        *      FIFO Controller (PFC) to fetch data from the DFIFO (SPRAM).
+        *      This must be programmed to 0x5.
+        * @hnpcap: HNP-Capable (HNPCap)
+        *      This bit is always 0x0.
+        * @srpcap: SRP-Capable (SRPCap)
+        *      This bit is always 0x0.
+        * @ddrsel: ULPI DDR Select (DDRSel)
+        *      Software should set this bit to 0x0.
+        * @physel: USB 2.0 High-Speed PHY or USB 1.1 Full-Speed Serial
+        *      Software should set this bit to 0x0.
+        * @fsintf: Full-Speed Serial Interface Select (FSIntf)
+        *      Software should set this bit to 0x0.
+        * @ulpi_utmi_sel: ULPI or UTMI+ Select (ULPI_UTMI_Sel)
+        *      This bit is always 0x0.
+        * @phyif: PHY Interface (PHYIf)
+        *      This bit is always 0x1.
+        * @toutcal: HS/FS Timeout Calibration (TOutCal)
+        *      The number of PHY clocks that the application programs in this
+        *      field is added to the high-speed/full-speed interpacket timeout
+        *      duration in the core to account for any additional delays
+        *      introduced by the PHY. This may be required, since the delay
+        *      introduced by the PHY in generating the linestate condition may
+        *      vary from one PHY to another.
+        *      The USB standard timeout value for high-speed operation is
+        *      736 to 816 (inclusive) bit times. The USB standard timeout
+        *      value for full-speed operation is 16 to 18 (inclusive) bit
+        *      times. The application must program this field based on the
+        *      speed of enumeration. The number of bit times added per PHY
+        *      clock are:
+        *      High-speed operation:
+        *      * One 30-MHz PHY clock = 16 bit times
+        *      * One 60-MHz PHY clock = 8 bit times
+        *      Full-speed operation:
+        *      * One 30-MHz PHY clock = 0.4 bit times
+        *      * One 60-MHz PHY clock = 0.2 bit times
+        *      * One 48-MHz PHY clock = 0.25 bit times
+        */
+       struct cvmx_usbcx_gusbcfg_s {
+               uint32_t reserved_17_31 : 15;
+               uint32_t otgi2csel      : 1;
+               uint32_t phylpwrclksel  : 1;
+               uint32_t reserved_14_14 : 1;
+               uint32_t usbtrdtim      : 4;
+               uint32_t hnpcap         : 1;
+               uint32_t srpcap         : 1;
+               uint32_t ddrsel         : 1;
+               uint32_t physel         : 1;
+               uint32_t fsintf         : 1;
+               uint32_t ulpi_utmi_sel  : 1;
+               uint32_t phyif          : 1;
+               uint32_t toutcal        : 3;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_haint
+ *
+ * Host All Channels Interrupt Register (HAINT)
+ *
+ * When a significant event occurs on a channel, the Host All Channels Interrupt
+ * register interrupts the application using the Host Channels Interrupt bit of
+ * the Core Interrupt register (GINTSTS.HChInt). This is shown in Interrupt.
+ * There is one interrupt bit per channel, up to a maximum of 16 bits. Bits in
+ * this register are set and cleared when the application sets and clears bits
+ * in the corresponding Host Channel-n Interrupt register.
+ */
+union cvmx_usbcx_haint {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_haint_s
+        * @haint: Channel Interrupts (HAINT)
+        *      One bit per channel: Bit 0 for Channel 0, bit 15 for Channel 15
+        */
+       struct cvmx_usbcx_haint_s {
+               uint32_t reserved_16_31 : 16;
+               uint32_t haint          : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_haintmsk
+ *
+ * Host All Channels Interrupt Mask Register (HAINTMSK)
+ *
+ * The Host All Channel Interrupt Mask register works with the Host All Channel
+ * Interrupt register to interrupt the application when an event occurs on a
+ * channel. There is one interrupt mask bit per channel, up to a maximum of 16
+ * bits.
+ * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
+ */
+union cvmx_usbcx_haintmsk {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_haintmsk_s
+        * @haintmsk: Channel Interrupt Mask (HAINTMsk)
+        *      One bit per channel: Bit 0 for channel 0, bit 15 for channel 15
+        */
+       struct cvmx_usbcx_haintmsk_s {
+               uint32_t reserved_16_31 : 16;
+               uint32_t haintmsk       : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hcchar#
+ *
+ * Host Channel-n Characteristics Register (HCCHAR)
+ *
+ */
+union cvmx_usbcx_hccharx {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hccharx_s
+        * @chena: Channel Enable (ChEna)
+        *      This field is set by the application and cleared by the OTG
+        *      host.
+        *      * 1'b0: Channel disabled
+        *      * 1'b1: Channel enabled
+        * @chdis: Channel Disable (ChDis)
+        *      The application sets this bit to stop transmitting/receiving
+        *      data on a channel, even before the transfer for that channel is
+        *      complete. The application must wait for the Channel Disabled
+        *      interrupt before treating the channel as disabled.
+        * @oddfrm: Odd Frame (OddFrm)
+        *      This field is set (reset) by the application to indicate that
+        *      the OTG host must perform a transfer in an odd (micro)frame.
+        *      This field is applicable for only periodic (isochronous and
+        *      interrupt) transactions.
+        *      * 1'b0: Even (micro)frame
+        *      * 1'b1: Odd (micro)frame
+        * @devaddr: Device Address (DevAddr)
+        *      This field selects the specific device serving as the data
+        *      source or sink.
+        * @ec: Multi Count (MC) / Error Count (EC)
+        *      When the Split Enable bit of the Host Channel-n Split Control
+        *      register (HCSPLTn.SpltEna) is reset (1'b0), this field indicates
+        *      to the host the number of transactions that should be executed
+        *      per microframe for this endpoint.
+        *      * 2'b00: Reserved. This field yields undefined results.
+        *      * 2'b01: 1 transaction
+        *      * 2'b10: 2 transactions to be issued for this endpoint per
+        *      microframe
+        *      * 2'b11: 3 transactions to be issued for this endpoint per
+        *      microframe
+        *      When HCSPLTn.SpltEna is set (1'b1), this field indicates the
+        *      number of immediate retries to be performed for a periodic split
+        *      transactions on transaction errors. This field must be set to at
+        *      least 2'b01.
+        * @eptype: Endpoint Type (EPType)
+        *      Indicates the transfer type selected.
+        *      * 2'b00: Control
+        *      * 2'b01: Isochronous
+        *      * 2'b10: Bulk
+        *      * 2'b11: Interrupt
+        * @lspddev: Low-Speed Device (LSpdDev)
+        *      This field is set by the application to indicate that this
+        *      channel is communicating to a low-speed device.
+        * @epdir: Endpoint Direction (EPDir)
+        *      Indicates whether the transaction is IN or OUT.
+        *      * 1'b0: OUT
+        *      * 1'b1: IN
+        * @epnum: Endpoint Number (EPNum)
+        *      Indicates the endpoint number on the device serving as the
+        *      data source or sink.
+        * @mps: Maximum Packet Size (MPS)
+        *      Indicates the maximum packet size of the associated endpoint.
+        */
+       struct cvmx_usbcx_hccharx_s {
+               uint32_t chena          : 1;
+               uint32_t chdis          : 1;
+               uint32_t oddfrm         : 1;
+               uint32_t devaddr        : 7;
+               uint32_t ec             : 2;
+               uint32_t eptype         : 2;
+               uint32_t lspddev        : 1;
+               uint32_t reserved_16_16 : 1;
+               uint32_t epdir          : 1;
+               uint32_t epnum          : 4;
+               uint32_t mps            : 11;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hcfg
+ *
+ * Host Configuration Register (HCFG)
+ *
+ * This register configures the core after power-on. Do not make changes to this
+ * register after initializing the host.
+ */
+union cvmx_usbcx_hcfg {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hcfg_s
+        * @fslssupp: FS- and LS-Only Support (FSLSSupp)
+        *      The application uses this bit to control the core's enumeration
+        *      speed. Using this bit, the application can make the core
+        *      enumerate as a FS host, even if the connected device supports
+        *      HS traffic. Do not make changes to this field after initial
+        *      programming.
+        *      * 1'b0: HS/FS/LS, based on the maximum speed supported by
+        *      the connected device
+        *      * 1'b1: FS/LS-only, even if the connected device can support HS
+        * @fslspclksel: FS/LS PHY Clock Select (FSLSPclkSel)
+        *      When the core is in FS Host mode
+        *      * 2'b00: PHY clock is running at 30/60 MHz
+        *      * 2'b01: PHY clock is running at 48 MHz
+        *      * Others: Reserved
+        *      When the core is in LS Host mode
+        *      * 2'b00: PHY clock is running at 30/60 MHz. When the
+        *      UTMI+/ULPI PHY Low Power mode is not selected, use
+        *      30/60 MHz.
+        *      * 2'b01: PHY clock is running at 48 MHz. When the UTMI+
+        *      PHY Low Power mode is selected, use 48MHz if the PHY
+        *      supplies a 48 MHz clock during LS mode.
+        *      * 2'b10: PHY clock is running at 6 MHz. In USB 1.1 FS mode,
+        *      use 6 MHz when the UTMI+ PHY Low Power mode is
+        *      selected and the PHY supplies a 6 MHz clock during LS
+        *      mode. If you select a 6 MHz clock during LS mode, you must
+        *      do a soft reset.
+        *      * 2'b11: Reserved
+        */
+       struct cvmx_usbcx_hcfg_s {
+               uint32_t reserved_3_31  : 29;
+               uint32_t fslssupp       : 1;
+               uint32_t fslspclksel    : 2;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hcint#
+ *
+ * Host Channel-n Interrupt Register (HCINT)
+ *
+ * This register indicates the status of a channel with respect to USB- and
+ * AHB-related events. The application must read this register when the Host
+ * Channels Interrupt bit of the Core Interrupt register (GINTSTS.HChInt) is
+ * set. Before the application can read this register, it must first read
+ * the Host All Channels Interrupt (HAINT) register to get the exact channel
+ * number for the Host Channel-n Interrupt register. The application must clear
+ * the appropriate bit in this register to clear the corresponding bits in the
+ * HAINT and GINTSTS registers.
+ */
+union cvmx_usbcx_hcintx {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hcintx_s
+        * @datatglerr: Data Toggle Error (DataTglErr)
+        * @frmovrun: Frame Overrun (FrmOvrun)
+        * @bblerr: Babble Error (BblErr)
+        * @xacterr: Transaction Error (XactErr)
+        * @nyet: NYET Response Received Interrupt (NYET)
+        * @ack: ACK Response Received Interrupt (ACK)
+        * @nak: NAK Response Received Interrupt (NAK)
+        * @stall: STALL Response Received Interrupt (STALL)
+        * @ahberr: This bit is always 0x0.
+        * @chhltd: Channel Halted (ChHltd)
+        *      Indicates the transfer completed abnormally either because of
+        *      any USB transaction error or in response to disable request by
+        *      the application.
+        * @xfercompl: Transfer Completed (XferCompl)
+        *      Transfer completed normally without any errors.
+        */
+       struct cvmx_usbcx_hcintx_s {
+               uint32_t reserved_11_31 : 21;
+               uint32_t datatglerr     : 1;
+               uint32_t frmovrun       : 1;
+               uint32_t bblerr         : 1;
+               uint32_t xacterr        : 1;
+               uint32_t nyet           : 1;
+               uint32_t ack            : 1;
+               uint32_t nak            : 1;
+               uint32_t stall          : 1;
+               uint32_t ahberr         : 1;
+               uint32_t chhltd         : 1;
+               uint32_t xfercompl      : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hcintmsk#
+ *
+ * Host Channel-n Interrupt Mask Register (HCINTMSKn)
+ *
+ * This register reflects the mask for each channel status described in the
+ * previous section.
+ * Mask interrupt: 1'b0 Unmask interrupt: 1'b1
+ */
+union cvmx_usbcx_hcintmskx {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hcintmskx_s
+        * @datatglerrmsk: Data Toggle Error Mask (DataTglErrMsk)
+        * @frmovrunmsk: Frame Overrun Mask (FrmOvrunMsk)
+        * @bblerrmsk: Babble Error Mask (BblErrMsk)
+        * @xacterrmsk: Transaction Error Mask (XactErrMsk)
+        * @nyetmsk: NYET Response Received Interrupt Mask (NyetMsk)
+        * @ackmsk: ACK Response Received Interrupt Mask (AckMsk)
+        * @nakmsk: NAK Response Received Interrupt Mask (NakMsk)
+        * @stallmsk: STALL Response Received Interrupt Mask (StallMsk)
+        * @ahberrmsk: AHB Error Mask (AHBErrMsk)
+        * @chhltdmsk: Channel Halted Mask (ChHltdMsk)
+        * @xfercomplmsk: Transfer Completed Mask (XferComplMsk)
+        */
+       struct cvmx_usbcx_hcintmskx_s {
+               uint32_t reserved_11_31 : 21;
+               uint32_t datatglerrmsk  : 1;
+               uint32_t frmovrunmsk    : 1;
+               uint32_t bblerrmsk      : 1;
+               uint32_t xacterrmsk     : 1;
+               uint32_t nyetmsk        : 1;
+               uint32_t ackmsk         : 1;
+               uint32_t nakmsk         : 1;
+               uint32_t stallmsk       : 1;
+               uint32_t ahberrmsk      : 1;
+               uint32_t chhltdmsk      : 1;
+               uint32_t xfercomplmsk   : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hcsplt#
+ *
+ * Host Channel-n Split Control Register (HCSPLT)
+ *
+ */
+union cvmx_usbcx_hcspltx {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hcspltx_s
+        * @spltena: Split Enable (SpltEna)
+        *      The application sets this field to indicate that this channel is
+        *      enabled to perform split transactions.
+        * @compsplt: Do Complete Split (CompSplt)
+        *      The application sets this field to request the OTG host to
+        *      perform a complete split transaction.
+        * @xactpos: Transaction Position (XactPos)
+        *      This field is used to determine whether to send all, first,
+        *      middle, or last payloads with each OUT transaction.
+        *      * 2'b11: All. This is the entire data payload is of this
+        *      transaction (which is less than or equal to 188 bytes).
+        *      * 2'b10: Begin. This is the first data payload of this
+        *      transaction (which is larger than 188 bytes).
+        *      * 2'b00: Mid. This is the middle payload of this transaction
+        *      (which is larger than 188 bytes).
+        *      * 2'b01: End. This is the last payload of this transaction
+        *      (which is larger than 188 bytes).
+        * @hubaddr: Hub Address (HubAddr)
+        *      This field holds the device address of the transaction
+        *      translator's hub.
+        * @prtaddr: Port Address (PrtAddr)
+        *      This field is the port number of the recipient transaction
+        *      translator.
+        */
+       struct cvmx_usbcx_hcspltx_s {
+               uint32_t spltena        : 1;
+               uint32_t reserved_17_30 : 14;
+               uint32_t compsplt       : 1;
+               uint32_t xactpos        : 2;
+               uint32_t hubaddr        : 7;
+               uint32_t prtaddr        : 7;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hctsiz#
+ *
+ * Host Channel-n Transfer Size Register (HCTSIZ)
+ *
+ */
+union cvmx_usbcx_hctsizx {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hctsizx_s
+        * @dopng: Do Ping (DoPng)
+        *      Setting this field to 1 directs the host to do PING protocol.
+        * @pid: PID (Pid)
+        *      The application programs this field with the type of PID to use
+        *      for the initial transaction. The host will maintain this field
+        *      for the rest of the transfer.
+        *      * 2'b00: DATA0
+        *      * 2'b01: DATA2
+        *      * 2'b10: DATA1
+        *      * 2'b11: MDATA (non-control)/SETUP (control)
+        * @pktcnt: Packet Count (PktCnt)
+        *      This field is programmed by the application with the expected
+        *      number of packets to be transmitted (OUT) or received (IN).
+        *      The host decrements this count on every successful
+        *      transmission or reception of an OUT/IN packet. Once this count
+        *      reaches zero, the application is interrupted to indicate normal
+        *      completion.
+        * @xfersize: Transfer Size (XferSize)
+        *      For an OUT, this field is the number of data bytes the host will
+        *      send during the transfer.
+        *      For an IN, this field is the buffer size that the application
+        *      has reserved for the transfer. The application is expected to
+        *      program this field as an integer multiple of the maximum packet
+        *      size for IN transactions (periodic and non-periodic).
+        */
+       struct cvmx_usbcx_hctsizx_s {
+               uint32_t dopng          : 1;
+               uint32_t pid            : 2;
+               uint32_t pktcnt         : 10;
+               uint32_t xfersize       : 19;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hfir
+ *
+ * Host Frame Interval Register (HFIR)
+ *
+ * This register stores the frame interval information for the current speed to
+ * which the O2P USB core has enumerated.
+ */
+union cvmx_usbcx_hfir {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hfir_s
+        * @frint: Frame Interval (FrInt)
+        *      The value that the application programs to this field specifies
+        *      the interval between two consecutive SOFs (FS) or micro-
+        *      SOFs (HS) or Keep-Alive tokens (HS). This field contains the
+        *      number of PHY clocks that constitute the required frame
+        *      interval. The default value set in this field for a FS operation
+        *      when the PHY clock frequency is 60 MHz. The application can
+        *      write a value to this register only after the Port Enable bit of
+        *      the Host Port Control and Status register (HPRT.PrtEnaPort)
+        *      has been set. If no value is programmed, the core calculates
+        *      the value based on the PHY clock specified in the FS/LS PHY
+        *      Clock Select field of the Host Configuration register
+        *      (HCFG.FSLSPclkSel). Do not change the value of this field
+        *      after the initial configuration.
+        *      * 125 us (PHY clock frequency for HS)
+        *      * 1 ms (PHY clock frequency for FS/LS)
+        */
+       struct cvmx_usbcx_hfir_s {
+               uint32_t reserved_16_31 : 16;
+               uint32_t frint          : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hfnum
+ *
+ * Host Frame Number/Frame Time Remaining Register (HFNUM)
+ *
+ * This register indicates the current frame number.
+ * It also indicates the time remaining (in terms of the number of PHY clocks)
+ * in the current (micro)frame.
+ */
+union cvmx_usbcx_hfnum {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hfnum_s
+        * @frrem: Frame Time Remaining (FrRem)
+        *      Indicates the amount of time remaining in the current
+        *      microframe (HS) or frame (FS/LS), in terms of PHY clocks.
+        *      This field decrements on each PHY clock. When it reaches
+        *      zero, this field is reloaded with the value in the Frame
+        *      Interval register and a new SOF is transmitted on the USB.
+        * @frnum: Frame Number (FrNum)
+        *      This field increments when a new SOF is transmitted on the
+        *      USB, and is reset to 0 when it reaches 16'h3FFF.
+        */
+       struct cvmx_usbcx_hfnum_s {
+               uint32_t frrem  : 16;
+               uint32_t frnum  : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hprt
+ *
+ * Host Port Control and Status Register (HPRT)
+ *
+ * This register is available in both Host and Device modes.
+ * Currently, the OTG Host supports only one port.
+ * A single register holds USB port-related information such as USB reset,
+ * enable, suspend, resume, connect status, and test mode for each port. The
+ * R_SS_WC bits in this register can trigger an interrupt to the application
+ * through the Host Port Interrupt bit of the Core Interrupt register
+ * (GINTSTS.PrtInt). On a Port Interrupt, the application must read this
+ * register and clear the bit that caused the interrupt. For the R_SS_WC bits,
+ * the application must write a 1 to the bit to clear the interrupt.
+ */
+union cvmx_usbcx_hprt {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hprt_s
+        * @prtspd: Port Speed (PrtSpd)
+        *      Indicates the speed of the device attached to this port.
+        *      * 2'b00: High speed
+        *      * 2'b01: Full speed
+        *      * 2'b10: Low speed
+        *      * 2'b11: Reserved
+        * @prttstctl: Port Test Control (PrtTstCtl)
+        *      The application writes a nonzero value to this field to put
+        *      the port into a Test mode, and the corresponding pattern is
+        *      signaled on the port.
+        *      * 4'b0000: Test mode disabled
+        *      * 4'b0001: Test_J mode
+        *      * 4'b0010: Test_K mode
+        *      * 4'b0011: Test_SE0_NAK mode
+        *      * 4'b0100: Test_Packet mode
+        *      * 4'b0101: Test_Force_Enable
+        *      * Others: Reserved
+        *      PrtSpd must be zero (i.e. the interface must be in high-speed
+        *      mode) to use the PrtTstCtl test modes.
+        * @prtpwr: Port Power (PrtPwr)
+        *      The application uses this field to control power to this port,
+        *      and the core clears this bit on an overcurrent condition.
+        *      * 1'b0: Power off
+        *      * 1'b1: Power on
+        * @prtlnsts: Port Line Status (PrtLnSts)
+        *      Indicates the current logic level USB data lines
+        *      * Bit [10]: Logic level of D-
+        *      * Bit [11]: Logic level of D+
+        * @prtrst: Port Reset (PrtRst)
+        *      When the application sets this bit, a reset sequence is
+        *      started on this port. The application must time the reset
+        *      period and clear this bit after the reset sequence is
+        *      complete.
+        *      * 1'b0: Port not in reset
+        *      * 1'b1: Port in reset
+        *      The application must leave this bit set for at least a
+        *      minimum duration mentioned below to start a reset on the
+        *      port. The application can leave it set for another 10 ms in
+        *      addition to the required minimum duration, before clearing
+        *      the bit, even though there is no maximum limit set by the
+        *      USB standard.
+        *      * High speed: 50 ms
+        *      * Full speed/Low speed: 10 ms
+        * @prtsusp: Port Suspend (PrtSusp)
+        *      The application sets this bit to put this port in Suspend
+        *      mode. The core only stops sending SOFs when this is set.
+        *      To stop the PHY clock, the application must set the Port
+        *      Clock Stop bit, which will assert the suspend input pin of
+        *      the PHY.
+        *      The read value of this bit reflects the current suspend
+        *      status of the port. This bit is cleared by the core after a
+        *      remote wakeup signal is detected or the application sets
+        *      the Port Reset bit or Port Resume bit in this register or the
+        *      Resume/Remote Wakeup Detected Interrupt bit or
+        *      Disconnect Detected Interrupt bit in the Core Interrupt
+        *      register (GINTSTS.WkUpInt or GINTSTS.DisconnInt,
+        *      respectively).
+        *      * 1'b0: Port not in Suspend mode
+        *      * 1'b1: Port in Suspend mode
+        * @prtres: Port Resume (PrtRes)
+        *      The application sets this bit to drive resume signaling on
+        *      the port. The core continues to drive the resume signal
+        *      until the application clears this bit.
+        *      If the core detects a USB remote wakeup sequence, as
+        *      indicated by the Port Resume/Remote Wakeup Detected
+        *      Interrupt bit of the Core Interrupt register
+        *      (GINTSTS.WkUpInt), the core starts driving resume
+        *      signaling without application intervention and clears this bit
+        *      when it detects a disconnect condition. The read value of
+        *      this bit indicates whether the core is currently driving
+        *      resume signaling.
+        *      * 1'b0: No resume driven
+        *      * 1'b1: Resume driven
+        * @prtovrcurrchng: Port Overcurrent Change (PrtOvrCurrChng)
+        *      The core sets this bit when the status of the Port
+        *      Overcurrent Active bit (bit 4) in this register changes.
+        * @prtovrcurract: Port Overcurrent Active (PrtOvrCurrAct)
+        *      Indicates the overcurrent condition of the port.
+        *      * 1'b0: No overcurrent condition
+        *      * 1'b1: Overcurrent condition
+        * @prtenchng: Port Enable/Disable Change (PrtEnChng)
+        *      The core sets this bit when the status of the Port Enable bit
+        *      [2] of this register changes.
+        * @prtena: Port Enable (PrtEna)
+        *      A port is enabled only by the core after a reset sequence,
+        *      and is disabled by an overcurrent condition, a disconnect
+        *      condition, or by the application clearing this bit. The
+        *      application cannot set this bit by a register write. It can only
+        *      clear it to disable the port. This bit does not trigger any
+        *      interrupt to the application.
+        *      * 1'b0: Port disabled
+        *      * 1'b1: Port enabled
+        * @prtconndet: Port Connect Detected (PrtConnDet)
+        *      The core sets this bit when a device connection is detected
+        *      to trigger an interrupt to the application using the Host Port
+        *      Interrupt bit of the Core Interrupt register (GINTSTS.PrtInt).
+        *      The application must write a 1 to this bit to clear the
+        *      interrupt.
+        * @prtconnsts: Port Connect Status (PrtConnSts)
+        *      * 0: No device is attached to the port.
+        *      * 1: A device is attached to the port.
+        */
+       struct cvmx_usbcx_hprt_s {
+               uint32_t reserved_19_31 : 13;
+               uint32_t prtspd         : 2;
+               uint32_t prttstctl      : 4;
+               uint32_t prtpwr         : 1;
+               uint32_t prtlnsts       : 2;
+               uint32_t reserved_9_9   : 1;
+               uint32_t prtrst         : 1;
+               uint32_t prtsusp        : 1;
+               uint32_t prtres         : 1;
+               uint32_t prtovrcurrchng : 1;
+               uint32_t prtovrcurract  : 1;
+               uint32_t prtenchng      : 1;
+               uint32_t prtena         : 1;
+               uint32_t prtconndet     : 1;
+               uint32_t prtconnsts     : 1;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hptxfsiz
+ *
+ * Host Periodic Transmit FIFO Size Register (HPTXFSIZ)
+ *
+ * This register holds the size and the memory start address of the Periodic
+ * TxFIFO, as shown in Figures 310 and 311.
+ */
+union cvmx_usbcx_hptxfsiz {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hptxfsiz_s
+        * @ptxfsize: Host Periodic TxFIFO Depth (PTxFSize)
+        *      This value is in terms of 32-bit words.
+        *      * Minimum value is 16
+        *      * Maximum value is 32768
+        * @ptxfstaddr: Host Periodic TxFIFO Start Address (PTxFStAddr)
+        */
+       struct cvmx_usbcx_hptxfsiz_s {
+               uint32_t ptxfsize       : 16;
+               uint32_t ptxfstaddr     : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbc#_hptxsts
+ *
+ * Host Periodic Transmit FIFO/Queue Status Register (HPTXSTS)
+ *
+ * This read-only register contains the free space information for the Periodic
+ * TxFIFO and the Periodic Transmit Request Queue
+ */
+union cvmx_usbcx_hptxsts {
+       uint32_t u32;
+       /**
+        * struct cvmx_usbcx_hptxsts_s
+        * @ptxqtop: Top of the Periodic Transmit Request Queue (PTxQTop)
+        *      This indicates the entry in the Periodic Tx Request Queue that
+        *      is currently being processes by the MAC.
+        *      This register is used for debugging.
+        *      * Bit [31]: Odd/Even (micro)frame
+        *      - 1'b0: send in even (micro)frame
+        *      - 1'b1: send in odd (micro)frame
+        *      * Bits [30:27]: Channel/endpoint number
+        *      * Bits [26:25]: Type
+        *      - 2'b00: IN/OUT
+        *      - 2'b01: Zero-length packet
+        *      - 2'b10: CSPLIT
+        *      - 2'b11: Disable channel command
+        *      * Bit [24]: Terminate (last entry for the selected
+        *      channel/endpoint)
+        * @ptxqspcavail: Periodic Transmit Request Queue Space Available
+        *      (PTxQSpcAvail)
+        *      Indicates the number of free locations available to be written
+        *      in the Periodic Transmit Request Queue. This queue holds both
+        *      IN and OUT requests.
+        *      * 8'h0: Periodic Transmit Request Queue is full
+        *      * 8'h1: 1 location available
+        *      * 8'h2: 2 locations available
+        *      * n: n locations available (0..8)
+        *      * Others: Reserved
+        * @ptxfspcavail: Periodic Transmit Data FIFO Space Available
+        *                (PTxFSpcAvail)
+        *      Indicates the number of free locations available to be written
+        *      to in the Periodic TxFIFO.
+        *      Values are in terms of 32-bit words
+        *      * 16'h0: Periodic TxFIFO is full
+        *      * 16'h1: 1 word available
+        *      * 16'h2: 2 words available
+        *      * 16'hn: n words available (where 0..32768)
+        *      * 16'h8000: 32768 words available
+        *      * Others: Reserved
+        */
+       struct cvmx_usbcx_hptxsts_s {
+               uint32_t ptxqtop        : 8;
+               uint32_t ptxqspcavail   : 8;
+               uint32_t ptxfspcavail   : 16;
+       } s;
+};
+
+/**
+ * cvmx_usbn#_clk_ctl
+ *
+ * USBN_CLK_CTL = USBN's Clock Control
+ *
+ * This register is used to control the frequency of the hclk and the
+ * hreset and phy_rst signals.
+ */
+union cvmx_usbnx_clk_ctl {
+       uint64_t u64;
+       /**
+        * struct cvmx_usbnx_clk_ctl_s
+        * @divide2: The 'hclk' used by the USB subsystem is derived
+        *      from the eclk.
+        *      Also see the field DIVIDE. DIVIDE2<1> must currently
+        *      be zero because it is not implemented, so the maximum
+        *      ratio of eclk/hclk is currently 16.
+        *      The actual divide number for hclk is:
+        *      (DIVIDE2 + 1) * (DIVIDE + 1)
+        * @hclk_rst: When this field is '0' the HCLK-DIVIDER used to
+        *      generate the hclk in the USB Subsystem is held
+        *      in reset. This bit must be set to '0' before
+        *      changing the value os DIVIDE in this register.
+        *      The reset to the HCLK_DIVIDERis also asserted
+        *      when core reset is asserted.
+        * @p_x_on: Force USB-PHY on during suspend.
+        *      '1' USB-PHY XO block is powered-down during
+        *      suspend.
+        *      '0' USB-PHY XO block is powered-up during
+        *      suspend.
+        *      The value of this field must be set while POR is
+        *      active.
+        * @p_rtype: PHY reference clock type
+        *      On CN50XX/CN52XX/CN56XX the values are:
+        *              '0' The USB-PHY uses a 12MHz crystal as a clock source
+        *                  at the USB_XO and USB_XI pins.
+        *              '1' Reserved.
+        *              '2' The USB_PHY uses 12/24/48MHz 2.5V board clock at the
+        *                  USB_XO pin. USB_XI should be tied to ground in this
+        *                  case.
+        *              '3' Reserved.
+        *      On CN3xxx bits 14 and 15 are p_xenbn and p_rclk and values are:
+        *              '0' Reserved.
+        *              '1' Reserved.
+        *              '2' The PHY PLL uses the XO block output as a reference.
+        *                  The XO block uses an external clock supplied on the
+        *                  XO pin. USB_XI should be tied to ground for this
+        *                  usage.
+        *              '3' The XO block uses the clock from a crystal.
+        * @p_com_on: '0' Force USB-PHY XO Bias, Bandgap and PLL to
+        *      remain powered in Suspend Mode.
+        *      '1' The USB-PHY XO Bias, Bandgap and PLL are
+        *      powered down in suspend mode.
+        *      The value of this field must be set while POR is
+        *      active.
+        * @p_c_sel: Phy clock speed select.
+        *      Selects the reference clock / crystal frequency.
+        *      '11': Reserved
+        *      '10': 48 MHz (reserved when a crystal is used)
+        *      '01': 24 MHz (reserved when a crystal is used)
+        *      '00': 12 MHz
+        *      The value of this field must be set while POR is
+        *      active.
+        *      NOTE: if a crystal is used as a reference clock,
+        *      this field must be set to 12 MHz.
+        * @cdiv_byp: Used to enable the bypass input to the USB_CLK_DIV.
+        * @sd_mode: Scaledown mode for the USBC. Control timing events
+        *      in the USBC, for normal operation this must be '0'.
+        * @s_bist: Starts bist on the hclk memories, during the '0'
+        *      to '1' transition.
+        * @por: Power On Reset for the PHY.
+        *      Resets all the PHYS registers and state machines.
+        * @enable: When '1' allows the generation of the hclk. When
+        *      '0' the hclk will not be generated. SEE DIVIDE
+        *      field of this register.
+        * @prst: When this field is '0' the reset associated with
+        *      the phy_clk functionality in the USB Subsystem is
+        *      help in reset. This bit should not be set to '1'
+        *      until the time it takes 6 clocks (hclk or phy_clk,
+        *      whichever is slower) has passed. Under normal
+        *      operation once this bit is set to '1' it should not
+        *      be set to '0'.
+        * @hrst: When this field is '0' the reset associated with
+        *      the hclk functioanlity in the USB Subsystem is
+        *      held in reset.This bit should not be set to '1'
+        *      until 12ms after phy_clk is stable. Under normal
+        *      operation, once this bit is set to '1' it should
+        *      not be set to '0'.
+        * @divide: The frequency of 'hclk' used by the USB subsystem
+        *      is the eclk frequency divided by the value of
+        *      (DIVIDE2 + 1) * (DIVIDE + 1), also see the field
+        *      DIVIDE2 of this register.
+        *      The hclk frequency should be less than 125Mhz.
+        *      After writing a value to this field the SW should
+        *      read the field for the value written.
+        *      The ENABLE field of this register should not be set
+        *      until AFTER this field is set and then read.
+        */
+       struct cvmx_usbnx_clk_ctl_s {
+               uint64_t reserved_20_63 : 44;
+               uint64_t divide2        : 2;
+               uint64_t hclk_rst       : 1;
+               uint64_t p_x_on         : 1;
+               uint64_t p_rtype        : 2;
+               uint64_t p_com_on       : 1;
+               uint64_t p_c_sel        : 2;
+               uint64_t cdiv_byp       : 1;
+               uint64_t sd_mode        : 2;
+               uint64_t s_bist         : 1;
+               uint64_t por            : 1;
+               uint64_t enable         : 1;
+               uint64_t prst           : 1;
+               uint64_t hrst           : 1;
+               uint64_t divide         : 3;
+       } s;
+};
+
+/**
+ * cvmx_usbn#_usbp_ctl_status
+ *
+ * USBN_USBP_CTL_STATUS = USBP Control And Status Register
+ *
+ * Contains general control and status information for the USBN block.
+ */
+union cvmx_usbnx_usbp_ctl_status {
+       uint64_t u64;
+       /**
+        * struct cvmx_usbnx_usbp_ctl_status_s
+        * @txrisetune: HS Transmitter Rise/Fall Time Adjustment
+        * @txvreftune: HS DC Voltage Level Adjustment
+        * @txfslstune: FS/LS Source Impedence Adjustment
+        * @txhsxvtune: Transmitter High-Speed Crossover Adjustment
+        * @sqrxtune: Squelch Threshold Adjustment
+        * @compdistune: Disconnect Threshold Adjustment
+        * @otgtune: VBUS Valid Threshold Adjustment
+        * @otgdisable: OTG Block Disable
+        * @portreset: Per_Port Reset
+        * @drvvbus: Drive VBUS
+        * @lsbist: Low-Speed BIST Enable.
+        * @fsbist: Full-Speed BIST Enable.
+        * @hsbist: High-Speed BIST Enable.
+        * @bist_done: PHY Bist Done.
+        *      Asserted at the end of the PHY BIST sequence.
+        * @bist_err: PHY Bist Error.
+        *      Indicates an internal error was detected during
+        *      the BIST sequence.
+        * @tdata_out: PHY Test Data Out.
+        *      Presents either internaly generated signals or
+        *      test register contents, based upon the value of
+        *      test_data_out_sel.
+        * @siddq: Drives the USBP (USB-PHY) SIDDQ input.
+        *      Normally should be set to zero.
+        *      When customers have no intent to use USB PHY
+        *      interface, they should:
+        *      - still provide 3.3V to USB_VDD33, and
+        *      - tie USB_REXT to 3.3V supply, and
+        *      - set USBN*_USBP_CTL_STATUS[SIDDQ]=1
+        * @txpreemphasistune: HS Transmitter Pre-Emphasis Enable
+        * @dma_bmode: When set to 1 the L2C DMA address will be updated
+        *      with byte-counts between packets. When set to 0
+        *      the L2C DMA address is incremented to the next
+        *      4-byte aligned address after adding byte-count.
+        * @usbc_end: Bigendian input to the USB Core. This should be
+        *      set to '0' for operation.
+        * @usbp_bist: PHY, This is cleared '0' to run BIST on the USBP.
+        * @tclk: PHY Test Clock, used to load TDATA_IN to the USBP.
+        * @dp_pulld: PHY DP_PULLDOWN input to the USB-PHY.
+        *      This signal enables the pull-down resistance on
+        *      the D+ line. '1' pull down-resistance is connected
+        *      to D+/ '0' pull down resistance is not connected
+        *      to D+. When an A/B device is acting as a host
+        *      (downstream-facing port), dp_pulldown and
+        *      dm_pulldown are enabled. This must not toggle
+        *      during normal opeartion.
+        * @dm_pulld: PHY DM_PULLDOWN input to the USB-PHY.
+        *      This signal enables the pull-down resistance on
+        *      the D- line. '1' pull down-resistance is connected
+        *      to D-. '0' pull down resistance is not connected
+        *      to D-. When an A/B device is acting as a host
+        *      (downstream-facing port), dp_pulldown and
+        *      dm_pulldown are enabled. This must not toggle
+        *      during normal opeartion.
+        * @hst_mode: When '0' the USB is acting as HOST, when '1'
+        *      USB is acting as device. This field needs to be
+        *      set while the USB is in reset.
+        * @tuning: Transmitter Tuning for High-Speed Operation.
+        *      Tunes the current supply and rise/fall output
+        *      times for high-speed operation.
+        *      [20:19] == 11: Current supply increased
+        *      approximately 9%
+        *      [20:19] == 10: Current supply increased
+        *      approximately 4.5%
+        *      [20:19] == 01: Design default.
+        *      [20:19] == 00: Current supply decreased
+        *      approximately 4.5%
+        *      [22:21] == 11: Rise and fall times are increased.
+        *      [22:21] == 10: Design default.
+        *      [22:21] == 01: Rise and fall times are decreased.
+        *      [22:21] == 00: Rise and fall times are decreased
+        *      further as compared to the 01 setting.
+        * @tx_bs_enh: Transmit Bit Stuffing on [15:8].
+        *      Enables or disables bit stuffing on data[15:8]
+        *      when bit-stuffing is enabled.
+        * @tx_bs_en: Transmit Bit Stuffing on [7:0].
+        *      Enables or disables bit stuffing on data[7:0]
+        *      when bit-stuffing is enabled.
+        * @loop_enb: PHY Loopback Test Enable.
+        *      '1': During data transmission the receive is
+        *      enabled.
+        *      '0': During data transmission the receive is
+        *      disabled.
+        *      Must be '0' for normal operation.
+        * @vtest_enb: Analog Test Pin Enable.
+        *      '1' The PHY's analog_test pin is enabled for the
+        *      input and output of applicable analog test signals.
+        *      '0' THe analog_test pin is disabled.
+        * @bist_enb: Built-In Self Test Enable.
+        *      Used to activate BIST in the PHY.
+        * @tdata_sel: Test Data Out Select.
+        *      '1' test_data_out[3:0] (PHY) register contents
+        *      are output. '0' internaly generated signals are
+        *      output.
+        * @taddr_in: Mode Address for Test Interface.
+        *      Specifies the register address for writing to or
+        *      reading from the PHY test interface register.
+        * @tdata_in: Internal Testing Register Input Data and Select
+        *      This is a test bus. Data is present on [3:0],
+        *      and its corresponding select (enable) is present
+        *      on bits [7:4].
+        * @ate_reset: Reset input from automatic test equipment.
+        *      This is a test signal. When the USB Core is
+        *      powered up (not in Susned Mode), an automatic
+        *      tester can use this to disable phy_clock and
+        *      free_clk, then re-eanable them with an aligned
+        *      phase.
+        *      '1': The phy_clk and free_clk outputs are
+        *      disabled. "0": The phy_clock and free_clk outputs
+        *      are available within a specific period after the
+        *      de-assertion.
+        */
+       struct cvmx_usbnx_usbp_ctl_status_s {
+               uint64_t txrisetune             : 1;
+               uint64_t txvreftune             : 4;
+               uint64_t txfslstune             : 4;
+               uint64_t txhsxvtune             : 2;
+               uint64_t sqrxtune               : 3;
+               uint64_t compdistune            : 3;
+               uint64_t otgtune                : 3;
+               uint64_t otgdisable             : 1;
+               uint64_t portreset              : 1;
+               uint64_t drvvbus                : 1;
+               uint64_t lsbist                 : 1;
+               uint64_t fsbist                 : 1;
+               uint64_t hsbist                 : 1;
+               uint64_t bist_done              : 1;
+               uint64_t bist_err               : 1;
+               uint64_t tdata_out              : 4;
+               uint64_t siddq                  : 1;
+               uint64_t txpreemphasistune      : 1;
+               uint64_t dma_bmode              : 1;
+               uint64_t usbc_end               : 1;
+               uint64_t usbp_bist              : 1;
+               uint64_t tclk                   : 1;
+               uint64_t dp_pulld               : 1;
+               uint64_t dm_pulld               : 1;
+               uint64_t hst_mode               : 1;
+               uint64_t tuning                 : 4;
+               uint64_t tx_bs_enh              : 1;
+               uint64_t tx_bs_en               : 1;
+               uint64_t loop_enb               : 1;
+               uint64_t vtest_enb              : 1;
+               uint64_t bist_enb               : 1;
+               uint64_t tdata_sel              : 1;
+               uint64_t taddr_in               : 4;
+               uint64_t tdata_in               : 8;
+               uint64_t ate_reset              : 1;
+       } s;
+};
+
+#endif /* __OCTEON_HCD_H__ */