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