1848 lines
72 KiB
C
1848 lines
72 KiB
C
|
/* 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 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 {
|
||
|
u32 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 {
|
||
|
__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 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 {
|
||
|
__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 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 {
|
||
|
__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 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 {
|
||
|
__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 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 {
|
||
|
__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 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 {
|
||
|
__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.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 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__ */
|