xref: /plan9/sys/src/9/bcm/dwcotg.h (revision b4d1cf41cd5301e4c76aef9c04ddee28ac168a8e)
15d9de2d3SDavid du Colombier /*
25d9de2d3SDavid du Colombier  * USB host driver for BCM2835
35d9de2d3SDavid du Colombier  *	Synopsis DesignWare Core USB 2.0 OTG controller
45d9de2d3SDavid du Colombier  *
55d9de2d3SDavid du Colombier  * Device register definitions
65d9de2d3SDavid du Colombier  */
75d9de2d3SDavid du Colombier 
85d9de2d3SDavid du Colombier typedef unsigned int Reg;
95d9de2d3SDavid du Colombier typedef struct Dwcregs Dwcregs;
105d9de2d3SDavid du Colombier typedef struct Hostchan Hostchan;
115d9de2d3SDavid du Colombier 
125d9de2d3SDavid du Colombier enum {
135d9de2d3SDavid du Colombier 	Maxchans	= 16,	/* actual number of channels in ghwcfg2 */
145d9de2d3SDavid du Colombier };
155d9de2d3SDavid du Colombier 
165d9de2d3SDavid du Colombier struct Dwcregs {
175d9de2d3SDavid du Colombier 	/* Core global registers 0x000-0x140 */
185d9de2d3SDavid du Colombier 	Reg	gotgctl;	/* OTG Control and Status */
195d9de2d3SDavid du Colombier 	Reg	gotgint;	/* OTG Interrupt */
205d9de2d3SDavid du Colombier 	Reg	gahbcfg;	/* Core AHB Configuration */
215d9de2d3SDavid du Colombier 	Reg	gusbcfg;	/* Core USB Configuration */
225d9de2d3SDavid du Colombier 	Reg	grstctl;	/* Core Reset */
235d9de2d3SDavid du Colombier 	Reg	gintsts;	/* Core Interrupt */
245d9de2d3SDavid du Colombier 	Reg	gintmsk;	/* Core Interrupt Mask */
255d9de2d3SDavid du Colombier 	Reg	grxstsr;	/* Receive Status Queue Read (RO) */
265d9de2d3SDavid du Colombier 	Reg	grxstsp;	/* Receive Status Queue Read & POP (RO) */
275d9de2d3SDavid du Colombier 	Reg	grxfsiz;	/* Receive FIFO Size */
285d9de2d3SDavid du Colombier 	Reg	gnptxfsiz;	/* Non Periodic Transmit FIFO Size */
295d9de2d3SDavid du Colombier 	Reg	gnptxsts;	/* Non Periodic Transmit FIFO/Queue Status (RO) */
305d9de2d3SDavid du Colombier 	Reg	gi2cctl;	/* I2C Access */
315d9de2d3SDavid du Colombier 	Reg	gpvndctl;	/* PHY Vendor Control */
325d9de2d3SDavid du Colombier 	Reg	ggpio;		/* General Purpose Input/Output */
335d9de2d3SDavid du Colombier 	Reg	guid;		/* User ID */
345d9de2d3SDavid du Colombier 	Reg	gsnpsid;	/* Synopsys ID (RO) */
355d9de2d3SDavid du Colombier 	Reg	ghwcfg1;	/* User HW Config1 (RO) (DEVICE) */
365d9de2d3SDavid du Colombier 	Reg	ghwcfg2;	/* User HW Config2 (RO) */
375d9de2d3SDavid du Colombier 	Reg	ghwcfg3;	/* User HW Config3 (RO) */
385d9de2d3SDavid du Colombier 	Reg	ghwcfg4;	/* User HW Config4 (RO)*/
395d9de2d3SDavid du Colombier 	Reg	glpmcfg;	/* Core LPM Configuration */
405d9de2d3SDavid du Colombier 	Reg	gpwrdn;		/* Global PowerDn */
415d9de2d3SDavid du Colombier 	Reg	gdfifocfg;	/* Global DFIFO SW Config (DEVICE?) */
425d9de2d3SDavid du Colombier 	Reg	adpctl;		/* ADP Control */
435d9de2d3SDavid du Colombier 	Reg	reserved0[39];
445d9de2d3SDavid du Colombier 	Reg	hptxfsiz;	/* Host Periodic Transmit FIFO Size */
455d9de2d3SDavid du Colombier 	Reg	dtxfsiz[15];	/* Device Periodic Transmit FIFOs (DEVICE) */
465d9de2d3SDavid du Colombier 	char	pad0[0x400-0x140];
475d9de2d3SDavid du Colombier 
485d9de2d3SDavid du Colombier 	/* Host global registers 0x400-0x420 */
495d9de2d3SDavid du Colombier 	Reg	hcfg;		/* Configuration */
505d9de2d3SDavid du Colombier 	Reg	hfir;		/* Frame Interval */
515d9de2d3SDavid du Colombier 	Reg	hfnum;		/* Frame Number / Frame Remaining (RO) */
525d9de2d3SDavid du Colombier 	Reg	reserved1;
535d9de2d3SDavid du Colombier 	Reg	hptxsts;	/* Periodic Transmit FIFO / Queue Status */
545d9de2d3SDavid du Colombier 	Reg	haint;		/* All Channels Interrupt */
555d9de2d3SDavid du Colombier 	Reg	haintmsk;	/* All Channels Interrupt Mask */
565d9de2d3SDavid du Colombier 	Reg	hflbaddr;	/* Frame List Base Address */
575d9de2d3SDavid du Colombier 	char	pad1[0x440-0x420];
585d9de2d3SDavid du Colombier 
595d9de2d3SDavid du Colombier 	/* Host port register 0x440 */
605d9de2d3SDavid du Colombier 	Reg	hport0;		/* Host Port 0 Control and Status */
615d9de2d3SDavid du Colombier 	char	pad2[0x500-0x444];
625d9de2d3SDavid du Colombier 
635d9de2d3SDavid du Colombier 	/* Host channel specific registers 0x500-0x700 */
645d9de2d3SDavid du Colombier 	struct	Hostchan {
655d9de2d3SDavid du Colombier 		Reg	hcchar;	/* Characteristic */
665d9de2d3SDavid du Colombier 		Reg	hcsplt;	/* Split Control */
675d9de2d3SDavid du Colombier 		Reg	hcint;	/* Interrupt */
685d9de2d3SDavid du Colombier 		Reg	hcintmsk; /* Interrupt Mask */
695d9de2d3SDavid du Colombier 		Reg	hctsiz;	/* Transfer Size */
705d9de2d3SDavid du Colombier 		Reg	hcdma;	/* DMA Address */
715d9de2d3SDavid du Colombier 		Reg	reserved;
725d9de2d3SDavid du Colombier 		Reg	hcdmab;	/* DMA Buffer Address */
735d9de2d3SDavid du Colombier 	} hchan[Maxchans];
745d9de2d3SDavid du Colombier 	char	pad3[0xE00-0x700];
755d9de2d3SDavid du Colombier 
765d9de2d3SDavid du Colombier 	/* Power & clock gating control register 0xE00 */
775d9de2d3SDavid du Colombier 	Reg	pcgcctl;
785d9de2d3SDavid du Colombier };
795d9de2d3SDavid du Colombier 
805d9de2d3SDavid du Colombier enum {
815d9de2d3SDavid du Colombier 	/* gotgctl */
825d9de2d3SDavid du Colombier 	Sesreqscs	= 1<<0,
835d9de2d3SDavid du Colombier 	Sesreq		= 1<<1,
845d9de2d3SDavid du Colombier 	Vbvalidoven	= 1<<2,
855d9de2d3SDavid du Colombier 	Vbvalidovval	= 1<<3,
865d9de2d3SDavid du Colombier 	Avalidoven	= 1<<4,
875d9de2d3SDavid du Colombier 	Avalidovval	= 1<<5,
885d9de2d3SDavid du Colombier 	Bvalidoven	= 1<<6,
895d9de2d3SDavid du Colombier 	Bvalidovval	= 1<<7,
905d9de2d3SDavid du Colombier 	Hstnegscs	= 1<<8,
915d9de2d3SDavid du Colombier 	Hnpreq		= 1<<9,
925d9de2d3SDavid du Colombier 	Hstsethnpen	= 1<<10,
935d9de2d3SDavid du Colombier 	Devhnpen	= 1<<11,
945d9de2d3SDavid du Colombier 	Conidsts	= 1<<16,
955d9de2d3SDavid du Colombier 	Dbnctime	= 1<<17,
965d9de2d3SDavid du Colombier 	Asesvld		= 1<<18,
975d9de2d3SDavid du Colombier 	Bsesvld		= 1<<19,
985d9de2d3SDavid du Colombier 	Otgver		= 1<<20,
995d9de2d3SDavid du Colombier 	Multvalidbc	= 0x1F<<22,
1005d9de2d3SDavid du Colombier 	Chirpen		= 1<<27,
1015d9de2d3SDavid du Colombier 
1025d9de2d3SDavid du Colombier 	/* gotgint */
1035d9de2d3SDavid du Colombier 	Sesenddet	= 1<<2,
1045d9de2d3SDavid du Colombier 	Sesreqsucstschng= 1<<8,
1055d9de2d3SDavid du Colombier 	Hstnegsucstschng= 1<<9,
1065d9de2d3SDavid du Colombier 	Hstnegdet	= 1<<17,
1075d9de2d3SDavid du Colombier 	Adevtoutchng	= 1<<18,
1085d9de2d3SDavid du Colombier 	Debdone		= 1<<19,
1095d9de2d3SDavid du Colombier 	Mvic		= 1<<20,
1105d9de2d3SDavid du Colombier 
1115d9de2d3SDavid du Colombier 	/* gahbcfg */
1125d9de2d3SDavid du Colombier 	Glblintrmsk	= 1<<0,
1135d9de2d3SDavid du Colombier 	/* bits 1:4 redefined for BCM2835 */
1145d9de2d3SDavid du Colombier 	Axiburstlen	= 0x3<<1,
1155d9de2d3SDavid du Colombier 		BURST1		= 3<<1,
1165d9de2d3SDavid du Colombier 		BURST2		= 2<<1,
1175d9de2d3SDavid du Colombier 		BURST3		= 1<<1,
1185d9de2d3SDavid du Colombier 		BURST4		= 0<<1,
1195d9de2d3SDavid du Colombier 	Axiwaitwrites	= 1<<4,
1205d9de2d3SDavid du Colombier 	Dmaenable	= 1<<5,
1215d9de2d3SDavid du Colombier 	Nptxfemplvl	= 1<<7,
1225d9de2d3SDavid du Colombier 		NPTX_HALFEMPTY	= 0<<7,
1235d9de2d3SDavid du Colombier 		NPTX_EMPTY	= 1<<7,
1245d9de2d3SDavid du Colombier 	Ptxfemplvl	= 1<<8,
1255d9de2d3SDavid du Colombier 		PTX_HALFEMPTY	= 0<<8,
1265d9de2d3SDavid du Colombier 		PTX_EMPTY	= 1<<8,
1275d9de2d3SDavid du Colombier 	Remmemsupp	= 1<<21,
1285d9de2d3SDavid du Colombier 	Notialldmawrit	= 1<<22,
1295d9de2d3SDavid du Colombier 	Ahbsingle	= 1<<23,
1305d9de2d3SDavid du Colombier 
1315d9de2d3SDavid du Colombier 	/* gusbcfg */
1325d9de2d3SDavid du Colombier 	Toutcal		= 0x7<<0,
1335d9de2d3SDavid du Colombier 	Phyif		= 1<<3,
1345d9de2d3SDavid du Colombier 	Ulpi_utmi_sel	= 1<<4,
1355d9de2d3SDavid du Colombier 	Fsintf		= 1<<5,
1365d9de2d3SDavid du Colombier 		FsUnidir	= 0<<5,
1375d9de2d3SDavid du Colombier 		FsBidir		= 1<<5,
1385d9de2d3SDavid du Colombier 	Physel		= 1<<6,
1395d9de2d3SDavid du Colombier 		PhyHighspeed	= 0<<6,
1405d9de2d3SDavid du Colombier 		PhyFullspeed	= 1<<6,
1415d9de2d3SDavid du Colombier 	Ddrsel		= 1<<7,
1425d9de2d3SDavid du Colombier 	Srpcap		= 1<<8,
1435d9de2d3SDavid du Colombier 	Hnpcap		= 1<<9,
1445d9de2d3SDavid du Colombier 	Usbtrdtim	= 0xf<<10,
1455d9de2d3SDavid du Colombier 		OUsbtrdtim		= 10,
1465d9de2d3SDavid du Colombier 	Phylpwrclksel	= 1<<15,
1475d9de2d3SDavid du Colombier 	Otgutmifssel	= 1<<16,
1485d9de2d3SDavid du Colombier 	Ulpi_fsls	= 1<<17,
1495d9de2d3SDavid du Colombier 	Ulpi_auto_res	= 1<<18,
1505d9de2d3SDavid du Colombier 	Ulpi_clk_sus_m	= 1<<19,
1515d9de2d3SDavid du Colombier 	Ulpi_ext_vbus_drv= 1<<20,
1525d9de2d3SDavid du Colombier 	Ulpi_int_vbus_indicator= 1<<21,
1535d9de2d3SDavid du Colombier 	Term_sel_dl_pulse= 1<<22,
1545d9de2d3SDavid du Colombier 	Indicator_complement= 1<<23,
1555d9de2d3SDavid du Colombier 	Indicator_pass_through= 1<<24,
1565d9de2d3SDavid du Colombier 	Ulpi_int_prot_dis= 1<<25,
1575d9de2d3SDavid du Colombier 	Ic_usb_cap	= 1<<26,
1585d9de2d3SDavid du Colombier 	Ic_traffic_pull_remove= 1<<27,
1595d9de2d3SDavid du Colombier 	Tx_end_delay	= 1<<28,
1605d9de2d3SDavid du Colombier 	Force_host_mode	= 1<<29,
1615d9de2d3SDavid du Colombier 	Force_dev_mode	= 1<<30,
1625d9de2d3SDavid du Colombier 
1635d9de2d3SDavid du Colombier 	/* grstctl */
1645d9de2d3SDavid du Colombier 	Csftrst		= 1<<0,
1655d9de2d3SDavid du Colombier 	Hsftrst		= 1<<1,
1665d9de2d3SDavid du Colombier 	Hstfrm		= 1<<2,
1675d9de2d3SDavid du Colombier 	Intknqflsh	= 1<<3,
1685d9de2d3SDavid du Colombier 	Rxfflsh		= 1<<4,
1695d9de2d3SDavid du Colombier 	Txfflsh		= 1<<5,
1705d9de2d3SDavid du Colombier 	Txfnum		= 0x1f<<6,
1715d9de2d3SDavid du Colombier 		TXF_ALL		= 0x10<<6,
1725d9de2d3SDavid du Colombier 	Dmareq		= 1<<30,
1735d9de2d3SDavid du Colombier 	Ahbidle		= 1<<31,
1745d9de2d3SDavid du Colombier 
1755d9de2d3SDavid du Colombier 	/* gintsts, gintmsk */
1765d9de2d3SDavid du Colombier 	Curmode		= 1<<0,
1775d9de2d3SDavid du Colombier 		HOSTMODE	= 1<<0,
1785d9de2d3SDavid du Colombier 		DEVMODE		= 0<<0,
1795d9de2d3SDavid du Colombier 	Modemismatch	= 1<<1,
1805d9de2d3SDavid du Colombier 	Otgintr		= 1<<2,
1815d9de2d3SDavid du Colombier 	Sofintr		= 1<<3,
1825d9de2d3SDavid du Colombier 	Rxstsqlvl	= 1<<4,
1835d9de2d3SDavid du Colombier 	Nptxfempty	= 1<<5,
1845d9de2d3SDavid du Colombier 	Ginnakeff	= 1<<6,
1855d9de2d3SDavid du Colombier 	Goutnakeff	= 1<<7,
1865d9de2d3SDavid du Colombier 	Ulpickint	= 1<<8,
1875d9de2d3SDavid du Colombier 	I2cintr		= 1<<9,
1885d9de2d3SDavid du Colombier 	Erlysuspend	= 1<<10,
1895d9de2d3SDavid du Colombier 	Usbsuspend	= 1<<11,
1905d9de2d3SDavid du Colombier 	Usbreset	= 1<<12,
1915d9de2d3SDavid du Colombier 	Enumdone	= 1<<13,
1925d9de2d3SDavid du Colombier 	Isooutdrop	= 1<<14,
1935d9de2d3SDavid du Colombier 	Eopframe	= 1<<15,
1945d9de2d3SDavid du Colombier 	Restoredone	= 1<<16,
1955d9de2d3SDavid du Colombier 	Epmismatch	= 1<<17,
1965d9de2d3SDavid du Colombier 	Inepintr	= 1<<18,
1975d9de2d3SDavid du Colombier 	Outepintr	= 1<<19,
1985d9de2d3SDavid du Colombier 	Incomplisoin	= 1<<20,
1995d9de2d3SDavid du Colombier 	Incomplisoout	= 1<<21,
2005d9de2d3SDavid du Colombier 	Fetsusp		= 1<<22,
2015d9de2d3SDavid du Colombier 	Resetdet	= 1<<23,
2025d9de2d3SDavid du Colombier 	Portintr	= 1<<24,
2035d9de2d3SDavid du Colombier 	Hcintr		= 1<<25,
2045d9de2d3SDavid du Colombier 	Ptxfempty	= 1<<26,
2055d9de2d3SDavid du Colombier 	Lpmtranrcvd	= 1<<27,
2065d9de2d3SDavid du Colombier 	Conidstschng	= 1<<28,
2075d9de2d3SDavid du Colombier 	Disconnect	= 1<<29,
2085d9de2d3SDavid du Colombier 	Sessreqintr	= 1<<30,
2095d9de2d3SDavid du Colombier 	Wkupintr	= 1<<31,
2105d9de2d3SDavid du Colombier 
2115d9de2d3SDavid du Colombier 	/* grxsts[rp] */
2125d9de2d3SDavid du Colombier 	Chnum		= 0xf<<0,
2135d9de2d3SDavid du Colombier 	Bcnt		= 0x7ff<<4,
2145d9de2d3SDavid du Colombier 	Dpid		= 0x3<<15,
2155d9de2d3SDavid du Colombier 	Pktsts		= 0xf<<17,
2165d9de2d3SDavid du Colombier 		PKTSTS_IN		= 2<<17,
2175d9de2d3SDavid du Colombier 		PKTSTS_IN_XFER_COMP	= 3<<17,
2185d9de2d3SDavid du Colombier 		PKTSTS_DATA_TOGGLE_ERR	= 5<<17,
2195d9de2d3SDavid du Colombier 		PKTSTS_CH_HALTED	= 7<<17,
2205d9de2d3SDavid du Colombier 
2215d9de2d3SDavid du Colombier 	/* hptxfsiz, gnptxfsiz */
2225d9de2d3SDavid du Colombier 	Startaddr	= 0xffff<<0,
2235d9de2d3SDavid du Colombier 	Depth		= 0xffff<<16,
2245d9de2d3SDavid du Colombier 		ODepth		= 16,
2255d9de2d3SDavid du Colombier 
2265d9de2d3SDavid du Colombier 	/* gnptxsts */
2275d9de2d3SDavid du Colombier 	Nptxfspcavail	= 0xffff<<0,
2285d9de2d3SDavid du Colombier 	Nptxqspcavail	= 0xff<<16,
2295d9de2d3SDavid du Colombier 	Nptxqtop_terminate= 1<<24,
2305d9de2d3SDavid du Colombier 	Nptxqtop_token	= 0x3<<25,
2315d9de2d3SDavid du Colombier 	Nptxqtop_chnep	= 0xf<<27,
2325d9de2d3SDavid du Colombier 
2335d9de2d3SDavid du Colombier 	/* gpvndctl */
2345d9de2d3SDavid du Colombier 	Regdata		= 0xff<<0,
2355d9de2d3SDavid du Colombier 	Vctrl		= 0xff<<8,
2365d9de2d3SDavid du Colombier 	Regaddr16_21	= 0x3f<<16,
2375d9de2d3SDavid du Colombier 	Regwr		= 1<<22,
2385d9de2d3SDavid du Colombier 	Newregreq	= 1<<25,
2395d9de2d3SDavid du Colombier 	Vstsbsy		= 1<<26,
2405d9de2d3SDavid du Colombier 	Vstsdone	= 1<<27,
2415d9de2d3SDavid du Colombier 	Disulpidrvr	= 1<<31,
2425d9de2d3SDavid du Colombier 
2435d9de2d3SDavid du Colombier 	/* ggpio */
2445d9de2d3SDavid du Colombier 	Gpi		= 0xffff<<0,
2455d9de2d3SDavid du Colombier 	Gpo		= 0xffff<<16,
2465d9de2d3SDavid du Colombier 
2475d9de2d3SDavid du Colombier 	/* ghwcfg2 */
2485d9de2d3SDavid du Colombier 	Op_mode		= 0x7<<0,
2495d9de2d3SDavid du Colombier 		HNP_SRP_CAPABLE_OTG	= 0<<0,
2505d9de2d3SDavid du Colombier 		SRP_ONLY_CAPABLE_OTG	= 1<<0,
2515d9de2d3SDavid du Colombier 		NO_HNP_SRP_CAPABLE	= 2<<0,
2525d9de2d3SDavid du Colombier 		SRP_CAPABLE_DEVICE	= 3<<0,
2535d9de2d3SDavid du Colombier 		NO_SRP_CAPABLE_DEVICE	= 4<<0,
2545d9de2d3SDavid du Colombier 		SRP_CAPABLE_HOST	= 5<<0,
2555d9de2d3SDavid du Colombier 		NO_SRP_CAPABLE_HOST	= 6<<0,
2565d9de2d3SDavid du Colombier 	Architecture	= 0x3<<3,
2575d9de2d3SDavid du Colombier 		SLAVE_ONLY		= 0<<3,
2585d9de2d3SDavid du Colombier 		EXT_DMA			= 1<<3,
2595d9de2d3SDavid du Colombier 		INT_DMA			= 2<<3,
2605d9de2d3SDavid du Colombier 	Point2point	= 1<<5,
2615d9de2d3SDavid du Colombier 	Hs_phy_type	= 0x3<<6,
2625d9de2d3SDavid du Colombier 		PHY_NOT_SUPPORTED	= 0<<6,
2635d9de2d3SDavid du Colombier 		PHY_UTMI		= 1<<6,
2645d9de2d3SDavid du Colombier 		PHY_ULPI		= 2<<6,
2655d9de2d3SDavid du Colombier 		PHY_UTMI_ULPI		= 3<<6,
2665d9de2d3SDavid du Colombier 	Fs_phy_type	= 0x3<<8,
2675d9de2d3SDavid du Colombier 	Num_dev_ep	= 0xf<<10,
2685d9de2d3SDavid du Colombier 	Num_host_chan	= 0xf<<14,
2695d9de2d3SDavid du Colombier 		ONum_host_chan		= 14,
2705d9de2d3SDavid du Colombier 	Perio_ep_supported= 1<<18,
2715d9de2d3SDavid du Colombier 	Dynamic_fifo	= 1<<19,
2725d9de2d3SDavid du Colombier 	Nonperio_tx_q_depth= 0x3<<22,
2735d9de2d3SDavid du Colombier 	Host_perio_tx_q_depth= 0x3<<24,
2745d9de2d3SDavid du Colombier 	Dev_token_q_depth= 0x1f<<26,
2755d9de2d3SDavid du Colombier 	Otg_enable_ic_usb= 1<<31,
2765d9de2d3SDavid du Colombier 
2775d9de2d3SDavid du Colombier 	/* ghwcfg3 */
2785d9de2d3SDavid du Colombier 	Xfer_size_cntr_width	= 0xf<<0,
2795d9de2d3SDavid du Colombier 	Packet_size_cntr_width	= 0x7<<4,
2805d9de2d3SDavid du Colombier 	Otg_func		= 1<<7,
2815d9de2d3SDavid du Colombier 	I2c			= 1<<8,
2825d9de2d3SDavid du Colombier 	Vendor_ctrl_if		= 1<<9,
2835d9de2d3SDavid du Colombier 	Optional_features	= 1<<10,
2845d9de2d3SDavid du Colombier 	Synch_reset_type	= 1<<11,
2855d9de2d3SDavid du Colombier 	Adp_supp		= 1<<12,
2865d9de2d3SDavid du Colombier 	Otg_enable_hsic		= 1<<13,
2875d9de2d3SDavid du Colombier 	Bc_support		= 1<<14,
2885d9de2d3SDavid du Colombier 	Otg_lpm_en		= 1<<15,
2895d9de2d3SDavid du Colombier 	Dfifo_depth		= 0xffff<<16,
2905d9de2d3SDavid du Colombier 		ODfifo_depth		= 16,
2915d9de2d3SDavid du Colombier 
2925d9de2d3SDavid du Colombier 	/* ghwcfg4 */
2935d9de2d3SDavid du Colombier 	Num_dev_perio_in_ep	= 0xf<<0,
2945d9de2d3SDavid du Colombier 	Power_optimiz		= 1<<4,
2955d9de2d3SDavid du Colombier 	Min_ahb_freq		= 1<<5,
2965d9de2d3SDavid du Colombier 	Hiber			= 1<<6,
2975d9de2d3SDavid du Colombier 	Xhiber			= 1<<7,
2985d9de2d3SDavid du Colombier 	Utmi_phy_data_width	= 0x3<<14,
2995d9de2d3SDavid du Colombier 	Num_dev_mode_ctrl_ep	= 0xf<<16,
3005d9de2d3SDavid du Colombier 	Iddig_filt_en		= 1<<20,
3015d9de2d3SDavid du Colombier 	Vbus_valid_filt_en	= 1<<21,
3025d9de2d3SDavid du Colombier 	A_valid_filt_en		= 1<<22,
3035d9de2d3SDavid du Colombier 	B_valid_filt_en		= 1<<23,
3045d9de2d3SDavid du Colombier 	Session_end_filt_en	= 1<<24,
3055d9de2d3SDavid du Colombier 	Ded_fifo_en		= 1<<25,
3065d9de2d3SDavid du Colombier 	Num_in_eps		= 0xf<<26,
3075d9de2d3SDavid du Colombier 	Desc_dma		= 1<<30,
3085d9de2d3SDavid du Colombier 	Desc_dma_dyn		= 1<<31,
3095d9de2d3SDavid du Colombier 
3105d9de2d3SDavid du Colombier 	/* glpmcfg */
3115d9de2d3SDavid du Colombier 	Lpm_cap_en	= 1<<0,
3125d9de2d3SDavid du Colombier 	Appl_resp	= 1<<1,
3135d9de2d3SDavid du Colombier 	Hird		= 0xf<<2,
3145d9de2d3SDavid du Colombier 	Rem_wkup_en	= 1<<6,
3155d9de2d3SDavid du Colombier 	En_utmi_sleep	= 1<<7,
3165d9de2d3SDavid du Colombier 	Hird_thres	= 0x1f<<8,
3175d9de2d3SDavid du Colombier 	Lpm_resp	= 0x3<<13,
3185d9de2d3SDavid du Colombier 	Prt_sleep_sts	= 1<<15,
3195d9de2d3SDavid du Colombier 	Sleep_state_resumeok= 1<<16,
3205d9de2d3SDavid du Colombier 	Lpm_chan_index	= 0xf<<17,
3215d9de2d3SDavid du Colombier 	Retry_count	= 0x7<<21,
3225d9de2d3SDavid du Colombier 	Send_lpm	= 1<<24,
3235d9de2d3SDavid du Colombier 	Retry_count_sts	= 0x7<<25,
3245d9de2d3SDavid du Colombier 	Hsic_connect	= 1<<30,
3255d9de2d3SDavid du Colombier 	Inv_sel_hsic	= 1<<31,
3265d9de2d3SDavid du Colombier 
3275d9de2d3SDavid du Colombier 	/* gpwrdn */
3285d9de2d3SDavid du Colombier 	Pmuintsel	= 1<<0,
3295d9de2d3SDavid du Colombier 	Pmuactv		= 1<<1,
3305d9de2d3SDavid du Colombier 	Restore		= 1<<2,
3315d9de2d3SDavid du Colombier 	Pwrdnclmp	= 1<<3,
3325d9de2d3SDavid du Colombier 	Pwrdnrstn	= 1<<4,
3335d9de2d3SDavid du Colombier 	Pwrdnswtch	= 1<<5,
3345d9de2d3SDavid du Colombier 	Dis_vbus	= 1<<6,
3355d9de2d3SDavid du Colombier 	Lnstschng	= 1<<7,
3365d9de2d3SDavid du Colombier 	Lnstchng_msk	= 1<<8,
3375d9de2d3SDavid du Colombier 	Rst_det		= 1<<9,
3385d9de2d3SDavid du Colombier 	Rst_det_msk	= 1<<10,
3395d9de2d3SDavid du Colombier 	Disconn_det	= 1<<11,
3405d9de2d3SDavid du Colombier 	Disconn_det_msk	= 1<<12,
3415d9de2d3SDavid du Colombier 	Connect_det	= 1<<13,
3425d9de2d3SDavid du Colombier 	Connect_det_msk	= 1<<14,
3435d9de2d3SDavid du Colombier 	Srp_det		= 1<<15,
3445d9de2d3SDavid du Colombier 	Srp_det_msk	= 1<<16,
3455d9de2d3SDavid du Colombier 	Sts_chngint	= 1<<17,
3465d9de2d3SDavid du Colombier 	Sts_chngint_msk	= 1<<18,
3475d9de2d3SDavid du Colombier 	Linestate	= 0x3<<19,
3485d9de2d3SDavid du Colombier 	Idsts		= 1<<21,
3495d9de2d3SDavid du Colombier 	Bsessvld	= 1<<22,
3505d9de2d3SDavid du Colombier 	Adp_int		= 1<<23,
3515d9de2d3SDavid du Colombier 	Mult_val_id_bc	= 0x1f<<24,
3525d9de2d3SDavid du Colombier 
3535d9de2d3SDavid du Colombier 	/* gdfifocfg */
3545d9de2d3SDavid du Colombier 	Gdfifocfg	= 0xffff<<0,
3555d9de2d3SDavid du Colombier 	Epinfobase	= 0xffff<<16,
3565d9de2d3SDavid du Colombier 
3575d9de2d3SDavid du Colombier 	/* adpctl */
3585d9de2d3SDavid du Colombier 	Prb_dschg	= 0x3<<0,
3595d9de2d3SDavid du Colombier 	Prb_delta	= 0x3<<2,
3605d9de2d3SDavid du Colombier 	Prb_per		= 0x3<<4,
3615d9de2d3SDavid du Colombier 	Rtim		= 0x7ff<<6,
3625d9de2d3SDavid du Colombier 	Enaprb		= 1<<17,
3635d9de2d3SDavid du Colombier 	Enasns		= 1<<18,
3645d9de2d3SDavid du Colombier 	Adpres		= 1<<19,
3655d9de2d3SDavid du Colombier 	Adpen		= 1<<20,
3665d9de2d3SDavid du Colombier 	Adp_prb_int	= 1<<21,
3675d9de2d3SDavid du Colombier 	Adp_sns_int	= 1<<22,
3685d9de2d3SDavid du Colombier 	Adp_tmout_int	= 1<<23,
3695d9de2d3SDavid du Colombier 	Adp_prb_int_msk	= 1<<24,
3705d9de2d3SDavid du Colombier 	Adp_sns_int_msk	= 1<<25,
3715d9de2d3SDavid du Colombier 	Adp_tmout_int_msk= 1<<26,
3725d9de2d3SDavid du Colombier 	Ar		= 0x3<<27,
3735d9de2d3SDavid du Colombier 
3745d9de2d3SDavid du Colombier 	/* hcfg */
3755d9de2d3SDavid du Colombier 	Fslspclksel	= 0x3<<0,
3765d9de2d3SDavid du Colombier 		HCFG_30_60_MHZ	= 0<<0,
3775d9de2d3SDavid du Colombier 		HCFG_48_MHZ	= 1<<0,
3785d9de2d3SDavid du Colombier 		HCFG_6_MHZ	= 2<<0,
3795d9de2d3SDavid du Colombier 	Fslssupp	= 1<<2,
3805d9de2d3SDavid du Colombier 	Ena32khzs	= 1<<7,
3815d9de2d3SDavid du Colombier 	Resvalid	= 0xff<<8,
3825d9de2d3SDavid du Colombier 	Descdma		= 1<<23,
3835d9de2d3SDavid du Colombier 	Frlisten	= 0x3<<24,
3845d9de2d3SDavid du Colombier 	Modechtimen	= 1<<31,
3855d9de2d3SDavid du Colombier 
3865d9de2d3SDavid du Colombier 	/* hfir */
3875d9de2d3SDavid du Colombier 	Frint		= 0xffff<<0,
3885d9de2d3SDavid du Colombier 	Hfirrldctrl	= 1<<16,
3895d9de2d3SDavid du Colombier 
3905d9de2d3SDavid du Colombier 	/* hfnum */
3915d9de2d3SDavid du Colombier 	Frnum		= 0xffff<<0,
3925d9de2d3SDavid du Colombier 		MAX_FRNUM 	= 0x3FFF<<0,
3935d9de2d3SDavid du Colombier 	Frrem		= 0xffff<<16,
3945d9de2d3SDavid du Colombier 
3955d9de2d3SDavid du Colombier 	/* hptxsts */
3965d9de2d3SDavid du Colombier 	Ptxfspcavail	= 0xffff<<0,
3975d9de2d3SDavid du Colombier 	Ptxqspcavail	= 0xff<<16,
3985d9de2d3SDavid du Colombier 	Ptxqtop_terminate= 1<<24,
3995d9de2d3SDavid du Colombier 	Ptxqtop_token	= 0x3<<25,
4005d9de2d3SDavid du Colombier 	Ptxqtop_chnum	= 0xf<<27,
4015d9de2d3SDavid du Colombier 	Ptxqtop_odd	= 1<<31,
4025d9de2d3SDavid du Colombier 
4035d9de2d3SDavid du Colombier 	/* haint, haintmsk */
4045d9de2d3SDavid du Colombier #define CHANINT(n)	(1<<(n))
4055d9de2d3SDavid du Colombier 
4065d9de2d3SDavid du Colombier 	/* hport0 */
4075d9de2d3SDavid du Colombier 	Prtconnsts	= 1<<0,		/* connect status (RO) */
4085d9de2d3SDavid du Colombier 	Prtconndet	= 1<<1,		/* connect detected R/W1C) */
4095d9de2d3SDavid du Colombier 	Prtena		= 1<<2,		/* enable (R/W1C) */
4105d9de2d3SDavid du Colombier 	Prtenchng	= 1<<3,		/* enable/disable change (R/W1C) */
4115d9de2d3SDavid du Colombier 	Prtovrcurract	= 1<<4,		/* overcurrent active (RO) */
4125d9de2d3SDavid du Colombier 	Prtovrcurrchng	= 1<<5,		/* overcurrent change (R/W1C) */
4135d9de2d3SDavid du Colombier 	Prtres		= 1<<6,		/* resume */
4145d9de2d3SDavid du Colombier 	Prtsusp		= 1<<7,		/* suspend */
4155d9de2d3SDavid du Colombier 	Prtrst		= 1<<8,		/* reset */
4165d9de2d3SDavid du Colombier 	Prtlnsts	= 0x3<<10,	/* line state {D+,D-} (RO) */
4175d9de2d3SDavid du Colombier 	Prtpwr		= 1<<12,	/* power on */
4185d9de2d3SDavid du Colombier 	Prttstctl	= 0xf<<13,	/* test */
4195d9de2d3SDavid du Colombier 	Prtspd		= 0x3<<17,	/* speed (RO) */
4205d9de2d3SDavid du Colombier 		HIGHSPEED	= 0<<17,
4215d9de2d3SDavid du Colombier 		FULLSPEED	= 1<<17,
4225d9de2d3SDavid du Colombier 		LOWSPEED	= 2<<17,
4235d9de2d3SDavid du Colombier 
4245d9de2d3SDavid du Colombier 	/* hcchar */
4255d9de2d3SDavid du Colombier 	Mps		= 0x7ff<<0,	/* endpoint maximum packet size */
4265d9de2d3SDavid du Colombier 	Epnum		= 0xf<<11,	/* endpoint number */
4275d9de2d3SDavid du Colombier 		OEpnum		= 11,
4285d9de2d3SDavid du Colombier 	Epdir		= 1<<15,	/* endpoint direction */
4295d9de2d3SDavid du Colombier 		Epout		= 0<<15,
4305d9de2d3SDavid du Colombier 		Epin		= 1<<15,
4315d9de2d3SDavid du Colombier 	Lspddev		= 1<<17,	/* device is lowspeed */
4325d9de2d3SDavid du Colombier 	Eptype		= 0x3<<18,	/* endpoint type */
4335d9de2d3SDavid du Colombier 		Epctl		= 0<<18,
4345d9de2d3SDavid du Colombier 		Episo		= 1<<18,
4355d9de2d3SDavid du Colombier 		Epbulk		= 2<<18,
4365d9de2d3SDavid du Colombier 		Epintr		= 3<<18,
437*b4d1cf41SDavid du Colombier 	Multicnt	= 0x3<<20,	/* transactions per μframe */
438*b4d1cf41SDavid du Colombier 					/* or retries per periodic split */
4395d9de2d3SDavid du Colombier 		OMulticnt	= 20,
4405d9de2d3SDavid du Colombier 	Devaddr		= 0x7f<<22,	/* device address */
4415d9de2d3SDavid du Colombier 		ODevaddr	= 22,
4425d9de2d3SDavid du Colombier 	Oddfrm		= 1<<29,	/* xfer in odd frame (iso/interrupt) */
4435d9de2d3SDavid du Colombier 	Chdis		= 1<<30,	/* channel disable (write 1 only) */
4445d9de2d3SDavid du Colombier 	Chen		= 1<<31,	/* channel enable (write 1 only) */
4455d9de2d3SDavid du Colombier 
4465d9de2d3SDavid du Colombier 	/* hcsplt */
4475d9de2d3SDavid du Colombier 	Prtaddr		= 0x7f<<0,	/* port address of recipient */
4485d9de2d3SDavid du Colombier 					/* transaction translator */
4495d9de2d3SDavid du Colombier 	Hubaddr		= 0x7f<<7,	/* dev address of transaction */
4505d9de2d3SDavid du Colombier 					/* translator's hub */
4515d9de2d3SDavid du Colombier 		OHubaddr	= 7,
4525d9de2d3SDavid du Colombier 	Xactpos		= 0x3<<14,	/* payload's position within transaction */
4535d9de2d3SDavid du Colombier 		POS_MID		= 0<<14,
4545d9de2d3SDavid du Colombier 		POS_END		= 1<<14,
4555d9de2d3SDavid du Colombier 		POS_BEGIN	= 2<<14,
4565d9de2d3SDavid du Colombier 		POS_ALL		= 3<<14, /* all of data (<= 188 bytes) */
4575d9de2d3SDavid du Colombier 	Compsplt	= 1<<16,	/* do complete split */
4585d9de2d3SDavid du Colombier 	Spltena		= 1<<31,	/* channel enabled to do splits */
4595d9de2d3SDavid du Colombier 
4605d9de2d3SDavid du Colombier 	/* hcint, hcintmsk */
4615d9de2d3SDavid du Colombier 	Xfercomp	= 1<<0,		/* transfer completed without error */
4625d9de2d3SDavid du Colombier 	Chhltd		= 1<<1,		/* channel halted */
4635d9de2d3SDavid du Colombier 	Ahberr		= 1<<2,		/* AHB dma error */
4645d9de2d3SDavid du Colombier 	Stall		= 1<<3,
4655d9de2d3SDavid du Colombier 	Nak		= 1<<4,
4665d9de2d3SDavid du Colombier 	Ack		= 1<<5,
4675d9de2d3SDavid du Colombier 	Nyet		= 1<<6,
4685d9de2d3SDavid du Colombier 	Xacterr		= 1<<7,	/* transaction error (crc, t/o, bit stuff, eop) */
4695d9de2d3SDavid du Colombier 	Bblerr		= 1<<8,
4705d9de2d3SDavid du Colombier 	Frmovrun	= 1<<9,
4715d9de2d3SDavid du Colombier 	Datatglerr	= 1<<10,
4725d9de2d3SDavid du Colombier 	Bna		= 1<<11,
4735d9de2d3SDavid du Colombier 	Xcs_xact	= 1<<12,
4745d9de2d3SDavid du Colombier 	Frm_list_roll	= 1<<13,
4755d9de2d3SDavid du Colombier 
4765d9de2d3SDavid du Colombier 	/* hctsiz */
4775d9de2d3SDavid du Colombier 	Xfersize	= 0x7ffff<<0,	/* expected total bytes */
4785d9de2d3SDavid du Colombier 	Pktcnt		= 0x3ff<<19,	/* expected number of packets */
4795d9de2d3SDavid du Colombier 		OPktcnt		= 19,
4805d9de2d3SDavid du Colombier 	Pid		= 0x3<<29,	/* packet id for initial transaction */
4815d9de2d3SDavid du Colombier 		DATA0		= 0<<29,
4825d9de2d3SDavid du Colombier 		DATA1		= 2<<29,	/* sic */
4835d9de2d3SDavid du Colombier 		DATA2		= 1<<29,	/* sic */
4845d9de2d3SDavid du Colombier 		MDATA		= 3<<29,	/* (non-ctl ep) */
4855d9de2d3SDavid du Colombier 		SETUP		= 3<<29,	/* (ctl ep) */
4865d9de2d3SDavid du Colombier 	Dopng		= 1<<31,	/* do PING protocol */
4875d9de2d3SDavid du Colombier 
4885d9de2d3SDavid du Colombier 	/* pcgcctl */
4895d9de2d3SDavid du Colombier 	Stoppclk		= 1<<0,
4905d9de2d3SDavid du Colombier 	Gatehclk		= 1<<1,
4915d9de2d3SDavid du Colombier 	Pwrclmp			= 1<<2,
4925d9de2d3SDavid du Colombier 	Rstpdwnmodule		= 1<<3,
4935d9de2d3SDavid du Colombier 	Enbl_sleep_gating	= 1<<5,
4945d9de2d3SDavid du Colombier 	Phy_in_sleep		= 1<<6,
4955d9de2d3SDavid du Colombier 	Deep_sleep		= 1<<7,
4965d9de2d3SDavid du Colombier 	Resetaftsusp		= 1<<8,
4975d9de2d3SDavid du Colombier 	Restoremode		= 1<<9,
4985d9de2d3SDavid du Colombier 	Enbl_extnd_hiber	= 1<<10,
4995d9de2d3SDavid du Colombier 	Extnd_hiber_pwrclmp	= 1<<11,
5005d9de2d3SDavid du Colombier 	Extnd_hiber_switch	= 1<<12,
5015d9de2d3SDavid du Colombier 	Ess_reg_restored	= 1<<13,
5025d9de2d3SDavid du Colombier 	Prt_clk_sel		= 0x3<<14,
5035d9de2d3SDavid du Colombier 	Port_power		= 1<<16,
5045d9de2d3SDavid du Colombier 	Max_xcvrselect		= 0x3<<17,
5055d9de2d3SDavid du Colombier 	Max_termsel		= 1<<19,
5065d9de2d3SDavid du Colombier 	Mac_dev_addr		= 0x7f<<20,
5075d9de2d3SDavid du Colombier 	P2hd_dev_enum_spd	= 0x3<<27,
5085d9de2d3SDavid du Colombier 	P2hd_prt_spd		= 0x3<<29,
5095d9de2d3SDavid du Colombier 	If_dev_mode		= 1<<31,
5105d9de2d3SDavid du Colombier };
511