xref: /rk3399_rockchip-uboot/drivers/usb/musb/musb_core.h (revision ea3310e8aafad1da72d9a5e60568d725cbdefdbd)
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