/* SPDX-License-Identifier: GPL-2.0 */
/*
* 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__
#include <asm /bitfield.h>
#define CVMX_USBCXBASE 0 x00016F0010000000ull
#define CVMX_USBCXREG1(reg, bid) \
(CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
((bid) & 1 ) * 0 x100000000000ull)
#define CVMX_USBCXREG2(reg, bid, off) \
(CVMX_ADD_IO_SEG(CVMX_USBCXBASE | reg) + \
(((off) & 7 ) + ((bid) & 1 ) * 0 x8000000000ull) * 32 )
#define CVMX_USBCX_GAHBCFG(bid) CVMX_USBCXREG1(0 x008, bid)
#define CVMX_USBCX_GHWCFG3(bid) CVMX_USBCXREG1(0 x04c, bid)
#define CVMX_USBCX_GINTMSK(bid) CVMX_USBCXREG1(0 x018, bid)
#define CVMX_USBCX_GINTSTS(bid) CVMX_USBCXREG1(0 x014, bid)
#define CVMX_USBCX_GNPTXFSIZ(bid) CVMX_USBCXREG1(0 x028, bid)
#define CVMX_USBCX_GNPTXSTS(bid) CVMX_USBCXREG1(0 x02c, bid)
#define CVMX_USBCX_GOTGCTL(bid) CVMX_USBCXREG1(0 x000, bid)
#define CVMX_USBCX_GRSTCTL(bid) CVMX_USBCXREG1(0 x010, bid)
#define CVMX_USBCX_GRXFSIZ(bid) CVMX_USBCXREG1(0 x024, bid)
#define CVMX_USBCX_GRXSTSPH(bid) CVMX_USBCXREG1(0 x020, bid)
#define CVMX_USBCX_GUSBCFG(bid) CVMX_USBCXREG1(0 x00c, bid)
#define CVMX_USBCX_HAINT(bid) CVMX_USBCXREG1(0 x414, bid)
#define CVMX_USBCX_HAINTMSK(bid) CVMX_USBCXREG1(0 x418, bid)
#define CVMX_USBCX_HCCHARX(off, bid) CVMX_USBCXREG2(0 x500, bid, off)
#define CVMX_USBCX_HCFG(bid) CVMX_USBCXREG1(0 x400, bid)
#define CVMX_USBCX_HCINTMSKX(off, bid) CVMX_USBCXREG2(0 x50c, bid, off)
#define CVMX_USBCX_HCINTX(off, bid) CVMX_USBCXREG2(0 x508, bid, off)
#define CVMX_USBCX_HCSPLTX(off, bid) CVMX_USBCXREG2(0 x504, bid, off)
#define CVMX_USBCX_HCTSIZX(off, bid) CVMX_USBCXREG2(0 x510, bid, off)
#define CVMX_USBCX_HFIR(bid) CVMX_USBCXREG1(0 x404, bid)
#define CVMX_USBCX_HFNUM(bid) CVMX_USBCXREG1(0 x408, bid)
#define CVMX_USBCX_HPRT(bid) CVMX_USBCXREG1(0 x440, bid)
#define CVMX_USBCX_HPTXFSIZ(bid) CVMX_USBCXREG1(0 x100, bid)
#define CVMX_USBCX_HPTXSTS(bid) CVMX_USBCXREG1(0 x410, bid)
#define CVMX_USBNXBID1(bid) (((bid) & 1 ) * 0 x10000000ull)
#define CVMX_USBNXBID2(bid) (((bid) & 1 ) * 0 x100000000000ull)
#define CVMX_USBNXREG1(reg, bid) \
(CVMX_ADD_IO_SEG(0 x0001180068000000ull | reg) + CVMX_USBNXBID1(bid))
#define CVMX_USBNXREG2(reg, bid) \
(CVMX_ADD_IO_SEG(0 x00016F0000000000ull | reg) + CVMX_USBNXBID2(bid))
#define CVMX_USBNX_CLK_CTL(bid) CVMX_USBNXREG1(0 x10, bid)
#define CVMX_USBNX_DMA0_INB_CHN0(bid) CVMX_USBNXREG2(0 x818, bid)
#define CVMX_USBNX_DMA0_OUTB_CHN0(bid) CVMX_USBNXREG2(0 x858, bid)
#define CVMX_USBNX_USBP_CTL_STATUS(bid) CVMX_USBNXREG1(0 x18, 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 {
u32 u32;
/**
* struct cvmx_usbcx_gahbcfg_s
* @ ptxfemplvl : Periodic TxFIFO Empty Level ( PTxFEmpLvl )
* Software should set this bit to 0 x1 .
* 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 0 x1 .
* 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 0 x0 .
* @ glblintrmsk : Global Interrupt Mask ( GlblIntrMsk )
* Software should set this field to 0 x1 .
* 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 {
__BITFIELD_FIELD(u32 reserved_9_31 : 23 ,
__BITFIELD_FIELD(u32 ptxfemplvl : 1 ,
__BITFIELD_FIELD(u32 nptxfemplvl : 1 ,
__BITFIELD_FIELD(u32 reserved_6_6 : 1 ,
__BITFIELD_FIELD(u32 dmaen : 1 ,
__BITFIELD_FIELD(u32 hbstlen : 4 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 dfifodepth : 16 ,
__BITFIELD_FIELD(u32 reserved_13_15 : 3 ,
__BITFIELD_FIELD(u32 ahbphysync : 1 ,
__BITFIELD_FIELD(u32 rsttype : 1 ,
__BITFIELD_FIELD(u32 optfeature : 1 ,
__BITFIELD_FIELD(u32 vendor_control_interface_support : 1 ,
__BITFIELD_FIELD(u32 i2c_selection : 1 ,
__BITFIELD_FIELD(u32 otgen : 1 ,
__BITFIELD_FIELD(u32 pktsizewidth : 3 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 wkupintmsk : 1 ,
__BITFIELD_FIELD(u32 sessreqintmsk : 1 ,
__BITFIELD_FIELD(u32 disconnintmsk : 1 ,
__BITFIELD_FIELD(u32 conidstschngmsk : 1 ,
__BITFIELD_FIELD(u32 reserved_27_27 : 1 ,
__BITFIELD_FIELD(u32 ptxfempmsk : 1 ,
__BITFIELD_FIELD(u32 hchintmsk : 1 ,
__BITFIELD_FIELD(u32 prtintmsk : 1 ,
__BITFIELD_FIELD(u32 reserved_23_23 : 1 ,
__BITFIELD_FIELD(u32 fetsuspmsk : 1 ,
__BITFIELD_FIELD(u32 incomplpmsk : 1 ,
__BITFIELD_FIELD(u32 incompisoinmsk : 1 ,
__BITFIELD_FIELD(u32 oepintmsk : 1 ,
__BITFIELD_FIELD(u32 inepintmsk : 1 ,
__BITFIELD_FIELD(u32 epmismsk : 1 ,
__BITFIELD_FIELD(u32 reserved_16_16 : 1 ,
__BITFIELD_FIELD(u32 eopfmsk : 1 ,
__BITFIELD_FIELD(u32 isooutdropmsk : 1 ,
__BITFIELD_FIELD(u32 enumdonemsk : 1 ,
__BITFIELD_FIELD(u32 usbrstmsk : 1 ,
__BITFIELD_FIELD(u32 usbsuspmsk : 1 ,
__BITFIELD_FIELD(u32 erlysuspmsk : 1 ,
__BITFIELD_FIELD(u32 i2cint : 1 ,
__BITFIELD_FIELD(u32 ulpickintmsk : 1 ,
__BITFIELD_FIELD(u32 goutnakeffmsk : 1 ,
__BITFIELD_FIELD(u32 ginnakeffmsk : 1 ,
__BITFIELD_FIELD(u32 nptxfempmsk : 1 ,
__BITFIELD_FIELD(u32 rxflvlmsk : 1 ,
__BITFIELD_FIELD(u32 sofmsk : 1 ,
__BITFIELD_FIELD(u32 otgintmsk : 1 ,
__BITFIELD_FIELD(u32 modemismsk : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 0 x0 .
* @ ulpickint : ULPI Carkit Interrupt ( ULPICKINT )
* This bit is always 0 x0 .
* @ 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 {
__BITFIELD_FIELD(u32 wkupint : 1 ,
__BITFIELD_FIELD(u32 sessreqint : 1 ,
__BITFIELD_FIELD(u32 disconnint : 1 ,
__BITFIELD_FIELD(u32 conidstschng : 1 ,
__BITFIELD_FIELD(u32 reserved_27_27 : 1 ,
__BITFIELD_FIELD(u32 ptxfemp : 1 ,
__BITFIELD_FIELD(u32 hchint : 1 ,
__BITFIELD_FIELD(u32 prtint : 1 ,
__BITFIELD_FIELD(u32 reserved_23_23 : 1 ,
__BITFIELD_FIELD(u32 fetsusp : 1 ,
__BITFIELD_FIELD(u32 incomplp : 1 ,
__BITFIELD_FIELD(u32 incompisoin : 1 ,
__BITFIELD_FIELD(u32 oepint : 1 ,
__BITFIELD_FIELD(u32 iepint : 1 ,
__BITFIELD_FIELD(u32 epmis : 1 ,
__BITFIELD_FIELD(u32 reserved_16_16 : 1 ,
__BITFIELD_FIELD(u32 eopf : 1 ,
__BITFIELD_FIELD(u32 isooutdrop : 1 ,
__BITFIELD_FIELD(u32 enumdone : 1 ,
__BITFIELD_FIELD(u32 usbrst : 1 ,
__BITFIELD_FIELD(u32 usbsusp : 1 ,
__BITFIELD_FIELD(u32 erlysusp : 1 ,
__BITFIELD_FIELD(u32 i2cint : 1 ,
__BITFIELD_FIELD(u32 ulpickint : 1 ,
__BITFIELD_FIELD(u32 goutnakeff : 1 ,
__BITFIELD_FIELD(u32 ginnakeff : 1 ,
__BITFIELD_FIELD(u32 nptxfemp : 1 ,
__BITFIELD_FIELD(u32 rxflvl : 1 ,
__BITFIELD_FIELD(u32 sof : 1 ,
__BITFIELD_FIELD(u32 otgint : 1 ,
__BITFIELD_FIELD(u32 modemis : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 nptxfdep : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_31_31 : 1 ,
__BITFIELD_FIELD(u32 nptxqtop : 7 ,
__BITFIELD_FIELD(u32 nptxqspcavail : 8 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 ahbidle : 1 ,
__BITFIELD_FIELD(u32 dmareq : 1 ,
__BITFIELD_FIELD(u32 reserved_11_29 : 19 ,
__BITFIELD_FIELD(u32 txfnum : 5 ,
__BITFIELD_FIELD(u32 txfflsh : 1 ,
__BITFIELD_FIELD(u32 rxfflsh : 1 ,
__BITFIELD_FIELD(u32 intknqflsh : 1 ,
__BITFIELD_FIELD(u32 frmcntrrst : 1 ,
__BITFIELD_FIELD(u32 hsftrst : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_16_31 : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_21_31 : 11 ,
__BITFIELD_FIELD(u32 pktsts : 4 ,
__BITFIELD_FIELD(u32 dpid : 2 ,
__BITFIELD_FIELD(u32 bcnt : 11 ,
__BITFIELD_FIELD(u32 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 {
u32 u32;
/**
* struct cvmx_usbcx_gusbcfg_s
* @ otgi2csel : UTMIFS or I2C Interface Select ( OtgI2CSel )
* This bit is always 0 x0 .
* @ phylpwrclksel : PHY Low - Power Clock Select ( PhyLPwrClkSel )
* Software should set this bit to 0 x0 .
* 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 0 x5 .
* @ hnpcap : HNP - Capable ( HNPCap )
* This bit is always 0 x0 .
* @ srpcap : SRP - Capable ( SRPCap )
* This bit is always 0 x0 .
* @ ddrsel : ULPI DDR Select ( DDRSel )
* Software should set this bit to 0 x0 .
* @ physel : USB 2 . 0 High - Speed PHY or USB 1 . 1 Full - Speed Serial
* Software should set this bit to 0 x0 .
* @ fsintf : Full - Speed Serial Interface Select ( FSIntf )
* Software should set this bit to 0 x0 .
* @ ulpi_utmi_sel : ULPI or UTMI + Select ( ULPI_UTMI_Sel )
* This bit is always 0 x0 .
* @ phyif : PHY Interface ( PHYIf )
* This bit is always 0 x1 .
* @ 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 {
__BITFIELD_FIELD(u32 reserved_17_31 : 15 ,
__BITFIELD_FIELD(u32 otgi2csel : 1 ,
__BITFIELD_FIELD(u32 phylpwrclksel : 1 ,
__BITFIELD_FIELD(u32 reserved_14_14 : 1 ,
__BITFIELD_FIELD(u32 usbtrdtim : 4 ,
__BITFIELD_FIELD(u32 hnpcap : 1 ,
__BITFIELD_FIELD(u32 srpcap : 1 ,
__BITFIELD_FIELD(u32 ddrsel : 1 ,
__BITFIELD_FIELD(u32 physel : 1 ,
__BITFIELD_FIELD(u32 fsintf : 1 ,
__BITFIELD_FIELD(u32 ulpi_utmi_sel : 1 ,
__BITFIELD_FIELD(u32 phyif : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_16_31 : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_16_31 : 16 ,
__BITFIELD_FIELD(u32 haintmsk : 16 ,
;))
} s;
};
/**
* cvmx_usbc # _ hcchar #
*
* Host Channel - n Characteristics Register ( HCCHAR )
*
*/
union cvmx_usbcx_hccharx {
u32 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 {
__BITFIELD_FIELD(u32 chena : 1 ,
__BITFIELD_FIELD(u32 chdis : 1 ,
__BITFIELD_FIELD(u32 oddfrm : 1 ,
__BITFIELD_FIELD(u32 devaddr : 7 ,
__BITFIELD_FIELD(u32 ec : 2 ,
__BITFIELD_FIELD(u32 eptype : 2 ,
__BITFIELD_FIELD(u32 lspddev : 1 ,
__BITFIELD_FIELD(u32 reserved_16_16 : 1 ,
__BITFIELD_FIELD(u32 epdir : 1 ,
__BITFIELD_FIELD(u32 epnum : 4 ,
__BITFIELD_FIELD(u32 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 {
u32 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 48 MHz 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 {
__BITFIELD_FIELD(u32 reserved_3_31 : 29 ,
__BITFIELD_FIELD(u32 fslssupp : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 0 x0 .
* @ 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 {
__BITFIELD_FIELD(u32 reserved_11_31 : 21 ,
__BITFIELD_FIELD(u32 datatglerr : 1 ,
__BITFIELD_FIELD(u32 frmovrun : 1 ,
__BITFIELD_FIELD(u32 bblerr : 1 ,
__BITFIELD_FIELD(u32 xacterr : 1 ,
__BITFIELD_FIELD(u32 nyet : 1 ,
__BITFIELD_FIELD(u32 ack : 1 ,
__BITFIELD_FIELD(u32 nak : 1 ,
__BITFIELD_FIELD(u32 stall : 1 ,
__BITFIELD_FIELD(u32 ahberr : 1 ,
__BITFIELD_FIELD(u32 chhltd : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_11_31 : 21 ,
__BITFIELD_FIELD(u32 datatglerrmsk : 1 ,
__BITFIELD_FIELD(u32 frmovrunmsk : 1 ,
__BITFIELD_FIELD(u32 bblerrmsk : 1 ,
__BITFIELD_FIELD(u32 xacterrmsk : 1 ,
__BITFIELD_FIELD(u32 nyetmsk : 1 ,
__BITFIELD_FIELD(u32 ackmsk : 1 ,
__BITFIELD_FIELD(u32 nakmsk : 1 ,
__BITFIELD_FIELD(u32 stallmsk : 1 ,
__BITFIELD_FIELD(u32 ahberrmsk : 1 ,
__BITFIELD_FIELD(u32 chhltdmsk : 1 ,
__BITFIELD_FIELD(u32 xfercomplmsk : 1 ,
;))))))))))))
} s;
};
/**
* cvmx_usbc # _ hcsplt #
*
* Host Channel - n Split Control Register ( HCSPLT )
*
*/
union cvmx_usbcx_hcspltx {
u32 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 {
__BITFIELD_FIELD(u32 spltena : 1 ,
__BITFIELD_FIELD(u32 reserved_17_30 : 14 ,
__BITFIELD_FIELD(u32 compsplt : 1 ,
__BITFIELD_FIELD(u32 xactpos : 2 ,
__BITFIELD_FIELD(u32 hubaddr : 7 ,
__BITFIELD_FIELD(u32 prtaddr : 7 ,
;))))))
} s;
};
/**
* cvmx_usbc # _ hctsiz #
*
* Host Channel - n Transfer Size Register ( HCTSIZ )
*
*/
union cvmx_usbcx_hctsizx {
u32 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 {
__BITFIELD_FIELD(u32 dopng : 1 ,
__BITFIELD_FIELD(u32 pid : 2 ,
__BITFIELD_FIELD(u32 pktcnt : 10 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_16_31 : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 frrem : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 reserved_19_31 : 13 ,
__BITFIELD_FIELD(u32 prtspd : 2 ,
__BITFIELD_FIELD(u32 prttstctl : 4 ,
__BITFIELD_FIELD(u32 prtpwr : 1 ,
__BITFIELD_FIELD(u32 prtlnsts : 2 ,
__BITFIELD_FIELD(u32 reserved_9_9 : 1 ,
__BITFIELD_FIELD(u32 prtrst : 1 ,
__BITFIELD_FIELD(u32 prtsusp : 1 ,
__BITFIELD_FIELD(u32 prtres : 1 ,
__BITFIELD_FIELD(u32 prtovrcurrchng : 1 ,
__BITFIELD_FIELD(u32 prtovrcurract : 1 ,
__BITFIELD_FIELD(u32 prtenchng : 1 ,
__BITFIELD_FIELD(u32 prtena : 1 ,
__BITFIELD_FIELD(u32 prtconndet : 1 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 ptxfsize : 16 ,
__BITFIELD_FIELD(u32 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 {
u32 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 {
__BITFIELD_FIELD(u32 ptxqtop : 8 ,
__BITFIELD_FIELD(u32 ptxqspcavail : 8 ,
__BITFIELD_FIELD(u32 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 {
u64 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 12 MHz crystal as a clock source
* at the USB_XO and USB_XI pins .
* ' 1 ' Reserved .
* ' 2 ' The USB_PHY uses 12 / 24 / 48 MHz 2 . 5 V 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 12 ms 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 125 Mhz .
* 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 {
__BITFIELD_FIELD(u64 reserved_20_63 : 44 ,
__BITFIELD_FIELD(u64 divide2 : 2 ,
__BITFIELD_FIELD(u64 hclk_rst : 1 ,
__BITFIELD_FIELD(u64 p_x_on : 1 ,
__BITFIELD_FIELD(u64 p_rtype : 2 ,
__BITFIELD_FIELD(u64 p_com_on : 1 ,
__BITFIELD_FIELD(u64 p_c_sel : 2 ,
__BITFIELD_FIELD(u64 cdiv_byp : 1 ,
__BITFIELD_FIELD(u64 sd_mode : 2 ,
__BITFIELD_FIELD(u64 s_bist : 1 ,
__BITFIELD_FIELD(u64 por : 1 ,
__BITFIELD_FIELD(u64 enable : 1 ,
__BITFIELD_FIELD(u64 prst : 1 ,
__BITFIELD_FIELD(u64 hrst : 1 ,
__BITFIELD_FIELD(u64 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 {
u64 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 Impedance 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 internally 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 . 3 V to USB_VDD33 , and
* - tie USB_REXT to 3 . 3 V 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 operation .
* @ 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 operation .
* @ 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 ' internally 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 - enable 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 {
__BITFIELD_FIELD(u64 txrisetune : 1 ,
__BITFIELD_FIELD(u64 txvreftune : 4 ,
__BITFIELD_FIELD(u64 txfslstune : 4 ,
__BITFIELD_FIELD(u64 txhsxvtune : 2 ,
__BITFIELD_FIELD(u64 sqrxtune : 3 ,
__BITFIELD_FIELD(u64 compdistune : 3 ,
__BITFIELD_FIELD(u64 otgtune : 3 ,
__BITFIELD_FIELD(u64 otgdisable : 1 ,
__BITFIELD_FIELD(u64 portreset : 1 ,
__BITFIELD_FIELD(u64 drvvbus : 1 ,
__BITFIELD_FIELD(u64 lsbist : 1 ,
__BITFIELD_FIELD(u64 fsbist : 1 ,
__BITFIELD_FIELD(u64 hsbist : 1 ,
__BITFIELD_FIELD(u64 bist_done : 1 ,
__BITFIELD_FIELD(u64 bist_err : 1 ,
__BITFIELD_FIELD(u64 tdata_out : 4 ,
__BITFIELD_FIELD(u64 siddq : 1 ,
__BITFIELD_FIELD(u64 txpreemphasistune : 1 ,
__BITFIELD_FIELD(u64 dma_bmode : 1 ,
__BITFIELD_FIELD(u64 usbc_end : 1 ,
__BITFIELD_FIELD(u64 usbp_bist : 1 ,
__BITFIELD_FIELD(u64 tclk : 1 ,
__BITFIELD_FIELD(u64 dp_pulld : 1 ,
__BITFIELD_FIELD(u64 dm_pulld : 1 ,
__BITFIELD_FIELD(u64 hst_mode : 1 ,
__BITFIELD_FIELD(u64 tuning : 4 ,
__BITFIELD_FIELD(u64 tx_bs_enh : 1 ,
__BITFIELD_FIELD(u64 tx_bs_en : 1 ,
__BITFIELD_FIELD(u64 loop_enb : 1 ,
__BITFIELD_FIELD(u64 vtest_enb : 1 ,
__BITFIELD_FIELD(u64 bist_enb : 1 ,
__BITFIELD_FIELD(u64 tdata_sel : 1 ,
__BITFIELD_FIELD(u64 taddr_in : 4 ,
__BITFIELD_FIELD(u64 tdata_in : 8 ,
__BITFIELD_FIELD(u64 ate_reset : 1 ,
;)))))))))))))))))))))))))))))))))))
} s;
};
#endif /* __OCTEON_HCD_H__ */
Messung V0.5 in Prozent C=95 H=91 G=92
¤ Dauer der Verarbeitung: 0.53 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland