/* SPDX-License-Identifier: GPL-2.0 */
/*
* MUSB OTG driver register defines
*
* Copyright 2005 Mentor Graphics Corporation
* Copyright (C) 2005-2006 by Texas Instruments
* Copyright (C) 2006-2007 Nokia Corporation
*/
#ifndef __MUSB_REGS_H__
#define __MUSB_REGS_H__
#define MUSB_EP0_FIFOSIZE 64 /* This is non-configurable */
/*
* MUSB Register bits
*/
/* POWER */
#define MUSB_POWER_ISOUPDATE 0 x80
#define MUSB_POWER_SOFTCONN 0 x40
#define MUSB_POWER_HSENAB 0 x20
#define MUSB_POWER_HSMODE 0 x10
#define MUSB_POWER_RESET 0 x08
#define MUSB_POWER_RESUME 0 x04
#define MUSB_POWER_SUSPENDM 0 x02
#define MUSB_POWER_ENSUSPEND 0 x01
/* INTRUSB */
#define MUSB_INTR_SUSPEND 0 x01
#define MUSB_INTR_RESUME 0 x02
#define MUSB_INTR_RESET 0 x04
#define MUSB_INTR_BABBLE 0 x04
#define MUSB_INTR_SOF 0 x08
#define MUSB_INTR_CONNECT 0 x10
#define MUSB_INTR_DISCONNECT 0 x20
#define MUSB_INTR_SESSREQ 0 x40
#define MUSB_INTR_VBUSERROR 0 x80 /* For SESSION end */
/* DEVCTL */
#define MUSB_DEVCTL_BDEVICE 0 x80
#define MUSB_DEVCTL_FSDEV 0 x40
#define MUSB_DEVCTL_LSDEV 0 x20
#define MUSB_DEVCTL_VBUS 0 x18
#define MUSB_DEVCTL_VBUS_SHIFT 3
#define MUSB_DEVCTL_HM 0 x04
#define MUSB_DEVCTL_HR 0 x02
#define MUSB_DEVCTL_SESSION 0 x01
/* BABBLE_CTL */
#define MUSB_BABBLE_FORCE_TXIDLE 0 x80
#define MUSB_BABBLE_SW_SESSION_CTRL 0 x40
#define MUSB_BABBLE_STUCK_J 0 x20
#define MUSB_BABBLE_RCV_DISABLE 0 x04
/* MUSB ULPI VBUSCONTROL */
#define MUSB_ULPI_USE_EXTVBUS 0 x01
#define MUSB_ULPI_USE_EXTVBUSIND 0 x02
/* ULPI_REG_CONTROL */
#define MUSB_ULPI_REG_REQ (1 << 0 )
#define MUSB_ULPI_REG_CMPLT (1 << 1 )
#define MUSB_ULPI_RDN_WR (1 << 2 )
/* TESTMODE */
#define MUSB_TEST_FORCE_HOST 0 x80
#define MUSB_TEST_FIFO_ACCESS 0 x40
#define MUSB_TEST_FORCE_FS 0 x20
#define MUSB_TEST_FORCE_HS 0 x10
#define MUSB_TEST_PACKET 0 x08
#define MUSB_TEST_K 0 x04
#define MUSB_TEST_J 0 x02
#define MUSB_TEST_SE0_NAK 0 x01
/* Allocate for double-packet buffering (effectively doubles assigned _SIZE) */
#define MUSB_FIFOSZ_DPB 0 x10
/* Allocation size (8, 16, 32, ... 4096) */
#define MUSB_FIFOSZ_SIZE 0 x0f
/* CSR0 */
#define MUSB_CSR0_FLUSHFIFO 0 x0100
#define MUSB_CSR0_TXPKTRDY 0 x0002
#define MUSB_CSR0_RXPKTRDY 0 x0001
/* CSR0 in Peripheral mode */
#define MUSB_CSR0_P_SVDSETUPEND 0 x0080
#define MUSB_CSR0_P_SVDRXPKTRDY 0 x0040
#define MUSB_CSR0_P_SENDSTALL 0 x0020
#define MUSB_CSR0_P_SETUPEND 0 x0010
#define MUSB_CSR0_P_DATAEND 0 x0008
#define MUSB_CSR0_P_SENTSTALL 0 x0004
/* CSR0 in Host mode */
#define MUSB_CSR0_H_DIS_PING 0 x0800
#define MUSB_CSR0_H_WR_DATATOGGLE 0 x0400 /* Set to allow setting: */
#define MUSB_CSR0_H_DATATOGGLE 0 x0200 /* Data toggle control */
#define MUSB_CSR0_H_NAKTIMEOUT 0 x0080
#define MUSB_CSR0_H_STATUSPKT 0 x0040
#define MUSB_CSR0_H_REQPKT 0 x0020
#define MUSB_CSR0_H_ERROR 0 x0010
#define MUSB_CSR0_H_SETUPPKT 0 x0008
#define MUSB_CSR0_H_RXSTALL 0 x0004
/* CSR0 bits to avoid zeroing (write zero clears, write 1 ignored) */
#define MUSB_CSR0_P_WZC_BITS \
(MUSB_CSR0_P_SENTSTALL)
#define MUSB_CSR0_H_WZC_BITS \
(MUSB_CSR0_H_NAKTIMEOUT | MUSB_CSR0_H_RXSTALL \
| MUSB_CSR0_RXPKTRDY)
/* TxType/RxType */
#define MUSB_TYPE_SPEED 0 xc0
#define MUSB_TYPE_SPEED_SHIFT 6
#define MUSB_TYPE_PROTO 0 x30 /* Implicitly zero for ep0 */
#define MUSB_TYPE_PROTO_SHIFT 4
#define MUSB_TYPE_REMOTE_END 0 xf /* Implicitly zero for ep0 */
/* CONFIGDATA */
#define MUSB_CONFIGDATA_MPRXE 0 x80 /* Auto bulk pkt combining */
#define MUSB_CONFIGDATA_MPTXE 0 x40 /* Auto bulk pkt splitting */
#define MUSB_CONFIGDATA_BIGENDIAN 0 x20
#define MUSB_CONFIGDATA_HBRXE 0 x10 /* HB-ISO for RX */
#define MUSB_CONFIGDATA_HBTXE 0 x08 /* HB-ISO for TX */
#define MUSB_CONFIGDATA_DYNFIFO 0 x04 /* Dynamic FIFO sizing */
#define MUSB_CONFIGDATA_SOFTCONE 0 x02 /* SoftConnect */
#define MUSB_CONFIGDATA_UTMIDW 0 x01 /* Data width 0/1 => 8/16bits */
/* TXCSR in Peripheral and Host mode */
#define MUSB_TXCSR_AUTOSET 0 x8000
#define MUSB_TXCSR_DMAENAB 0 x1000
#define MUSB_TXCSR_FRCDATATOG 0 x0800
#define MUSB_TXCSR_DMAMODE 0 x0400
#define MUSB_TXCSR_CLRDATATOG 0 x0040
#define MUSB_TXCSR_FLUSHFIFO 0 x0008
#define MUSB_TXCSR_FIFONOTEMPTY 0 x0002
#define MUSB_TXCSR_TXPKTRDY 0 x0001
/* TXCSR in Peripheral mode */
#define MUSB_TXCSR_P_ISO 0 x4000
#define MUSB_TXCSR_P_INCOMPTX 0 x0080
#define MUSB_TXCSR_P_SENTSTALL 0 x0020
#define MUSB_TXCSR_P_SENDSTALL 0 x0010
#define MUSB_TXCSR_P_UNDERRUN 0 x0004
/* TXCSR in Host mode */
#define MUSB_TXCSR_H_WR_DATATOGGLE 0 x0200
#define MUSB_TXCSR_H_DATATOGGLE 0 x0100
#define MUSB_TXCSR_H_NAKTIMEOUT 0 x0080
#define MUSB_TXCSR_H_RXSTALL 0 x0020
#define MUSB_TXCSR_H_ERROR 0 x0004
/* TXCSR bits to avoid zeroing (write zero clears, write 1 ignored) */
#define MUSB_TXCSR_P_WZC_BITS \
(MUSB_TXCSR_P_INCOMPTX | MUSB_TXCSR_P_SENTSTALL \
| MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_FIFONOTEMPTY)
#define MUSB_TXCSR_H_WZC_BITS \
(MUSB_TXCSR_H_NAKTIMEOUT | MUSB_TXCSR_H_RXSTALL \
| MUSB_TXCSR_H_ERROR | MUSB_TXCSR_FIFONOTEMPTY)
/* RXCSR in Peripheral and Host mode */
#define MUSB_RXCSR_AUTOCLEAR 0 x8000
#define MUSB_RXCSR_DMAENAB 0 x2000
#define MUSB_RXCSR_DISNYET 0 x1000
#define MUSB_RXCSR_PID_ERR 0 x1000
#define MUSB_RXCSR_DMAMODE 0 x0800
#define MUSB_RXCSR_INCOMPRX 0 x0100
#define MUSB_RXCSR_CLRDATATOG 0 x0080
#define MUSB_RXCSR_FLUSHFIFO 0 x0010
#define MUSB_RXCSR_DATAERROR 0 x0008
#define MUSB_RXCSR_FIFOFULL 0 x0002
#define MUSB_RXCSR_RXPKTRDY 0 x0001
/* RXCSR in Peripheral mode */
#define MUSB_RXCSR_P_ISO 0 x4000
#define MUSB_RXCSR_P_SENTSTALL 0 x0040
#define MUSB_RXCSR_P_SENDSTALL 0 x0020
#define MUSB_RXCSR_P_OVERRUN 0 x0004
/* RXCSR in Host mode */
#define MUSB_RXCSR_H_AUTOREQ 0 x4000
#define MUSB_RXCSR_H_WR_DATATOGGLE 0 x0400
#define MUSB_RXCSR_H_DATATOGGLE 0 x0200
#define MUSB_RXCSR_H_RXSTALL 0 x0040
#define MUSB_RXCSR_H_REQPKT 0 x0020
#define MUSB_RXCSR_H_ERROR 0 x0004
/* RXCSR bits to avoid zeroing (write zero clears, write 1 ignored) */
#define MUSB_RXCSR_P_WZC_BITS \
(MUSB_RXCSR_P_SENTSTALL | MUSB_RXCSR_P_OVERRUN \
| MUSB_RXCSR_RXPKTRDY)
#define MUSB_RXCSR_H_WZC_BITS \
(MUSB_RXCSR_H_RXSTALL | MUSB_RXCSR_H_ERROR \
| MUSB_RXCSR_DATAERROR | MUSB_RXCSR_RXPKTRDY)
/* HUBADDR */
#define MUSB_HUBADDR_MULTI_TT 0 x80
/*
* Common USB registers
*/
#define MUSB_FADDR 0 x00 /* 8-bit */
#define MUSB_POWER 0 x01 /* 8-bit */
#define MUSB_INTRTX 0 x02 /* 16-bit */
#define MUSB_INTRRX 0 x04
#define MUSB_INTRTXE 0 x06
#define MUSB_INTRRXE 0 x08
#define MUSB_INTRUSB 0 x0A /* 8 bit */
#define MUSB_INTRUSBE 0 x0B /* 8 bit */
#define MUSB_FRAME 0 x0C
#define MUSB_INDEX 0 x0E /* 8 bit */
#define MUSB_TESTMODE 0 x0F /* 8 bit */
/*
* Additional Control Registers
*/
#define MUSB_DEVCTL 0 x60 /* 8 bit */
#define MUSB_BABBLE_CTL 0 x61 /* 8 bit */
/* These are always controlled through the INDEX register */
#define MUSB_TXFIFOSZ 0 x62 /* 8-bit (see masks) */
#define MUSB_RXFIFOSZ 0 x63 /* 8-bit (see masks) */
#define MUSB_TXFIFOADD 0 x64 /* 16-bit offset shifted right 3 */
#define MUSB_RXFIFOADD 0 x66 /* 16-bit offset shifted right 3 */
/* REVISIT: vctrl/vstatus: optional vendor utmi+phy register at 0x68 */
#define MUSB_HWVERS 0 x6C /* 8 bit */
#define MUSB_ULPI_BUSCONTROL 0 x70 /* 8 bit */
#define MUSB_ULPI_INT_MASK 0 x72 /* 8 bit */
#define MUSB_ULPI_INT_SRC 0 x73 /* 8 bit */
#define MUSB_ULPI_REG_DATA 0 x74 /* 8 bit */
#define MUSB_ULPI_REG_ADDR 0 x75 /* 8 bit */
#define MUSB_ULPI_REG_CONTROL 0 x76 /* 8 bit */
#define MUSB_ULPI_RAW_DATA 0 x77 /* 8 bit */
#define MUSB_EPINFO 0 x78 /* 8 bit */
#define MUSB_RAMINFO 0 x79 /* 8 bit */
#define MUSB_LINKINFO 0 x7a /* 8 bit */
#define MUSB_VPLEN 0 x7b /* 8 bit */
#define MUSB_HS_EOF1 0 x7c /* 8 bit */
#define MUSB_FS_EOF1 0 x7d /* 8 bit */
#define MUSB_LS_EOF1 0 x7e /* 8 bit */
/* Offsets to endpoint registers */
#define MUSB_TXMAXP 0 x00
#define MUSB_TXCSR 0 x02
#define MUSB_CSR0 MUSB_TXCSR /* Re-used for EP0 */
#define MUSB_RXMAXP 0 x04
#define MUSB_RXCSR 0 x06
#define MUSB_RXCOUNT 0 x08
#define MUSB_COUNT0 MUSB_RXCOUNT /* Re-used for EP0 */
#define MUSB_TXTYPE 0 x0A
#define MUSB_TYPE0 MUSB_TXTYPE /* Re-used for EP0 */
#define MUSB_TXINTERVAL 0 x0B
#define MUSB_NAKLIMIT0 MUSB_TXINTERVAL /* Re-used for EP0 */
#define MUSB_RXTYPE 0 x0C
#define MUSB_RXINTERVAL 0 x0D
#define MUSB_FIFOSIZE 0 x0F
#define MUSB_CONFIGDATA MUSB_FIFOSIZE /* Re-used for EP0 */
#include "tusb6010.h" /* Needed "only" for TUSB_EP0_CONF */
#define MUSB_TXCSR_MODE 0 x2000
/* "bus control"/target registers, for host side multipoint (external hubs) */
#define MUSB_TXFUNCADDR 0 x00
#define MUSB_TXHUBADDR 0 x02
#define MUSB_TXHUBPORT 0 x03
#define MUSB_RXFUNCADDR 0 x04
#define MUSB_RXHUBADDR 0 x06
#define MUSB_RXHUBPORT 0 x07
static inline u8 musb_read_configdata(void __iomem *mbase)
{
musb_writeb(mbase, MUSB_INDEX, 0 );
return musb_readb(mbase, 0 x10 + MUSB_CONFIGDATA);
}
static inline void musb_write_rxfunaddr(struct musb *musb, u8 epnum,
u8 qh_addr_reg)
{
musb_writeb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_RXFUNCADDR),
qh_addr_reg);
}
static inline void musb_write_rxhubaddr(struct musb *musb, u8 epnum,
u8 qh_h_addr_reg)
{
musb_writeb(musb->mregs, musb->io.busctl_offset(epnum, MUSB_RXHUBADDR),
qh_h_addr_reg);
}
static inline void musb_write_rxhubport(struct musb *musb, u8 epnum,
u8 qh_h_port_reg)
{
musb_writeb(musb->mregs, musb->io.busctl_offset(epnum, MUSB_RXHUBPORT),
qh_h_port_reg);
}
static inline void musb_write_txfunaddr(struct musb *musb, u8 epnum,
u8 qh_addr_reg)
{
musb_writeb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_TXFUNCADDR),
qh_addr_reg);
}
static inline void musb_write_txhubaddr(struct musb *musb, u8 epnum,
u8 qh_addr_reg)
{
musb_writeb(musb->mregs, musb->io.busctl_offset(epnum, MUSB_TXHUBADDR),
qh_addr_reg);
}
static inline void musb_write_txhubport(struct musb *musb, u8 epnum,
u8 qh_h_port_reg)
{
musb_writeb(musb->mregs, musb->io.busctl_offset(epnum, MUSB_TXHUBPORT),
qh_h_port_reg);
}
static inline u8 musb_read_rxfunaddr(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_RXFUNCADDR));
}
static inline u8 musb_read_rxhubaddr(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_RXHUBADDR));
}
static inline u8 musb_read_rxhubport(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_RXHUBPORT));
}
static inline u8 musb_read_txfunaddr(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_TXFUNCADDR));
}
static inline u8 musb_read_txhubaddr(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_TXHUBADDR));
}
static inline u8 musb_read_txhubport(struct musb *musb, u8 epnum)
{
return musb_readb(musb->mregs,
musb->io.busctl_offset(epnum, MUSB_TXHUBPORT));
}
#endif /* __MUSB_REGS_H__ */
Messung V0.5 in Prozent C=94 H=92 G=92
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland