Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
0004  */
0005 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0006 #include <linux/kernel.h>
0007 #include <linux/module.h>
0008 #include <linux/pci.h>
0009 #include <linux/delay.h>
0010 #include <linux/errno.h>
0011 #include <linux/gpio/consumer.h>
0012 #include <linux/gpio/machine.h>
0013 #include <linux/list.h>
0014 #include <linux/interrupt.h>
0015 #include <linux/usb/ch9.h>
0016 #include <linux/usb/gadget.h>
0017 #include <linux/irq.h>
0018 
0019 #define PCH_VBUS_PERIOD     3000    /* VBUS polling period (msec) */
0020 #define PCH_VBUS_INTERVAL   10  /* VBUS polling interval (msec) */
0021 
0022 /* Address offset of Registers */
0023 #define UDC_EP_REG_SHIFT    0x20    /* Offset to next EP */
0024 
0025 #define UDC_EPCTL_ADDR      0x00    /* Endpoint control */
0026 #define UDC_EPSTS_ADDR      0x04    /* Endpoint status */
0027 #define UDC_BUFIN_FRAMENUM_ADDR 0x08    /* buffer size in / frame number out */
0028 #define UDC_BUFOUT_MAXPKT_ADDR  0x0C    /* buffer size out / maxpkt in */
0029 #define UDC_SUBPTR_ADDR     0x10    /* setup buffer pointer */
0030 #define UDC_DESPTR_ADDR     0x14    /* Data descriptor pointer */
0031 #define UDC_CONFIRM_ADDR    0x18    /* Write/Read confirmation */
0032 
0033 #define UDC_DEVCFG_ADDR     0x400   /* Device configuration */
0034 #define UDC_DEVCTL_ADDR     0x404   /* Device control */
0035 #define UDC_DEVSTS_ADDR     0x408   /* Device status */
0036 #define UDC_DEVIRQSTS_ADDR  0x40C   /* Device irq status */
0037 #define UDC_DEVIRQMSK_ADDR  0x410   /* Device irq mask */
0038 #define UDC_EPIRQSTS_ADDR   0x414   /* Endpoint irq status */
0039 #define UDC_EPIRQMSK_ADDR   0x418   /* Endpoint irq mask */
0040 #define UDC_DEVLPM_ADDR     0x41C   /* LPM control / status */
0041 #define UDC_CSR_BUSY_ADDR   0x4f0   /* UDC_CSR_BUSY Status register */
0042 #define UDC_SRST_ADDR       0x4fc   /* SOFT RESET register */
0043 #define UDC_CSR_ADDR        0x500   /* USB_DEVICE endpoint register */
0044 
0045 /* Endpoint control register */
0046 /* Bit position */
0047 #define UDC_EPCTL_MRXFLUSH      (1 << 12)
0048 #define UDC_EPCTL_RRDY          (1 << 9)
0049 #define UDC_EPCTL_CNAK          (1 << 8)
0050 #define UDC_EPCTL_SNAK          (1 << 7)
0051 #define UDC_EPCTL_NAK           (1 << 6)
0052 #define UDC_EPCTL_P         (1 << 3)
0053 #define UDC_EPCTL_F         (1 << 1)
0054 #define UDC_EPCTL_S         (1 << 0)
0055 #define UDC_EPCTL_ET_SHIFT      4
0056 /* Mask patern */
0057 #define UDC_EPCTL_ET_MASK       0x00000030
0058 /* Value for ET field */
0059 #define UDC_EPCTL_ET_CONTROL        0
0060 #define UDC_EPCTL_ET_ISO        1
0061 #define UDC_EPCTL_ET_BULK       2
0062 #define UDC_EPCTL_ET_INTERRUPT      3
0063 
0064 /* Endpoint status register */
0065 /* Bit position */
0066 #define UDC_EPSTS_XFERDONE      (1 << 27)
0067 #define UDC_EPSTS_RSS           (1 << 26)
0068 #define UDC_EPSTS_RCS           (1 << 25)
0069 #define UDC_EPSTS_TXEMPTY       (1 << 24)
0070 #define UDC_EPSTS_TDC           (1 << 10)
0071 #define UDC_EPSTS_HE            (1 << 9)
0072 #define UDC_EPSTS_MRXFIFO_EMP       (1 << 8)
0073 #define UDC_EPSTS_BNA           (1 << 7)
0074 #define UDC_EPSTS_IN            (1 << 6)
0075 #define UDC_EPSTS_OUT_SHIFT     4
0076 /* Mask patern */
0077 #define UDC_EPSTS_OUT_MASK      0x00000030
0078 #define UDC_EPSTS_ALL_CLR_MASK      0x1F0006F0
0079 /* Value for OUT field */
0080 #define UDC_EPSTS_OUT_SETUP     2
0081 #define UDC_EPSTS_OUT_DATA      1
0082 
0083 /* Device configuration register */
0084 /* Bit position */
0085 #define UDC_DEVCFG_CSR_PRG      (1 << 17)
0086 #define UDC_DEVCFG_SP           (1 << 3)
0087 /* SPD Valee */
0088 #define UDC_DEVCFG_SPD_HS       0x0
0089 #define UDC_DEVCFG_SPD_FS       0x1
0090 #define UDC_DEVCFG_SPD_LS       0x2
0091 
0092 /* Device control register */
0093 /* Bit position */
0094 #define UDC_DEVCTL_THLEN_SHIFT      24
0095 #define UDC_DEVCTL_BRLEN_SHIFT      16
0096 #define UDC_DEVCTL_CSR_DONE     (1 << 13)
0097 #define UDC_DEVCTL_SD           (1 << 10)
0098 #define UDC_DEVCTL_MODE         (1 << 9)
0099 #define UDC_DEVCTL_BREN         (1 << 8)
0100 #define UDC_DEVCTL_THE          (1 << 7)
0101 #define UDC_DEVCTL_DU           (1 << 4)
0102 #define UDC_DEVCTL_TDE          (1 << 3)
0103 #define UDC_DEVCTL_RDE          (1 << 2)
0104 #define UDC_DEVCTL_RES          (1 << 0)
0105 
0106 /* Device status register */
0107 /* Bit position */
0108 #define UDC_DEVSTS_TS_SHIFT     18
0109 #define UDC_DEVSTS_ENUM_SPEED_SHIFT 13
0110 #define UDC_DEVSTS_ALT_SHIFT        8
0111 #define UDC_DEVSTS_INTF_SHIFT       4
0112 #define UDC_DEVSTS_CFG_SHIFT        0
0113 /* Mask patern */
0114 #define UDC_DEVSTS_TS_MASK      0xfffc0000
0115 #define UDC_DEVSTS_ENUM_SPEED_MASK  0x00006000
0116 #define UDC_DEVSTS_ALT_MASK     0x00000f00
0117 #define UDC_DEVSTS_INTF_MASK        0x000000f0
0118 #define UDC_DEVSTS_CFG_MASK     0x0000000f
0119 /* value for maximum speed for SPEED field */
0120 #define UDC_DEVSTS_ENUM_SPEED_FULL  1
0121 #define UDC_DEVSTS_ENUM_SPEED_HIGH  0
0122 #define UDC_DEVSTS_ENUM_SPEED_LOW   2
0123 #define UDC_DEVSTS_ENUM_SPEED_FULLX 3
0124 
0125 /* Device irq register */
0126 /* Bit position */
0127 #define UDC_DEVINT_RWKP         (1 << 7)
0128 #define UDC_DEVINT_ENUM         (1 << 6)
0129 #define UDC_DEVINT_SOF          (1 << 5)
0130 #define UDC_DEVINT_US           (1 << 4)
0131 #define UDC_DEVINT_UR           (1 << 3)
0132 #define UDC_DEVINT_ES           (1 << 2)
0133 #define UDC_DEVINT_SI           (1 << 1)
0134 #define UDC_DEVINT_SC           (1 << 0)
0135 /* Mask patern */
0136 #define UDC_DEVINT_MSK          0x7f
0137 
0138 /* Endpoint irq register */
0139 /* Bit position */
0140 #define UDC_EPINT_IN_SHIFT      0
0141 #define UDC_EPINT_OUT_SHIFT     16
0142 #define UDC_EPINT_IN_EP0        (1 << 0)
0143 #define UDC_EPINT_OUT_EP0       (1 << 16)
0144 /* Mask patern */
0145 #define UDC_EPINT_MSK_DISABLE_ALL   0xffffffff
0146 
0147 /* UDC_CSR_BUSY Status register */
0148 /* Bit position */
0149 #define UDC_CSR_BUSY            (1 << 0)
0150 
0151 /* SOFT RESET register */
0152 /* Bit position */
0153 #define UDC_PSRST           (1 << 1)
0154 #define UDC_SRST            (1 << 0)
0155 
0156 /* USB_DEVICE endpoint register */
0157 /* Bit position */
0158 #define UDC_CSR_NE_NUM_SHIFT        0
0159 #define UDC_CSR_NE_DIR_SHIFT        4
0160 #define UDC_CSR_NE_TYPE_SHIFT       5
0161 #define UDC_CSR_NE_CFG_SHIFT        7
0162 #define UDC_CSR_NE_INTF_SHIFT       11
0163 #define UDC_CSR_NE_ALT_SHIFT        15
0164 #define UDC_CSR_NE_MAX_PKT_SHIFT    19
0165 /* Mask patern */
0166 #define UDC_CSR_NE_NUM_MASK     0x0000000f
0167 #define UDC_CSR_NE_DIR_MASK     0x00000010
0168 #define UDC_CSR_NE_TYPE_MASK        0x00000060
0169 #define UDC_CSR_NE_CFG_MASK     0x00000780
0170 #define UDC_CSR_NE_INTF_MASK        0x00007800
0171 #define UDC_CSR_NE_ALT_MASK     0x00078000
0172 #define UDC_CSR_NE_MAX_PKT_MASK     0x3ff80000
0173 
0174 #define PCH_UDC_CSR(ep) (UDC_CSR_ADDR + ep*4)
0175 #define PCH_UDC_EPINT(in, num)\
0176         (1 << (num + (in ? UDC_EPINT_IN_SHIFT : UDC_EPINT_OUT_SHIFT)))
0177 
0178 /* Index of endpoint */
0179 #define UDC_EP0IN_IDX       0
0180 #define UDC_EP0OUT_IDX      1
0181 #define UDC_EPIN_IDX(ep)    (ep * 2)
0182 #define UDC_EPOUT_IDX(ep)   (ep * 2 + 1)
0183 #define PCH_UDC_EP0     0
0184 #define PCH_UDC_EP1     1
0185 #define PCH_UDC_EP2     2
0186 #define PCH_UDC_EP3     3
0187 
0188 /* Number of endpoint */
0189 #define PCH_UDC_EP_NUM      32  /* Total number of EPs (16 IN,16 OUT) */
0190 #define PCH_UDC_USED_EP_NUM 4   /* EP number of EP's really used */
0191 /* Length Value */
0192 #define PCH_UDC_BRLEN       0x0F    /* Burst length */
0193 #define PCH_UDC_THLEN       0x1F    /* Threshold length */
0194 /* Value of EP Buffer Size */
0195 #define UDC_EP0IN_BUFF_SIZE 16
0196 #define UDC_EPIN_BUFF_SIZE  256
0197 #define UDC_EP0OUT_BUFF_SIZE    16
0198 #define UDC_EPOUT_BUFF_SIZE 256
0199 /* Value of EP maximum packet size */
0200 #define UDC_EP0IN_MAX_PKT_SIZE  64
0201 #define UDC_EP0OUT_MAX_PKT_SIZE 64
0202 #define UDC_BULK_MAX_PKT_SIZE   512
0203 
0204 /* DMA */
0205 #define DMA_DIR_RX      1   /* DMA for data receive */
0206 #define DMA_DIR_TX      2   /* DMA for data transmit */
0207 #define DMA_ADDR_INVALID    (~(dma_addr_t)0)
0208 #define UDC_DMA_MAXPACKET   65536   /* maximum packet size for DMA */
0209 
0210 /**
0211  * struct pch_udc_data_dma_desc - Structure to hold DMA descriptor information
0212  *                for data
0213  * @status:     Status quadlet
0214  * @reserved:       Reserved
0215  * @dataptr:        Buffer descriptor
0216  * @next:       Next descriptor
0217  */
0218 struct pch_udc_data_dma_desc {
0219     u32 status;
0220     u32 reserved;
0221     u32 dataptr;
0222     u32 next;
0223 };
0224 
0225 /**
0226  * struct pch_udc_stp_dma_desc - Structure to hold DMA descriptor information
0227  *               for control data
0228  * @status: Status
0229  * @reserved:   Reserved
0230  * @request:    Control Request
0231  */
0232 struct pch_udc_stp_dma_desc {
0233     u32 status;
0234     u32 reserved;
0235     struct usb_ctrlrequest request;
0236 } __attribute((packed));
0237 
0238 /* DMA status definitions */
0239 /* Buffer status */
0240 #define PCH_UDC_BUFF_STS    0xC0000000
0241 #define PCH_UDC_BS_HST_RDY  0x00000000
0242 #define PCH_UDC_BS_DMA_BSY  0x40000000
0243 #define PCH_UDC_BS_DMA_DONE 0x80000000
0244 #define PCH_UDC_BS_HST_BSY  0xC0000000
0245 /*  Rx/Tx Status */
0246 #define PCH_UDC_RXTX_STS    0x30000000
0247 #define PCH_UDC_RTS_SUCC    0x00000000
0248 #define PCH_UDC_RTS_DESERR  0x10000000
0249 #define PCH_UDC_RTS_BUFERR  0x30000000
0250 /* Last Descriptor Indication */
0251 #define PCH_UDC_DMA_LAST    0x08000000
0252 /* Number of Rx/Tx Bytes Mask */
0253 #define PCH_UDC_RXTX_BYTES  0x0000ffff
0254 
0255 /**
0256  * struct pch_udc_cfg_data - Structure to hold current configuration
0257  *               and interface information
0258  * @cur_cfg:    current configuration in use
0259  * @cur_intf:   current interface in use
0260  * @cur_alt:    current alt interface in use
0261  */
0262 struct pch_udc_cfg_data {
0263     u16 cur_cfg;
0264     u16 cur_intf;
0265     u16 cur_alt;
0266 };
0267 
0268 /**
0269  * struct pch_udc_ep - Structure holding a PCH USB device Endpoint information
0270  * @ep:         embedded ep request
0271  * @td_stp_phys:    for setup request
0272  * @td_data_phys:   for data request
0273  * @td_stp:     for setup request
0274  * @td_data:        for data request
0275  * @dev:        reference to device struct
0276  * @offset_addr:    offset address of ep register
0277  * @desc:       for this ep
0278  * @queue:      queue for requests
0279  * @num:        endpoint number
0280  * @in:         endpoint is IN
0281  * @halted:     endpoint halted?
0282  * @epsts:      Endpoint status
0283  */
0284 struct pch_udc_ep {
0285     struct usb_ep           ep;
0286     dma_addr_t          td_stp_phys;
0287     dma_addr_t          td_data_phys;
0288     struct pch_udc_stp_dma_desc *td_stp;
0289     struct pch_udc_data_dma_desc    *td_data;
0290     struct pch_udc_dev      *dev;
0291     unsigned long           offset_addr;
0292     struct list_head        queue;
0293     unsigned            num:5,
0294                     in:1,
0295                     halted:1;
0296     unsigned long           epsts;
0297 };
0298 
0299 /**
0300  * struct pch_vbus_gpio_data - Structure holding GPIO informaton
0301  *                  for detecting VBUS
0302  * @port:       gpio descriptor for the VBUS GPIO
0303  * @intr:       gpio interrupt number
0304  * @irq_work_fall:  Structure for WorkQueue
0305  * @irq_work_rise:  Structure for WorkQueue
0306  */
0307 struct pch_vbus_gpio_data {
0308     struct gpio_desc    *port;
0309     int         intr;
0310     struct work_struct  irq_work_fall;
0311     struct work_struct  irq_work_rise;
0312 };
0313 
0314 /**
0315  * struct pch_udc_dev - Structure holding complete information
0316  *          of the PCH USB device
0317  * @gadget:     gadget driver data
0318  * @driver:     reference to gadget driver bound
0319  * @pdev:       reference to the PCI device
0320  * @ep:         array of endpoints
0321  * @lock:       protects all state
0322  * @stall:      stall requested
0323  * @prot_stall:     protcol stall requested
0324  * @registered:     driver registered with system
0325  * @suspended:      driver in suspended state
0326  * @connected:      gadget driver associated
0327  * @vbus_session:   required vbus_session state
0328  * @set_cfg_not_acked:  pending acknowledgement 4 setup
0329  * @waiting_zlp_ack:    pending acknowledgement 4 ZLP
0330  * @data_requests:  DMA pool for data requests
0331  * @stp_requests:   DMA pool for setup requests
0332  * @dma_addr:       DMA pool for received
0333  * @setup_data:     Received setup data
0334  * @base_addr:      for mapped device memory
0335  * @bar:        PCI BAR used for mapped device memory
0336  * @cfg_data:       current cfg, intf, and alt in use
0337  * @vbus_gpio:      GPIO informaton for detecting VBUS
0338  */
0339 struct pch_udc_dev {
0340     struct usb_gadget       gadget;
0341     struct usb_gadget_driver    *driver;
0342     struct pci_dev          *pdev;
0343     struct pch_udc_ep       ep[PCH_UDC_EP_NUM];
0344     spinlock_t          lock; /* protects all state */
0345     unsigned
0346             stall:1,
0347             prot_stall:1,
0348             suspended:1,
0349             connected:1,
0350             vbus_session:1,
0351             set_cfg_not_acked:1,
0352             waiting_zlp_ack:1;
0353     struct dma_pool     *data_requests;
0354     struct dma_pool     *stp_requests;
0355     dma_addr_t          dma_addr;
0356     struct usb_ctrlrequest      setup_data;
0357     void __iomem            *base_addr;
0358     unsigned short          bar;
0359     struct pch_udc_cfg_data     cfg_data;
0360     struct pch_vbus_gpio_data   vbus_gpio;
0361 };
0362 #define to_pch_udc(g)   (container_of((g), struct pch_udc_dev, gadget))
0363 
0364 #define PCH_UDC_PCI_BAR_QUARK_X1000 0
0365 #define PCH_UDC_PCI_BAR         1
0366 
0367 #define PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC 0x0939
0368 #define PCI_DEVICE_ID_INTEL_EG20T_UDC       0x8808
0369 
0370 #define PCI_DEVICE_ID_ML7213_IOH_UDC    0x801D
0371 #define PCI_DEVICE_ID_ML7831_IOH_UDC    0x8808
0372 
0373 static const char   ep0_string[] = "ep0in";
0374 static DEFINE_SPINLOCK(udc_stall_spinlock); /* stall spin lock */
0375 static bool speed_fs;
0376 module_param_named(speed_fs, speed_fs, bool, S_IRUGO);
0377 MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
0378 
0379 /**
0380  * struct pch_udc_request - Structure holding a PCH USB device request packet
0381  * @req:        embedded ep request
0382  * @td_data_phys:   phys. address
0383  * @td_data:        first dma desc. of chain
0384  * @td_data_last:   last dma desc. of chain
0385  * @queue:      associated queue
0386  * @dma_going:      DMA in progress for request
0387  * @dma_done:       DMA completed for request
0388  * @chain_len:      chain length
0389  */
0390 struct pch_udc_request {
0391     struct usb_request      req;
0392     dma_addr_t          td_data_phys;
0393     struct pch_udc_data_dma_desc    *td_data;
0394     struct pch_udc_data_dma_desc    *td_data_last;
0395     struct list_head        queue;
0396     unsigned            dma_going:1,
0397                     dma_done:1;
0398     unsigned            chain_len;
0399 };
0400 
0401 static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
0402 {
0403     return ioread32(dev->base_addr + reg);
0404 }
0405 
0406 static inline void pch_udc_writel(struct pch_udc_dev *dev,
0407                     unsigned long val, unsigned long reg)
0408 {
0409     iowrite32(val, dev->base_addr + reg);
0410 }
0411 
0412 static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
0413                      unsigned long reg,
0414                      unsigned long bitmask)
0415 {
0416     pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
0417 }
0418 
0419 static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
0420                      unsigned long reg,
0421                      unsigned long bitmask)
0422 {
0423     pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
0424 }
0425 
0426 static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg)
0427 {
0428     return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
0429 }
0430 
0431 static inline void pch_udc_ep_writel(struct pch_udc_ep *ep,
0432                     unsigned long val, unsigned long reg)
0433 {
0434     iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
0435 }
0436 
0437 static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep,
0438                      unsigned long reg,
0439                      unsigned long bitmask)
0440 {
0441     pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg);
0442 }
0443 
0444 static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep,
0445                      unsigned long reg,
0446                      unsigned long bitmask)
0447 {
0448     pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg);
0449 }
0450 
0451 /**
0452  * pch_udc_csr_busy() - Wait till idle.
0453  * @dev:    Reference to pch_udc_dev structure
0454  */
0455 static void pch_udc_csr_busy(struct pch_udc_dev *dev)
0456 {
0457     unsigned int count = 200;
0458 
0459     /* Wait till idle */
0460     while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
0461         && --count)
0462         cpu_relax();
0463     if (!count)
0464         dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
0465 }
0466 
0467 /**
0468  * pch_udc_write_csr() - Write the command and status registers.
0469  * @dev:    Reference to pch_udc_dev structure
0470  * @val:    value to be written to CSR register
0471  * @ep:     end-point number
0472  */
0473 static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
0474                    unsigned int ep)
0475 {
0476     unsigned long reg = PCH_UDC_CSR(ep);
0477 
0478     pch_udc_csr_busy(dev);      /* Wait till idle */
0479     pch_udc_writel(dev, val, reg);
0480     pch_udc_csr_busy(dev);      /* Wait till idle */
0481 }
0482 
0483 /**
0484  * pch_udc_read_csr() - Read the command and status registers.
0485  * @dev:    Reference to pch_udc_dev structure
0486  * @ep:     end-point number
0487  *
0488  * Return codes:    content of CSR register
0489  */
0490 static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
0491 {
0492     unsigned long reg = PCH_UDC_CSR(ep);
0493 
0494     pch_udc_csr_busy(dev);      /* Wait till idle */
0495     pch_udc_readl(dev, reg);    /* Dummy read */
0496     pch_udc_csr_busy(dev);      /* Wait till idle */
0497     return pch_udc_readl(dev, reg);
0498 }
0499 
0500 /**
0501  * pch_udc_rmt_wakeup() - Initiate for remote wakeup
0502  * @dev:    Reference to pch_udc_dev structure
0503  */
0504 static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
0505 {
0506     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0507     mdelay(1);
0508     pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0509 }
0510 
0511 /**
0512  * pch_udc_get_frame() - Get the current frame from device status register
0513  * @dev:    Reference to pch_udc_dev structure
0514  * Retern   current frame
0515  */
0516 static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
0517 {
0518     u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
0519     return (frame & UDC_DEVSTS_TS_MASK) >> UDC_DEVSTS_TS_SHIFT;
0520 }
0521 
0522 /**
0523  * pch_udc_clear_selfpowered() - Clear the self power control
0524  * @dev:    Reference to pch_udc_regs structure
0525  */
0526 static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
0527 {
0528     pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
0529 }
0530 
0531 /**
0532  * pch_udc_set_selfpowered() - Set the self power control
0533  * @dev:    Reference to pch_udc_regs structure
0534  */
0535 static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
0536 {
0537     pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
0538 }
0539 
0540 /**
0541  * pch_udc_set_disconnect() - Set the disconnect status.
0542  * @dev:    Reference to pch_udc_regs structure
0543  */
0544 static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
0545 {
0546     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
0547 }
0548 
0549 /**
0550  * pch_udc_clear_disconnect() - Clear the disconnect status.
0551  * @dev:    Reference to pch_udc_regs structure
0552  */
0553 static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
0554 {
0555     /* Clear the disconnect */
0556     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0557     pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
0558     mdelay(1);
0559     /* Resume USB signalling */
0560     pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0561 }
0562 
0563 static void pch_udc_init(struct pch_udc_dev *dev);
0564 
0565 /**
0566  * pch_udc_reconnect() - This API initializes usb device controller,
0567  *                      and clear the disconnect status.
0568  * @dev:        Reference to pch_udc_regs structure
0569  */
0570 static void pch_udc_reconnect(struct pch_udc_dev *dev)
0571 {
0572     pch_udc_init(dev);
0573 
0574     /* enable device interrupts */
0575     /* pch_udc_enable_interrupts() */
0576     pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
0577             UDC_DEVINT_UR | UDC_DEVINT_ENUM);
0578 
0579     /* Clear the disconnect */
0580     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0581     pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
0582     mdelay(1);
0583     /* Resume USB signalling */
0584     pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
0585 }
0586 
0587 /**
0588  * pch_udc_vbus_session() - set or clearr the disconnect status.
0589  * @dev:    Reference to pch_udc_regs structure
0590  * @is_active:  Parameter specifying the action
0591  *        0:   indicating VBUS power is ending
0592  *        !0:  indicating VBUS power is starting
0593  */
0594 static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
0595                       int is_active)
0596 {
0597     unsigned long       iflags;
0598 
0599     spin_lock_irqsave(&dev->lock, iflags);
0600     if (is_active) {
0601         pch_udc_reconnect(dev);
0602         dev->vbus_session = 1;
0603     } else {
0604         if (dev->driver && dev->driver->disconnect) {
0605             spin_unlock_irqrestore(&dev->lock, iflags);
0606             dev->driver->disconnect(&dev->gadget);
0607             spin_lock_irqsave(&dev->lock, iflags);
0608         }
0609         pch_udc_set_disconnect(dev);
0610         dev->vbus_session = 0;
0611     }
0612     spin_unlock_irqrestore(&dev->lock, iflags);
0613 }
0614 
0615 /**
0616  * pch_udc_ep_set_stall() - Set the stall of endpoint
0617  * @ep:     Reference to structure of type pch_udc_ep_regs
0618  */
0619 static void pch_udc_ep_set_stall(struct pch_udc_ep *ep)
0620 {
0621     if (ep->in) {
0622         pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
0623         pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
0624     } else {
0625         pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
0626     }
0627 }
0628 
0629 /**
0630  * pch_udc_ep_clear_stall() - Clear the stall of endpoint
0631  * @ep:     Reference to structure of type pch_udc_ep_regs
0632  */
0633 static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep)
0634 {
0635     /* Clear the stall */
0636     pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
0637     /* Clear NAK by writing CNAK */
0638     pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
0639 }
0640 
0641 /**
0642  * pch_udc_ep_set_trfr_type() - Set the transfer type of endpoint
0643  * @ep:     Reference to structure of type pch_udc_ep_regs
0644  * @type:   Type of endpoint
0645  */
0646 static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep,
0647                     u8 type)
0648 {
0649     pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) &
0650                 UDC_EPCTL_ET_MASK), UDC_EPCTL_ADDR);
0651 }
0652 
0653 /**
0654  * pch_udc_ep_set_bufsz() - Set the maximum packet size for the endpoint
0655  * @ep:     Reference to structure of type pch_udc_ep_regs
0656  * @buf_size:   The buffer word size
0657  * @ep_in:  EP is IN
0658  */
0659 static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep,
0660                          u32 buf_size, u32 ep_in)
0661 {
0662     u32 data;
0663     if (ep_in) {
0664         data = pch_udc_ep_readl(ep, UDC_BUFIN_FRAMENUM_ADDR);
0665         data = (data & 0xffff0000) | (buf_size & 0xffff);
0666         pch_udc_ep_writel(ep, data, UDC_BUFIN_FRAMENUM_ADDR);
0667     } else {
0668         data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
0669         data = (buf_size << 16) | (data & 0xffff);
0670         pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
0671     }
0672 }
0673 
0674 /**
0675  * pch_udc_ep_set_maxpkt() - Set the Max packet size for the endpoint
0676  * @ep:     Reference to structure of type pch_udc_ep_regs
0677  * @pkt_size:   The packet byte size
0678  */
0679 static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size)
0680 {
0681     u32 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
0682     data = (data & 0xffff0000) | (pkt_size & 0xffff);
0683     pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
0684 }
0685 
0686 /**
0687  * pch_udc_ep_set_subptr() - Set the Setup buffer pointer for the endpoint
0688  * @ep:     Reference to structure of type pch_udc_ep_regs
0689  * @addr:   Address of the register
0690  */
0691 static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr)
0692 {
0693     pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR);
0694 }
0695 
0696 /**
0697  * pch_udc_ep_set_ddptr() - Set the Data descriptor pointer for the endpoint
0698  * @ep:     Reference to structure of type pch_udc_ep_regs
0699  * @addr:   Address of the register
0700  */
0701 static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr)
0702 {
0703     pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR);
0704 }
0705 
0706 /**
0707  * pch_udc_ep_set_pd() - Set the poll demand bit for the endpoint
0708  * @ep:     Reference to structure of type pch_udc_ep_regs
0709  */
0710 static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep)
0711 {
0712     pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P);
0713 }
0714 
0715 /**
0716  * pch_udc_ep_set_rrdy() - Set the receive ready bit for the endpoint
0717  * @ep:     Reference to structure of type pch_udc_ep_regs
0718  */
0719 static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep)
0720 {
0721     pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
0722 }
0723 
0724 /**
0725  * pch_udc_ep_clear_rrdy() - Clear the receive ready bit for the endpoint
0726  * @ep:     Reference to structure of type pch_udc_ep_regs
0727  */
0728 static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep)
0729 {
0730     pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
0731 }
0732 
0733 /**
0734  * pch_udc_set_dma() - Set the 'TDE' or RDE bit of device control
0735  *          register depending on the direction specified
0736  * @dev:    Reference to structure of type pch_udc_regs
0737  * @dir:    whether Tx or Rx
0738  *        DMA_DIR_RX: Receive
0739  *        DMA_DIR_TX: Transmit
0740  */
0741 static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
0742 {
0743     if (dir == DMA_DIR_RX)
0744         pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
0745     else if (dir == DMA_DIR_TX)
0746         pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
0747 }
0748 
0749 /**
0750  * pch_udc_clear_dma() - Clear the 'TDE' or RDE bit of device control
0751  *               register depending on the direction specified
0752  * @dev:    Reference to structure of type pch_udc_regs
0753  * @dir:    Whether Tx or Rx
0754  *        DMA_DIR_RX: Receive
0755  *        DMA_DIR_TX: Transmit
0756  */
0757 static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
0758 {
0759     if (dir == DMA_DIR_RX)
0760         pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
0761     else if (dir == DMA_DIR_TX)
0762         pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
0763 }
0764 
0765 /**
0766  * pch_udc_set_csr_done() - Set the device control register
0767  *              CSR done field (bit 13)
0768  * @dev:    reference to structure of type pch_udc_regs
0769  */
0770 static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
0771 {
0772     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
0773 }
0774 
0775 /**
0776  * pch_udc_disable_interrupts() - Disables the specified interrupts
0777  * @dev:    Reference to structure of type pch_udc_regs
0778  * @mask:   Mask to disable interrupts
0779  */
0780 static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
0781                         u32 mask)
0782 {
0783     pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
0784 }
0785 
0786 /**
0787  * pch_udc_enable_interrupts() - Enable the specified interrupts
0788  * @dev:    Reference to structure of type pch_udc_regs
0789  * @mask:   Mask to enable interrupts
0790  */
0791 static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
0792                        u32 mask)
0793 {
0794     pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
0795 }
0796 
0797 /**
0798  * pch_udc_disable_ep_interrupts() - Disable endpoint interrupts
0799  * @dev:    Reference to structure of type pch_udc_regs
0800  * @mask:   Mask to disable interrupts
0801  */
0802 static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
0803                         u32 mask)
0804 {
0805     pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
0806 }
0807 
0808 /**
0809  * pch_udc_enable_ep_interrupts() - Enable endpoint interrupts
0810  * @dev:    Reference to structure of type pch_udc_regs
0811  * @mask:   Mask to enable interrupts
0812  */
0813 static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
0814                           u32 mask)
0815 {
0816     pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
0817 }
0818 
0819 /**
0820  * pch_udc_read_device_interrupts() - Read the device interrupts
0821  * @dev:    Reference to structure of type pch_udc_regs
0822  * Retern   The device interrupts
0823  */
0824 static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
0825 {
0826     return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
0827 }
0828 
0829 /**
0830  * pch_udc_write_device_interrupts() - Write device interrupts
0831  * @dev:    Reference to structure of type pch_udc_regs
0832  * @val:    The value to be written to interrupt register
0833  */
0834 static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
0835                              u32 val)
0836 {
0837     pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
0838 }
0839 
0840 /**
0841  * pch_udc_read_ep_interrupts() - Read the endpoint interrupts
0842  * @dev:    Reference to structure of type pch_udc_regs
0843  * Retern   The endpoint interrupt
0844  */
0845 static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
0846 {
0847     return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
0848 }
0849 
0850 /**
0851  * pch_udc_write_ep_interrupts() - Clear endpoint interupts
0852  * @dev:    Reference to structure of type pch_udc_regs
0853  * @val:    The value to be written to interrupt register
0854  */
0855 static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
0856                          u32 val)
0857 {
0858     pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
0859 }
0860 
0861 /**
0862  * pch_udc_read_device_status() - Read the device status
0863  * @dev:    Reference to structure of type pch_udc_regs
0864  * Retern   The device status
0865  */
0866 static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
0867 {
0868     return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
0869 }
0870 
0871 /**
0872  * pch_udc_read_ep_control() - Read the endpoint control
0873  * @ep:     Reference to structure of type pch_udc_ep_regs
0874  * Retern   The endpoint control register value
0875  */
0876 static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep)
0877 {
0878     return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR);
0879 }
0880 
0881 /**
0882  * pch_udc_clear_ep_control() - Clear the endpoint control register
0883  * @ep:     Reference to structure of type pch_udc_ep_regs
0884  * Retern   The endpoint control register value
0885  */
0886 static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep)
0887 {
0888     return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR);
0889 }
0890 
0891 /**
0892  * pch_udc_read_ep_status() - Read the endpoint status
0893  * @ep:     Reference to structure of type pch_udc_ep_regs
0894  * Retern   The endpoint status
0895  */
0896 static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep)
0897 {
0898     return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR);
0899 }
0900 
0901 /**
0902  * pch_udc_clear_ep_status() - Clear the endpoint status
0903  * @ep:     Reference to structure of type pch_udc_ep_regs
0904  * @stat:   Endpoint status
0905  */
0906 static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep,
0907                      u32 stat)
0908 {
0909     return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR);
0910 }
0911 
0912 /**
0913  * pch_udc_ep_set_nak() - Set the bit 7 (SNAK field)
0914  *              of the endpoint control register
0915  * @ep:     Reference to structure of type pch_udc_ep_regs
0916  */
0917 static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep)
0918 {
0919     pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK);
0920 }
0921 
0922 /**
0923  * pch_udc_ep_clear_nak() - Set the bit 8 (CNAK field)
0924  *              of the endpoint control register
0925  * @ep:     reference to structure of type pch_udc_ep_regs
0926  */
0927 static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep)
0928 {
0929     unsigned int loopcnt = 0;
0930     struct pch_udc_dev *dev = ep->dev;
0931 
0932     if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK))
0933         return;
0934     if (!ep->in) {
0935         loopcnt = 10000;
0936         while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
0937             --loopcnt)
0938             udelay(5);
0939         if (!loopcnt)
0940             dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
0941                 __func__);
0942     }
0943     loopcnt = 10000;
0944     while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_NAK) && --loopcnt) {
0945         pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
0946         udelay(5);
0947     }
0948     if (!loopcnt)
0949         dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
0950             __func__, ep->num, (ep->in ? "in" : "out"));
0951 }
0952 
0953 /**
0954  * pch_udc_ep_fifo_flush() - Flush the endpoint fifo
0955  * @ep: reference to structure of type pch_udc_ep_regs
0956  * @dir:    direction of endpoint
0957  *        0:  endpoint is OUT
0958  *        !0: endpoint is IN
0959  */
0960 static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir)
0961 {
0962     if (dir) {  /* IN ep */
0963         pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
0964         return;
0965     }
0966 }
0967 
0968 /**
0969  * pch_udc_ep_enable() - This api enables endpoint
0970  * @ep:     reference to structure of type pch_udc_ep_regs
0971  * @cfg:    current configuration information
0972  * @desc:   endpoint descriptor
0973  */
0974 static void pch_udc_ep_enable(struct pch_udc_ep *ep,
0975                    struct pch_udc_cfg_data *cfg,
0976                    const struct usb_endpoint_descriptor *desc)
0977 {
0978     u32 val = 0;
0979     u32 buff_size = 0;
0980 
0981     pch_udc_ep_set_trfr_type(ep, desc->bmAttributes);
0982     if (ep->in)
0983         buff_size = UDC_EPIN_BUFF_SIZE;
0984     else
0985         buff_size = UDC_EPOUT_BUFF_SIZE;
0986     pch_udc_ep_set_bufsz(ep, buff_size, ep->in);
0987     pch_udc_ep_set_maxpkt(ep, usb_endpoint_maxp(desc));
0988     pch_udc_ep_set_nak(ep);
0989     pch_udc_ep_fifo_flush(ep, ep->in);
0990     /* Configure the endpoint */
0991     val = ep->num << UDC_CSR_NE_NUM_SHIFT | ep->in << UDC_CSR_NE_DIR_SHIFT |
0992           ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) <<
0993         UDC_CSR_NE_TYPE_SHIFT) |
0994           (cfg->cur_cfg << UDC_CSR_NE_CFG_SHIFT) |
0995           (cfg->cur_intf << UDC_CSR_NE_INTF_SHIFT) |
0996           (cfg->cur_alt << UDC_CSR_NE_ALT_SHIFT) |
0997           usb_endpoint_maxp(desc) << UDC_CSR_NE_MAX_PKT_SHIFT;
0998 
0999     if (ep->in)
1000         pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
1001     else
1002         pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
1003 }
1004 
1005 /**
1006  * pch_udc_ep_disable() - This api disables endpoint
1007  * @ep:     reference to structure of type pch_udc_ep_regs
1008  */
1009 static void pch_udc_ep_disable(struct pch_udc_ep *ep)
1010 {
1011     if (ep->in) {
1012         /* flush the fifo */
1013         pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR);
1014         /* set NAK */
1015         pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1016         pch_udc_ep_bit_set(ep, UDC_EPSTS_ADDR, UDC_EPSTS_IN);
1017     } else {
1018         /* set NAK */
1019         pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1020     }
1021     /* reset desc pointer */
1022     pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR);
1023 }
1024 
1025 /**
1026  * pch_udc_wait_ep_stall() - Wait EP stall.
1027  * @ep:     reference to structure of type pch_udc_ep_regs
1028  */
1029 static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep)
1030 {
1031     unsigned int count = 10000;
1032 
1033     /* Wait till idle */
1034     while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count)
1035         udelay(5);
1036     if (!count)
1037         dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
1038 }
1039 
1040 /**
1041  * pch_udc_init() - This API initializes usb device controller
1042  * @dev:    Rreference to pch_udc_regs structure
1043  */
1044 static void pch_udc_init(struct pch_udc_dev *dev)
1045 {
1046     if (NULL == dev) {
1047         pr_err("%s: Invalid address\n", __func__);
1048         return;
1049     }
1050     /* Soft Reset and Reset PHY */
1051     pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1052     pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR);
1053     mdelay(1);
1054     pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1055     pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
1056     mdelay(1);
1057     /* mask and clear all device interrupts */
1058     pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1059     pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK);
1060 
1061     /* mask and clear all ep interrupts */
1062     pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1063     pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1064 
1065     /* enable dynamic CSR programmingi, self powered and device speed */
1066     if (speed_fs)
1067         pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1068                 UDC_DEVCFG_SP | UDC_DEVCFG_SPD_FS);
1069     else /* defaul high speed */
1070         pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1071                 UDC_DEVCFG_SP | UDC_DEVCFG_SPD_HS);
1072     pch_udc_bit_set(dev, UDC_DEVCTL_ADDR,
1073             (PCH_UDC_THLEN << UDC_DEVCTL_THLEN_SHIFT) |
1074             (PCH_UDC_BRLEN << UDC_DEVCTL_BRLEN_SHIFT) |
1075             UDC_DEVCTL_MODE | UDC_DEVCTL_BREN |
1076             UDC_DEVCTL_THE);
1077 }
1078 
1079 /**
1080  * pch_udc_exit() - This API exit usb device controller
1081  * @dev:    Reference to pch_udc_regs structure
1082  */
1083 static void pch_udc_exit(struct pch_udc_dev *dev)
1084 {
1085     /* mask all device interrupts */
1086     pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1087     /* mask all ep interrupts */
1088     pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1089     /* put device in disconnected state */
1090     pch_udc_set_disconnect(dev);
1091 }
1092 
1093 /**
1094  * pch_udc_pcd_get_frame() - This API is invoked to get the current frame number
1095  * @gadget: Reference to the gadget driver
1096  *
1097  * Return codes:
1098  *  0:      Success
1099  *  -EINVAL:    If the gadget passed is NULL
1100  */
1101 static int pch_udc_pcd_get_frame(struct usb_gadget *gadget)
1102 {
1103     struct pch_udc_dev  *dev;
1104 
1105     if (!gadget)
1106         return -EINVAL;
1107     dev = container_of(gadget, struct pch_udc_dev, gadget);
1108     return pch_udc_get_frame(dev);
1109 }
1110 
1111 /**
1112  * pch_udc_pcd_wakeup() - This API is invoked to initiate a remote wakeup
1113  * @gadget: Reference to the gadget driver
1114  *
1115  * Return codes:
1116  *  0:      Success
1117  *  -EINVAL:    If the gadget passed is NULL
1118  */
1119 static int pch_udc_pcd_wakeup(struct usb_gadget *gadget)
1120 {
1121     struct pch_udc_dev  *dev;
1122     unsigned long       flags;
1123 
1124     if (!gadget)
1125         return -EINVAL;
1126     dev = container_of(gadget, struct pch_udc_dev, gadget);
1127     spin_lock_irqsave(&dev->lock, flags);
1128     pch_udc_rmt_wakeup(dev);
1129     spin_unlock_irqrestore(&dev->lock, flags);
1130     return 0;
1131 }
1132 
1133 /**
1134  * pch_udc_pcd_selfpowered() - This API is invoked to specify whether the device
1135  *              is self powered or not
1136  * @gadget: Reference to the gadget driver
1137  * @value:  Specifies self powered or not
1138  *
1139  * Return codes:
1140  *  0:      Success
1141  *  -EINVAL:    If the gadget passed is NULL
1142  */
1143 static int pch_udc_pcd_selfpowered(struct usb_gadget *gadget, int value)
1144 {
1145     struct pch_udc_dev  *dev;
1146 
1147     if (!gadget)
1148         return -EINVAL;
1149     gadget->is_selfpowered = (value != 0);
1150     dev = container_of(gadget, struct pch_udc_dev, gadget);
1151     if (value)
1152         pch_udc_set_selfpowered(dev);
1153     else
1154         pch_udc_clear_selfpowered(dev);
1155     return 0;
1156 }
1157 
1158 /**
1159  * pch_udc_pcd_pullup() - This API is invoked to make the device
1160  *              visible/invisible to the host
1161  * @gadget: Reference to the gadget driver
1162  * @is_on:  Specifies whether the pull up is made active or inactive
1163  *
1164  * Return codes:
1165  *  0:      Success
1166  *  -EINVAL:    If the gadget passed is NULL
1167  */
1168 static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
1169 {
1170     struct pch_udc_dev  *dev;
1171     unsigned long       iflags;
1172 
1173     if (!gadget)
1174         return -EINVAL;
1175 
1176     dev = container_of(gadget, struct pch_udc_dev, gadget);
1177 
1178     spin_lock_irqsave(&dev->lock, iflags);
1179     if (is_on) {
1180         pch_udc_reconnect(dev);
1181     } else {
1182         if (dev->driver && dev->driver->disconnect) {
1183             spin_unlock_irqrestore(&dev->lock, iflags);
1184             dev->driver->disconnect(&dev->gadget);
1185             spin_lock_irqsave(&dev->lock, iflags);
1186         }
1187         pch_udc_set_disconnect(dev);
1188     }
1189     spin_unlock_irqrestore(&dev->lock, iflags);
1190 
1191     return 0;
1192 }
1193 
1194 /**
1195  * pch_udc_pcd_vbus_session() - This API is used by a driver for an external
1196  *              transceiver (or GPIO) that
1197  *              detects a VBUS power session starting/ending
1198  * @gadget: Reference to the gadget driver
1199  * @is_active:  specifies whether the session is starting or ending
1200  *
1201  * Return codes:
1202  *  0:      Success
1203  *  -EINVAL:    If the gadget passed is NULL
1204  */
1205 static int pch_udc_pcd_vbus_session(struct usb_gadget *gadget, int is_active)
1206 {
1207     struct pch_udc_dev  *dev;
1208 
1209     if (!gadget)
1210         return -EINVAL;
1211     dev = container_of(gadget, struct pch_udc_dev, gadget);
1212     pch_udc_vbus_session(dev, is_active);
1213     return 0;
1214 }
1215 
1216 /**
1217  * pch_udc_pcd_vbus_draw() - This API is used by gadget drivers during
1218  *              SET_CONFIGURATION calls to
1219  *              specify how much power the device can consume
1220  * @gadget: Reference to the gadget driver
1221  * @mA:     specifies the current limit in 2mA unit
1222  *
1223  * Return codes:
1224  *  -EINVAL:    If the gadget passed is NULL
1225  *  -EOPNOTSUPP:
1226  */
1227 static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1228 {
1229     return -EOPNOTSUPP;
1230 }
1231 
1232 static int pch_udc_start(struct usb_gadget *g,
1233         struct usb_gadget_driver *driver);
1234 static int pch_udc_stop(struct usb_gadget *g);
1235 
1236 static const struct usb_gadget_ops pch_udc_ops = {
1237     .get_frame = pch_udc_pcd_get_frame,
1238     .wakeup = pch_udc_pcd_wakeup,
1239     .set_selfpowered = pch_udc_pcd_selfpowered,
1240     .pullup = pch_udc_pcd_pullup,
1241     .vbus_session = pch_udc_pcd_vbus_session,
1242     .vbus_draw = pch_udc_pcd_vbus_draw,
1243     .udc_start = pch_udc_start,
1244     .udc_stop = pch_udc_stop,
1245 };
1246 
1247 /**
1248  * pch_vbus_gpio_get_value() - This API gets value of GPIO port as VBUS status.
1249  * @dev:    Reference to the driver structure
1250  *
1251  * Return value:
1252  *  1: VBUS is high
1253  *  0: VBUS is low
1254  *     -1: It is not enable to detect VBUS using GPIO
1255  */
1256 static int pch_vbus_gpio_get_value(struct pch_udc_dev *dev)
1257 {
1258     int vbus = 0;
1259 
1260     if (dev->vbus_gpio.port)
1261         vbus = gpiod_get_value(dev->vbus_gpio.port) ? 1 : 0;
1262     else
1263         vbus = -1;
1264 
1265     return vbus;
1266 }
1267 
1268 /**
1269  * pch_vbus_gpio_work_fall() - This API keeps watch on VBUS becoming Low.
1270  *                             If VBUS is Low, disconnect is processed
1271  * @irq_work:   Structure for WorkQueue
1272  *
1273  */
1274 static void pch_vbus_gpio_work_fall(struct work_struct *irq_work)
1275 {
1276     struct pch_vbus_gpio_data *vbus_gpio = container_of(irq_work,
1277         struct pch_vbus_gpio_data, irq_work_fall);
1278     struct pch_udc_dev *dev =
1279         container_of(vbus_gpio, struct pch_udc_dev, vbus_gpio);
1280     int vbus_saved = -1;
1281     int vbus;
1282     int count;
1283 
1284     if (!dev->vbus_gpio.port)
1285         return;
1286 
1287     for (count = 0; count < (PCH_VBUS_PERIOD / PCH_VBUS_INTERVAL);
1288         count++) {
1289         vbus = pch_vbus_gpio_get_value(dev);
1290 
1291         if ((vbus_saved == vbus) && (vbus == 0)) {
1292             dev_dbg(&dev->pdev->dev, "VBUS fell");
1293             if (dev->driver
1294                 && dev->driver->disconnect) {
1295                 dev->driver->disconnect(
1296                     &dev->gadget);
1297             }
1298             if (dev->vbus_gpio.intr)
1299                 pch_udc_init(dev);
1300             else
1301                 pch_udc_reconnect(dev);
1302             return;
1303         }
1304         vbus_saved = vbus;
1305         mdelay(PCH_VBUS_INTERVAL);
1306     }
1307 }
1308 
1309 /**
1310  * pch_vbus_gpio_work_rise() - This API checks VBUS is High.
1311  *                             If VBUS is High, connect is processed
1312  * @irq_work:   Structure for WorkQueue
1313  *
1314  */
1315 static void pch_vbus_gpio_work_rise(struct work_struct *irq_work)
1316 {
1317     struct pch_vbus_gpio_data *vbus_gpio = container_of(irq_work,
1318         struct pch_vbus_gpio_data, irq_work_rise);
1319     struct pch_udc_dev *dev =
1320         container_of(vbus_gpio, struct pch_udc_dev, vbus_gpio);
1321     int vbus;
1322 
1323     if (!dev->vbus_gpio.port)
1324         return;
1325 
1326     mdelay(PCH_VBUS_INTERVAL);
1327     vbus = pch_vbus_gpio_get_value(dev);
1328 
1329     if (vbus == 1) {
1330         dev_dbg(&dev->pdev->dev, "VBUS rose");
1331         pch_udc_reconnect(dev);
1332         return;
1333     }
1334 }
1335 
1336 /**
1337  * pch_vbus_gpio_irq() - IRQ handler for GPIO interrupt for changing VBUS
1338  * @irq:    Interrupt request number
1339  * @data:   Reference to the device structure
1340  *
1341  * Return codes:
1342  *  0: Success
1343  *  -EINVAL: GPIO port is invalid or can't be initialized.
1344  */
1345 static irqreturn_t pch_vbus_gpio_irq(int irq, void *data)
1346 {
1347     struct pch_udc_dev *dev = (struct pch_udc_dev *)data;
1348 
1349     if (!dev->vbus_gpio.port || !dev->vbus_gpio.intr)
1350         return IRQ_NONE;
1351 
1352     if (pch_vbus_gpio_get_value(dev))
1353         schedule_work(&dev->vbus_gpio.irq_work_rise);
1354     else
1355         schedule_work(&dev->vbus_gpio.irq_work_fall);
1356 
1357     return IRQ_HANDLED;
1358 }
1359 
1360 /**
1361  * pch_vbus_gpio_init() - This API initializes GPIO port detecting VBUS.
1362  * @dev:        Reference to the driver structure
1363  *
1364  * Return codes:
1365  *  0: Success
1366  *  -EINVAL: GPIO port is invalid or can't be initialized.
1367  */
1368 static int pch_vbus_gpio_init(struct pch_udc_dev *dev)
1369 {
1370     struct device *d = &dev->pdev->dev;
1371     int err;
1372     int irq_num = 0;
1373     struct gpio_desc *gpiod;
1374 
1375     dev->vbus_gpio.port = NULL;
1376     dev->vbus_gpio.intr = 0;
1377 
1378     /* Retrieve the GPIO line from the USB gadget device */
1379     gpiod = devm_gpiod_get_optional(d, NULL, GPIOD_IN);
1380     if (IS_ERR(gpiod))
1381         return PTR_ERR(gpiod);
1382     gpiod_set_consumer_name(gpiod, "pch_vbus");
1383 
1384     dev->vbus_gpio.port = gpiod;
1385     INIT_WORK(&dev->vbus_gpio.irq_work_fall, pch_vbus_gpio_work_fall);
1386 
1387     irq_num = gpiod_to_irq(gpiod);
1388     if (irq_num > 0) {
1389         irq_set_irq_type(irq_num, IRQ_TYPE_EDGE_BOTH);
1390         err = request_irq(irq_num, pch_vbus_gpio_irq, 0,
1391             "vbus_detect", dev);
1392         if (!err) {
1393             dev->vbus_gpio.intr = irq_num;
1394             INIT_WORK(&dev->vbus_gpio.irq_work_rise,
1395                 pch_vbus_gpio_work_rise);
1396         } else {
1397             pr_err("%s: can't request irq %d, err: %d\n",
1398                 __func__, irq_num, err);
1399         }
1400     }
1401 
1402     return 0;
1403 }
1404 
1405 /**
1406  * pch_vbus_gpio_free() - This API frees resources of GPIO port
1407  * @dev:    Reference to the driver structure
1408  */
1409 static void pch_vbus_gpio_free(struct pch_udc_dev *dev)
1410 {
1411     if (dev->vbus_gpio.intr)
1412         free_irq(dev->vbus_gpio.intr, dev);
1413 }
1414 
1415 /**
1416  * complete_req() - This API is invoked from the driver when processing
1417  *          of a request is complete
1418  * @ep:     Reference to the endpoint structure
1419  * @req:    Reference to the request structure
1420  * @status: Indicates the success/failure of completion
1421  */
1422 static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
1423                                  int status)
1424     __releases(&dev->lock)
1425     __acquires(&dev->lock)
1426 {
1427     struct pch_udc_dev  *dev;
1428     unsigned halted = ep->halted;
1429 
1430     list_del_init(&req->queue);
1431 
1432     /* set new status if pending */
1433     if (req->req.status == -EINPROGRESS)
1434         req->req.status = status;
1435     else
1436         status = req->req.status;
1437 
1438     dev = ep->dev;
1439     usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in);
1440     ep->halted = 1;
1441     spin_unlock(&dev->lock);
1442     if (!ep->in)
1443         pch_udc_ep_clear_rrdy(ep);
1444     usb_gadget_giveback_request(&ep->ep, &req->req);
1445     spin_lock(&dev->lock);
1446     ep->halted = halted;
1447 }
1448 
1449 /**
1450  * empty_req_queue() - This API empties the request queue of an endpoint
1451  * @ep:     Reference to the endpoint structure
1452  */
1453 static void empty_req_queue(struct pch_udc_ep *ep)
1454 {
1455     struct pch_udc_request  *req;
1456 
1457     ep->halted = 1;
1458     while (!list_empty(&ep->queue)) {
1459         req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1460         complete_req(ep, req, -ESHUTDOWN);  /* Remove from list */
1461     }
1462 }
1463 
1464 /**
1465  * pch_udc_free_dma_chain() - This function frees the DMA chain created
1466  *              for the request
1467  * @dev:    Reference to the driver structure
1468  * @req:    Reference to the request to be freed
1469  *
1470  * Return codes:
1471  *  0: Success
1472  */
1473 static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
1474                    struct pch_udc_request *req)
1475 {
1476     struct pch_udc_data_dma_desc *td = req->td_data;
1477     unsigned i = req->chain_len;
1478 
1479     dma_addr_t addr2;
1480     dma_addr_t addr = (dma_addr_t)td->next;
1481     td->next = 0x00;
1482     for (; i > 1; --i) {
1483         /* do not free first desc., will be done by free for request */
1484         td = phys_to_virt(addr);
1485         addr2 = (dma_addr_t)td->next;
1486         dma_pool_free(dev->data_requests, td, addr);
1487         addr = addr2;
1488     }
1489     req->chain_len = 1;
1490 }
1491 
1492 /**
1493  * pch_udc_create_dma_chain() - This function creates or reinitializes
1494  *              a DMA chain
1495  * @ep:     Reference to the endpoint structure
1496  * @req:    Reference to the request
1497  * @buf_len:    The buffer length
1498  * @gfp_flags:  Flags to be used while mapping the data buffer
1499  *
1500  * Return codes:
1501  *  0:      success,
1502  *  -ENOMEM:    dma_pool_alloc invocation fails
1503  */
1504 static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
1505                     struct pch_udc_request *req,
1506                     unsigned long buf_len,
1507                     gfp_t gfp_flags)
1508 {
1509     struct pch_udc_data_dma_desc *td = req->td_data, *last;
1510     unsigned long bytes = req->req.length, i = 0;
1511     dma_addr_t dma_addr;
1512     unsigned len = 1;
1513 
1514     if (req->chain_len > 1)
1515         pch_udc_free_dma_chain(ep->dev, req);
1516 
1517     td->dataptr = req->req.dma;
1518     td->status = PCH_UDC_BS_HST_BSY;
1519 
1520     for (; ; bytes -= buf_len, ++len) {
1521         td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
1522         if (bytes <= buf_len)
1523             break;
1524         last = td;
1525         td = dma_pool_alloc(ep->dev->data_requests, gfp_flags,
1526                     &dma_addr);
1527         if (!td)
1528             goto nomem;
1529         i += buf_len;
1530         td->dataptr = req->td_data->dataptr + i;
1531         last->next = dma_addr;
1532     }
1533 
1534     req->td_data_last = td;
1535     td->status |= PCH_UDC_DMA_LAST;
1536     td->next = req->td_data_phys;
1537     req->chain_len = len;
1538     return 0;
1539 
1540 nomem:
1541     if (len > 1) {
1542         req->chain_len = len;
1543         pch_udc_free_dma_chain(ep->dev, req);
1544     }
1545     req->chain_len = 1;
1546     return -ENOMEM;
1547 }
1548 
1549 /**
1550  * prepare_dma() - This function creates and initializes the DMA chain
1551  *          for the request
1552  * @ep:     Reference to the endpoint structure
1553  * @req:    Reference to the request
1554  * @gfp:    Flag to be used while mapping the data buffer
1555  *
1556  * Return codes:
1557  *  0:      Success
1558  *  Other 0:    linux error number on failure
1559  */
1560 static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req,
1561               gfp_t gfp)
1562 {
1563     int retval;
1564 
1565     /* Allocate and create a DMA chain */
1566     retval = pch_udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp);
1567     if (retval) {
1568         pr_err("%s: could not create DMA chain:%d\n", __func__, retval);
1569         return retval;
1570     }
1571     if (ep->in)
1572         req->td_data->status = (req->td_data->status &
1573                 ~PCH_UDC_BUFF_STS) | PCH_UDC_BS_HST_RDY;
1574     return 0;
1575 }
1576 
1577 /**
1578  * process_zlp() - This function process zero length packets
1579  *          from the gadget driver
1580  * @ep:     Reference to the endpoint structure
1581  * @req:    Reference to the request
1582  */
1583 static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req)
1584 {
1585     struct pch_udc_dev  *dev = ep->dev;
1586 
1587     /* IN zlp's are handled by hardware */
1588     complete_req(ep, req, 0);
1589 
1590     /* if set_config or set_intf is waiting for ack by zlp
1591      * then set CSR_DONE
1592      */
1593     if (dev->set_cfg_not_acked) {
1594         pch_udc_set_csr_done(dev);
1595         dev->set_cfg_not_acked = 0;
1596     }
1597     /* setup command is ACK'ed now by zlp */
1598     if (!dev->stall && dev->waiting_zlp_ack) {
1599         pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
1600         dev->waiting_zlp_ack = 0;
1601     }
1602 }
1603 
1604 /**
1605  * pch_udc_start_rxrequest() - This function starts the receive requirement.
1606  * @ep:     Reference to the endpoint structure
1607  * @req:    Reference to the request structure
1608  */
1609 static void pch_udc_start_rxrequest(struct pch_udc_ep *ep,
1610                      struct pch_udc_request *req)
1611 {
1612     struct pch_udc_data_dma_desc *td_data;
1613 
1614     pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1615     td_data = req->td_data;
1616     /* Set the status bits for all descriptors */
1617     while (1) {
1618         td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1619                     PCH_UDC_BS_HST_RDY;
1620         if ((td_data->status & PCH_UDC_DMA_LAST) ==  PCH_UDC_DMA_LAST)
1621             break;
1622         td_data = phys_to_virt(td_data->next);
1623     }
1624     /* Write the descriptor pointer */
1625     pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1626     req->dma_going = 1;
1627     pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
1628     pch_udc_set_dma(ep->dev, DMA_DIR_RX);
1629     pch_udc_ep_clear_nak(ep);
1630     pch_udc_ep_set_rrdy(ep);
1631 }
1632 
1633 /**
1634  * pch_udc_pcd_ep_enable() - This API enables the endpoint. It is called
1635  *              from gadget driver
1636  * @usbep:  Reference to the USB endpoint structure
1637  * @desc:   Reference to the USB endpoint descriptor structure
1638  *
1639  * Return codes:
1640  *  0:      Success
1641  *  -EINVAL:
1642  *  -ESHUTDOWN:
1643  */
1644 static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
1645                     const struct usb_endpoint_descriptor *desc)
1646 {
1647     struct pch_udc_ep   *ep;
1648     struct pch_udc_dev  *dev;
1649     unsigned long       iflags;
1650 
1651     if (!usbep || (usbep->name == ep0_string) || !desc ||
1652         (desc->bDescriptorType != USB_DT_ENDPOINT) || !desc->wMaxPacketSize)
1653         return -EINVAL;
1654 
1655     ep = container_of(usbep, struct pch_udc_ep, ep);
1656     dev = ep->dev;
1657     if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1658         return -ESHUTDOWN;
1659     spin_lock_irqsave(&dev->lock, iflags);
1660     ep->ep.desc = desc;
1661     ep->halted = 0;
1662     pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1663     ep->ep.maxpacket = usb_endpoint_maxp(desc);
1664     pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1665     spin_unlock_irqrestore(&dev->lock, iflags);
1666     return 0;
1667 }
1668 
1669 /**
1670  * pch_udc_pcd_ep_disable() - This API disables endpoint and is called
1671  *              from gadget driver
1672  * @usbep:  Reference to the USB endpoint structure
1673  *
1674  * Return codes:
1675  *  0:      Success
1676  *  -EINVAL:
1677  */
1678 static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1679 {
1680     struct pch_udc_ep   *ep;
1681     unsigned long   iflags;
1682 
1683     if (!usbep)
1684         return -EINVAL;
1685 
1686     ep = container_of(usbep, struct pch_udc_ep, ep);
1687     if ((usbep->name == ep0_string) || !ep->ep.desc)
1688         return -EINVAL;
1689 
1690     spin_lock_irqsave(&ep->dev->lock, iflags);
1691     empty_req_queue(ep);
1692     ep->halted = 1;
1693     pch_udc_ep_disable(ep);
1694     pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1695     ep->ep.desc = NULL;
1696     INIT_LIST_HEAD(&ep->queue);
1697     spin_unlock_irqrestore(&ep->dev->lock, iflags);
1698     return 0;
1699 }
1700 
1701 /**
1702  * pch_udc_alloc_request() - This function allocates request structure.
1703  *              It is called by gadget driver
1704  * @usbep:  Reference to the USB endpoint structure
1705  * @gfp:    Flag to be used while allocating memory
1706  *
1707  * Return codes:
1708  *  NULL:           Failure
1709  *  Allocated address:  Success
1710  */
1711 static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
1712                           gfp_t gfp)
1713 {
1714     struct pch_udc_request      *req;
1715     struct pch_udc_ep       *ep;
1716     struct pch_udc_data_dma_desc    *dma_desc;
1717 
1718     if (!usbep)
1719         return NULL;
1720     ep = container_of(usbep, struct pch_udc_ep, ep);
1721     req = kzalloc(sizeof *req, gfp);
1722     if (!req)
1723         return NULL;
1724     req->req.dma = DMA_ADDR_INVALID;
1725     INIT_LIST_HEAD(&req->queue);
1726     if (!ep->dev->dma_addr)
1727         return &req->req;
1728     /* ep0 in requests are allocated from data pool here */
1729     dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp,
1730                   &req->td_data_phys);
1731     if (NULL == dma_desc) {
1732         kfree(req);
1733         return NULL;
1734     }
1735     /* prevent from using desc. - set HOST BUSY */
1736     dma_desc->status |= PCH_UDC_BS_HST_BSY;
1737     dma_desc->dataptr = lower_32_bits(DMA_ADDR_INVALID);
1738     req->td_data = dma_desc;
1739     req->td_data_last = dma_desc;
1740     req->chain_len = 1;
1741     return &req->req;
1742 }
1743 
1744 /**
1745  * pch_udc_free_request() - This function frees request structure.
1746  *              It is called by gadget driver
1747  * @usbep:  Reference to the USB endpoint structure
1748  * @usbreq: Reference to the USB request
1749  */
1750 static void pch_udc_free_request(struct usb_ep *usbep,
1751                   struct usb_request *usbreq)
1752 {
1753     struct pch_udc_ep   *ep;
1754     struct pch_udc_request  *req;
1755     struct pch_udc_dev  *dev;
1756 
1757     if (!usbep || !usbreq)
1758         return;
1759     ep = container_of(usbep, struct pch_udc_ep, ep);
1760     req = container_of(usbreq, struct pch_udc_request, req);
1761     dev = ep->dev;
1762     if (!list_empty(&req->queue))
1763         dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
1764             __func__, usbep->name, req);
1765     if (req->td_data != NULL) {
1766         if (req->chain_len > 1)
1767             pch_udc_free_dma_chain(ep->dev, req);
1768         dma_pool_free(ep->dev->data_requests, req->td_data,
1769                   req->td_data_phys);
1770     }
1771     kfree(req);
1772 }
1773 
1774 /**
1775  * pch_udc_pcd_queue() - This function queues a request packet. It is called
1776  *          by gadget driver
1777  * @usbep:  Reference to the USB endpoint structure
1778  * @usbreq: Reference to the USB request
1779  * @gfp:    Flag to be used while mapping the data buffer
1780  *
1781  * Return codes:
1782  *  0:          Success
1783  *  linux error number: Failure
1784  */
1785 static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
1786                                  gfp_t gfp)
1787 {
1788     int retval = 0;
1789     struct pch_udc_ep   *ep;
1790     struct pch_udc_dev  *dev;
1791     struct pch_udc_request  *req;
1792     unsigned long   iflags;
1793 
1794     if (!usbep || !usbreq || !usbreq->complete || !usbreq->buf)
1795         return -EINVAL;
1796     ep = container_of(usbep, struct pch_udc_ep, ep);
1797     dev = ep->dev;
1798     if (!ep->ep.desc && ep->num)
1799         return -EINVAL;
1800     req = container_of(usbreq, struct pch_udc_request, req);
1801     if (!list_empty(&req->queue))
1802         return -EINVAL;
1803     if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1804         return -ESHUTDOWN;
1805     spin_lock_irqsave(&dev->lock, iflags);
1806     /* map the buffer for dma */
1807     retval = usb_gadget_map_request(&dev->gadget, usbreq, ep->in);
1808     if (retval)
1809         goto probe_end;
1810     if (usbreq->length > 0) {
1811         retval = prepare_dma(ep, req, GFP_ATOMIC);
1812         if (retval)
1813             goto probe_end;
1814     }
1815     usbreq->actual = 0;
1816     usbreq->status = -EINPROGRESS;
1817     req->dma_done = 0;
1818     if (list_empty(&ep->queue) && !ep->halted) {
1819         /* no pending transfer, so start this req */
1820         if (!usbreq->length) {
1821             process_zlp(ep, req);
1822             retval = 0;
1823             goto probe_end;
1824         }
1825         if (!ep->in) {
1826             pch_udc_start_rxrequest(ep, req);
1827         } else {
1828             /*
1829             * For IN trfr the descriptors will be programmed and
1830             * P bit will be set when
1831             * we get an IN token
1832             */
1833             pch_udc_wait_ep_stall(ep);
1834             pch_udc_ep_clear_nak(ep);
1835             pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
1836         }
1837     }
1838     /* Now add this request to the ep's pending requests */
1839     if (req != NULL)
1840         list_add_tail(&req->queue, &ep->queue);
1841 
1842 probe_end:
1843     spin_unlock_irqrestore(&dev->lock, iflags);
1844     return retval;
1845 }
1846 
1847 /**
1848  * pch_udc_pcd_dequeue() - This function de-queues a request packet.
1849  *              It is called by gadget driver
1850  * @usbep:  Reference to the USB endpoint structure
1851  * @usbreq: Reference to the USB request
1852  *
1853  * Return codes:
1854  *  0:          Success
1855  *  linux error number: Failure
1856  */
1857 static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
1858                 struct usb_request *usbreq)
1859 {
1860     struct pch_udc_ep   *ep;
1861     struct pch_udc_request  *req;
1862     unsigned long       flags;
1863     int ret = -EINVAL;
1864 
1865     ep = container_of(usbep, struct pch_udc_ep, ep);
1866     if (!usbep || !usbreq || (!ep->ep.desc && ep->num))
1867         return ret;
1868     req = container_of(usbreq, struct pch_udc_request, req);
1869     spin_lock_irqsave(&ep->dev->lock, flags);
1870     /* make sure it's still queued on this endpoint */
1871     list_for_each_entry(req, &ep->queue, queue) {
1872         if (&req->req == usbreq) {
1873             pch_udc_ep_set_nak(ep);
1874             if (!list_empty(&req->queue))
1875                 complete_req(ep, req, -ECONNRESET);
1876             ret = 0;
1877             break;
1878         }
1879     }
1880     spin_unlock_irqrestore(&ep->dev->lock, flags);
1881     return ret;
1882 }
1883 
1884 /**
1885  * pch_udc_pcd_set_halt() - This function Sets or clear the endpoint halt
1886  *              feature
1887  * @usbep:  Reference to the USB endpoint structure
1888  * @halt:   Specifies whether to set or clear the feature
1889  *
1890  * Return codes:
1891  *  0:          Success
1892  *  linux error number: Failure
1893  */
1894 static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
1895 {
1896     struct pch_udc_ep   *ep;
1897     unsigned long iflags;
1898     int ret;
1899 
1900     if (!usbep)
1901         return -EINVAL;
1902     ep = container_of(usbep, struct pch_udc_ep, ep);
1903     if (!ep->ep.desc && !ep->num)
1904         return -EINVAL;
1905     if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1906         return -ESHUTDOWN;
1907     spin_lock_irqsave(&udc_stall_spinlock, iflags);
1908     if (list_empty(&ep->queue)) {
1909         if (halt) {
1910             if (ep->num == PCH_UDC_EP0)
1911                 ep->dev->stall = 1;
1912             pch_udc_ep_set_stall(ep);
1913             pch_udc_enable_ep_interrupts(
1914                 ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1915         } else {
1916             pch_udc_ep_clear_stall(ep);
1917         }
1918         ret = 0;
1919     } else {
1920         ret = -EAGAIN;
1921     }
1922     spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1923     return ret;
1924 }
1925 
1926 /**
1927  * pch_udc_pcd_set_wedge() - This function Sets or clear the endpoint
1928  *              halt feature
1929  * @usbep:  Reference to the USB endpoint structure
1930  *
1931  * Return codes:
1932  *  0:          Success
1933  *  linux error number: Failure
1934  */
1935 static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
1936 {
1937     struct pch_udc_ep   *ep;
1938     unsigned long iflags;
1939     int ret;
1940 
1941     if (!usbep)
1942         return -EINVAL;
1943     ep = container_of(usbep, struct pch_udc_ep, ep);
1944     if (!ep->ep.desc && !ep->num)
1945         return -EINVAL;
1946     if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1947         return -ESHUTDOWN;
1948     spin_lock_irqsave(&udc_stall_spinlock, iflags);
1949     if (!list_empty(&ep->queue)) {
1950         ret = -EAGAIN;
1951     } else {
1952         if (ep->num == PCH_UDC_EP0)
1953             ep->dev->stall = 1;
1954         pch_udc_ep_set_stall(ep);
1955         pch_udc_enable_ep_interrupts(ep->dev,
1956                          PCH_UDC_EPINT(ep->in, ep->num));
1957         ep->dev->prot_stall = 1;
1958         ret = 0;
1959     }
1960     spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1961     return ret;
1962 }
1963 
1964 /**
1965  * pch_udc_pcd_fifo_flush() - This function Flush the FIFO of specified endpoint
1966  * @usbep:  Reference to the USB endpoint structure
1967  */
1968 static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
1969 {
1970     struct pch_udc_ep  *ep;
1971 
1972     if (!usbep)
1973         return;
1974 
1975     ep = container_of(usbep, struct pch_udc_ep, ep);
1976     if (ep->ep.desc || !ep->num)
1977         pch_udc_ep_fifo_flush(ep, ep->in);
1978 }
1979 
1980 static const struct usb_ep_ops pch_udc_ep_ops = {
1981     .enable     = pch_udc_pcd_ep_enable,
1982     .disable    = pch_udc_pcd_ep_disable,
1983     .alloc_request  = pch_udc_alloc_request,
1984     .free_request   = pch_udc_free_request,
1985     .queue      = pch_udc_pcd_queue,
1986     .dequeue    = pch_udc_pcd_dequeue,
1987     .set_halt   = pch_udc_pcd_set_halt,
1988     .set_wedge  = pch_udc_pcd_set_wedge,
1989     .fifo_status    = NULL,
1990     .fifo_flush = pch_udc_pcd_fifo_flush,
1991 };
1992 
1993 /**
1994  * pch_udc_init_setup_buff() - This function initializes the SETUP buffer
1995  * @td_stp: Reference to the SETP buffer structure
1996  */
1997 static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc *td_stp)
1998 {
1999     static u32  pky_marker;
2000 
2001     if (!td_stp)
2002         return;
2003     td_stp->reserved = ++pky_marker;
2004     memset(&td_stp->request, 0xFF, sizeof td_stp->request);
2005     td_stp->status = PCH_UDC_BS_HST_RDY;
2006 }
2007 
2008 /**
2009  * pch_udc_start_next_txrequest() - This function starts
2010  *                  the next transmission requirement
2011  * @ep: Reference to the endpoint structure
2012  */
2013 static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep)
2014 {
2015     struct pch_udc_request *req;
2016     struct pch_udc_data_dma_desc *td_data;
2017 
2018     if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P)
2019         return;
2020 
2021     if (list_empty(&ep->queue))
2022         return;
2023 
2024     /* next request */
2025     req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2026     if (req->dma_going)
2027         return;
2028     if (!req->td_data)
2029         return;
2030     pch_udc_wait_ep_stall(ep);
2031     req->dma_going = 1;
2032     pch_udc_ep_set_ddptr(ep, 0);
2033     td_data = req->td_data;
2034     while (1) {
2035         td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
2036                    PCH_UDC_BS_HST_RDY;
2037         if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
2038             break;
2039         td_data = phys_to_virt(td_data->next);
2040     }
2041     pch_udc_ep_set_ddptr(ep, req->td_data_phys);
2042     pch_udc_set_dma(ep->dev, DMA_DIR_TX);
2043     pch_udc_ep_set_pd(ep);
2044     pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2045     pch_udc_ep_clear_nak(ep);
2046 }
2047 
2048 /**
2049  * pch_udc_complete_transfer() - This function completes a transfer
2050  * @ep:     Reference to the endpoint structure
2051  */
2052 static void pch_udc_complete_transfer(struct pch_udc_ep *ep)
2053 {
2054     struct pch_udc_request *req;
2055     struct pch_udc_dev *dev = ep->dev;
2056 
2057     if (list_empty(&ep->queue))
2058         return;
2059     req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2060     if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2061         PCH_UDC_BS_DMA_DONE)
2062         return;
2063     if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
2064          PCH_UDC_RTS_SUCC) {
2065         dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
2066             "epstatus=0x%08x\n",
2067                (req->td_data_last->status & PCH_UDC_RXTX_STS),
2068                (int)(ep->epsts));
2069         return;
2070     }
2071 
2072     req->req.actual = req->req.length;
2073     req->td_data_last->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
2074     req->td_data->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
2075     complete_req(ep, req, 0);
2076     req->dma_going = 0;
2077     if (!list_empty(&ep->queue)) {
2078         pch_udc_wait_ep_stall(ep);
2079         pch_udc_ep_clear_nak(ep);
2080         pch_udc_enable_ep_interrupts(ep->dev,
2081                          PCH_UDC_EPINT(ep->in, ep->num));
2082     } else {
2083         pch_udc_disable_ep_interrupts(ep->dev,
2084                           PCH_UDC_EPINT(ep->in, ep->num));
2085     }
2086 }
2087 
2088 /**
2089  * pch_udc_complete_receiver() - This function completes a receiver
2090  * @ep:     Reference to the endpoint structure
2091  */
2092 static void pch_udc_complete_receiver(struct pch_udc_ep *ep)
2093 {
2094     struct pch_udc_request *req;
2095     struct pch_udc_dev *dev = ep->dev;
2096     unsigned int count;
2097     struct pch_udc_data_dma_desc *td;
2098     dma_addr_t addr;
2099 
2100     if (list_empty(&ep->queue))
2101         return;
2102     /* next request */
2103     req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2104     pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
2105     pch_udc_ep_set_ddptr(ep, 0);
2106     if ((req->td_data_last->status & PCH_UDC_BUFF_STS) ==
2107         PCH_UDC_BS_DMA_DONE)
2108         td = req->td_data_last;
2109     else
2110         td = req->td_data;
2111 
2112     while (1) {
2113         if ((td->status & PCH_UDC_RXTX_STS) != PCH_UDC_RTS_SUCC) {
2114             dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x "
2115                 "epstatus=0x%08x\n",
2116                 (req->td_data->status & PCH_UDC_RXTX_STS),
2117                 (int)(ep->epsts));
2118             return;
2119         }
2120         if ((td->status & PCH_UDC_BUFF_STS) == PCH_UDC_BS_DMA_DONE)
2121             if (td->status & PCH_UDC_DMA_LAST) {
2122                 count = td->status & PCH_UDC_RXTX_BYTES;
2123                 break;
2124             }
2125         if (td == req->td_data_last) {
2126             dev_err(&dev->pdev->dev, "Not complete RX descriptor");
2127             return;
2128         }
2129         addr = (dma_addr_t)td->next;
2130         td = phys_to_virt(addr);
2131     }
2132     /* on 64k packets the RXBYTES field is zero */
2133     if (!count && (req->req.length == UDC_DMA_MAXPACKET))
2134         count = UDC_DMA_MAXPACKET;
2135     req->td_data->status |= PCH_UDC_DMA_LAST;
2136     td->status |= PCH_UDC_BS_HST_BSY;
2137 
2138     req->dma_going = 0;
2139     req->req.actual = count;
2140     complete_req(ep, req, 0);
2141     /* If there is a new/failed requests try that now */
2142     if (!list_empty(&ep->queue)) {
2143         req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2144         pch_udc_start_rxrequest(ep, req);
2145     }
2146 }
2147 
2148 /**
2149  * pch_udc_svc_data_in() - This function process endpoint interrupts
2150  *              for IN endpoints
2151  * @dev:    Reference to the device structure
2152  * @ep_num: Endpoint that generated the interrupt
2153  */
2154 static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
2155 {
2156     u32 epsts;
2157     struct pch_udc_ep   *ep;
2158 
2159     ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2160     epsts = ep->epsts;
2161     ep->epsts = 0;
2162 
2163     if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA  | UDC_EPSTS_HE |
2164                UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2165                UDC_EPSTS_RSS | UDC_EPSTS_XFERDONE)))
2166         return;
2167     if ((epsts & UDC_EPSTS_BNA))
2168         return;
2169     if (epsts & UDC_EPSTS_HE)
2170         return;
2171     if (epsts & UDC_EPSTS_RSS) {
2172         pch_udc_ep_set_stall(ep);
2173         pch_udc_enable_ep_interrupts(ep->dev,
2174                          PCH_UDC_EPINT(ep->in, ep->num));
2175     }
2176     if (epsts & UDC_EPSTS_RCS) {
2177         if (!dev->prot_stall) {
2178             pch_udc_ep_clear_stall(ep);
2179         } else {
2180             pch_udc_ep_set_stall(ep);
2181             pch_udc_enable_ep_interrupts(ep->dev,
2182                         PCH_UDC_EPINT(ep->in, ep->num));
2183         }
2184     }
2185     if (epsts & UDC_EPSTS_TDC)
2186         pch_udc_complete_transfer(ep);
2187     /* On IN interrupt, provide data if we have any */
2188     if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_RSS) &&
2189         !(epsts & UDC_EPSTS_TDC) && !(epsts & UDC_EPSTS_TXEMPTY))
2190         pch_udc_start_next_txrequest(ep);
2191 }
2192 
2193 /**
2194  * pch_udc_svc_data_out() - Handles interrupts from OUT endpoint
2195  * @dev:    Reference to the device structure
2196  * @ep_num: Endpoint that generated the interrupt
2197  */
2198 static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
2199 {
2200     u32         epsts;
2201     struct pch_udc_ep       *ep;
2202     struct pch_udc_request      *req = NULL;
2203 
2204     ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
2205     epsts = ep->epsts;
2206     ep->epsts = 0;
2207 
2208     if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) {
2209         /* next request */
2210         req = list_entry(ep->queue.next, struct pch_udc_request,
2211                  queue);
2212         if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2213              PCH_UDC_BS_DMA_DONE) {
2214             if (!req->dma_going)
2215                 pch_udc_start_rxrequest(ep, req);
2216             return;
2217         }
2218     }
2219     if (epsts & UDC_EPSTS_HE)
2220         return;
2221     if (epsts & UDC_EPSTS_RSS) {
2222         pch_udc_ep_set_stall(ep);
2223         pch_udc_enable_ep_interrupts(ep->dev,
2224                          PCH_UDC_EPINT(ep->in, ep->num));
2225     }
2226     if (epsts & UDC_EPSTS_RCS) {
2227         if (!dev->prot_stall) {
2228             pch_udc_ep_clear_stall(ep);
2229         } else {
2230             pch_udc_ep_set_stall(ep);
2231             pch_udc_enable_ep_interrupts(ep->dev,
2232                         PCH_UDC_EPINT(ep->in, ep->num));
2233         }
2234     }
2235     if (((epsts & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2236         UDC_EPSTS_OUT_DATA) {
2237         if (ep->dev->prot_stall == 1) {
2238             pch_udc_ep_set_stall(ep);
2239             pch_udc_enable_ep_interrupts(ep->dev,
2240                         PCH_UDC_EPINT(ep->in, ep->num));
2241         } else {
2242             pch_udc_complete_receiver(ep);
2243         }
2244     }
2245     if (list_empty(&ep->queue))
2246         pch_udc_set_dma(dev, DMA_DIR_RX);
2247 }
2248 
2249 static int pch_udc_gadget_setup(struct pch_udc_dev *dev)
2250     __must_hold(&dev->lock)
2251 {
2252     int rc;
2253 
2254     /* In some cases we can get an interrupt before driver gets setup */
2255     if (!dev->driver)
2256         return -ESHUTDOWN;
2257 
2258     spin_unlock(&dev->lock);
2259     rc = dev->driver->setup(&dev->gadget, &dev->setup_data);
2260     spin_lock(&dev->lock);
2261     return rc;
2262 }
2263 
2264 /**
2265  * pch_udc_svc_control_in() - Handle Control IN endpoint interrupts
2266  * @dev:    Reference to the device structure
2267  */
2268 static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
2269 {
2270     u32 epsts;
2271     struct pch_udc_ep   *ep;
2272     struct pch_udc_ep   *ep_out;
2273 
2274     ep = &dev->ep[UDC_EP0IN_IDX];
2275     ep_out = &dev->ep[UDC_EP0OUT_IDX];
2276     epsts = ep->epsts;
2277     ep->epsts = 0;
2278 
2279     if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
2280                UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2281                UDC_EPSTS_XFERDONE)))
2282         return;
2283     if ((epsts & UDC_EPSTS_BNA))
2284         return;
2285     if (epsts & UDC_EPSTS_HE)
2286         return;
2287     if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
2288         pch_udc_complete_transfer(ep);
2289         pch_udc_clear_dma(dev, DMA_DIR_RX);
2290         ep_out->td_data->status = (ep_out->td_data->status &
2291                     ~PCH_UDC_BUFF_STS) |
2292                     PCH_UDC_BS_HST_RDY;
2293         pch_udc_ep_clear_nak(ep_out);
2294         pch_udc_set_dma(dev, DMA_DIR_RX);
2295         pch_udc_ep_set_rrdy(ep_out);
2296     }
2297     /* On IN interrupt, provide data if we have any */
2298     if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_TDC) &&
2299          !(epsts & UDC_EPSTS_TXEMPTY))
2300         pch_udc_start_next_txrequest(ep);
2301 }
2302 
2303 /**
2304  * pch_udc_svc_control_out() - Routine that handle Control
2305  *                  OUT endpoint interrupts
2306  * @dev:    Reference to the device structure
2307  */
2308 static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
2309     __releases(&dev->lock)
2310     __acquires(&dev->lock)
2311 {
2312     u32 stat;
2313     int setup_supported;
2314     struct pch_udc_ep   *ep;
2315 
2316     ep = &dev->ep[UDC_EP0OUT_IDX];
2317     stat = ep->epsts;
2318     ep->epsts = 0;
2319 
2320     /* If setup data */
2321     if (((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2322         UDC_EPSTS_OUT_SETUP) {
2323         dev->stall = 0;
2324         dev->ep[UDC_EP0IN_IDX].halted = 0;
2325         dev->ep[UDC_EP0OUT_IDX].halted = 0;
2326         dev->setup_data = ep->td_stp->request;
2327         pch_udc_init_setup_buff(ep->td_stp);
2328         pch_udc_clear_dma(dev, DMA_DIR_RX);
2329         pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
2330                       dev->ep[UDC_EP0IN_IDX].in);
2331         if ((dev->setup_data.bRequestType & USB_DIR_IN))
2332             dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2333         else /* OUT */
2334             dev->gadget.ep0 = &ep->ep;
2335         /* If Mass storage Reset */
2336         if ((dev->setup_data.bRequestType == 0x21) &&
2337             (dev->setup_data.bRequest == 0xFF))
2338             dev->prot_stall = 0;
2339         /* call gadget with setup data received */
2340         setup_supported = pch_udc_gadget_setup(dev);
2341 
2342         if (dev->setup_data.bRequestType & USB_DIR_IN) {
2343             ep->td_data->status = (ep->td_data->status &
2344                         ~PCH_UDC_BUFF_STS) |
2345                         PCH_UDC_BS_HST_RDY;
2346             pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2347         }
2348         /* ep0 in returns data on IN phase */
2349         if (setup_supported >= 0 && setup_supported <
2350                         UDC_EP0IN_MAX_PKT_SIZE) {
2351             pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
2352             /* Gadget would have queued a request when
2353              * we called the setup */
2354             if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
2355                 pch_udc_set_dma(dev, DMA_DIR_RX);
2356                 pch_udc_ep_clear_nak(ep);
2357             }
2358         } else if (setup_supported < 0) {
2359             /* if unsupported request, then stall */
2360             pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
2361             pch_udc_enable_ep_interrupts(ep->dev,
2362                         PCH_UDC_EPINT(ep->in, ep->num));
2363             dev->stall = 0;
2364             pch_udc_set_dma(dev, DMA_DIR_RX);
2365         } else {
2366             dev->waiting_zlp_ack = 1;
2367         }
2368     } else if ((((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2369              UDC_EPSTS_OUT_DATA) && !dev->stall) {
2370         pch_udc_clear_dma(dev, DMA_DIR_RX);
2371         pch_udc_ep_set_ddptr(ep, 0);
2372         if (!list_empty(&ep->queue)) {
2373             ep->epsts = stat;
2374             pch_udc_svc_data_out(dev, PCH_UDC_EP0);
2375         }
2376         pch_udc_set_dma(dev, DMA_DIR_RX);
2377     }
2378     pch_udc_ep_set_rrdy(ep);
2379 }
2380 
2381 
2382 /**
2383  * pch_udc_postsvc_epinters() - This function enables end point interrupts
2384  *              and clears NAK status
2385  * @dev:    Reference to the device structure
2386  * @ep_num: End point number
2387  */
2388 static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
2389 {
2390     struct pch_udc_ep   *ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2391     if (list_empty(&ep->queue))
2392         return;
2393     pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
2394     pch_udc_ep_clear_nak(ep);
2395 }
2396 
2397 /**
2398  * pch_udc_read_all_epstatus() - This function read all endpoint status
2399  * @dev:    Reference to the device structure
2400  * @ep_intr:    Status of endpoint interrupt
2401  */
2402 static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
2403 {
2404     int i;
2405     struct pch_udc_ep   *ep;
2406 
2407     for (i = 0; i < PCH_UDC_USED_EP_NUM; i++) {
2408         /* IN */
2409         if (ep_intr & (0x1 << i)) {
2410             ep = &dev->ep[UDC_EPIN_IDX(i)];
2411             ep->epsts = pch_udc_read_ep_status(ep);
2412             pch_udc_clear_ep_status(ep, ep->epsts);
2413         }
2414         /* OUT */
2415         if (ep_intr & (0x10000 << i)) {
2416             ep = &dev->ep[UDC_EPOUT_IDX(i)];
2417             ep->epsts = pch_udc_read_ep_status(ep);
2418             pch_udc_clear_ep_status(ep, ep->epsts);
2419         }
2420     }
2421 }
2422 
2423 /**
2424  * pch_udc_activate_control_ep() - This function enables the control endpoints
2425  *                  for traffic after a reset
2426  * @dev:    Reference to the device structure
2427  */
2428 static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
2429 {
2430     struct pch_udc_ep   *ep;
2431     u32 val;
2432 
2433     /* Setup the IN endpoint */
2434     ep = &dev->ep[UDC_EP0IN_IDX];
2435     pch_udc_clear_ep_control(ep);
2436     pch_udc_ep_fifo_flush(ep, ep->in);
2437     pch_udc_ep_set_bufsz(ep, UDC_EP0IN_BUFF_SIZE, ep->in);
2438     pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE);
2439     /* Initialize the IN EP Descriptor */
2440     ep->td_data      = NULL;
2441     ep->td_stp       = NULL;
2442     ep->td_data_phys = 0;
2443     ep->td_stp_phys  = 0;
2444 
2445     /* Setup the OUT endpoint */
2446     ep = &dev->ep[UDC_EP0OUT_IDX];
2447     pch_udc_clear_ep_control(ep);
2448     pch_udc_ep_fifo_flush(ep, ep->in);
2449     pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in);
2450     pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE);
2451     val = UDC_EP0OUT_MAX_PKT_SIZE << UDC_CSR_NE_MAX_PKT_SHIFT;
2452     pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
2453 
2454     /* Initialize the SETUP buffer */
2455     pch_udc_init_setup_buff(ep->td_stp);
2456     /* Write the pointer address of dma descriptor */
2457     pch_udc_ep_set_subptr(ep, ep->td_stp_phys);
2458     /* Write the pointer address of Setup descriptor */
2459     pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2460 
2461     /* Initialize the dma descriptor */
2462     ep->td_data->status  = PCH_UDC_DMA_LAST;
2463     ep->td_data->dataptr = dev->dma_addr;
2464     ep->td_data->next    = ep->td_data_phys;
2465 
2466     pch_udc_ep_clear_nak(ep);
2467 }
2468 
2469 
2470 /**
2471  * pch_udc_svc_ur_interrupt() - This function handles a USB reset interrupt
2472  * @dev:    Reference to driver structure
2473  */
2474 static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2475 {
2476     struct pch_udc_ep   *ep;
2477     int i;
2478 
2479     pch_udc_clear_dma(dev, DMA_DIR_TX);
2480     pch_udc_clear_dma(dev, DMA_DIR_RX);
2481     /* Mask all endpoint interrupts */
2482     pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2483     /* clear all endpoint interrupts */
2484     pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2485 
2486     for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2487         ep = &dev->ep[i];
2488         pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK);
2489         pch_udc_clear_ep_control(ep);
2490         pch_udc_ep_set_ddptr(ep, 0);
2491         pch_udc_write_csr(ep->dev, 0x00, i);
2492     }
2493     dev->stall = 0;
2494     dev->prot_stall = 0;
2495     dev->waiting_zlp_ack = 0;
2496     dev->set_cfg_not_acked = 0;
2497 
2498     /* disable ep to empty req queue. Skip the control EP's */
2499     for (i = 0; i < (PCH_UDC_USED_EP_NUM*2); i++) {
2500         ep = &dev->ep[i];
2501         pch_udc_ep_set_nak(ep);
2502         pch_udc_ep_fifo_flush(ep, ep->in);
2503         /* Complete request queue */
2504         empty_req_queue(ep);
2505     }
2506     if (dev->driver) {
2507         spin_unlock(&dev->lock);
2508         usb_gadget_udc_reset(&dev->gadget, dev->driver);
2509         spin_lock(&dev->lock);
2510     }
2511 }
2512 
2513 /**
2514  * pch_udc_svc_enum_interrupt() - This function handles a USB speed enumeration
2515  *              done interrupt
2516  * @dev:    Reference to driver structure
2517  */
2518 static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
2519 {
2520     u32 dev_stat, dev_speed;
2521     u32 speed = USB_SPEED_FULL;
2522 
2523     dev_stat = pch_udc_read_device_status(dev);
2524     dev_speed = (dev_stat & UDC_DEVSTS_ENUM_SPEED_MASK) >>
2525                          UDC_DEVSTS_ENUM_SPEED_SHIFT;
2526     switch (dev_speed) {
2527     case UDC_DEVSTS_ENUM_SPEED_HIGH:
2528         speed = USB_SPEED_HIGH;
2529         break;
2530     case  UDC_DEVSTS_ENUM_SPEED_FULL:
2531         speed = USB_SPEED_FULL;
2532         break;
2533     case  UDC_DEVSTS_ENUM_SPEED_LOW:
2534         speed = USB_SPEED_LOW;
2535         break;
2536     default:
2537         BUG();
2538     }
2539     dev->gadget.speed = speed;
2540     pch_udc_activate_control_ep(dev);
2541     pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
2542     pch_udc_set_dma(dev, DMA_DIR_TX);
2543     pch_udc_set_dma(dev, DMA_DIR_RX);
2544     pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
2545 
2546     /* enable device interrupts */
2547     pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2548                     UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2549                     UDC_DEVINT_SI | UDC_DEVINT_SC);
2550 }
2551 
2552 /**
2553  * pch_udc_svc_intf_interrupt() - This function handles a set interface
2554  *                interrupt
2555  * @dev:    Reference to driver structure
2556  */
2557 static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
2558 {
2559     u32 reg, dev_stat = 0;
2560     int i;
2561 
2562     dev_stat = pch_udc_read_device_status(dev);
2563     dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
2564                              UDC_DEVSTS_INTF_SHIFT;
2565     dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
2566                              UDC_DEVSTS_ALT_SHIFT;
2567     dev->set_cfg_not_acked = 1;
2568     /* Construct the usb request for gadget driver and inform it */
2569     memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2570     dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
2571     dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
2572     dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
2573     dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
2574     /* programm the Endpoint Cfg registers */
2575     /* Only one end point cfg register */
2576     reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2577     reg = (reg & ~UDC_CSR_NE_INTF_MASK) |
2578           (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
2579     reg = (reg & ~UDC_CSR_NE_ALT_MASK) |
2580           (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
2581     pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2582     for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2583         /* clear stall bits */
2584         pch_udc_ep_clear_stall(&(dev->ep[i]));
2585         dev->ep[i].halted = 0;
2586     }
2587     dev->stall = 0;
2588     pch_udc_gadget_setup(dev);
2589 }
2590 
2591 /**
2592  * pch_udc_svc_cfg_interrupt() - This function handles a set configuration
2593  *              interrupt
2594  * @dev:    Reference to driver structure
2595  */
2596 static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
2597 {
2598     int i;
2599     u32 reg, dev_stat = 0;
2600 
2601     dev_stat = pch_udc_read_device_status(dev);
2602     dev->set_cfg_not_acked = 1;
2603     dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
2604                 UDC_DEVSTS_CFG_SHIFT;
2605     /* make usb request for gadget driver */
2606     memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2607     dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
2608     dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
2609     /* program the NE registers */
2610     /* Only one end point cfg register */
2611     reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2612     reg = (reg & ~UDC_CSR_NE_CFG_MASK) |
2613           (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
2614     pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2615     for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2616         /* clear stall bits */
2617         pch_udc_ep_clear_stall(&(dev->ep[i]));
2618         dev->ep[i].halted = 0;
2619     }
2620     dev->stall = 0;
2621 
2622     /* call gadget zero with setup data received */
2623     pch_udc_gadget_setup(dev);
2624 }
2625 
2626 /**
2627  * pch_udc_dev_isr() - This function services device interrupts
2628  *          by invoking appropriate routines.
2629  * @dev:    Reference to the device structure
2630  * @dev_intr:   The Device interrupt status.
2631  */
2632 static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
2633 {
2634     int vbus;
2635 
2636     /* USB Reset Interrupt */
2637     if (dev_intr & UDC_DEVINT_UR) {
2638         pch_udc_svc_ur_interrupt(dev);
2639         dev_dbg(&dev->pdev->dev, "USB_RESET\n");
2640     }
2641     /* Enumeration Done Interrupt */
2642     if (dev_intr & UDC_DEVINT_ENUM) {
2643         pch_udc_svc_enum_interrupt(dev);
2644         dev_dbg(&dev->pdev->dev, "USB_ENUM\n");
2645     }
2646     /* Set Interface Interrupt */
2647     if (dev_intr & UDC_DEVINT_SI)
2648         pch_udc_svc_intf_interrupt(dev);
2649     /* Set Config Interrupt */
2650     if (dev_intr & UDC_DEVINT_SC)
2651         pch_udc_svc_cfg_interrupt(dev);
2652     /* USB Suspend interrupt */
2653     if (dev_intr & UDC_DEVINT_US) {
2654         if (dev->driver
2655             && dev->driver->suspend) {
2656             spin_unlock(&dev->lock);
2657             dev->driver->suspend(&dev->gadget);
2658             spin_lock(&dev->lock);
2659         }
2660 
2661         vbus = pch_vbus_gpio_get_value(dev);
2662         if ((dev->vbus_session == 0)
2663             && (vbus != 1)) {
2664             if (dev->driver && dev->driver->disconnect) {
2665                 spin_unlock(&dev->lock);
2666                 dev->driver->disconnect(&dev->gadget);
2667                 spin_lock(&dev->lock);
2668             }
2669             pch_udc_reconnect(dev);
2670         } else if ((dev->vbus_session == 0)
2671             && (vbus == 1)
2672             && !dev->vbus_gpio.intr)
2673             schedule_work(&dev->vbus_gpio.irq_work_fall);
2674 
2675         dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
2676     }
2677     /* Clear the SOF interrupt, if enabled */
2678     if (dev_intr & UDC_DEVINT_SOF)
2679         dev_dbg(&dev->pdev->dev, "SOF\n");
2680     /* ES interrupt, IDLE > 3ms on the USB */
2681     if (dev_intr & UDC_DEVINT_ES)
2682         dev_dbg(&dev->pdev->dev, "ES\n");
2683     /* RWKP interrupt */
2684     if (dev_intr & UDC_DEVINT_RWKP)
2685         dev_dbg(&dev->pdev->dev, "RWKP\n");
2686 }
2687 
2688 /**
2689  * pch_udc_isr() - This function handles interrupts from the PCH USB Device
2690  * @irq:    Interrupt request number
2691  * @pdev:   Reference to the device structure
2692  */
2693 static irqreturn_t pch_udc_isr(int irq, void *pdev)
2694 {
2695     struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
2696     u32 dev_intr, ep_intr;
2697     int i;
2698 
2699     dev_intr = pch_udc_read_device_interrupts(dev);
2700     ep_intr = pch_udc_read_ep_interrupts(dev);
2701 
2702     /* For a hot plug, this find that the controller is hung up. */
2703     if (dev_intr == ep_intr)
2704         if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
2705             dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
2706             /* The controller is reset */
2707             pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
2708             return IRQ_HANDLED;
2709         }
2710     if (dev_intr)
2711         /* Clear device interrupts */
2712         pch_udc_write_device_interrupts(dev, dev_intr);
2713     if (ep_intr)
2714         /* Clear ep interrupts */
2715         pch_udc_write_ep_interrupts(dev, ep_intr);
2716     if (!dev_intr && !ep_intr)
2717         return IRQ_NONE;
2718     spin_lock(&dev->lock);
2719     if (dev_intr)
2720         pch_udc_dev_isr(dev, dev_intr);
2721     if (ep_intr) {
2722         pch_udc_read_all_epstatus(dev, ep_intr);
2723         /* Process Control In interrupts, if present */
2724         if (ep_intr & UDC_EPINT_IN_EP0) {
2725             pch_udc_svc_control_in(dev);
2726             pch_udc_postsvc_epinters(dev, 0);
2727         }
2728         /* Process Control Out interrupts, if present */
2729         if (ep_intr & UDC_EPINT_OUT_EP0)
2730             pch_udc_svc_control_out(dev);
2731         /* Process data in end point interrupts */
2732         for (i = 1; i < PCH_UDC_USED_EP_NUM; i++) {
2733             if (ep_intr & (1 <<  i)) {
2734                 pch_udc_svc_data_in(dev, i);
2735                 pch_udc_postsvc_epinters(dev, i);
2736             }
2737         }
2738         /* Process data out end point interrupts */
2739         for (i = UDC_EPINT_OUT_SHIFT + 1; i < (UDC_EPINT_OUT_SHIFT +
2740                          PCH_UDC_USED_EP_NUM); i++)
2741             if (ep_intr & (1 <<  i))
2742                 pch_udc_svc_data_out(dev, i -
2743                              UDC_EPINT_OUT_SHIFT);
2744     }
2745     spin_unlock(&dev->lock);
2746     return IRQ_HANDLED;
2747 }
2748 
2749 /**
2750  * pch_udc_setup_ep0() - This function enables control endpoint for traffic
2751  * @dev:    Reference to the device structure
2752  */
2753 static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
2754 {
2755     /* enable ep0 interrupts */
2756     pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
2757                         UDC_EPINT_OUT_EP0);
2758     /* enable device interrupts */
2759     pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2760                        UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2761                        UDC_DEVINT_SI | UDC_DEVINT_SC);
2762 }
2763 
2764 /**
2765  * pch_udc_pcd_reinit() - This API initializes the endpoint structures
2766  * @dev:    Reference to the driver structure
2767  */
2768 static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
2769 {
2770     const char *const ep_string[] = {
2771         ep0_string, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
2772         "ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
2773         "ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
2774         "ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
2775         "ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
2776         "ep15in", "ep15out",
2777     };
2778     int i;
2779 
2780     dev->gadget.speed = USB_SPEED_UNKNOWN;
2781     INIT_LIST_HEAD(&dev->gadget.ep_list);
2782 
2783     /* Initialize the endpoints structures */
2784     memset(dev->ep, 0, sizeof dev->ep);
2785     for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2786         struct pch_udc_ep *ep = &dev->ep[i];
2787         ep->dev = dev;
2788         ep->halted = 1;
2789         ep->num = i / 2;
2790         ep->in = ~i & 1;
2791         ep->ep.name = ep_string[i];
2792         ep->ep.ops = &pch_udc_ep_ops;
2793         if (ep->in) {
2794             ep->offset_addr = ep->num * UDC_EP_REG_SHIFT;
2795             ep->ep.caps.dir_in = true;
2796         } else {
2797             ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) *
2798                       UDC_EP_REG_SHIFT;
2799             ep->ep.caps.dir_out = true;
2800         }
2801         if (i == UDC_EP0IN_IDX || i == UDC_EP0OUT_IDX) {
2802             ep->ep.caps.type_control = true;
2803         } else {
2804             ep->ep.caps.type_iso = true;
2805             ep->ep.caps.type_bulk = true;
2806             ep->ep.caps.type_int = true;
2807         }
2808         /* need to set ep->ep.maxpacket and set Default Configuration?*/
2809         usb_ep_set_maxpacket_limit(&ep->ep, UDC_BULK_MAX_PKT_SIZE);
2810         list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
2811         INIT_LIST_HEAD(&ep->queue);
2812     }
2813     usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IDX].ep, UDC_EP0IN_MAX_PKT_SIZE);
2814     usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IDX].ep, UDC_EP0OUT_MAX_PKT_SIZE);
2815 
2816     /* remove ep0 in and out from the list.  They have own pointer */
2817     list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
2818     list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
2819 
2820     dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2821     INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
2822 }
2823 
2824 /**
2825  * pch_udc_pcd_init() - This API initializes the driver structure
2826  * @dev:    Reference to the driver structure
2827  *
2828  * Return codes:
2829  *  0:      Success
2830  *  -ERRNO:     All kind of errors when retrieving VBUS GPIO
2831  */
2832 static int pch_udc_pcd_init(struct pch_udc_dev *dev)
2833 {
2834     int ret;
2835 
2836     pch_udc_init(dev);
2837     pch_udc_pcd_reinit(dev);
2838 
2839     ret = pch_vbus_gpio_init(dev);
2840     if (ret)
2841         pch_udc_exit(dev);
2842     return ret;
2843 }
2844 
2845 /**
2846  * init_dma_pools() - create dma pools during initialization
2847  * @dev:    reference to struct pci_dev
2848  */
2849 static int init_dma_pools(struct pch_udc_dev *dev)
2850 {
2851     struct pch_udc_stp_dma_desc *td_stp;
2852     struct pch_udc_data_dma_desc    *td_data;
2853     void                *ep0out_buf;
2854 
2855     /* DMA setup */
2856     dev->data_requests = dma_pool_create("data_requests", &dev->pdev->dev,
2857         sizeof(struct pch_udc_data_dma_desc), 0, 0);
2858     if (!dev->data_requests) {
2859         dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
2860             __func__);
2861         return -ENOMEM;
2862     }
2863 
2864     /* dma desc for setup data */
2865     dev->stp_requests = dma_pool_create("setup requests", &dev->pdev->dev,
2866         sizeof(struct pch_udc_stp_dma_desc), 0, 0);
2867     if (!dev->stp_requests) {
2868         dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
2869             __func__);
2870         return -ENOMEM;
2871     }
2872     /* setup */
2873     td_stp = dma_pool_alloc(dev->stp_requests, GFP_KERNEL,
2874                 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2875     if (!td_stp) {
2876         dev_err(&dev->pdev->dev,
2877             "%s: can't allocate setup dma descriptor\n", __func__);
2878         return -ENOMEM;
2879     }
2880     dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
2881 
2882     /* data: 0 packets !? */
2883     td_data = dma_pool_alloc(dev->data_requests, GFP_KERNEL,
2884                 &dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2885     if (!td_data) {
2886         dev_err(&dev->pdev->dev,
2887             "%s: can't allocate data dma descriptor\n", __func__);
2888         return -ENOMEM;
2889     }
2890     dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
2891     dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
2892     dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
2893     dev->ep[UDC_EP0IN_IDX].td_data = NULL;
2894     dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
2895 
2896     ep0out_buf = devm_kzalloc(&dev->pdev->dev, UDC_EP0OUT_BUFF_SIZE * 4,
2897                   GFP_KERNEL);
2898     if (!ep0out_buf)
2899         return -ENOMEM;
2900     dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf,
2901                        UDC_EP0OUT_BUFF_SIZE * 4,
2902                        DMA_FROM_DEVICE);
2903     return dma_mapping_error(&dev->pdev->dev, dev->dma_addr);
2904 }
2905 
2906 static int pch_udc_start(struct usb_gadget *g,
2907         struct usb_gadget_driver *driver)
2908 {
2909     struct pch_udc_dev  *dev = to_pch_udc(g);
2910 
2911     driver->driver.bus = NULL;
2912     dev->driver = driver;
2913 
2914     /* get ready for ep0 traffic */
2915     pch_udc_setup_ep0(dev);
2916 
2917     /* clear SD */
2918     if ((pch_vbus_gpio_get_value(dev) != 0) || !dev->vbus_gpio.intr)
2919         pch_udc_clear_disconnect(dev);
2920 
2921     dev->connected = 1;
2922     return 0;
2923 }
2924 
2925 static int pch_udc_stop(struct usb_gadget *g)
2926 {
2927     struct pch_udc_dev  *dev = to_pch_udc(g);
2928 
2929     pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2930 
2931     /* Assures that there are no pending requests with this driver */
2932     dev->driver = NULL;
2933     dev->connected = 0;
2934 
2935     /* set SD */
2936     pch_udc_set_disconnect(dev);
2937 
2938     return 0;
2939 }
2940 
2941 static void pch_vbus_gpio_remove_table(void *table)
2942 {
2943     gpiod_remove_lookup_table(table);
2944 }
2945 
2946 static int pch_vbus_gpio_add_table(struct device *d, void *table)
2947 {
2948     gpiod_add_lookup_table(table);
2949     return devm_add_action_or_reset(d, pch_vbus_gpio_remove_table, table);
2950 }
2951 
2952 static struct gpiod_lookup_table pch_udc_minnow_vbus_gpio_table = {
2953     .dev_id     = "0000:02:02.4",
2954     .table      = {
2955         GPIO_LOOKUP("sch_gpio.33158", 12, NULL, GPIO_ACTIVE_HIGH),
2956         {}
2957     },
2958 };
2959 
2960 static int pch_udc_minnow_platform_init(struct device *d)
2961 {
2962     return pch_vbus_gpio_add_table(d, &pch_udc_minnow_vbus_gpio_table);
2963 }
2964 
2965 static int pch_udc_quark_platform_init(struct device *d)
2966 {
2967     struct pch_udc_dev *dev = dev_get_drvdata(d);
2968 
2969     dev->bar = PCH_UDC_PCI_BAR_QUARK_X1000;
2970     return 0;
2971 }
2972 
2973 static void pch_udc_shutdown(struct pci_dev *pdev)
2974 {
2975     struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2976 
2977     pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2978     pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2979 
2980     /* disable the pullup so the host will think we're gone */
2981     pch_udc_set_disconnect(dev);
2982 }
2983 
2984 static void pch_udc_remove(struct pci_dev *pdev)
2985 {
2986     struct pch_udc_dev  *dev = pci_get_drvdata(pdev);
2987 
2988     usb_del_gadget_udc(&dev->gadget);
2989 
2990     /* gadget driver must not be registered */
2991     if (dev->driver)
2992         dev_err(&pdev->dev,
2993             "%s: gadget driver still bound!!!\n", __func__);
2994     /* dma pool cleanup */
2995     dma_pool_destroy(dev->data_requests);
2996 
2997     if (dev->stp_requests) {
2998         /* cleanup DMA desc's for ep0in */
2999         if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
3000             dma_pool_free(dev->stp_requests,
3001                 dev->ep[UDC_EP0OUT_IDX].td_stp,
3002                 dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
3003         }
3004         if (dev->ep[UDC_EP0OUT_IDX].td_data) {
3005             dma_pool_free(dev->stp_requests,
3006                 dev->ep[UDC_EP0OUT_IDX].td_data,
3007                 dev->ep[UDC_EP0OUT_IDX].td_data_phys);
3008         }
3009         dma_pool_destroy(dev->stp_requests);
3010     }
3011 
3012     if (dev->dma_addr)
3013         dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
3014                  UDC_EP0OUT_BUFF_SIZE * 4, DMA_FROM_DEVICE);
3015 
3016     pch_vbus_gpio_free(dev);
3017 
3018     pch_udc_exit(dev);
3019 }
3020 
3021 static int __maybe_unused pch_udc_suspend(struct device *d)
3022 {
3023     struct pch_udc_dev *dev = dev_get_drvdata(d);
3024 
3025     pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
3026     pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
3027 
3028     return 0;
3029 }
3030 
3031 static int __maybe_unused pch_udc_resume(struct device *d)
3032 {
3033     return 0;
3034 }
3035 
3036 static SIMPLE_DEV_PM_OPS(pch_udc_pm, pch_udc_suspend, pch_udc_resume);
3037 
3038 typedef int (*platform_init_fn)(struct device *);
3039 
3040 static int pch_udc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
3041 {
3042     platform_init_fn platform_init = (platform_init_fn)id->driver_data;
3043     int         retval;
3044     struct pch_udc_dev  *dev;
3045 
3046     /* init */
3047     dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
3048     if (!dev)
3049         return -ENOMEM;
3050 
3051     /* pci setup */
3052     retval = pcim_enable_device(pdev);
3053     if (retval)
3054         return retval;
3055 
3056     dev->bar = PCH_UDC_PCI_BAR;
3057     dev->pdev = pdev;
3058     pci_set_drvdata(pdev, dev);
3059 
3060     /* Platform specific hook */
3061     if (platform_init) {
3062         retval = platform_init(&pdev->dev);
3063         if (retval)
3064             return retval;
3065     }
3066 
3067     /* PCI resource allocation */
3068     retval = pcim_iomap_regions(pdev, BIT(dev->bar), pci_name(pdev));
3069     if (retval)
3070         return retval;
3071 
3072     dev->base_addr = pcim_iomap_table(pdev)[dev->bar];
3073 
3074     /* initialize the hardware */
3075     retval = pch_udc_pcd_init(dev);
3076     if (retval)
3077         return retval;
3078 
3079     pci_enable_msi(pdev);
3080 
3081     retval = devm_request_irq(&pdev->dev, pdev->irq, pch_udc_isr,
3082                   IRQF_SHARED, KBUILD_MODNAME, dev);
3083     if (retval) {
3084         dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
3085             pdev->irq);
3086         goto finished;
3087     }
3088 
3089     pci_set_master(pdev);
3090     pci_try_set_mwi(pdev);
3091 
3092     /* device struct setup */
3093     spin_lock_init(&dev->lock);
3094     dev->gadget.ops = &pch_udc_ops;
3095 
3096     retval = init_dma_pools(dev);
3097     if (retval)
3098         goto finished;
3099 
3100     dev->gadget.name = KBUILD_MODNAME;
3101     dev->gadget.max_speed = USB_SPEED_HIGH;
3102 
3103     /* Put the device in disconnected state till a driver is bound */
3104     pch_udc_set_disconnect(dev);
3105     retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget);
3106     if (retval)
3107         goto finished;
3108     return 0;
3109 
3110 finished:
3111     pch_udc_remove(pdev);
3112     return retval;
3113 }
3114 
3115 static const struct pci_device_id pch_udc_pcidev_id[] = {
3116     {
3117         PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC),
3118         .class = PCI_CLASS_SERIAL_USB_DEVICE,
3119         .class_mask = 0xffffffff,
3120         .driver_data = (kernel_ulong_t)&pch_udc_quark_platform_init,
3121     },
3122     {
3123         PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC,
3124                    PCI_VENDOR_ID_CIRCUITCO, PCI_SUBSYSTEM_ID_CIRCUITCO_MINNOWBOARD),
3125         .class = PCI_CLASS_SERIAL_USB_DEVICE,
3126         .class_mask = 0xffffffff,
3127         .driver_data = (kernel_ulong_t)&pch_udc_minnow_platform_init,
3128     },
3129     {
3130         PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
3131         .class = PCI_CLASS_SERIAL_USB_DEVICE,
3132         .class_mask = 0xffffffff,
3133     },
3134     {
3135         PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7213_IOH_UDC),
3136         .class = PCI_CLASS_SERIAL_USB_DEVICE,
3137         .class_mask = 0xffffffff,
3138     },
3139     {
3140         PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7831_IOH_UDC),
3141         .class = PCI_CLASS_SERIAL_USB_DEVICE,
3142         .class_mask = 0xffffffff,
3143     },
3144     { 0 },
3145 };
3146 
3147 MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
3148 
3149 static struct pci_driver pch_udc_driver = {
3150     .name = KBUILD_MODNAME,
3151     .id_table = pch_udc_pcidev_id,
3152     .probe =    pch_udc_probe,
3153     .remove =   pch_udc_remove,
3154     .shutdown = pch_udc_shutdown,
3155     .driver = {
3156         .pm = &pch_udc_pm,
3157     },
3158 };
3159 
3160 module_pci_driver(pch_udc_driver);
3161 
3162 MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
3163 MODULE_AUTHOR("LAPIS Semiconductor, <tomoya-linux@dsn.lapis-semi.com>");
3164 MODULE_LICENSE("GPL");