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