1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
22731b9a8SJean-Christophe PLAGNIOL-VILLARD /******************************************************************
32731b9a8SJean-Christophe PLAGNIOL-VILLARD * Copyright 2008 Mentor Graphics Corporation
42731b9a8SJean-Christophe PLAGNIOL-VILLARD * Copyright (C) 2008 by Texas Instruments
52731b9a8SJean-Christophe PLAGNIOL-VILLARD *
62731b9a8SJean-Christophe PLAGNIOL-VILLARD * This file is part of the Inventra Controller Driver for Linux.
72731b9a8SJean-Christophe PLAGNIOL-VILLARD ******************************************************************/
82731b9a8SJean-Christophe PLAGNIOL-VILLARD
92731b9a8SJean-Christophe PLAGNIOL-VILLARD #ifndef __MUSB_HDRC_DEFS_H__
102731b9a8SJean-Christophe PLAGNIOL-VILLARD #define __MUSB_HDRC_DEFS_H__
112731b9a8SJean-Christophe PLAGNIOL-VILLARD
122731b9a8SJean-Christophe PLAGNIOL-VILLARD #include <usb_defs.h>
132731b9a8SJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h>
142731b9a8SJean-Christophe PLAGNIOL-VILLARD
152731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_EP0_FIFOSIZE 64 /* This is non-configurable */
162731b9a8SJean-Christophe PLAGNIOL-VILLARD
17f298e4b6STom Rix /* EP0 */
18f298e4b6STom Rix struct musb_ep0_regs {
19f298e4b6STom Rix u16 reserved4;
20f298e4b6STom Rix u16 csr0;
21f298e4b6STom Rix u16 reserved5;
22f298e4b6STom Rix u16 reserved6;
23f298e4b6STom Rix u16 count0;
24f298e4b6STom Rix u8 host_type0;
25f298e4b6STom Rix u8 host_naklimit0;
26f298e4b6STom Rix u8 reserved7;
27f298e4b6STom Rix u8 reserved8;
28f298e4b6STom Rix u8 reserved9;
29f298e4b6STom Rix u8 configdata;
30f298e4b6STom Rix };
31f298e4b6STom Rix
32f298e4b6STom Rix /* EP 1-15 */
33f298e4b6STom Rix struct musb_epN_regs {
34f298e4b6STom Rix u16 txmaxp;
35f298e4b6STom Rix u16 txcsr;
36f298e4b6STom Rix u16 rxmaxp;
37f298e4b6STom Rix u16 rxcsr;
38f298e4b6STom Rix u16 rxcount;
39f298e4b6STom Rix u8 txtype;
40f298e4b6STom Rix u8 txinterval;
41f298e4b6STom Rix u8 rxtype;
42f298e4b6STom Rix u8 rxinterval;
43f298e4b6STom Rix u8 reserved0;
44f298e4b6STom Rix u8 fifosize;
45f298e4b6STom Rix };
46f298e4b6STom Rix
472731b9a8SJean-Christophe PLAGNIOL-VILLARD /* Mentor USB core register overlay structure */
48e608f221SBryan Wu #ifndef musb_regs
492731b9a8SJean-Christophe PLAGNIOL-VILLARD struct musb_regs {
502731b9a8SJean-Christophe PLAGNIOL-VILLARD /* common registers */
512731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 faddr;
522731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 power;
532731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 intrtx;
542731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 intrrx;
552731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 intrtxe;
562731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 intrrxe;
572731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 intrusb;
582731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 intrusbe;
592731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 frame;
602731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 index;
612731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 testmode;
622731b9a8SJean-Christophe PLAGNIOL-VILLARD /* indexed registers */
632731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 txmaxp;
642731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 txcsr;
652731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 rxmaxp;
662731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 rxcsr;
672731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 rxcount;
682731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txtype;
692731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txinterval;
702731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxtype;
712731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxinterval;
722731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 reserved0;
732731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 fifosize;
742731b9a8SJean-Christophe PLAGNIOL-VILLARD /* fifo */
752731b9a8SJean-Christophe PLAGNIOL-VILLARD u32 fifox[16];
762731b9a8SJean-Christophe PLAGNIOL-VILLARD /* OTG, dynamic FIFO, version & vendor registers */
772731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 devctl;
782731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 reserved1;
792731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txfifosz;
802731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxfifosz;
812731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 txfifoadd;
822731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 rxfifoadd;
832731b9a8SJean-Christophe PLAGNIOL-VILLARD u32 vcontrol;
842731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 hwvers;
859bb47abfSAjay Kumar Gupta u16 reserved2a[1];
869bb47abfSAjay Kumar Gupta u8 ulpi_busctl;
879bb47abfSAjay Kumar Gupta u8 reserved2b[1];
889bb47abfSAjay Kumar Gupta u16 reserved2[3];
892731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 epinfo;
902731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 raminfo;
912731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 linkinfo;
922731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 vplen;
932731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 hseof1;
942731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 fseof1;
952731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 lseof1;
962731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 reserved3;
972731b9a8SJean-Christophe PLAGNIOL-VILLARD /* target address registers */
982731b9a8SJean-Christophe PLAGNIOL-VILLARD struct musb_tar_regs {
992731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txfuncaddr;
1002731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 reserved0;
1012731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txhubaddr;
1022731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 txhubport;
1032731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxfuncaddr;
1042731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 reserved1;
1052731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxhubaddr;
1062731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 rxhubport;
1072731b9a8SJean-Christophe PLAGNIOL-VILLARD } tar[16];
108f298e4b6STom Rix /*
109f298e4b6STom Rix * endpoint registers
110f298e4b6STom Rix * ep0 elements are valid when array index is 0
111f298e4b6STom Rix * otherwise epN is valid
112f298e4b6STom Rix */
113f298e4b6STom Rix union musb_ep_regs {
114f298e4b6STom Rix struct musb_ep0_regs ep0;
115f298e4b6STom Rix struct musb_epN_regs epN;
116f298e4b6STom Rix } ep[16];
117f298e4b6STom Rix
118c60795f4SIlya Yanok } __attribute__((packed));
119e608f221SBryan Wu #endif
1202731b9a8SJean-Christophe PLAGNIOL-VILLARD
1212731b9a8SJean-Christophe PLAGNIOL-VILLARD /*
1222731b9a8SJean-Christophe PLAGNIOL-VILLARD * MUSB Register bits
1232731b9a8SJean-Christophe PLAGNIOL-VILLARD */
1242731b9a8SJean-Christophe PLAGNIOL-VILLARD
1252731b9a8SJean-Christophe PLAGNIOL-VILLARD /* POWER */
1262731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_ISOUPDATE 0x80
1272731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_SOFTCONN 0x40
1282731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_HSENAB 0x20
1292731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_HSMODE 0x10
1302731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_RESET 0x08
1312731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_RESUME 0x04
1322731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_SUSPENDM 0x02
1332731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_ENSUSPEND 0x01
1342731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_POWER_HSMODE_SHIFT 4
1352731b9a8SJean-Christophe PLAGNIOL-VILLARD
1362731b9a8SJean-Christophe PLAGNIOL-VILLARD /* INTRUSB */
1372731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_SUSPEND 0x01
1382731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_RESUME 0x02
1392731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_RESET 0x04
1402731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_BABBLE 0x04
1412731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_SOF 0x08
1422731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_CONNECT 0x10
1432731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_DISCONNECT 0x20
1442731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_SESSREQ 0x40
1452731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_INTR_VBUSERROR 0x80 /* For SESSION end */
1462731b9a8SJean-Christophe PLAGNIOL-VILLARD
1472731b9a8SJean-Christophe PLAGNIOL-VILLARD /* DEVCTL */
1482731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_BDEVICE 0x80
1492731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_FSDEV 0x40
1502731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_LSDEV 0x20
1512731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_VBUS 0x18
1522731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_VBUS_SHIFT 3
1532731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_HM 0x04
1542731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_HR 0x02
1552731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_DEVCTL_SESSION 0x01
1562731b9a8SJean-Christophe PLAGNIOL-VILLARD
1579bb47abfSAjay Kumar Gupta /* ULPI VBUSCONTROL */
1589bb47abfSAjay Kumar Gupta #define ULPI_USE_EXTVBUS 0x01
1599bb47abfSAjay Kumar Gupta #define ULPI_USE_EXTVBUSIND 0x02
1609bb47abfSAjay Kumar Gupta
1612731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TESTMODE */
1622731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_FORCE_HOST 0x80
1632731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_FIFO_ACCESS 0x40
1642731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_FORCE_FS 0x20
1652731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_FORCE_HS 0x10
1662731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_PACKET 0x08
1672731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_K 0x04
1682731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_J 0x02
1692731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TEST_SE0_NAK 0x01
1702731b9a8SJean-Christophe PLAGNIOL-VILLARD
1712731b9a8SJean-Christophe PLAGNIOL-VILLARD /* Allocate for double-packet buffering (effectively doubles assigned _SIZE) */
1722731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_FIFOSZ_DPB 0x10
1732731b9a8SJean-Christophe PLAGNIOL-VILLARD /* Allocation size (8, 16, 32, ... 4096) */
1742731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_FIFOSZ_SIZE 0x0f
1752731b9a8SJean-Christophe PLAGNIOL-VILLARD
1762731b9a8SJean-Christophe PLAGNIOL-VILLARD /* CSR0 */
1772731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_FLUSHFIFO 0x0100
1782731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_TXPKTRDY 0x0002
1792731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_RXPKTRDY 0x0001
1802731b9a8SJean-Christophe PLAGNIOL-VILLARD
1812731b9a8SJean-Christophe PLAGNIOL-VILLARD /* CSR0 in Peripheral mode */
1822731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_SVDSETUPEND 0x0080
1832731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_SVDRXPKTRDY 0x0040
1842731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_SENDSTALL 0x0020
1852731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_SETUPEND 0x0010
1862731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_DATAEND 0x0008
1872731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_SENTSTALL 0x0004
1882731b9a8SJean-Christophe PLAGNIOL-VILLARD
1892731b9a8SJean-Christophe PLAGNIOL-VILLARD /* CSR0 in Host mode */
1902731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_DIS_PING 0x0800
1912731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_WR_DATATOGGLE 0x0400 /* Set to allow setting: */
1922731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_DATATOGGLE 0x0200 /* Data toggle control */
1932731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_NAKTIMEOUT 0x0080
1942731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_STATUSPKT 0x0040
1952731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_REQPKT 0x0020
1962731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_ERROR 0x0010
1972731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_SETUPPKT 0x0008
1982731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_RXSTALL 0x0004
1992731b9a8SJean-Christophe PLAGNIOL-VILLARD
2002731b9a8SJean-Christophe PLAGNIOL-VILLARD /* CSR0 bits to avoid zeroing (write zero clears, write 1 ignored) */
2012731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_P_WZC_BITS \
2022731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_CSR0_P_SENTSTALL)
2032731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CSR0_H_WZC_BITS \
2042731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_CSR0_H_NAKTIMEOUT | MUSB_CSR0_H_RXSTALL \
2052731b9a8SJean-Christophe PLAGNIOL-VILLARD | MUSB_CSR0_RXPKTRDY)
2062731b9a8SJean-Christophe PLAGNIOL-VILLARD
2072731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TxType/RxType */
2082731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_SPEED 0xc0
2092731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_SPEED_SHIFT 6
2102731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_SPEED_HIGH 1
2112731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_SPEED_FULL 2
2122731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_SPEED_LOW 3
2132731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_PROTO 0x30 /* Implicitly zero for ep0 */
2142731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_PROTO_SHIFT 4
2152731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_REMOTE_END 0xf /* Implicitly zero for ep0 */
2162731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_PROTO_BULK 2
2172731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TYPE_PROTO_INTR 3
2182731b9a8SJean-Christophe PLAGNIOL-VILLARD
2192731b9a8SJean-Christophe PLAGNIOL-VILLARD /* CONFIGDATA */
2202731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_MPRXE 0x80 /* Auto bulk pkt combining */
2212731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_MPTXE 0x40 /* Auto bulk pkt splitting */
2222731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_BIGENDIAN 0x20
2232731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_HBRXE 0x10 /* HB-ISO for RX */
2242731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_HBTXE 0x08 /* HB-ISO for TX */
2252731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_DYNFIFO 0x04 /* Dynamic FIFO sizing */
2262731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_SOFTCONE 0x02 /* SoftConnect */
2272731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_CONFIGDATA_UTMIDW 0x01 /* Data width 0/1 => 8/16bits */
2282731b9a8SJean-Christophe PLAGNIOL-VILLARD
2292731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TXCSR in Peripheral and Host mode */
2302731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_AUTOSET 0x8000
2312731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_MODE 0x2000
2322731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_DMAENAB 0x1000
2332731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_FRCDATATOG 0x0800
2342731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_DMAMODE 0x0400
2352731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_CLRDATATOG 0x0040
2362731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_FLUSHFIFO 0x0008
2372731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_FIFONOTEMPTY 0x0002
2382731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_TXPKTRDY 0x0001
2392731b9a8SJean-Christophe PLAGNIOL-VILLARD
2402731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TXCSR in Peripheral mode */
2412731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_ISO 0x4000
2422731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_INCOMPTX 0x0080
2432731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_SENTSTALL 0x0020
2442731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_SENDSTALL 0x0010
2452731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_UNDERRUN 0x0004
2462731b9a8SJean-Christophe PLAGNIOL-VILLARD
2472731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TXCSR in Host mode */
2482731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_WR_DATATOGGLE 0x0200
2492731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_DATATOGGLE 0x0100
2502731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_NAKTIMEOUT 0x0080
2512731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_RXSTALL 0x0020
2522731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_ERROR 0x0004
2532731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_DATATOGGLE_SHIFT 8
2542731b9a8SJean-Christophe PLAGNIOL-VILLARD
2552731b9a8SJean-Christophe PLAGNIOL-VILLARD /* TXCSR bits to avoid zeroing (write zero clears, write 1 ignored) */
2562731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_P_WZC_BITS \
2572731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_TXCSR_P_INCOMPTX | MUSB_TXCSR_P_SENTSTALL \
2582731b9a8SJean-Christophe PLAGNIOL-VILLARD | MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_FIFONOTEMPTY)
2592731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_TXCSR_H_WZC_BITS \
2602731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_TXCSR_H_NAKTIMEOUT | MUSB_TXCSR_H_RXSTALL \
2612731b9a8SJean-Christophe PLAGNIOL-VILLARD | MUSB_TXCSR_H_ERROR | MUSB_TXCSR_FIFONOTEMPTY)
2622731b9a8SJean-Christophe PLAGNIOL-VILLARD
2632731b9a8SJean-Christophe PLAGNIOL-VILLARD /* RXCSR in Peripheral and Host mode */
2642731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_AUTOCLEAR 0x8000
2652731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_DMAENAB 0x2000
2662731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_DISNYET 0x1000
2672731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_PID_ERR 0x1000
2682731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_DMAMODE 0x0800
2692731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_INCOMPRX 0x0100
2702731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_CLRDATATOG 0x0080
2712731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_FLUSHFIFO 0x0010
2722731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_DATAERROR 0x0008
2732731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_FIFOFULL 0x0002
2742731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_RXPKTRDY 0x0001
2752731b9a8SJean-Christophe PLAGNIOL-VILLARD
2762731b9a8SJean-Christophe PLAGNIOL-VILLARD /* RXCSR in Peripheral mode */
2772731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_P_ISO 0x4000
2782731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_P_SENTSTALL 0x0040
2792731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_P_SENDSTALL 0x0020
2802731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_P_OVERRUN 0x0004
2812731b9a8SJean-Christophe PLAGNIOL-VILLARD
2822731b9a8SJean-Christophe PLAGNIOL-VILLARD /* RXCSR in Host mode */
2832731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_AUTOREQ 0x4000
2842731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_WR_DATATOGGLE 0x0400
2852731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_DATATOGGLE 0x0200
2862731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_RXSTALL 0x0040
2872731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_REQPKT 0x0020
2882731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_ERROR 0x0004
2892731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_S_RXCSR_H_DATATOGGLE 9
2902731b9a8SJean-Christophe PLAGNIOL-VILLARD
2912731b9a8SJean-Christophe PLAGNIOL-VILLARD /* RXCSR bits to avoid zeroing (write zero clears, write 1 ignored) */
2922731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_P_WZC_BITS \
2932731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_RXCSR_P_SENTSTALL | MUSB_RXCSR_P_OVERRUN \
2942731b9a8SJean-Christophe PLAGNIOL-VILLARD | MUSB_RXCSR_RXPKTRDY)
2952731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_RXCSR_H_WZC_BITS \
2962731b9a8SJean-Christophe PLAGNIOL-VILLARD (MUSB_RXCSR_H_RXSTALL | MUSB_RXCSR_H_ERROR \
2972731b9a8SJean-Christophe PLAGNIOL-VILLARD | MUSB_RXCSR_DATAERROR | MUSB_RXCSR_RXPKTRDY)
2982731b9a8SJean-Christophe PLAGNIOL-VILLARD
2992731b9a8SJean-Christophe PLAGNIOL-VILLARD /* HUBADDR */
3002731b9a8SJean-Christophe PLAGNIOL-VILLARD #define MUSB_HUBADDR_MULTI_TT 0x80
3012731b9a8SJean-Christophe PLAGNIOL-VILLARD
3022731b9a8SJean-Christophe PLAGNIOL-VILLARD /* Endpoint configuration information. Note: The value of endpoint fifo size
3032731b9a8SJean-Christophe PLAGNIOL-VILLARD * element should be either 8,16,32,64,128,256,512,1024,2048 or 4096. Other
3042731b9a8SJean-Christophe PLAGNIOL-VILLARD * values are not supported
3052731b9a8SJean-Christophe PLAGNIOL-VILLARD */
3062731b9a8SJean-Christophe PLAGNIOL-VILLARD struct musb_epinfo {
3072731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 epnum; /* endpoint number */
3082731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 epdir; /* endpoint direction */
3092731b9a8SJean-Christophe PLAGNIOL-VILLARD u16 epsize; /* endpoint FIFO size */
3102731b9a8SJean-Christophe PLAGNIOL-VILLARD };
3112731b9a8SJean-Christophe PLAGNIOL-VILLARD
3122731b9a8SJean-Christophe PLAGNIOL-VILLARD /*
3132731b9a8SJean-Christophe PLAGNIOL-VILLARD * Platform specific MUSB configuration. Any platform using the musb
3142731b9a8SJean-Christophe PLAGNIOL-VILLARD * functionality should create one instance of this structure in the
3152731b9a8SJean-Christophe PLAGNIOL-VILLARD * platform specific file.
3162731b9a8SJean-Christophe PLAGNIOL-VILLARD */
3172731b9a8SJean-Christophe PLAGNIOL-VILLARD struct musb_config {
3182731b9a8SJean-Christophe PLAGNIOL-VILLARD struct musb_regs *regs;
3192731b9a8SJean-Christophe PLAGNIOL-VILLARD u32 timeout;
3202731b9a8SJean-Christophe PLAGNIOL-VILLARD u8 musb_speed;
3219bb47abfSAjay Kumar Gupta u8 extvbus;
3222731b9a8SJean-Christophe PLAGNIOL-VILLARD };
3232731b9a8SJean-Christophe PLAGNIOL-VILLARD
3242731b9a8SJean-Christophe PLAGNIOL-VILLARD /* externally defined data */
3252731b9a8SJean-Christophe PLAGNIOL-VILLARD extern struct musb_config musb_cfg;
3262731b9a8SJean-Christophe PLAGNIOL-VILLARD extern struct musb_regs *musbr;
3272731b9a8SJean-Christophe PLAGNIOL-VILLARD
3282731b9a8SJean-Christophe PLAGNIOL-VILLARD /* exported functions */
3292731b9a8SJean-Christophe PLAGNIOL-VILLARD extern void musb_start(void);
3300228348eSMike Frysinger extern void musb_configure_ep(const struct musb_epinfo *epinfo, u8 cnt);
3312731b9a8SJean-Christophe PLAGNIOL-VILLARD extern void write_fifo(u8 ep, u32 length, void *fifo_data);
3322731b9a8SJean-Christophe PLAGNIOL-VILLARD extern void read_fifo(u8 ep, u32 length, void *fifo_data);
3332731b9a8SJean-Christophe PLAGNIOL-VILLARD
musb_read_ulpi_buscontrol(struct musb_regs * musbr)3349bb47abfSAjay Kumar Gupta static inline u8 musb_read_ulpi_buscontrol(struct musb_regs *musbr)
3359bb47abfSAjay Kumar Gupta {
3369bb47abfSAjay Kumar Gupta return readb(&musbr->ulpi_busctl);
3379bb47abfSAjay Kumar Gupta }
musb_write_ulpi_buscontrol(struct musb_regs * musbr,u8 val)3389bb47abfSAjay Kumar Gupta static inline void musb_write_ulpi_buscontrol(struct musb_regs *musbr, u8 val)
3399bb47abfSAjay Kumar Gupta {
3409bb47abfSAjay Kumar Gupta writeb(val, &musbr->ulpi_busctl);
3419bb47abfSAjay Kumar Gupta }
342e608f221SBryan Wu
3432731b9a8SJean-Christophe PLAGNIOL-VILLARD #endif /* __MUSB_HDRC_DEFS_H__ */
344