linux/arch/mips/include/asm/mach-pmcs-msp71xx/msp_usb.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/******************************************************************
   3 * Copyright (c) 2000-2007 PMC-Sierra INC.
   4 *
   5 * PMC-SIERRA INC. DISCLAIMS ANY LIABILITY OF ANY KIND
   6 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS
   7 * SOFTWARE.
   8 */
   9#ifndef MSP_USB_H_
  10#define MSP_USB_H_
  11
  12#define NUM_USB_DEVS   1
  13
  14/* Register spaces for USB host 0 */
  15#define MSP_USB0_MAB_START      (MSP_USB0_BASE + 0x0)
  16#define MSP_USB0_MAB_END        (MSP_USB0_BASE + 0x17)
  17#define MSP_USB0_ID_START       (MSP_USB0_BASE + 0x40000)
  18#define MSP_USB0_ID_END         (MSP_USB0_BASE + 0x4008f)
  19#define MSP_USB0_HS_START       (MSP_USB0_BASE + 0x40100)
  20#define MSP_USB0_HS_END         (MSP_USB0_BASE + 0x401FF)
  21
  22/* Register spaces for USB host 1 */
  23#define MSP_USB1_MAB_START      (MSP_USB1_BASE + 0x0)
  24#define MSP_USB1_MAB_END        (MSP_USB1_BASE + 0x17)
  25#define MSP_USB1_ID_START       (MSP_USB1_BASE + 0x40000)
  26#define MSP_USB1_ID_END         (MSP_USB1_BASE + 0x4008f)
  27#define MSP_USB1_HS_START       (MSP_USB1_BASE + 0x40100)
  28#define MSP_USB1_HS_END         (MSP_USB1_BASE + 0x401ff)
  29
  30/* USB Identification registers */
  31struct msp_usbid_regs {
  32        u32 id;         /* 0x0: Identification register */
  33        u32 hwgen;      /* 0x4: General HW params */
  34        u32 hwhost;     /* 0x8: Host HW params */
  35        u32 hwdev;      /* 0xc: Device HW params */
  36        u32 hwtxbuf;    /* 0x10: Tx buffer HW params */
  37        u32 hwrxbuf;    /* 0x14: Rx buffer HW params */
  38        u32 reserved[26];
  39        u32 timer0_load; /* 0x80: General-purpose timer 0 load*/
  40        u32 timer0_ctrl; /* 0x84: General-purpose timer 0 control */
  41        u32 timer1_load; /* 0x88: General-purpose timer 1 load*/
  42        u32 timer1_ctrl; /* 0x8c: General-purpose timer 1 control */
  43};
  44
  45/* MSBus to AMBA registers */
  46struct msp_mab_regs {
  47        u32 isr;        /* 0x0: Interrupt status */
  48        u32 imr;        /* 0x4: Interrupt mask */
  49        u32 thcr0;      /* 0x8: Transaction header capture 0 */
  50        u32 thcr1;      /* 0xc: Transaction header capture 1 */
  51        u32 int_stat;   /* 0x10: Interrupt status summary */
  52        u32 phy_cfg;    /* 0x14: USB phy config */
  53};
  54
  55/* EHCI registers */
  56struct msp_usbhs_regs {
  57        u32 hciver;     /* 0x0: Version and offset to operational regs */
  58        u32 hcsparams;  /* 0x4: Host control structural parameters */
  59        u32 hccparams;  /* 0x8: Host control capability parameters */
  60        u32 reserved0[5];
  61        u32 dciver;     /* 0x20: Device interface version */
  62        u32 dccparams;  /* 0x24: Device control capability parameters */
  63        u32 reserved1[6];
  64        u32 cmd;        /* 0x40: USB command */
  65        u32 sts;        /* 0x44: USB status */
  66        u32 int_ena;    /* 0x48: USB interrupt enable */
  67        u32 frindex;    /* 0x4c: Frame index */
  68        u32 reserved3;
  69        union {
  70                struct {
  71                        u32 flb_addr; /* 0x54: Frame list base address */
  72                        u32 next_async_addr; /* 0x58: next asynchronous addr */
  73                        u32 ttctrl; /* 0x5c: embedded transaction translator
  74                                                        async buffer status */
  75                        u32 burst_size; /* 0x60: Controller burst size */
  76                        u32 tx_fifo_ctrl; /* 0x64: Tx latency FIFO tuning */
  77                        u32 reserved0[4];
  78                        u32 endpt_nak; /* 0x78: Endpoint NAK */
  79                        u32 endpt_nak_ena; /* 0x7c: Endpoint NAK enable */
  80                        u32 cfg_flag; /* 0x80: Config flag */
  81                        u32 port_sc1; /* 0x84: Port status & control 1 */
  82                        u32 reserved1[7];
  83                        u32 otgsc;      /* 0xa4: OTG status & control */
  84                        u32 mode;       /* 0xa8: USB controller mode */
  85                } host;
  86
  87                struct {
  88                        u32 dev_addr; /* 0x54: Device address */
  89                        u32 endpt_list_addr; /* 0x58: Endpoint list address */
  90                        u32 reserved0[7];
  91                        u32 endpt_nak;  /* 0x74 */
  92                        u32 endpt_nak_ctrl; /* 0x78 */
  93                        u32 cfg_flag; /* 0x80 */
  94                        u32 port_sc1; /* 0x84: Port status & control 1 */
  95                        u32 reserved[7];
  96                        u32 otgsc;      /* 0xa4: OTG status & control */
  97                        u32 mode;       /* 0xa8: USB controller mode */
  98                        u32 endpt_setup_stat; /* 0xac */
  99                        u32 endpt_prime; /* 0xb0 */
 100                        u32 endpt_flush; /* 0xb4 */
 101                        u32 endpt_stat; /* 0xb8 */
 102                        u32 endpt_complete; /* 0xbc */
 103                        u32 endpt_ctrl0; /* 0xc0 */
 104                        u32 endpt_ctrl1; /* 0xc4 */
 105                        u32 endpt_ctrl2; /* 0xc8 */
 106                        u32 endpt_ctrl3; /* 0xcc */
 107                } device;
 108        } u;
 109};
 110/*
 111 * Container for the more-generic platform_device.
 112 * This exists mainly as a way to map the non-standard register
 113 * spaces and make them accessible to the USB ISR.
 114 */
 115struct mspusb_device {
 116        struct msp_mab_regs   __iomem *mab_regs;
 117        struct msp_usbid_regs __iomem *usbid_regs;
 118        struct msp_usbhs_regs __iomem *usbhs_regs;
 119        struct platform_device dev;
 120};
 121
 122#define to_mspusb_device(x) container_of((x), struct mspusb_device, dev)
 123#define TO_HOST_ID(x) ((x) & 0x3)
 124#endif /*MSP_USB_H_*/
 125