PageRenderTime 62ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/usb/gadget/pch_udc.c

https://bitbucket.org/slukk/jb-tsm-kernel-4.2
C | 3087 lines | 2039 code | 265 blank | 783 comment | 320 complexity | e1df545378b6ab3992ceae4f705b6272 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
  1. /*
  2. * Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; version 2 of the License.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program; if not, write to the Free Software
  15. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  16. */
  17. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  18. #include <linux/kernel.h>
  19. #include <linux/module.h>
  20. #include <linux/pci.h>
  21. #include <linux/delay.h>
  22. #include <linux/errno.h>
  23. #include <linux/list.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/usb/ch9.h>
  26. #include <linux/usb/gadget.h>
  27. /* Address offset of Registers */
  28. #define UDC_EP_REG_SHIFT 0x20 /* Offset to next EP */
  29. #define UDC_EPCTL_ADDR 0x00 /* Endpoint control */
  30. #define UDC_EPSTS_ADDR 0x04 /* Endpoint status */
  31. #define UDC_BUFIN_FRAMENUM_ADDR 0x08 /* buffer size in / frame number out */
  32. #define UDC_BUFOUT_MAXPKT_ADDR 0x0C /* buffer size out / maxpkt in */
  33. #define UDC_SUBPTR_ADDR 0x10 /* setup buffer pointer */
  34. #define UDC_DESPTR_ADDR 0x14 /* Data descriptor pointer */
  35. #define UDC_CONFIRM_ADDR 0x18 /* Write/Read confirmation */
  36. #define UDC_DEVCFG_ADDR 0x400 /* Device configuration */
  37. #define UDC_DEVCTL_ADDR 0x404 /* Device control */
  38. #define UDC_DEVSTS_ADDR 0x408 /* Device status */
  39. #define UDC_DEVIRQSTS_ADDR 0x40C /* Device irq status */
  40. #define UDC_DEVIRQMSK_ADDR 0x410 /* Device irq mask */
  41. #define UDC_EPIRQSTS_ADDR 0x414 /* Endpoint irq status */
  42. #define UDC_EPIRQMSK_ADDR 0x418 /* Endpoint irq mask */
  43. #define UDC_DEVLPM_ADDR 0x41C /* LPM control / status */
  44. #define UDC_CSR_BUSY_ADDR 0x4f0 /* UDC_CSR_BUSY Status register */
  45. #define UDC_SRST_ADDR 0x4fc /* SOFT RESET register */
  46. #define UDC_CSR_ADDR 0x500 /* USB_DEVICE endpoint register */
  47. /* Endpoint control register */
  48. /* Bit position */
  49. #define UDC_EPCTL_MRXFLUSH (1 << 12)
  50. #define UDC_EPCTL_RRDY (1 << 9)
  51. #define UDC_EPCTL_CNAK (1 << 8)
  52. #define UDC_EPCTL_SNAK (1 << 7)
  53. #define UDC_EPCTL_NAK (1 << 6)
  54. #define UDC_EPCTL_P (1 << 3)
  55. #define UDC_EPCTL_F (1 << 1)
  56. #define UDC_EPCTL_S (1 << 0)
  57. #define UDC_EPCTL_ET_SHIFT 4
  58. /* Mask patern */
  59. #define UDC_EPCTL_ET_MASK 0x00000030
  60. /* Value for ET field */
  61. #define UDC_EPCTL_ET_CONTROL 0
  62. #define UDC_EPCTL_ET_ISO 1
  63. #define UDC_EPCTL_ET_BULK 2
  64. #define UDC_EPCTL_ET_INTERRUPT 3
  65. /* Endpoint status register */
  66. /* Bit position */
  67. #define UDC_EPSTS_XFERDONE (1 << 27)
  68. #define UDC_EPSTS_RSS (1 << 26)
  69. #define UDC_EPSTS_RCS (1 << 25)
  70. #define UDC_EPSTS_TXEMPTY (1 << 24)
  71. #define UDC_EPSTS_TDC (1 << 10)
  72. #define UDC_EPSTS_HE (1 << 9)
  73. #define UDC_EPSTS_MRXFIFO_EMP (1 << 8)
  74. #define UDC_EPSTS_BNA (1 << 7)
  75. #define UDC_EPSTS_IN (1 << 6)
  76. #define UDC_EPSTS_OUT_SHIFT 4
  77. /* Mask patern */
  78. #define UDC_EPSTS_OUT_MASK 0x00000030
  79. #define UDC_EPSTS_ALL_CLR_MASK 0x1F0006F0
  80. /* Value for OUT field */
  81. #define UDC_EPSTS_OUT_SETUP 2
  82. #define UDC_EPSTS_OUT_DATA 1
  83. /* Device configuration register */
  84. /* Bit position */
  85. #define UDC_DEVCFG_CSR_PRG (1 << 17)
  86. #define UDC_DEVCFG_SP (1 << 3)
  87. /* SPD Valee */
  88. #define UDC_DEVCFG_SPD_HS 0x0
  89. #define UDC_DEVCFG_SPD_FS 0x1
  90. #define UDC_DEVCFG_SPD_LS 0x2
  91. /* Device control register */
  92. /* Bit position */
  93. #define UDC_DEVCTL_THLEN_SHIFT 24
  94. #define UDC_DEVCTL_BRLEN_SHIFT 16
  95. #define UDC_DEVCTL_CSR_DONE (1 << 13)
  96. #define UDC_DEVCTL_SD (1 << 10)
  97. #define UDC_DEVCTL_MODE (1 << 9)
  98. #define UDC_DEVCTL_BREN (1 << 8)
  99. #define UDC_DEVCTL_THE (1 << 7)
  100. #define UDC_DEVCTL_DU (1 << 4)
  101. #define UDC_DEVCTL_TDE (1 << 3)
  102. #define UDC_DEVCTL_RDE (1 << 2)
  103. #define UDC_DEVCTL_RES (1 << 0)
  104. /* Device status register */
  105. /* Bit position */
  106. #define UDC_DEVSTS_TS_SHIFT 18
  107. #define UDC_DEVSTS_ENUM_SPEED_SHIFT 13
  108. #define UDC_DEVSTS_ALT_SHIFT 8
  109. #define UDC_DEVSTS_INTF_SHIFT 4
  110. #define UDC_DEVSTS_CFG_SHIFT 0
  111. /* Mask patern */
  112. #define UDC_DEVSTS_TS_MASK 0xfffc0000
  113. #define UDC_DEVSTS_ENUM_SPEED_MASK 0x00006000
  114. #define UDC_DEVSTS_ALT_MASK 0x00000f00
  115. #define UDC_DEVSTS_INTF_MASK 0x000000f0
  116. #define UDC_DEVSTS_CFG_MASK 0x0000000f
  117. /* value for maximum speed for SPEED field */
  118. #define UDC_DEVSTS_ENUM_SPEED_FULL 1
  119. #define UDC_DEVSTS_ENUM_SPEED_HIGH 0
  120. #define UDC_DEVSTS_ENUM_SPEED_LOW 2
  121. #define UDC_DEVSTS_ENUM_SPEED_FULLX 3
  122. /* Device irq register */
  123. /* Bit position */
  124. #define UDC_DEVINT_RWKP (1 << 7)
  125. #define UDC_DEVINT_ENUM (1 << 6)
  126. #define UDC_DEVINT_SOF (1 << 5)
  127. #define UDC_DEVINT_US (1 << 4)
  128. #define UDC_DEVINT_UR (1 << 3)
  129. #define UDC_DEVINT_ES (1 << 2)
  130. #define UDC_DEVINT_SI (1 << 1)
  131. #define UDC_DEVINT_SC (1 << 0)
  132. /* Mask patern */
  133. #define UDC_DEVINT_MSK 0x7f
  134. /* Endpoint irq register */
  135. /* Bit position */
  136. #define UDC_EPINT_IN_SHIFT 0
  137. #define UDC_EPINT_OUT_SHIFT 16
  138. #define UDC_EPINT_IN_EP0 (1 << 0)
  139. #define UDC_EPINT_OUT_EP0 (1 << 16)
  140. /* Mask patern */
  141. #define UDC_EPINT_MSK_DISABLE_ALL 0xffffffff
  142. /* UDC_CSR_BUSY Status register */
  143. /* Bit position */
  144. #define UDC_CSR_BUSY (1 << 0)
  145. /* SOFT RESET register */
  146. /* Bit position */
  147. #define UDC_PSRST (1 << 1)
  148. #define UDC_SRST (1 << 0)
  149. /* USB_DEVICE endpoint register */
  150. /* Bit position */
  151. #define UDC_CSR_NE_NUM_SHIFT 0
  152. #define UDC_CSR_NE_DIR_SHIFT 4
  153. #define UDC_CSR_NE_TYPE_SHIFT 5
  154. #define UDC_CSR_NE_CFG_SHIFT 7
  155. #define UDC_CSR_NE_INTF_SHIFT 11
  156. #define UDC_CSR_NE_ALT_SHIFT 15
  157. #define UDC_CSR_NE_MAX_PKT_SHIFT 19
  158. /* Mask patern */
  159. #define UDC_CSR_NE_NUM_MASK 0x0000000f
  160. #define UDC_CSR_NE_DIR_MASK 0x00000010
  161. #define UDC_CSR_NE_TYPE_MASK 0x00000060
  162. #define UDC_CSR_NE_CFG_MASK 0x00000780
  163. #define UDC_CSR_NE_INTF_MASK 0x00007800
  164. #define UDC_CSR_NE_ALT_MASK 0x00078000
  165. #define UDC_CSR_NE_MAX_PKT_MASK 0x3ff80000
  166. #define PCH_UDC_CSR(ep) (UDC_CSR_ADDR + ep*4)
  167. #define PCH_UDC_EPINT(in, num)\
  168. (1 << (num + (in ? UDC_EPINT_IN_SHIFT : UDC_EPINT_OUT_SHIFT)))
  169. /* Index of endpoint */
  170. #define UDC_EP0IN_IDX 0
  171. #define UDC_EP0OUT_IDX 1
  172. #define UDC_EPIN_IDX(ep) (ep * 2)
  173. #define UDC_EPOUT_IDX(ep) (ep * 2 + 1)
  174. #define PCH_UDC_EP0 0
  175. #define PCH_UDC_EP1 1
  176. #define PCH_UDC_EP2 2
  177. #define PCH_UDC_EP3 3
  178. /* Number of endpoint */
  179. #define PCH_UDC_EP_NUM 32 /* Total number of EPs (16 IN,16 OUT) */
  180. #define PCH_UDC_USED_EP_NUM 4 /* EP number of EP's really used */
  181. /* Length Value */
  182. #define PCH_UDC_BRLEN 0x0F /* Burst length */
  183. #define PCH_UDC_THLEN 0x1F /* Threshold length */
  184. /* Value of EP Buffer Size */
  185. #define UDC_EP0IN_BUFF_SIZE 16
  186. #define UDC_EPIN_BUFF_SIZE 256
  187. #define UDC_EP0OUT_BUFF_SIZE 16
  188. #define UDC_EPOUT_BUFF_SIZE 256
  189. /* Value of EP maximum packet size */
  190. #define UDC_EP0IN_MAX_PKT_SIZE 64
  191. #define UDC_EP0OUT_MAX_PKT_SIZE 64
  192. #define UDC_BULK_MAX_PKT_SIZE 512
  193. /* DMA */
  194. #define DMA_DIR_RX 1 /* DMA for data receive */
  195. #define DMA_DIR_TX 2 /* DMA for data transmit */
  196. #define DMA_ADDR_INVALID (~(dma_addr_t)0)
  197. #define UDC_DMA_MAXPACKET 65536 /* maximum packet size for DMA */
  198. /**
  199. * struct pch_udc_data_dma_desc - Structure to hold DMA descriptor information
  200. * for data
  201. * @status: Status quadlet
  202. * @reserved: Reserved
  203. * @dataptr: Buffer descriptor
  204. * @next: Next descriptor
  205. */
  206. struct pch_udc_data_dma_desc {
  207. u32 status;
  208. u32 reserved;
  209. u32 dataptr;
  210. u32 next;
  211. };
  212. /**
  213. * struct pch_udc_stp_dma_desc - Structure to hold DMA descriptor information
  214. * for control data
  215. * @status: Status
  216. * @reserved: Reserved
  217. * @data12: First setup word
  218. * @data34: Second setup word
  219. */
  220. struct pch_udc_stp_dma_desc {
  221. u32 status;
  222. u32 reserved;
  223. struct usb_ctrlrequest request;
  224. } __attribute((packed));
  225. /* DMA status definitions */
  226. /* Buffer status */
  227. #define PCH_UDC_BUFF_STS 0xC0000000
  228. #define PCH_UDC_BS_HST_RDY 0x00000000
  229. #define PCH_UDC_BS_DMA_BSY 0x40000000
  230. #define PCH_UDC_BS_DMA_DONE 0x80000000
  231. #define PCH_UDC_BS_HST_BSY 0xC0000000
  232. /* Rx/Tx Status */
  233. #define PCH_UDC_RXTX_STS 0x30000000
  234. #define PCH_UDC_RTS_SUCC 0x00000000
  235. #define PCH_UDC_RTS_DESERR 0x10000000
  236. #define PCH_UDC_RTS_BUFERR 0x30000000
  237. /* Last Descriptor Indication */
  238. #define PCH_UDC_DMA_LAST 0x08000000
  239. /* Number of Rx/Tx Bytes Mask */
  240. #define PCH_UDC_RXTX_BYTES 0x0000ffff
  241. /**
  242. * struct pch_udc_cfg_data - Structure to hold current configuration
  243. * and interface information
  244. * @cur_cfg: current configuration in use
  245. * @cur_intf: current interface in use
  246. * @cur_alt: current alt interface in use
  247. */
  248. struct pch_udc_cfg_data {
  249. u16 cur_cfg;
  250. u16 cur_intf;
  251. u16 cur_alt;
  252. };
  253. /**
  254. * struct pch_udc_ep - Structure holding a PCH USB device Endpoint information
  255. * @ep: embedded ep request
  256. * @td_stp_phys: for setup request
  257. * @td_data_phys: for data request
  258. * @td_stp: for setup request
  259. * @td_data: for data request
  260. * @dev: reference to device struct
  261. * @offset_addr: offset address of ep register
  262. * @desc: for this ep
  263. * @queue: queue for requests
  264. * @num: endpoint number
  265. * @in: endpoint is IN
  266. * @halted: endpoint halted?
  267. * @epsts: Endpoint status
  268. */
  269. struct pch_udc_ep {
  270. struct usb_ep ep;
  271. dma_addr_t td_stp_phys;
  272. dma_addr_t td_data_phys;
  273. struct pch_udc_stp_dma_desc *td_stp;
  274. struct pch_udc_data_dma_desc *td_data;
  275. struct pch_udc_dev *dev;
  276. unsigned long offset_addr;
  277. const struct usb_endpoint_descriptor *desc;
  278. struct list_head queue;
  279. unsigned num:5,
  280. in:1,
  281. halted:1;
  282. unsigned long epsts;
  283. };
  284. /**
  285. * struct pch_udc_dev - Structure holding complete information
  286. * of the PCH USB device
  287. * @gadget: gadget driver data
  288. * @driver: reference to gadget driver bound
  289. * @pdev: reference to the PCI device
  290. * @ep: array of endpoints
  291. * @lock: protects all state
  292. * @active: enabled the PCI device
  293. * @stall: stall requested
  294. * @prot_stall: protcol stall requested
  295. * @irq_registered: irq registered with system
  296. * @mem_region: device memory mapped
  297. * @registered: driver regsitered with system
  298. * @suspended: driver in suspended state
  299. * @connected: gadget driver associated
  300. * @vbus_session: required vbus_session state
  301. * @set_cfg_not_acked: pending acknowledgement 4 setup
  302. * @waiting_zlp_ack: pending acknowledgement 4 ZLP
  303. * @data_requests: DMA pool for data requests
  304. * @stp_requests: DMA pool for setup requests
  305. * @dma_addr: DMA pool for received
  306. * @ep0out_buf: Buffer for DMA
  307. * @setup_data: Received setup data
  308. * @phys_addr: of device memory
  309. * @base_addr: for mapped device memory
  310. * @irq: IRQ line for the device
  311. * @cfg_data: current cfg, intf, and alt in use
  312. */
  313. struct pch_udc_dev {
  314. struct usb_gadget gadget;
  315. struct usb_gadget_driver *driver;
  316. struct pci_dev *pdev;
  317. struct pch_udc_ep ep[PCH_UDC_EP_NUM];
  318. spinlock_t lock; /* protects all state */
  319. unsigned active:1,
  320. stall:1,
  321. prot_stall:1,
  322. irq_registered:1,
  323. mem_region:1,
  324. registered:1,
  325. suspended:1,
  326. connected:1,
  327. vbus_session:1,
  328. set_cfg_not_acked:1,
  329. waiting_zlp_ack:1;
  330. struct pci_pool *data_requests;
  331. struct pci_pool *stp_requests;
  332. dma_addr_t dma_addr;
  333. void *ep0out_buf;
  334. struct usb_ctrlrequest setup_data;
  335. unsigned long phys_addr;
  336. void __iomem *base_addr;
  337. unsigned irq;
  338. struct pch_udc_cfg_data cfg_data;
  339. };
  340. #define PCH_UDC_PCI_BAR 1
  341. #define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
  342. #define PCI_VENDOR_ID_ROHM 0x10DB
  343. #define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D
  344. #define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808
  345. static const char ep0_string[] = "ep0in";
  346. static DEFINE_SPINLOCK(udc_stall_spinlock); /* stall spin lock */
  347. struct pch_udc_dev *pch_udc; /* pointer to device object */
  348. static int speed_fs;
  349. module_param_named(speed_fs, speed_fs, bool, S_IRUGO);
  350. MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
  351. /**
  352. * struct pch_udc_request - Structure holding a PCH USB device request packet
  353. * @req: embedded ep request
  354. * @td_data_phys: phys. address
  355. * @td_data: first dma desc. of chain
  356. * @td_data_last: last dma desc. of chain
  357. * @queue: associated queue
  358. * @dma_going: DMA in progress for request
  359. * @dma_mapped: DMA memory mapped for request
  360. * @dma_done: DMA completed for request
  361. * @chain_len: chain length
  362. * @buf: Buffer memory for align adjustment
  363. * @dma: DMA memory for align adjustment
  364. */
  365. struct pch_udc_request {
  366. struct usb_request req;
  367. dma_addr_t td_data_phys;
  368. struct pch_udc_data_dma_desc *td_data;
  369. struct pch_udc_data_dma_desc *td_data_last;
  370. struct list_head queue;
  371. unsigned dma_going:1,
  372. dma_mapped:1,
  373. dma_done:1;
  374. unsigned chain_len;
  375. void *buf;
  376. dma_addr_t dma;
  377. };
  378. static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
  379. {
  380. return ioread32(dev->base_addr + reg);
  381. }
  382. static inline void pch_udc_writel(struct pch_udc_dev *dev,
  383. unsigned long val, unsigned long reg)
  384. {
  385. iowrite32(val, dev->base_addr + reg);
  386. }
  387. static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
  388. unsigned long reg,
  389. unsigned long bitmask)
  390. {
  391. pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
  392. }
  393. static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
  394. unsigned long reg,
  395. unsigned long bitmask)
  396. {
  397. pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
  398. }
  399. static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg)
  400. {
  401. return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
  402. }
  403. static inline void pch_udc_ep_writel(struct pch_udc_ep *ep,
  404. unsigned long val, unsigned long reg)
  405. {
  406. iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
  407. }
  408. static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep,
  409. unsigned long reg,
  410. unsigned long bitmask)
  411. {
  412. pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg);
  413. }
  414. static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep,
  415. unsigned long reg,
  416. unsigned long bitmask)
  417. {
  418. pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg);
  419. }
  420. /**
  421. * pch_udc_csr_busy() - Wait till idle.
  422. * @dev: Reference to pch_udc_dev structure
  423. */
  424. static void pch_udc_csr_busy(struct pch_udc_dev *dev)
  425. {
  426. unsigned int count = 200;
  427. /* Wait till idle */
  428. while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
  429. && --count)
  430. cpu_relax();
  431. if (!count)
  432. dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
  433. }
  434. /**
  435. * pch_udc_write_csr() - Write the command and status registers.
  436. * @dev: Reference to pch_udc_dev structure
  437. * @val: value to be written to CSR register
  438. * @addr: address of CSR register
  439. */
  440. static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
  441. unsigned int ep)
  442. {
  443. unsigned long reg = PCH_UDC_CSR(ep);
  444. pch_udc_csr_busy(dev); /* Wait till idle */
  445. pch_udc_writel(dev, val, reg);
  446. pch_udc_csr_busy(dev); /* Wait till idle */
  447. }
  448. /**
  449. * pch_udc_read_csr() - Read the command and status registers.
  450. * @dev: Reference to pch_udc_dev structure
  451. * @addr: address of CSR register
  452. *
  453. * Return codes: content of CSR register
  454. */
  455. static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
  456. {
  457. unsigned long reg = PCH_UDC_CSR(ep);
  458. pch_udc_csr_busy(dev); /* Wait till idle */
  459. pch_udc_readl(dev, reg); /* Dummy read */
  460. pch_udc_csr_busy(dev); /* Wait till idle */
  461. return pch_udc_readl(dev, reg);
  462. }
  463. /**
  464. * pch_udc_rmt_wakeup() - Initiate for remote wakeup
  465. * @dev: Reference to pch_udc_dev structure
  466. */
  467. static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
  468. {
  469. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  470. mdelay(1);
  471. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  472. }
  473. /**
  474. * pch_udc_get_frame() - Get the current frame from device status register
  475. * @dev: Reference to pch_udc_dev structure
  476. * Retern current frame
  477. */
  478. static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
  479. {
  480. u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
  481. return (frame & UDC_DEVSTS_TS_MASK) >> UDC_DEVSTS_TS_SHIFT;
  482. }
  483. /**
  484. * pch_udc_clear_selfpowered() - Clear the self power control
  485. * @dev: Reference to pch_udc_regs structure
  486. */
  487. static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
  488. {
  489. pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
  490. }
  491. /**
  492. * pch_udc_set_selfpowered() - Set the self power control
  493. * @dev: Reference to pch_udc_regs structure
  494. */
  495. static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
  496. {
  497. pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
  498. }
  499. /**
  500. * pch_udc_set_disconnect() - Set the disconnect status.
  501. * @dev: Reference to pch_udc_regs structure
  502. */
  503. static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
  504. {
  505. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
  506. }
  507. /**
  508. * pch_udc_clear_disconnect() - Clear the disconnect status.
  509. * @dev: Reference to pch_udc_regs structure
  510. */
  511. static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
  512. {
  513. /* Clear the disconnect */
  514. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  515. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
  516. mdelay(1);
  517. /* Resume USB signalling */
  518. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  519. }
  520. /**
  521. * pch_udc_reconnect() - This API initializes usb device controller,
  522. * and clear the disconnect status.
  523. * @dev: Reference to pch_udc_regs structure
  524. */
  525. static void pch_udc_init(struct pch_udc_dev *dev);
  526. static void pch_udc_reconnect(struct pch_udc_dev *dev)
  527. {
  528. pch_udc_init(dev);
  529. /* enable device interrupts */
  530. /* pch_udc_enable_interrupts() */
  531. pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
  532. UDC_DEVINT_UR | UDC_DEVINT_ENUM);
  533. /* Clear the disconnect */
  534. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  535. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
  536. mdelay(1);
  537. /* Resume USB signalling */
  538. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
  539. }
  540. /**
  541. * pch_udc_vbus_session() - set or clearr the disconnect status.
  542. * @dev: Reference to pch_udc_regs structure
  543. * @is_active: Parameter specifying the action
  544. * 0: indicating VBUS power is ending
  545. * !0: indicating VBUS power is starting
  546. */
  547. static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
  548. int is_active)
  549. {
  550. if (is_active) {
  551. pch_udc_reconnect(dev);
  552. dev->vbus_session = 1;
  553. } else {
  554. if (dev->driver && dev->driver->disconnect) {
  555. spin_unlock(&dev->lock);
  556. dev->driver->disconnect(&dev->gadget);
  557. spin_lock(&dev->lock);
  558. }
  559. pch_udc_set_disconnect(dev);
  560. dev->vbus_session = 0;
  561. }
  562. }
  563. /**
  564. * pch_udc_ep_set_stall() - Set the stall of endpoint
  565. * @ep: Reference to structure of type pch_udc_ep_regs
  566. */
  567. static void pch_udc_ep_set_stall(struct pch_udc_ep *ep)
  568. {
  569. if (ep->in) {
  570. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
  571. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
  572. } else {
  573. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
  574. }
  575. }
  576. /**
  577. * pch_udc_ep_clear_stall() - Clear the stall of endpoint
  578. * @ep: Reference to structure of type pch_udc_ep_regs
  579. */
  580. static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep)
  581. {
  582. /* Clear the stall */
  583. pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
  584. /* Clear NAK by writing CNAK */
  585. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
  586. }
  587. /**
  588. * pch_udc_ep_set_trfr_type() - Set the transfer type of endpoint
  589. * @ep: Reference to structure of type pch_udc_ep_regs
  590. * @type: Type of endpoint
  591. */
  592. static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep,
  593. u8 type)
  594. {
  595. pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) &
  596. UDC_EPCTL_ET_MASK), UDC_EPCTL_ADDR);
  597. }
  598. /**
  599. * pch_udc_ep_set_bufsz() - Set the maximum packet size for the endpoint
  600. * @ep: Reference to structure of type pch_udc_ep_regs
  601. * @buf_size: The buffer word size
  602. */
  603. static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep,
  604. u32 buf_size, u32 ep_in)
  605. {
  606. u32 data;
  607. if (ep_in) {
  608. data = pch_udc_ep_readl(ep, UDC_BUFIN_FRAMENUM_ADDR);
  609. data = (data & 0xffff0000) | (buf_size & 0xffff);
  610. pch_udc_ep_writel(ep, data, UDC_BUFIN_FRAMENUM_ADDR);
  611. } else {
  612. data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
  613. data = (buf_size << 16) | (data & 0xffff);
  614. pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
  615. }
  616. }
  617. /**
  618. * pch_udc_ep_set_maxpkt() - Set the Max packet size for the endpoint
  619. * @ep: Reference to structure of type pch_udc_ep_regs
  620. * @pkt_size: The packet byte size
  621. */
  622. static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size)
  623. {
  624. u32 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
  625. data = (data & 0xffff0000) | (pkt_size & 0xffff);
  626. pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
  627. }
  628. /**
  629. * pch_udc_ep_set_subptr() - Set the Setup buffer pointer for the endpoint
  630. * @ep: Reference to structure of type pch_udc_ep_regs
  631. * @addr: Address of the register
  632. */
  633. static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr)
  634. {
  635. pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR);
  636. }
  637. /**
  638. * pch_udc_ep_set_ddptr() - Set the Data descriptor pointer for the endpoint
  639. * @ep: Reference to structure of type pch_udc_ep_regs
  640. * @addr: Address of the register
  641. */
  642. static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr)
  643. {
  644. pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR);
  645. }
  646. /**
  647. * pch_udc_ep_set_pd() - Set the poll demand bit for the endpoint
  648. * @ep: Reference to structure of type pch_udc_ep_regs
  649. */
  650. static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep)
  651. {
  652. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P);
  653. }
  654. /**
  655. * pch_udc_ep_set_rrdy() - Set the receive ready bit for the endpoint
  656. * @ep: Reference to structure of type pch_udc_ep_regs
  657. */
  658. static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep)
  659. {
  660. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
  661. }
  662. /**
  663. * pch_udc_ep_clear_rrdy() - Clear the receive ready bit for the endpoint
  664. * @ep: Reference to structure of type pch_udc_ep_regs
  665. */
  666. static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep)
  667. {
  668. pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
  669. }
  670. /**
  671. * pch_udc_set_dma() - Set the 'TDE' or RDE bit of device control
  672. * register depending on the direction specified
  673. * @dev: Reference to structure of type pch_udc_regs
  674. * @dir: whether Tx or Rx
  675. * DMA_DIR_RX: Receive
  676. * DMA_DIR_TX: Transmit
  677. */
  678. static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
  679. {
  680. if (dir == DMA_DIR_RX)
  681. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
  682. else if (dir == DMA_DIR_TX)
  683. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
  684. }
  685. /**
  686. * pch_udc_clear_dma() - Clear the 'TDE' or RDE bit of device control
  687. * register depending on the direction specified
  688. * @dev: Reference to structure of type pch_udc_regs
  689. * @dir: Whether Tx or Rx
  690. * DMA_DIR_RX: Receive
  691. * DMA_DIR_TX: Transmit
  692. */
  693. static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
  694. {
  695. if (dir == DMA_DIR_RX)
  696. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
  697. else if (dir == DMA_DIR_TX)
  698. pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
  699. }
  700. /**
  701. * pch_udc_set_csr_done() - Set the device control register
  702. * CSR done field (bit 13)
  703. * @dev: reference to structure of type pch_udc_regs
  704. */
  705. static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
  706. {
  707. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
  708. }
  709. /**
  710. * pch_udc_disable_interrupts() - Disables the specified interrupts
  711. * @dev: Reference to structure of type pch_udc_regs
  712. * @mask: Mask to disable interrupts
  713. */
  714. static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
  715. u32 mask)
  716. {
  717. pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
  718. }
  719. /**
  720. * pch_udc_enable_interrupts() - Enable the specified interrupts
  721. * @dev: Reference to structure of type pch_udc_regs
  722. * @mask: Mask to enable interrupts
  723. */
  724. static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
  725. u32 mask)
  726. {
  727. pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
  728. }
  729. /**
  730. * pch_udc_disable_ep_interrupts() - Disable endpoint interrupts
  731. * @dev: Reference to structure of type pch_udc_regs
  732. * @mask: Mask to disable interrupts
  733. */
  734. static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
  735. u32 mask)
  736. {
  737. pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
  738. }
  739. /**
  740. * pch_udc_enable_ep_interrupts() - Enable endpoint interrupts
  741. * @dev: Reference to structure of type pch_udc_regs
  742. * @mask: Mask to enable interrupts
  743. */
  744. static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
  745. u32 mask)
  746. {
  747. pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
  748. }
  749. /**
  750. * pch_udc_read_device_interrupts() - Read the device interrupts
  751. * @dev: Reference to structure of type pch_udc_regs
  752. * Retern The device interrupts
  753. */
  754. static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
  755. {
  756. return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
  757. }
  758. /**
  759. * pch_udc_write_device_interrupts() - Write device interrupts
  760. * @dev: Reference to structure of type pch_udc_regs
  761. * @val: The value to be written to interrupt register
  762. */
  763. static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
  764. u32 val)
  765. {
  766. pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
  767. }
  768. /**
  769. * pch_udc_read_ep_interrupts() - Read the endpoint interrupts
  770. * @dev: Reference to structure of type pch_udc_regs
  771. * Retern The endpoint interrupt
  772. */
  773. static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
  774. {
  775. return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
  776. }
  777. /**
  778. * pch_udc_write_ep_interrupts() - Clear endpoint interupts
  779. * @dev: Reference to structure of type pch_udc_regs
  780. * @val: The value to be written to interrupt register
  781. */
  782. static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
  783. u32 val)
  784. {
  785. pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
  786. }
  787. /**
  788. * pch_udc_read_device_status() - Read the device status
  789. * @dev: Reference to structure of type pch_udc_regs
  790. * Retern The device status
  791. */
  792. static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
  793. {
  794. return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
  795. }
  796. /**
  797. * pch_udc_read_ep_control() - Read the endpoint control
  798. * @ep: Reference to structure of type pch_udc_ep_regs
  799. * Retern The endpoint control register value
  800. */
  801. static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep)
  802. {
  803. return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR);
  804. }
  805. /**
  806. * pch_udc_clear_ep_control() - Clear the endpoint control register
  807. * @ep: Reference to structure of type pch_udc_ep_regs
  808. * Retern The endpoint control register value
  809. */
  810. static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep)
  811. {
  812. return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR);
  813. }
  814. /**
  815. * pch_udc_read_ep_status() - Read the endpoint status
  816. * @ep: Reference to structure of type pch_udc_ep_regs
  817. * Retern The endpoint status
  818. */
  819. static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep)
  820. {
  821. return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR);
  822. }
  823. /**
  824. * pch_udc_clear_ep_status() - Clear the endpoint status
  825. * @ep: Reference to structure of type pch_udc_ep_regs
  826. * @stat: Endpoint status
  827. */
  828. static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep,
  829. u32 stat)
  830. {
  831. return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR);
  832. }
  833. /**
  834. * pch_udc_ep_set_nak() - Set the bit 7 (SNAK field)
  835. * of the endpoint control register
  836. * @ep: Reference to structure of type pch_udc_ep_regs
  837. */
  838. static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep)
  839. {
  840. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK);
  841. }
  842. /**
  843. * pch_udc_ep_clear_nak() - Set the bit 8 (CNAK field)
  844. * of the endpoint control register
  845. * @ep: reference to structure of type pch_udc_ep_regs
  846. */
  847. static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep)
  848. {
  849. unsigned int loopcnt = 0;
  850. struct pch_udc_dev *dev = ep->dev;
  851. if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK))
  852. return;
  853. if (!ep->in) {
  854. loopcnt = 10000;
  855. while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
  856. --loopcnt)
  857. udelay(5);
  858. if (!loopcnt)
  859. dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
  860. __func__);
  861. }
  862. loopcnt = 10000;
  863. while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_NAK) && --loopcnt) {
  864. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
  865. udelay(5);
  866. }
  867. if (!loopcnt)
  868. dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
  869. __func__, ep->num, (ep->in ? "in" : "out"));
  870. }
  871. /**
  872. * pch_udc_ep_fifo_flush() - Flush the endpoint fifo
  873. * @ep: reference to structure of type pch_udc_ep_regs
  874. * @dir: direction of endpoint
  875. * 0: endpoint is OUT
  876. * !0: endpoint is IN
  877. */
  878. static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir)
  879. {
  880. if (dir) { /* IN ep */
  881. pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
  882. return;
  883. }
  884. }
  885. /**
  886. * pch_udc_ep_enable() - This api enables endpoint
  887. * @regs: Reference to structure pch_udc_ep_regs
  888. * @desc: endpoint descriptor
  889. */
  890. static void pch_udc_ep_enable(struct pch_udc_ep *ep,
  891. struct pch_udc_cfg_data *cfg,
  892. const struct usb_endpoint_descriptor *desc)
  893. {
  894. u32 val = 0;
  895. u32 buff_size = 0;
  896. pch_udc_ep_set_trfr_type(ep, desc->bmAttributes);
  897. if (ep->in)
  898. buff_size = UDC_EPIN_BUFF_SIZE;
  899. else
  900. buff_size = UDC_EPOUT_BUFF_SIZE;
  901. pch_udc_ep_set_bufsz(ep, buff_size, ep->in);
  902. pch_udc_ep_set_maxpkt(ep, le16_to_cpu(desc->wMaxPacketSize));
  903. pch_udc_ep_set_nak(ep);
  904. pch_udc_ep_fifo_flush(ep, ep->in);
  905. /* Configure the endpoint */
  906. val = ep->num << UDC_CSR_NE_NUM_SHIFT | ep->in << UDC_CSR_NE_DIR_SHIFT |
  907. ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) <<
  908. UDC_CSR_NE_TYPE_SHIFT) |
  909. (cfg->cur_cfg << UDC_CSR_NE_CFG_SHIFT) |
  910. (cfg->cur_intf << UDC_CSR_NE_INTF_SHIFT) |
  911. (cfg->cur_alt << UDC_CSR_NE_ALT_SHIFT) |
  912. le16_to_cpu(desc->wMaxPacketSize) << UDC_CSR_NE_MAX_PKT_SHIFT;
  913. if (ep->in)
  914. pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
  915. else
  916. pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
  917. }
  918. /**
  919. * pch_udc_ep_disable() - This api disables endpoint
  920. * @regs: Reference to structure pch_udc_ep_regs
  921. */
  922. static void pch_udc_ep_disable(struct pch_udc_ep *ep)
  923. {
  924. if (ep->in) {
  925. /* flush the fifo */
  926. pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR);
  927. /* set NAK */
  928. pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
  929. pch_udc_ep_bit_set(ep, UDC_EPSTS_ADDR, UDC_EPSTS_IN);
  930. } else {
  931. /* set NAK */
  932. pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
  933. }
  934. /* reset desc pointer */
  935. pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR);
  936. }
  937. /**
  938. * pch_udc_wait_ep_stall() - Wait EP stall.
  939. * @dev: Reference to pch_udc_dev structure
  940. */
  941. static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep)
  942. {
  943. unsigned int count = 10000;
  944. /* Wait till idle */
  945. while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count)
  946. udelay(5);
  947. if (!count)
  948. dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
  949. }
  950. /**
  951. * pch_udc_init() - This API initializes usb device controller
  952. * @dev: Rreference to pch_udc_regs structure
  953. */
  954. static void pch_udc_init(struct pch_udc_dev *dev)
  955. {
  956. if (NULL == dev) {
  957. pr_err("%s: Invalid address\n", __func__);
  958. return;
  959. }
  960. /* Soft Reset and Reset PHY */
  961. pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
  962. pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR);
  963. mdelay(1);
  964. pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
  965. pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
  966. mdelay(1);
  967. /* mask and clear all device interrupts */
  968. pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
  969. pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK);
  970. /* mask and clear all ep interrupts */
  971. pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
  972. pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
  973. /* enable dynamic CSR programmingi, self powered and device speed */
  974. if (speed_fs)
  975. pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
  976. UDC_DEVCFG_SP | UDC_DEVCFG_SPD_FS);
  977. else /* defaul high speed */
  978. pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
  979. UDC_DEVCFG_SP | UDC_DEVCFG_SPD_HS);
  980. pch_udc_bit_set(dev, UDC_DEVCTL_ADDR,
  981. (PCH_UDC_THLEN << UDC_DEVCTL_THLEN_SHIFT) |
  982. (PCH_UDC_BRLEN << UDC_DEVCTL_BRLEN_SHIFT) |
  983. UDC_DEVCTL_MODE | UDC_DEVCTL_BREN |
  984. UDC_DEVCTL_THE);
  985. }
  986. /**
  987. * pch_udc_exit() - This API exit usb device controller
  988. * @dev: Reference to pch_udc_regs structure
  989. */
  990. static void pch_udc_exit(struct pch_udc_dev *dev)
  991. {
  992. /* mask all device interrupts */
  993. pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
  994. /* mask all ep interrupts */
  995. pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
  996. /* put device in disconnected state */
  997. pch_udc_set_disconnect(dev);
  998. }
  999. /**
  1000. * pch_udc_pcd_get_frame() - This API is invoked to get the current frame number
  1001. * @gadget: Reference to the gadget driver
  1002. *
  1003. * Return codes:
  1004. * 0: Success
  1005. * -EINVAL: If the gadget passed is NULL
  1006. */
  1007. static int pch_udc_pcd_get_frame(struct usb_gadget *gadget)
  1008. {
  1009. struct pch_udc_dev *dev;
  1010. if (!gadget)
  1011. return -EINVAL;
  1012. dev = container_of(gadget, struct pch_udc_dev, gadget);
  1013. return pch_udc_get_frame(dev);
  1014. }
  1015. /**
  1016. * pch_udc_pcd_wakeup() - This API is invoked to initiate a remote wakeup
  1017. * @gadget: Reference to the gadget driver
  1018. *
  1019. * Return codes:
  1020. * 0: Success
  1021. * -EINVAL: If the gadget passed is NULL
  1022. */
  1023. static int pch_udc_pcd_wakeup(struct usb_gadget *gadget)
  1024. {
  1025. struct pch_udc_dev *dev;
  1026. unsigned long flags;
  1027. if (!gadget)
  1028. return -EINVAL;
  1029. dev = container_of(gadget, struct pch_udc_dev, gadget);
  1030. spin_lock_irqsave(&dev->lock, flags);
  1031. pch_udc_rmt_wakeup(dev);
  1032. spin_unlock_irqrestore(&dev->lock, flags);
  1033. return 0;
  1034. }
  1035. /**
  1036. * pch_udc_pcd_selfpowered() - This API is invoked to specify whether the device
  1037. * is self powered or not
  1038. * @gadget: Reference to the gadget driver
  1039. * @value: Specifies self powered or not
  1040. *
  1041. * Return codes:
  1042. * 0: Success
  1043. * -EINVAL: If the gadget passed is NULL
  1044. */
  1045. static int pch_udc_pcd_selfpowered(struct usb_gadget *gadget, int value)
  1046. {
  1047. struct pch_udc_dev *dev;
  1048. if (!gadget)
  1049. return -EINVAL;
  1050. dev = container_of(gadget, struct pch_udc_dev, gadget);
  1051. if (value)
  1052. pch_udc_set_selfpowered(dev);
  1053. else
  1054. pch_udc_clear_selfpowered(dev);
  1055. return 0;
  1056. }
  1057. /**
  1058. * pch_udc_pcd_pullup() - This API is invoked to make the device
  1059. * visible/invisible to the host
  1060. * @gadget: Reference to the gadget driver
  1061. * @is_on: Specifies whether the pull up is made active or inactive
  1062. *
  1063. * Return codes:
  1064. * 0: Success
  1065. * -EINVAL: If the gadget passed is NULL
  1066. */
  1067. static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
  1068. {
  1069. struct pch_udc_dev *dev;
  1070. if (!gadget)
  1071. return -EINVAL;
  1072. dev = container_of(gadget, struct pch_udc_dev, gadget);
  1073. if (is_on) {
  1074. pch_udc_reconnect(dev);
  1075. } else {
  1076. if (dev->driver && dev->driver->disconnect) {
  1077. spin_unlock(&dev->lock);
  1078. dev->driver->disconnect(&dev->gadget);
  1079. spin_lock(&dev->lock);
  1080. }
  1081. pch_udc_set_disconnect(dev);
  1082. }
  1083. return 0;
  1084. }
  1085. /**
  1086. * pch_udc_pcd_vbus_session() - This API is used by a driver for an external
  1087. * transceiver (or GPIO) that
  1088. * detects a VBUS power session starting/ending
  1089. * @gadget: Reference to the gadget driver
  1090. * @is_active: specifies whether the session is starting or ending
  1091. *
  1092. * Return codes:
  1093. * 0: Success
  1094. * -EINVAL: If the gadget passed is NULL
  1095. */
  1096. static int pch_udc_pcd_vbus_session(struct usb_gadget *gadget, int is_active)
  1097. {
  1098. struct pch_udc_dev *dev;
  1099. if (!gadget)
  1100. return -EINVAL;
  1101. dev = container_of(gadget, struct pch_udc_dev, gadget);
  1102. pch_udc_vbus_session(dev, is_active);
  1103. return 0;
  1104. }
  1105. /**
  1106. * pch_udc_pcd_vbus_draw() - This API is used by gadget drivers during
  1107. * SET_CONFIGURATION calls to
  1108. * specify how much power the device can consume
  1109. * @gadget: Reference to the gadget driver
  1110. * @mA: specifies the current limit in 2mA unit
  1111. *
  1112. * Return codes:
  1113. * -EINVAL: If the gadget passed is NULL
  1114. * -EOPNOTSUPP:
  1115. */
  1116. static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
  1117. {
  1118. return -EOPNOTSUPP;
  1119. }
  1120. static const struct usb_gadget_ops pch_udc_ops = {
  1121. .get_frame = pch_udc_pcd_get_frame,
  1122. .wakeup = pch_udc_pcd_wakeup,
  1123. .set_selfpowered = pch_udc_pcd_selfpowered,
  1124. .pullup = pch_udc_pcd_pullup,
  1125. .vbus_session = pch_udc_pcd_vbus_session,
  1126. .vbus_draw = pch_udc_pcd_vbus_draw,
  1127. };
  1128. /**
  1129. * complete_req() - This API is invoked from the driver when processing
  1130. * of a request is complete
  1131. * @ep: Reference to the endpoint structure
  1132. * @req: Reference to the request structure
  1133. * @status: Indicates the success/failure of completion
  1134. */
  1135. static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
  1136. int status)
  1137. {
  1138. struct pch_udc_dev *dev;
  1139. unsigned halted = ep->halted;
  1140. list_del_init(&req->queue);
  1141. /* set new status if pending */
  1142. if (req->req.status == -EINPROGRESS)
  1143. req->req.status = status;
  1144. else
  1145. status = req->req.status;
  1146. dev = ep->dev;
  1147. if (req->dma_mapped) {
  1148. if (req->dma == DMA_ADDR_INVALID) {
  1149. if (ep->in)
  1150. dma_unmap_single(&dev->pdev->dev, req->req.dma,
  1151. req->req.length,
  1152. DMA_TO_DEVICE);
  1153. else
  1154. dma_unmap_single(&dev->pdev->dev, req->req.dma,
  1155. req->req.length,
  1156. DMA_FROM_DEVICE);
  1157. req->req.dma = DMA_ADDR_INVALID;
  1158. } else {
  1159. if (ep->in)
  1160. dma_unmap_single(&dev->pdev->dev, req->dma,
  1161. req->req.length,
  1162. DMA_TO_DEVICE);
  1163. else {
  1164. dma_unmap_single(&dev->pdev->dev, req->dma,
  1165. req->req.length,
  1166. DMA_FROM_DEVICE);
  1167. memcpy(req->req.buf, req->buf, req->req.length);
  1168. }
  1169. kfree(req->buf);
  1170. req->dma = DMA_ADDR_INVALID;
  1171. }
  1172. req->dma_mapped = 0;
  1173. }
  1174. ep->halted = 1;
  1175. spin_unlock(&dev->lock);
  1176. if (!ep->in)
  1177. pch_udc_ep_clear_rrdy(ep);
  1178. req->req.complete(&ep->ep, &req->req);
  1179. spin_lock(&dev->lock);
  1180. ep->halted = halted;
  1181. }
  1182. /**
  1183. * empty_req_queue() - This API empties the request queue of an endpoint
  1184. * @ep: Reference to the endpoint structure
  1185. */
  1186. static void empty_req_queue(struct pch_udc_ep *ep)
  1187. {
  1188. struct pch_udc_request *req;
  1189. ep->halted = 1;
  1190. while (!list_empty(&ep->queue)) {
  1191. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  1192. complete_req(ep, req, -ESHUTDOWN); /* Remove from list */
  1193. }
  1194. }
  1195. /**
  1196. * pch_udc_free_dma_chain() - This function frees the DMA chain created
  1197. * for the request
  1198. * @dev Reference to the driver structure
  1199. * @req Reference to the request to be freed
  1200. *
  1201. * Return codes:
  1202. * 0: Success
  1203. */
  1204. static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
  1205. struct pch_udc_request *req)
  1206. {
  1207. struct pch_udc_data_dma_desc *td = req->td_data;
  1208. unsigned i = req->chain_len;
  1209. dma_addr_t addr2;
  1210. dma_addr_t addr = (dma_addr_t)td->next;
  1211. td->next = 0x00;
  1212. for (; i > 1; --i) {
  1213. /* do not free first desc., will be done by free for request */
  1214. td = phys_to_virt(addr);
  1215. addr2 = (dma_addr_t)td->next;
  1216. pci_pool_free(dev->data_requests, td, addr);
  1217. td->next = 0x00;
  1218. addr = addr2;
  1219. }
  1220. req->chain_len = 1;
  1221. }
  1222. /**
  1223. * pch_udc_create_dma_chain() - This function creates or reinitializes
  1224. * a DMA chain
  1225. * @ep: Reference to the endpoint structure
  1226. * @req: Reference to the request
  1227. * @buf_len: The buffer length
  1228. * @gfp_flags: Flags to be used while mapping the data buffer
  1229. *
  1230. * Return codes:
  1231. * 0: success,
  1232. * -ENOMEM: pci_pool_alloc invocation fails
  1233. */
  1234. static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
  1235. struct pch_udc_request *req,
  1236. unsigned long buf_len,
  1237. gfp_t gfp_flags)
  1238. {
  1239. struct pch_udc_data_dma_desc *td = req->td_data, *last;
  1240. unsigned long bytes = req->req.length, i = 0;
  1241. dma_addr_t dma_addr;
  1242. unsigned len = 1;
  1243. if (req->chain_len > 1)
  1244. pch_udc_free_dma_chain(ep->dev, req);
  1245. if (req->dma == DMA_ADDR_INVALID)
  1246. td->dataptr = req->req.dma;
  1247. else
  1248. td->dataptr = req->dma;
  1249. td->status = PCH_UDC_BS_HST_BSY;
  1250. for (; ; bytes -= buf_len, ++len) {
  1251. td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
  1252. if (bytes <= buf_len)
  1253. break;
  1254. last = td;
  1255. td = pci_pool_alloc(ep->dev->data_requests, gfp_flags,
  1256. &dma_addr);
  1257. if (!td)
  1258. goto nomem;
  1259. i += buf_len;
  1260. td->dataptr = req->td_data->dataptr + i;
  1261. last->next = dma_addr;
  1262. }
  1263. req->td_data_last = td;
  1264. td->status |= PCH_UDC_DMA_LAST;
  1265. td->next = req->td_data_phys;
  1266. req->chain_len = len;
  1267. return 0;
  1268. nomem:
  1269. if (len > 1) {
  1270. req->chain_len = len;
  1271. pch_udc_free_dma_chain(ep->dev, req);
  1272. }
  1273. req->chain_len = 1;
  1274. return -ENOMEM;
  1275. }
  1276. /**
  1277. * prepare_dma() - This function creates and initializes the DMA chain
  1278. * for the request
  1279. * @ep: Reference to the endpoint structure
  1280. * @req: Reference to the request
  1281. * @gfp: Flag to be used while mapping the data buffer
  1282. *
  1283. * Return codes:
  1284. * 0: Success
  1285. * Other 0: linux error number on failure
  1286. */
  1287. static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req,
  1288. gfp_t gfp)
  1289. {
  1290. int retval;
  1291. /* Allocate and create a DMA chain */
  1292. retval = pch_udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp);
  1293. if (retval) {
  1294. pr_err("%s: could not create DMA chain:%d\n", __func__, retval);
  1295. return retval;
  1296. }
  1297. if (ep->in)
  1298. req->td_data->status = (req->td_data->status &
  1299. ~PCH_UDC_BUFF_STS) | PCH_UDC_BS_HST_RDY;
  1300. return 0;
  1301. }
  1302. /**
  1303. * process_zlp() - This function process zero length packets
  1304. * from the gadget driver
  1305. * @ep: Reference to the endpoint structure
  1306. * @req: Reference to the request
  1307. */
  1308. static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req)
  1309. {
  1310. struct pch_udc_dev *dev = ep->dev;
  1311. /* IN zlp's are handled by hardware */
  1312. complete_req(ep, req, 0);
  1313. /* if set_config or set_intf is waiting for ack by zlp
  1314. * then set CSR_DONE
  1315. */
  1316. if (dev->set_cfg_not_acked) {
  1317. pch_udc_set_csr_done(dev);
  1318. dev->set_cfg_not_acked = 0;
  1319. }
  1320. /* setup command is ACK'ed now by zlp */
  1321. if (!dev->stall && dev->waiting_zlp_ack) {
  1322. pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
  1323. dev->waiting_zlp_ack = 0;
  1324. }
  1325. }
  1326. /**
  1327. * pch_udc_start_rxrequest() - This function starts the receive requirement.
  1328. * @ep: Reference to the endpoint structure
  1329. * @req: Reference to the request structure
  1330. */
  1331. static void pch_udc_start_rxrequest(struct pch_udc_ep *ep,
  1332. struct pch_udc_request *req)
  1333. {
  1334. struct pch_udc_data_dma_desc *td_data;
  1335. pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
  1336. td_data = req->td_data;
  1337. /* Set the status bits for all descriptors */
  1338. while (1) {
  1339. td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
  1340. PCH_UDC_BS_HST_RDY;
  1341. if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
  1342. break;
  1343. td_data = phys_to_virt(td_data->next);
  1344. }
  1345. /* Write the descriptor pointer */
  1346. pch_udc_ep_set_ddptr(ep, req->td_data_phys);
  1347. req->dma_going = 1;
  1348. pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
  1349. pch_udc_set_dma(ep->dev, DMA_DIR_RX);
  1350. pch_udc_ep_clear_nak(ep);
  1351. pch_udc_ep_set_rrdy(ep);
  1352. }
  1353. /**
  1354. * pch_udc_pcd_ep_enable() - This API enables the endpoint. It is called
  1355. * from gadget driver
  1356. * @usbep: Reference to the USB endpoint structure
  1357. * @desc: Reference to the USB endpoint descriptor structure
  1358. *
  1359. * Return codes:
  1360. * 0: Success
  1361. * -EINVAL:
  1362. * -ESHUTDOWN:
  1363. */
  1364. static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
  1365. const struct usb_endpoint_descriptor *desc)
  1366. {
  1367. struct pch_udc_ep *ep;
  1368. struct pch_udc_dev *dev;
  1369. unsigned long iflags;
  1370. if (!usbep || (usbep->name == ep0_string) || !desc ||
  1371. (desc->bDescriptorType != USB_DT_ENDPOINT) || !desc->wMaxPacketSize)
  1372. return -EINVAL;
  1373. ep = container_of(usbep, struct pch_udc_ep, ep);
  1374. dev = ep->dev;
  1375. if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
  1376. return -ESHUTDOWN;
  1377. spin_lock_irqsave(&dev->lock, iflags);
  1378. ep->desc = desc;
  1379. ep->halted = 0;
  1380. pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
  1381. ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
  1382. pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
  1383. spin_unlock_irqrestore(&dev->lock, iflags);
  1384. return 0;
  1385. }
  1386. /**
  1387. * pch_udc_pcd_ep_disable() - This API disables endpoint and is called
  1388. * from gadget driver
  1389. * @usbep Reference to the USB endpoint structure
  1390. *
  1391. * Return codes:
  1392. * 0: Success
  1393. * -EINVAL:
  1394. */
  1395. static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
  1396. {
  1397. struct pch_udc_ep *ep;
  1398. struct pch_udc_dev *dev;
  1399. unsigned long iflags;
  1400. if (!usbep)
  1401. return -EINVAL;
  1402. ep = container_of(usbep, struct pch_udc_ep, ep);
  1403. dev = ep->dev;
  1404. if ((usbep->name == ep0_string) || !ep->desc)
  1405. return -EINVAL;
  1406. spin_lock_irqsave(&ep->dev->lock, iflags);
  1407. empty_req_queue(ep);
  1408. ep->halted = 1;
  1409. pch_udc_ep_disable(ep);
  1410. pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
  1411. ep->desc = NULL;
  1412. INIT_LIST_HEAD(&ep->queue);
  1413. spin_unlock_irqrestore(&ep->dev->lock, iflags);
  1414. return 0;
  1415. }
  1416. /**
  1417. * pch_udc_alloc_request() - This function allocates request structure.
  1418. * It is called by gadget driver
  1419. * @usbep: Reference to the USB endpoint structure
  1420. * @gfp: Flag to be used while allocating memory
  1421. *
  1422. * Return codes:
  1423. * NULL: Failure
  1424. * Allocated address: Success
  1425. */
  1426. static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
  1427. gfp_t gfp)
  1428. {
  1429. struct pch_udc_request *req;
  1430. struct pch_udc_ep *ep;
  1431. struct pch_udc_data_dma_desc *dma_desc;
  1432. struct pch_udc_dev *dev;
  1433. if (!usbep)
  1434. return NULL;
  1435. ep = container_of(usbep, struct pch_udc_ep, ep);
  1436. dev = ep->dev;
  1437. req = kzalloc(sizeof *req, gfp);
  1438. if (!req)
  1439. return NULL;
  1440. req->req.dma = DMA_ADDR_INVALID;
  1441. req->dma = DMA_ADDR_INVALID;
  1442. INIT_LIST_HEAD(&req->queue);
  1443. if (!ep->dev->dma_addr)
  1444. return &req->req;
  1445. /* ep0 in requests are allocated from data pool here */
  1446. dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp,
  1447. &req->td_data_phys);
  1448. if (NULL == dma_desc) {
  1449. kfree(req);
  1450. return NULL;
  1451. }
  1452. /* prevent from using desc. - set HOST BUSY */
  1453. dma_desc->status |= PCH_UDC_BS_HST_BSY;
  1454. dma_desc->dataptr = __constant_cpu_to_le32(DMA_ADDR_INVALID);
  1455. req->td_data = dma_desc;
  1456. req->td_data_last = dma_desc;
  1457. req->chain_len = 1;
  1458. return &req->req;
  1459. }
  1460. /**
  1461. * pch_udc_free_request() - This function frees request structure.
  1462. * It is called by gadget driver
  1463. * @usbep: Reference to the USB endpoint structure
  1464. * @usbreq: Reference to the USB request
  1465. */
  1466. static void pch_udc_free_request(struct usb_ep *usbep,
  1467. struct usb_request *usbreq)
  1468. {
  1469. struct pch_udc_ep *ep;
  1470. struct pch_udc_request *req;
  1471. struct pch_udc_dev *dev;
  1472. if (!usbep || !usbreq)
  1473. return;
  1474. ep = container_of(usbep, struct pch_udc_ep, ep);
  1475. req = container_of(usbreq, struct pch_udc_request, req);
  1476. dev = ep->dev;
  1477. if (!list_empty(&req->queue))
  1478. dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
  1479. __func__, usbep->name, req);
  1480. if (req->td_data != NULL) {
  1481. if (req->chain_len > 1)
  1482. pch_udc_free_dma_chain(ep->dev, req);
  1483. pci_pool_free(ep->dev->data_requests, req->td_data,
  1484. req->td_data_phys);
  1485. }
  1486. kfree(req);
  1487. }
  1488. /**
  1489. * pch_udc_pcd_queue() - This function queues a request packet. It is called
  1490. * by gadget driver
  1491. * @usbep: Reference to the USB endpoint structure
  1492. * @usbreq: Reference to the USB request
  1493. * @gfp: Flag to be used while mapping the data buffer
  1494. *
  1495. * Return codes:
  1496. * 0: Success
  1497. * linux error number: Failure
  1498. */
  1499. static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
  1500. gfp_t gfp)
  1501. {
  1502. int retval = 0;
  1503. struct pch_udc_ep *ep;
  1504. struct pch_udc_dev *dev;
  1505. struct pch_udc_request *req;
  1506. unsigned long iflags;
  1507. if (!usbep || !usbreq || !usbreq->complete || !usbreq->buf)
  1508. return -EINVAL;
  1509. ep = container_of(usbep, struct pch_udc_ep, ep);
  1510. dev = ep->dev;
  1511. if (!ep->desc && ep->num)
  1512. return -EINVAL;
  1513. req = container_of(usbreq, struct pch_udc_request, req);
  1514. if (!list_empty(&req->queue))
  1515. return -EINVAL;
  1516. if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
  1517. return -ESHUTDOWN;
  1518. spin_lock_irqsave(&dev->lock, iflags);
  1519. /* map the buffer for dma */
  1520. if (usbreq->length &&
  1521. ((usbreq->dma == DMA_ADDR_INVALID) || !usbreq->dma)) {
  1522. if (!((unsigned long)(usbreq->buf) & 0x03)) {
  1523. if (ep->in)
  1524. usbreq->dma = dma_map_single(&dev->pdev->dev,
  1525. usbreq->buf,
  1526. usbreq->length,
  1527. DMA_TO_DEVICE);
  1528. else
  1529. usbreq->dma = dma_map_single(&dev->pdev->dev,
  1530. usbreq->buf,
  1531. usbreq->length,
  1532. DMA_FROM_DEVICE);
  1533. } else {
  1534. req->buf = kzalloc(usbreq->length, GFP_ATOMIC);
  1535. if (!req->buf) {
  1536. retval = -ENOMEM;
  1537. goto probe_end;
  1538. }
  1539. if (ep->in) {
  1540. memcpy(req->buf, usbreq->buf, usbreq->length);
  1541. req->dma = dma_map_single(&dev->pdev->dev,
  1542. req->buf,
  1543. usbreq->length,
  1544. DMA_TO_DEVICE);
  1545. } else
  1546. req->dma = dma_map_single(&dev->pdev->dev,
  1547. req->buf,
  1548. usbreq->length,
  1549. DMA_FROM_DEVICE);
  1550. }
  1551. req->dma_mapped = 1;
  1552. }
  1553. if (usbreq->length > 0) {
  1554. retval = prepare_dma(ep, req, GFP_ATOMIC);
  1555. if (retval)
  1556. goto probe_end;
  1557. }
  1558. usbreq->actual = 0;
  1559. usbreq->status = -EINPROGRESS;
  1560. req->dma_done = 0;
  1561. if (list_empty(&ep->queue) && !ep->halted) {
  1562. /* no pending transfer, so start this req */
  1563. if (!usbreq->length) {
  1564. process_zlp(ep, req);
  1565. retval = 0;
  1566. goto probe_end;
  1567. }
  1568. if (!ep->in) {
  1569. pch_udc_start_rxrequest(ep, req);
  1570. } else {
  1571. /*
  1572. * For IN trfr the descriptors will be programmed and
  1573. * P bit will be set when
  1574. * we get an IN token
  1575. */
  1576. pch_udc_wait_ep_stall(ep);
  1577. pch_udc_ep_clear_nak(ep);
  1578. pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
  1579. }
  1580. }
  1581. /* Now add this request to the ep's pending requests */
  1582. if (req != NULL)
  1583. list_add_tail(&req->queue, &ep->queue);
  1584. probe_end:
  1585. spin_unlock_irqrestore(&dev->lock, iflags);
  1586. return retval;
  1587. }
  1588. /**
  1589. * pch_udc_pcd_dequeue() - This function de-queues a request packet.
  1590. * It is called by gadget driver
  1591. * @usbep: Reference to the USB endpoint structure
  1592. * @usbreq: Reference to the USB request
  1593. *
  1594. * Return codes:
  1595. * 0: Success
  1596. * linux error number: Failure
  1597. */
  1598. static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
  1599. struct usb_request *usbreq)
  1600. {
  1601. struct pch_udc_ep *ep;
  1602. struct pch_udc_request *req;
  1603. struct pch_udc_dev *dev;
  1604. unsigned long flags;
  1605. int ret = -EINVAL;
  1606. ep = container_of(usbep, struct pch_udc_ep, ep);
  1607. dev = ep->dev;
  1608. if (!usbep || !usbreq || (!ep->desc && ep->num))
  1609. return ret;
  1610. req = container_of(usbreq, struct pch_udc_request, req);
  1611. spin_lock_irqsave(&ep->dev->lock, flags);
  1612. /* make sure it's still queued on this endpoint */
  1613. list_for_each_entry(req, &ep->queue, queue) {
  1614. if (&req->req == usbreq) {
  1615. pch_udc_ep_set_nak(ep);
  1616. if (!list_empty(&req->queue))
  1617. complete_req(ep, req, -ECONNRESET);
  1618. ret = 0;
  1619. break;
  1620. }
  1621. }
  1622. spin_unlock_irqrestore(&ep->dev->lock, flags);
  1623. return ret;
  1624. }
  1625. /**
  1626. * pch_udc_pcd_set_halt() - This function Sets or clear the endpoint halt
  1627. * feature
  1628. * @usbep: Reference to the USB endpoint structure
  1629. * @halt: Specifies whether to set or clear the feature
  1630. *
  1631. * Return codes:
  1632. * 0: Success
  1633. * linux error number: Failure
  1634. */
  1635. static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
  1636. {
  1637. struct pch_udc_ep *ep;
  1638. struct pch_udc_dev *dev;
  1639. unsigned long iflags;
  1640. int ret;
  1641. if (!usbep)
  1642. return -EINVAL;
  1643. ep = container_of(usbep, struct pch_udc_ep, ep);
  1644. dev = ep->dev;
  1645. if (!ep->desc && !ep->num)
  1646. return -EINVAL;
  1647. if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
  1648. return -ESHUTDOWN;
  1649. spin_lock_irqsave(&udc_stall_spinlock, iflags);
  1650. if (list_empty(&ep->queue)) {
  1651. if (halt) {
  1652. if (ep->num == PCH_UDC_EP0)
  1653. ep->dev->stall = 1;
  1654. pch_udc_ep_set_stall(ep);
  1655. pch_udc_enable_ep_interrupts(ep->dev,
  1656. PCH_UDC_EPINT(ep->in,
  1657. ep->num));
  1658. } else {
  1659. pch_udc_ep_clear_stall(ep);
  1660. }
  1661. ret = 0;
  1662. } else {
  1663. ret = -EAGAIN;
  1664. }
  1665. spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
  1666. return ret;
  1667. }
  1668. /**
  1669. * pch_udc_pcd_set_wedge() - This function Sets or clear the endpoint
  1670. * halt feature
  1671. * @usbep: Reference to the USB endpoint structure
  1672. * @halt: Specifies whether to set or clear the feature
  1673. *
  1674. * Return codes:
  1675. * 0: Success
  1676. * linux error number: Failure
  1677. */
  1678. static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
  1679. {
  1680. struct pch_udc_ep *ep;
  1681. struct pch_udc_dev *dev;
  1682. unsigned long iflags;
  1683. int ret;
  1684. if (!usbep)
  1685. return -EINVAL;
  1686. ep = container_of(usbep, struct pch_udc_ep, ep);
  1687. dev = ep->dev;
  1688. if (!ep->desc && !ep->num)
  1689. return -EINVAL;
  1690. if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
  1691. return -ESHUTDOWN;
  1692. spin_lock_irqsave(&udc_stall_spinlock, iflags);
  1693. if (!list_empty(&ep->queue)) {
  1694. ret = -EAGAIN;
  1695. } else {
  1696. if (ep->num == PCH_UDC_EP0)
  1697. ep->dev->stall = 1;
  1698. pch_udc_ep_set_stall(ep);
  1699. pch_udc_enable_ep_interrupts(ep->dev,
  1700. PCH_UDC_EPINT(ep->in, ep->num));
  1701. ep->dev->prot_stall = 1;
  1702. ret = 0;
  1703. }
  1704. spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
  1705. return ret;
  1706. }
  1707. /**
  1708. * pch_udc_pcd_fifo_flush() - This function Flush the FIFO of specified endpoint
  1709. * @usbep: Reference to the USB endpoint structure
  1710. */
  1711. static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
  1712. {
  1713. struct pch_udc_ep *ep;
  1714. if (!usbep)
  1715. return;
  1716. ep = container_of(usbep, struct pch_udc_ep, ep);
  1717. if (ep->desc || !ep->num)
  1718. pch_udc_ep_fifo_flush(ep, ep->in);
  1719. }
  1720. static const struct usb_ep_ops pch_udc_ep_ops = {
  1721. .enable = pch_udc_pcd_ep_enable,
  1722. .disable = pch_udc_pcd_ep_disable,
  1723. .alloc_request = pch_udc_alloc_request,
  1724. .free_request = pch_udc_free_request,
  1725. .queue = pch_udc_pcd_queue,
  1726. .dequeue = pch_udc_pcd_dequeue,
  1727. .set_halt = pch_udc_pcd_set_halt,
  1728. .set_wedge = pch_udc_pcd_set_wedge,
  1729. .fifo_status = NULL,
  1730. .fifo_flush = pch_udc_pcd_fifo_flush,
  1731. };
  1732. /**
  1733. * pch_udc_init_setup_buff() - This function initializes the SETUP buffer
  1734. * @td_stp: Reference to the SETP buffer structure
  1735. */
  1736. static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc *td_stp)
  1737. {
  1738. static u32 pky_marker;
  1739. if (!td_stp)
  1740. return;
  1741. td_stp->reserved = ++pky_marker;
  1742. memset(&td_stp->request, 0xFF, sizeof td_stp->request);
  1743. td_stp->status = PCH_UDC_BS_HST_RDY;
  1744. }
  1745. /**
  1746. * pch_udc_start_next_txrequest() - This function starts
  1747. * the next transmission requirement
  1748. * @ep: Reference to the endpoint structure
  1749. */
  1750. static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep)
  1751. {
  1752. struct pch_udc_request *req;
  1753. struct pch_udc_data_dma_desc *td_data;
  1754. if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P)
  1755. return;
  1756. if (list_empty(&ep->queue))
  1757. return;
  1758. /* next request */
  1759. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  1760. if (req->dma_going)
  1761. return;
  1762. if (!req->td_data)
  1763. return;
  1764. pch_udc_wait_ep_stall(ep);
  1765. req->dma_going = 1;
  1766. pch_udc_ep_set_ddptr(ep, 0);
  1767. td_data = req->td_data;
  1768. while (1) {
  1769. td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
  1770. PCH_UDC_BS_HST_RDY;
  1771. if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
  1772. break;
  1773. td_data = phys_to_virt(td_data->next);
  1774. }
  1775. pch_udc_ep_set_ddptr(ep, req->td_data_phys);
  1776. pch_udc_set_dma(ep->dev, DMA_DIR_TX);
  1777. pch_udc_ep_set_pd(ep);
  1778. pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
  1779. pch_udc_ep_clear_nak(ep);
  1780. }
  1781. /**
  1782. * pch_udc_complete_transfer() - This function completes a transfer
  1783. * @ep: Reference to the endpoint structure
  1784. */
  1785. static void pch_udc_complete_transfer(struct pch_udc_ep *ep)
  1786. {
  1787. struct pch_udc_request *req;
  1788. struct pch_udc_dev *dev = ep->dev;
  1789. if (list_empty(&ep->queue))
  1790. return;
  1791. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  1792. if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
  1793. PCH_UDC_BS_DMA_DONE)
  1794. return;
  1795. if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
  1796. PCH_UDC_RTS_SUCC) {
  1797. dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
  1798. "epstatus=0x%08x\n",
  1799. (req->td_data_last->status & PCH_UDC_RXTX_STS),
  1800. (int)(ep->epsts));
  1801. return;
  1802. }
  1803. req->req.actual = req->req.length;
  1804. req->td_data_last->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
  1805. req->td_data->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
  1806. complete_req(ep, req, 0);
  1807. req->dma_going = 0;
  1808. if (!list_empty(&ep->queue)) {
  1809. pch_udc_wait_ep_stall(ep);
  1810. pch_udc_ep_clear_nak(ep);
  1811. pch_udc_enable_ep_interrupts(ep->dev,
  1812. PCH_UDC_EPINT(ep->in, ep->num));
  1813. } else {
  1814. pch_udc_disable_ep_interrupts(ep->dev,
  1815. PCH_UDC_EPINT(ep->in, ep->num));
  1816. }
  1817. }
  1818. /**
  1819. * pch_udc_complete_receiver() - This function completes a receiver
  1820. * @ep: Reference to the endpoint structure
  1821. */
  1822. static void pch_udc_complete_receiver(struct pch_udc_ep *ep)
  1823. {
  1824. struct pch_udc_request *req;
  1825. struct pch_udc_dev *dev = ep->dev;
  1826. unsigned int count;
  1827. struct pch_udc_data_dma_desc *td;
  1828. dma_addr_t addr;
  1829. if (list_empty(&ep->queue))
  1830. return;
  1831. /* next request */
  1832. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  1833. pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
  1834. pch_udc_ep_set_ddptr(ep, 0);
  1835. if ((req->td_data_last->status & PCH_UDC_BUFF_STS) ==
  1836. PCH_UDC_BS_DMA_DONE)
  1837. td = req->td_data_last;
  1838. else
  1839. td = req->td_data;
  1840. while (1) {
  1841. if ((td->status & PCH_UDC_RXTX_STS) != PCH_UDC_RTS_SUCC) {
  1842. dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x "
  1843. "epstatus=0x%08x\n",
  1844. (req->td_data->status & PCH_UDC_RXTX_STS),
  1845. (int)(ep->epsts));
  1846. return;
  1847. }
  1848. if ((td->status & PCH_UDC_BUFF_STS) == PCH_UDC_BS_DMA_DONE)
  1849. if (td->status | PCH_UDC_DMA_LAST) {
  1850. count = td->status & PCH_UDC_RXTX_BYTES;
  1851. break;
  1852. }
  1853. if (td == req->td_data_last) {
  1854. dev_err(&dev->pdev->dev, "Not complete RX descriptor");
  1855. return;
  1856. }
  1857. addr = (dma_addr_t)td->next;
  1858. td = phys_to_virt(addr);
  1859. }
  1860. /* on 64k packets the RXBYTES field is zero */
  1861. if (!count && (req->req.length == UDC_DMA_MAXPACKET))
  1862. count = UDC_DMA_MAXPACKET;
  1863. req->td_data->status |= PCH_UDC_DMA_LAST;
  1864. td->status |= PCH_UDC_BS_HST_BSY;
  1865. req->dma_going = 0;
  1866. req->req.actual = count;
  1867. complete_req(ep, req, 0);
  1868. /* If there is a new/failed requests try that now */
  1869. if (!list_empty(&ep->queue)) {
  1870. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  1871. pch_udc_start_rxrequest(ep, req);
  1872. }
  1873. }
  1874. /**
  1875. * pch_udc_svc_data_in() - This function process endpoint interrupts
  1876. * for IN endpoints
  1877. * @dev: Reference to the device structure
  1878. * @ep_num: Endpoint that generated the interrupt
  1879. */
  1880. static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
  1881. {
  1882. u32 epsts;
  1883. struct pch_udc_ep *ep;
  1884. ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
  1885. epsts = ep->epsts;
  1886. ep->epsts = 0;
  1887. if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
  1888. UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
  1889. UDC_EPSTS_RSS | UDC_EPSTS_XFERDONE)))
  1890. return;
  1891. if ((epsts & UDC_EPSTS_BNA))
  1892. return;
  1893. if (epsts & UDC_EPSTS_HE)
  1894. return;
  1895. if (epsts & UDC_EPSTS_RSS) {
  1896. pch_udc_ep_set_stall(ep);
  1897. pch_udc_enable_ep_interrupts(ep->dev,
  1898. PCH_UDC_EPINT(ep->in, ep->num));
  1899. }
  1900. if (epsts & UDC_EPSTS_RCS) {
  1901. if (!dev->prot_stall) {
  1902. pch_udc_ep_clear_stall(ep);
  1903. } else {
  1904. pch_udc_ep_set_stall(ep);
  1905. pch_udc_enable_ep_interrupts(ep->dev,
  1906. PCH_UDC_EPINT(ep->in, ep->num));
  1907. }
  1908. }
  1909. if (epsts & UDC_EPSTS_TDC)
  1910. pch_udc_complete_transfer(ep);
  1911. /* On IN interrupt, provide data if we have any */
  1912. if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_RSS) &&
  1913. !(epsts & UDC_EPSTS_TDC) && !(epsts & UDC_EPSTS_TXEMPTY))
  1914. pch_udc_start_next_txrequest(ep);
  1915. }
  1916. /**
  1917. * pch_udc_svc_data_out() - Handles interrupts from OUT endpoint
  1918. * @dev: Reference to the device structure
  1919. * @ep_num: Endpoint that generated the interrupt
  1920. */
  1921. static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
  1922. {
  1923. u32 epsts;
  1924. struct pch_udc_ep *ep;
  1925. struct pch_udc_request *req = NULL;
  1926. ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
  1927. epsts = ep->epsts;
  1928. ep->epsts = 0;
  1929. if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) {
  1930. /* next request */
  1931. req = list_entry(ep->queue.next, struct pch_udc_request,
  1932. queue);
  1933. if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
  1934. PCH_UDC_BS_DMA_DONE) {
  1935. if (!req->dma_going)
  1936. pch_udc_start_rxrequest(ep, req);
  1937. return;
  1938. }
  1939. }
  1940. if (epsts & UDC_EPSTS_HE)
  1941. return;
  1942. if (epsts & UDC_EPSTS_RSS) {
  1943. pch_udc_ep_set_stall(ep);
  1944. pch_udc_enable_ep_interrupts(ep->dev,
  1945. PCH_UDC_EPINT(ep->in, ep->num));
  1946. }
  1947. if (epsts & UDC_EPSTS_RCS) {
  1948. if (!dev->prot_stall) {
  1949. pch_udc_ep_clear_stall(ep);
  1950. } else {
  1951. pch_udc_ep_set_stall(ep);
  1952. pch_udc_enable_ep_interrupts(ep->dev,
  1953. PCH_UDC_EPINT(ep->in, ep->num));
  1954. }
  1955. }
  1956. if (((epsts & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
  1957. UDC_EPSTS_OUT_DATA) {
  1958. if (ep->dev->prot_stall == 1) {
  1959. pch_udc_ep_set_stall(ep);
  1960. pch_udc_enable_ep_interrupts(ep->dev,
  1961. PCH_UDC_EPINT(ep->in, ep->num));
  1962. } else {
  1963. pch_udc_complete_receiver(ep);
  1964. }
  1965. }
  1966. if (list_empty(&ep->queue))
  1967. pch_udc_set_dma(dev, DMA_DIR_RX);
  1968. }
  1969. /**
  1970. * pch_udc_svc_control_in() - Handle Control IN endpoint interrupts
  1971. * @dev: Reference to the device structure
  1972. */
  1973. static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
  1974. {
  1975. u32 epsts;
  1976. struct pch_udc_ep *ep;
  1977. struct pch_udc_ep *ep_out;
  1978. ep = &dev->ep[UDC_EP0IN_IDX];
  1979. ep_out = &dev->ep[UDC_EP0OUT_IDX];
  1980. epsts = ep->epsts;
  1981. ep->epsts = 0;
  1982. if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
  1983. UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
  1984. UDC_EPSTS_XFERDONE)))
  1985. return;
  1986. if ((epsts & UDC_EPSTS_BNA))
  1987. return;
  1988. if (epsts & UDC_EPSTS_HE)
  1989. return;
  1990. if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
  1991. pch_udc_complete_transfer(ep);
  1992. pch_udc_clear_dma(dev, DMA_DIR_RX);
  1993. ep_out->td_data->status = (ep_out->td_data->status &
  1994. ~PCH_UDC_BUFF_STS) |
  1995. PCH_UDC_BS_HST_RDY;
  1996. pch_udc_ep_clear_nak(ep_out);
  1997. pch_udc_set_dma(dev, DMA_DIR_RX);
  1998. pch_udc_ep_set_rrdy(ep_out);
  1999. }
  2000. /* On IN interrupt, provide data if we have any */
  2001. if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_TDC) &&
  2002. !(epsts & UDC_EPSTS_TXEMPTY))
  2003. pch_udc_start_next_txrequest(ep);
  2004. }
  2005. /**
  2006. * pch_udc_svc_control_out() - Routine that handle Control
  2007. * OUT endpoint interrupts
  2008. * @dev: Reference to the device structure
  2009. */
  2010. static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
  2011. {
  2012. u32 stat;
  2013. int setup_supported;
  2014. struct pch_udc_ep *ep;
  2015. ep = &dev->ep[UDC_EP0OUT_IDX];
  2016. stat = ep->epsts;
  2017. ep->epsts = 0;
  2018. /* If setup data */
  2019. if (((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
  2020. UDC_EPSTS_OUT_SETUP) {
  2021. dev->stall = 0;
  2022. dev->ep[UDC_EP0IN_IDX].halted = 0;
  2023. dev->ep[UDC_EP0OUT_IDX].halted = 0;
  2024. dev->setup_data = ep->td_stp->request;
  2025. pch_udc_init_setup_buff(ep->td_stp);
  2026. pch_udc_clear_dma(dev, DMA_DIR_RX);
  2027. pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
  2028. dev->ep[UDC_EP0IN_IDX].in);
  2029. if ((dev->setup_data.bRequestType & USB_DIR_IN))
  2030. dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
  2031. else /* OUT */
  2032. dev->gadget.ep0 = &ep->ep;
  2033. spin_unlock(&dev->lock);
  2034. /* If Mass storage Reset */
  2035. if ((dev->setup_data.bRequestType == 0x21) &&
  2036. (dev->setup_data.bRequest == 0xFF))
  2037. dev->prot_stall = 0;
  2038. /* call gadget with setup data received */
  2039. setup_supported = dev->driver->setup(&dev->gadget,
  2040. &dev->setup_data);
  2041. spin_lock(&dev->lock);
  2042. if (dev->setup_data.bRequestType & USB_DIR_IN) {
  2043. ep->td_data->status = (ep->td_data->status &
  2044. ~PCH_UDC_BUFF_STS) |
  2045. PCH_UDC_BS_HST_RDY;
  2046. pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
  2047. }
  2048. /* ep0 in returns data on IN phase */
  2049. if (setup_supported >= 0 && setup_supported <
  2050. UDC_EP0IN_MAX_PKT_SIZE) {
  2051. pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
  2052. /* Gadget would have queued a request when
  2053. * we called the setup */
  2054. if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
  2055. pch_udc_set_dma(dev, DMA_DIR_RX);
  2056. pch_udc_ep_clear_nak(ep);
  2057. }
  2058. } else if (setup_supported < 0) {
  2059. /* if unsupported request, then stall */
  2060. pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
  2061. pch_udc_enable_ep_interrupts(ep->dev,
  2062. PCH_UDC_EPINT(ep->in, ep->num));
  2063. dev->stall = 0;
  2064. pch_udc_set_dma(dev, DMA_DIR_RX);
  2065. } else {
  2066. dev->waiting_zlp_ack = 1;
  2067. }
  2068. } else if ((((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
  2069. UDC_EPSTS_OUT_DATA) && !dev->stall) {
  2070. pch_udc_clear_dma(dev, DMA_DIR_RX);
  2071. pch_udc_ep_set_ddptr(ep, 0);
  2072. if (!list_empty(&ep->queue)) {
  2073. ep->epsts = stat;
  2074. pch_udc_svc_data_out(dev, PCH_UDC_EP0);
  2075. }
  2076. pch_udc_set_dma(dev, DMA_DIR_RX);
  2077. }
  2078. pch_udc_ep_set_rrdy(ep);
  2079. }
  2080. /**
  2081. * pch_udc_postsvc_epinters() - This function enables end point interrupts
  2082. * and clears NAK status
  2083. * @dev: Reference to the device structure
  2084. * @ep_num: End point number
  2085. */
  2086. static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
  2087. {
  2088. struct pch_udc_ep *ep;
  2089. struct pch_udc_request *req;
  2090. ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
  2091. if (!list_empty(&ep->queue)) {
  2092. req = list_entry(ep->queue.next, struct pch_udc_request, queue);
  2093. pch_udc_enable_ep_interrupts(ep->dev,
  2094. PCH_UDC_EPINT(ep->in, ep->num));
  2095. pch_udc_ep_clear_nak(ep);
  2096. }
  2097. }
  2098. /**
  2099. * pch_udc_read_all_epstatus() - This function read all endpoint status
  2100. * @dev: Reference to the device structure
  2101. * @ep_intr: Status of endpoint interrupt
  2102. */
  2103. static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
  2104. {
  2105. int i;
  2106. struct pch_udc_ep *ep;
  2107. for (i = 0; i < PCH_UDC_USED_EP_NUM; i++) {
  2108. /* IN */
  2109. if (ep_intr & (0x1 << i)) {
  2110. ep = &dev->ep[UDC_EPIN_IDX(i)];
  2111. ep->epsts = pch_udc_read_ep_status(ep);
  2112. pch_udc_clear_ep_status(ep, ep->epsts);
  2113. }
  2114. /* OUT */
  2115. if (ep_intr & (0x10000 << i)) {
  2116. ep = &dev->ep[UDC_EPOUT_IDX(i)];
  2117. ep->epsts = pch_udc_read_ep_status(ep);
  2118. pch_udc_clear_ep_status(ep, ep->epsts);
  2119. }
  2120. }
  2121. }
  2122. /**
  2123. * pch_udc_activate_control_ep() - This function enables the control endpoints
  2124. * for traffic after a reset
  2125. * @dev: Reference to the device structure
  2126. */
  2127. static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
  2128. {
  2129. struct pch_udc_ep *ep;
  2130. u32 val;
  2131. /* Setup the IN endpoint */
  2132. ep = &dev->ep[UDC_EP0IN_IDX];
  2133. pch_udc_clear_ep_control(ep);
  2134. pch_udc_ep_fifo_flush(ep, ep->in);
  2135. pch_udc_ep_set_bufsz(ep, UDC_EP0IN_BUFF_SIZE, ep->in);
  2136. pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE);
  2137. /* Initialize the IN EP Descriptor */
  2138. ep->td_data = NULL;
  2139. ep->td_stp = NULL;
  2140. ep->td_data_phys = 0;
  2141. ep->td_stp_phys = 0;
  2142. /* Setup the OUT endpoint */
  2143. ep = &dev->ep[UDC_EP0OUT_IDX];
  2144. pch_udc_clear_ep_control(ep);
  2145. pch_udc_ep_fifo_flush(ep, ep->in);
  2146. pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in);
  2147. pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE);
  2148. val = UDC_EP0OUT_MAX_PKT_SIZE << UDC_CSR_NE_MAX_PKT_SHIFT;
  2149. pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
  2150. /* Initialize the SETUP buffer */
  2151. pch_udc_init_setup_buff(ep->td_stp);
  2152. /* Write the pointer address of dma descriptor */
  2153. pch_udc_ep_set_subptr(ep, ep->td_stp_phys);
  2154. /* Write the pointer address of Setup descriptor */
  2155. pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
  2156. /* Initialize the dma descriptor */
  2157. ep->td_data->status = PCH_UDC_DMA_LAST;
  2158. ep->td_data->dataptr = dev->dma_addr;
  2159. ep->td_data->next = ep->td_data_phys;
  2160. pch_udc_ep_clear_nak(ep);
  2161. }
  2162. /**
  2163. * pch_udc_svc_ur_interrupt() - This function handles a USB reset interrupt
  2164. * @dev: Reference to driver structure
  2165. */
  2166. static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
  2167. {
  2168. struct pch_udc_ep *ep;
  2169. int i;
  2170. pch_udc_clear_dma(dev, DMA_DIR_TX);
  2171. pch_udc_clear_dma(dev, DMA_DIR_RX);
  2172. /* Mask all endpoint interrupts */
  2173. pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
  2174. /* clear all endpoint interrupts */
  2175. pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
  2176. for (i = 0; i < PCH_UDC_EP_NUM; i++) {
  2177. ep = &dev->ep[i];
  2178. pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK);
  2179. pch_udc_clear_ep_control(ep);
  2180. pch_udc_ep_set_ddptr(ep, 0);
  2181. pch_udc_write_csr(ep->dev, 0x00, i);
  2182. }
  2183. dev->stall = 0;
  2184. dev->prot_stall = 0;
  2185. dev->waiting_zlp_ack = 0;
  2186. dev->set_cfg_not_acked = 0;
  2187. /* disable ep to empty req queue. Skip the control EP's */
  2188. for (i = 0; i < (PCH_UDC_USED_EP_NUM*2); i++) {
  2189. ep = &dev->ep[i];
  2190. pch_udc_ep_set_nak(ep);
  2191. pch_udc_ep_fifo_flush(ep, ep->in);
  2192. /* Complete request queue */
  2193. empty_req_queue(ep);
  2194. }
  2195. if (dev->driver && dev->driver->disconnect) {
  2196. spin_unlock(&dev->lock);
  2197. dev->driver->disconnect(&dev->gadget);
  2198. spin_lock(&dev->lock);
  2199. }
  2200. }
  2201. /**
  2202. * pch_udc_svc_enum_interrupt() - This function handles a USB speed enumeration
  2203. * done interrupt
  2204. * @dev: Reference to driver structure
  2205. */
  2206. static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
  2207. {
  2208. u32 dev_stat, dev_speed;
  2209. u32 speed = USB_SPEED_FULL;
  2210. dev_stat = pch_udc_read_device_status(dev);
  2211. dev_speed = (dev_stat & UDC_DEVSTS_ENUM_SPEED_MASK) >>
  2212. UDC_DEVSTS_ENUM_SPEED_SHIFT;
  2213. switch (dev_speed) {
  2214. case UDC_DEVSTS_ENUM_SPEED_HIGH:
  2215. speed = USB_SPEED_HIGH;
  2216. break;
  2217. case UDC_DEVSTS_ENUM_SPEED_FULL:
  2218. speed = USB_SPEED_FULL;
  2219. break;
  2220. case UDC_DEVSTS_ENUM_SPEED_LOW:
  2221. speed = USB_SPEED_LOW;
  2222. break;
  2223. default:
  2224. BUG();
  2225. }
  2226. dev->gadget.speed = speed;
  2227. pch_udc_activate_control_ep(dev);
  2228. pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
  2229. pch_udc_set_dma(dev, DMA_DIR_TX);
  2230. pch_udc_set_dma(dev, DMA_DIR_RX);
  2231. pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
  2232. /* enable device interrupts */
  2233. pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
  2234. UDC_DEVINT_ES | UDC_DEVINT_ENUM |
  2235. UDC_DEVINT_SI | UDC_DEVINT_SC);
  2236. }
  2237. /**
  2238. * pch_udc_svc_intf_interrupt() - This function handles a set interface
  2239. * interrupt
  2240. * @dev: Reference to driver structure
  2241. */
  2242. static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
  2243. {
  2244. u32 reg, dev_stat = 0;
  2245. int i, ret;
  2246. dev_stat = pch_udc_read_device_status(dev);
  2247. dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
  2248. UDC_DEVSTS_INTF_SHIFT;
  2249. dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
  2250. UDC_DEVSTS_ALT_SHIFT;
  2251. dev->set_cfg_not_acked = 1;
  2252. /* Construct the usb request for gadget driver and inform it */
  2253. memset(&dev->setup_data, 0 , sizeof dev->setup_data);
  2254. dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
  2255. dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
  2256. dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
  2257. dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
  2258. /* programm the Endpoint Cfg registers */
  2259. /* Only one end point cfg register */
  2260. reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
  2261. reg = (reg & ~UDC_CSR_NE_INTF_MASK) |
  2262. (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
  2263. reg = (reg & ~UDC_CSR_NE_ALT_MASK) |
  2264. (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
  2265. pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
  2266. for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
  2267. /* clear stall bits */
  2268. pch_udc_ep_clear_stall(&(dev->ep[i]));
  2269. dev->ep[i].halted = 0;
  2270. }
  2271. dev->stall = 0;
  2272. spin_unlock(&dev->lock);
  2273. ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
  2274. spin_lock(&dev->lock);
  2275. }
  2276. /**
  2277. * pch_udc_svc_cfg_interrupt() - This function handles a set configuration
  2278. * interrupt
  2279. * @dev: Reference to driver structure
  2280. */
  2281. static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
  2282. {
  2283. int i, ret;
  2284. u32 reg, dev_stat = 0;
  2285. dev_stat = pch_udc_read_device_status(dev);
  2286. dev->set_cfg_not_acked = 1;
  2287. dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
  2288. UDC_DEVSTS_CFG_SHIFT;
  2289. /* make usb request for gadget driver */
  2290. memset(&dev->setup_data, 0 , sizeof dev->setup_data);
  2291. dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
  2292. dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
  2293. /* program the NE registers */
  2294. /* Only one end point cfg register */
  2295. reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
  2296. reg = (reg & ~UDC_CSR_NE_CFG_MASK) |
  2297. (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
  2298. pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
  2299. for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
  2300. /* clear stall bits */
  2301. pch_udc_ep_clear_stall(&(dev->ep[i]));
  2302. dev->ep[i].halted = 0;
  2303. }
  2304. dev->stall = 0;
  2305. /* call gadget zero with setup data received */
  2306. spin_unlock(&dev->lock);
  2307. ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
  2308. spin_lock(&dev->lock);
  2309. }
  2310. /**
  2311. * pch_udc_dev_isr() - This function services device interrupts
  2312. * by invoking appropriate routines.
  2313. * @dev: Reference to the device structure
  2314. * @dev_intr: The Device interrupt status.
  2315. */
  2316. static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
  2317. {
  2318. /* USB Reset Interrupt */
  2319. if (dev_intr & UDC_DEVINT_UR)
  2320. pch_udc_svc_ur_interrupt(dev);
  2321. /* Enumeration Done Interrupt */
  2322. if (dev_intr & UDC_DEVINT_ENUM)
  2323. pch_udc_svc_enum_interrupt(dev);
  2324. /* Set Interface Interrupt */
  2325. if (dev_intr & UDC_DEVINT_SI)
  2326. pch_udc_svc_intf_interrupt(dev);
  2327. /* Set Config Interrupt */
  2328. if (dev_intr & UDC_DEVINT_SC)
  2329. pch_udc_svc_cfg_interrupt(dev);
  2330. /* USB Suspend interrupt */
  2331. if (dev_intr & UDC_DEVINT_US) {
  2332. if (dev->driver
  2333. && dev->driver->suspend) {
  2334. spin_unlock(&dev->lock);
  2335. dev->driver->suspend(&dev->gadget);
  2336. spin_lock(&dev->lock);
  2337. }
  2338. if (dev->vbus_session == 0) {
  2339. if (dev->driver && dev->driver->disconnect) {
  2340. spin_unlock(&dev->lock);
  2341. dev->driver->disconnect(&dev->gadget);
  2342. spin_lock(&dev->lock);
  2343. }
  2344. pch_udc_reconnect(dev);
  2345. }
  2346. dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
  2347. }
  2348. /* Clear the SOF interrupt, if enabled */
  2349. if (dev_intr & UDC_DEVINT_SOF)
  2350. dev_dbg(&dev->pdev->dev, "SOF\n");
  2351. /* ES interrupt, IDLE > 3ms on the USB */
  2352. if (dev_intr & UDC_DEVINT_ES)
  2353. dev_dbg(&dev->pdev->dev, "ES\n");
  2354. /* RWKP interrupt */
  2355. if (dev_intr & UDC_DEVINT_RWKP)
  2356. dev_dbg(&dev->pdev->dev, "RWKP\n");
  2357. }
  2358. /**
  2359. * pch_udc_isr() - This function handles interrupts from the PCH USB Device
  2360. * @irq: Interrupt request number
  2361. * @dev: Reference to the device structure
  2362. */
  2363. static irqreturn_t pch_udc_isr(int irq, void *pdev)
  2364. {
  2365. struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
  2366. u32 dev_intr, ep_intr;
  2367. int i;
  2368. dev_intr = pch_udc_read_device_interrupts(dev);
  2369. ep_intr = pch_udc_read_ep_interrupts(dev);
  2370. /* For a hot plug, this find that the controller is hung up. */
  2371. if (dev_intr == ep_intr)
  2372. if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
  2373. dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
  2374. /* The controller is reset */
  2375. pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
  2376. return IRQ_HANDLED;
  2377. }
  2378. if (dev_intr)
  2379. /* Clear device interrupts */
  2380. pch_udc_write_device_interrupts(dev, dev_intr);
  2381. if (ep_intr)
  2382. /* Clear ep interrupts */
  2383. pch_udc_write_ep_interrupts(dev, ep_intr);
  2384. if (!dev_intr && !ep_intr)
  2385. return IRQ_NONE;
  2386. spin_lock(&dev->lock);
  2387. if (dev_intr)
  2388. pch_udc_dev_isr(dev, dev_intr);
  2389. if (ep_intr) {
  2390. pch_udc_read_all_epstatus(dev, ep_intr);
  2391. /* Process Control In interrupts, if present */
  2392. if (ep_intr & UDC_EPINT_IN_EP0) {
  2393. pch_udc_svc_control_in(dev);
  2394. pch_udc_postsvc_epinters(dev, 0);
  2395. }
  2396. /* Process Control Out interrupts, if present */
  2397. if (ep_intr & UDC_EPINT_OUT_EP0)
  2398. pch_udc_svc_control_out(dev);
  2399. /* Process data in end point interrupts */
  2400. for (i = 1; i < PCH_UDC_USED_EP_NUM; i++) {
  2401. if (ep_intr & (1 << i)) {
  2402. pch_udc_svc_data_in(dev, i);
  2403. pch_udc_postsvc_epinters(dev, i);
  2404. }
  2405. }
  2406. /* Process data out end point interrupts */
  2407. for (i = UDC_EPINT_OUT_SHIFT + 1; i < (UDC_EPINT_OUT_SHIFT +
  2408. PCH_UDC_USED_EP_NUM); i++)
  2409. if (ep_intr & (1 << i))
  2410. pch_udc_svc_data_out(dev, i -
  2411. UDC_EPINT_OUT_SHIFT);
  2412. }
  2413. spin_unlock(&dev->lock);
  2414. return IRQ_HANDLED;
  2415. }
  2416. /**
  2417. * pch_udc_setup_ep0() - This function enables control endpoint for traffic
  2418. * @dev: Reference to the device structure
  2419. */
  2420. static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
  2421. {
  2422. /* enable ep0 interrupts */
  2423. pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
  2424. UDC_EPINT_OUT_EP0);
  2425. /* enable device interrupts */
  2426. pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
  2427. UDC_DEVINT_ES | UDC_DEVINT_ENUM |
  2428. UDC_DEVINT_SI | UDC_DEVINT_SC);
  2429. }
  2430. /**
  2431. * gadget_release() - Free the gadget driver private data
  2432. * @pdev reference to struct pci_dev
  2433. */
  2434. static void gadget_release(struct device *pdev)
  2435. {
  2436. struct pch_udc_dev *dev = dev_get_drvdata(pdev);
  2437. kfree(dev);
  2438. }
  2439. /**
  2440. * pch_udc_pcd_reinit() - This API initializes the endpoint structures
  2441. * @dev: Reference to the driver structure
  2442. */
  2443. static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
  2444. {
  2445. const char *const ep_string[] = {
  2446. ep0_string, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
  2447. "ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
  2448. "ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
  2449. "ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
  2450. "ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
  2451. "ep15in", "ep15out",
  2452. };
  2453. int i;
  2454. dev->gadget.speed = USB_SPEED_UNKNOWN;
  2455. INIT_LIST_HEAD(&dev->gadget.ep_list);
  2456. /* Initialize the endpoints structures */
  2457. memset(dev->ep, 0, sizeof dev->ep);
  2458. for (i = 0; i < PCH_UDC_EP_NUM; i++) {
  2459. struct pch_udc_ep *ep = &dev->ep[i];
  2460. ep->dev = dev;
  2461. ep->halted = 1;
  2462. ep->num = i / 2;
  2463. ep->in = ~i & 1;
  2464. ep->ep.name = ep_string[i];
  2465. ep->ep.ops = &pch_udc_ep_ops;
  2466. if (ep->in)
  2467. ep->offset_addr = ep->num * UDC_EP_REG_SHIFT;
  2468. else
  2469. ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) *
  2470. UDC_EP_REG_SHIFT;
  2471. /* need to set ep->ep.maxpacket and set Default Configuration?*/
  2472. ep->ep.maxpacket = UDC_BULK_MAX_PKT_SIZE;
  2473. list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
  2474. INIT_LIST_HEAD(&ep->queue);
  2475. }
  2476. dev->ep[UDC_EP0IN_IDX].ep.maxpacket = UDC_EP0IN_MAX_PKT_SIZE;
  2477. dev->ep[UDC_EP0OUT_IDX].ep.maxpacket = UDC_EP0OUT_MAX_PKT_SIZE;
  2478. /* remove ep0 in and out from the list. They have own pointer */
  2479. list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
  2480. list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
  2481. dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
  2482. INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
  2483. }
  2484. /**
  2485. * pch_udc_pcd_init() - This API initializes the driver structure
  2486. * @dev: Reference to the driver structure
  2487. *
  2488. * Return codes:
  2489. * 0: Success
  2490. */
  2491. static int pch_udc_pcd_init(struct pch_udc_dev *dev)
  2492. {
  2493. pch_udc_init(dev);
  2494. pch_udc_pcd_reinit(dev);
  2495. return 0;
  2496. }
  2497. /**
  2498. * init_dma_pools() - create dma pools during initialization
  2499. * @pdev: reference to struct pci_dev
  2500. */
  2501. static int init_dma_pools(struct pch_udc_dev *dev)
  2502. {
  2503. struct pch_udc_stp_dma_desc *td_stp;
  2504. struct pch_udc_data_dma_desc *td_data;
  2505. /* DMA setup */
  2506. dev->data_requests = pci_pool_create("data_requests", dev->pdev,
  2507. sizeof(struct pch_udc_data_dma_desc), 0, 0);
  2508. if (!dev->data_requests) {
  2509. dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
  2510. __func__);
  2511. return -ENOMEM;
  2512. }
  2513. /* dma desc for setup data */
  2514. dev->stp_requests = pci_pool_create("setup requests", dev->pdev,
  2515. sizeof(struct pch_udc_stp_dma_desc), 0, 0);
  2516. if (!dev->stp_requests) {
  2517. dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
  2518. __func__);
  2519. return -ENOMEM;
  2520. }
  2521. /* setup */
  2522. td_stp = pci_pool_alloc(dev->stp_requests, GFP_KERNEL,
  2523. &dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
  2524. if (!td_stp) {
  2525. dev_err(&dev->pdev->dev,
  2526. "%s: can't allocate setup dma descriptor\n", __func__);
  2527. return -ENOMEM;
  2528. }
  2529. dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
  2530. /* data: 0 packets !? */
  2531. td_data = pci_pool_alloc(dev->data_requests, GFP_KERNEL,
  2532. &dev->ep[UDC_EP0OUT_IDX].td_data_phys);
  2533. if (!td_data) {
  2534. dev_err(&dev->pdev->dev,
  2535. "%s: can't allocate data dma descriptor\n", __func__);
  2536. return -ENOMEM;
  2537. }
  2538. dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
  2539. dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
  2540. dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
  2541. dev->ep[UDC_EP0IN_IDX].td_data = NULL;
  2542. dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
  2543. dev->ep0out_buf = kzalloc(UDC_EP0OUT_BUFF_SIZE * 4, GFP_KERNEL);
  2544. if (!dev->ep0out_buf)
  2545. return -ENOMEM;
  2546. dev->dma_addr = dma_map_single(&dev->pdev->dev, dev->ep0out_buf,
  2547. UDC_EP0OUT_BUFF_SIZE * 4,
  2548. DMA_FROM_DEVICE);
  2549. return 0;
  2550. }
  2551. int usb_gadget_probe_driver(struct usb_gadget_driver *driver,
  2552. int (*bind)(struct usb_gadget *))
  2553. {
  2554. struct pch_udc_dev *dev = pch_udc;
  2555. int retval;
  2556. if (!driver || (driver->speed == USB_SPEED_UNKNOWN) || !bind ||
  2557. !driver->setup || !driver->unbind || !driver->disconnect) {
  2558. dev_err(&dev->pdev->dev,
  2559. "%s: invalid driver parameter\n", __func__);
  2560. return -EINVAL;
  2561. }
  2562. if (!dev)
  2563. return -ENODEV;
  2564. if (dev->driver) {
  2565. dev_err(&dev->pdev->dev, "%s: already bound\n", __func__);
  2566. return -EBUSY;
  2567. }
  2568. driver->driver.bus = NULL;
  2569. dev->driver = driver;
  2570. dev->gadget.dev.driver = &driver->driver;
  2571. /* Invoke the bind routine of the gadget driver */
  2572. retval = bind(&dev->gadget);
  2573. if (retval) {
  2574. dev_err(&dev->pdev->dev, "%s: binding to %s returning %d\n",
  2575. __func__, driver->driver.name, retval);
  2576. dev->driver = NULL;
  2577. dev->gadget.dev.driver = NULL;
  2578. return retval;
  2579. }
  2580. /* get ready for ep0 traffic */
  2581. pch_udc_setup_ep0(dev);
  2582. /* clear SD */
  2583. pch_udc_clear_disconnect(dev);
  2584. dev->connected = 1;
  2585. return 0;
  2586. }
  2587. EXPORT_SYMBOL(usb_gadget_probe_driver);
  2588. int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
  2589. {
  2590. struct pch_udc_dev *dev = pch_udc;
  2591. if (!dev)
  2592. return -ENODEV;
  2593. if (!driver || (driver != dev->driver)) {
  2594. dev_err(&dev->pdev->dev,
  2595. "%s: invalid driver parameter\n", __func__);
  2596. return -EINVAL;
  2597. }
  2598. pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
  2599. /* Assures that there are no pending requests with this driver */
  2600. driver->disconnect(&dev->gadget);
  2601. driver->unbind(&dev->gadget);
  2602. dev->gadget.dev.driver = NULL;
  2603. dev->driver = NULL;
  2604. dev->connected = 0;
  2605. /* set SD */
  2606. pch_udc_set_disconnect(dev);
  2607. return 0;
  2608. }
  2609. EXPORT_SYMBOL(usb_gadget_unregister_driver);
  2610. static void pch_udc_shutdown(struct pci_dev *pdev)
  2611. {
  2612. struct pch_udc_dev *dev = pci_get_drvdata(pdev);
  2613. pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
  2614. pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
  2615. /* disable the pullup so the host will think we're gone */
  2616. pch_udc_set_disconnect(dev);
  2617. }
  2618. static void pch_udc_remove(struct pci_dev *pdev)
  2619. {
  2620. struct pch_udc_dev *dev = pci_get_drvdata(pdev);
  2621. /* gadget driver must not be registered */
  2622. if (dev->driver)
  2623. dev_err(&pdev->dev,
  2624. "%s: gadget driver still bound!!!\n", __func__);
  2625. /* dma pool cleanup */
  2626. if (dev->data_requests)
  2627. pci_pool_destroy(dev->data_requests);
  2628. if (dev->stp_requests) {
  2629. /* cleanup DMA desc's for ep0in */
  2630. if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
  2631. pci_pool_free(dev->stp_requests,
  2632. dev->ep[UDC_EP0OUT_IDX].td_stp,
  2633. dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
  2634. }
  2635. if (dev->ep[UDC_EP0OUT_IDX].td_data) {
  2636. pci_pool_free(dev->stp_requests,
  2637. dev->ep[UDC_EP0OUT_IDX].td_data,
  2638. dev->ep[UDC_EP0OUT_IDX].td_data_phys);
  2639. }
  2640. pci_pool_destroy(dev->stp_requests);
  2641. }
  2642. if (dev->dma_addr)
  2643. dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
  2644. UDC_EP0OUT_BUFF_SIZE * 4, DMA_FROM_DEVICE);
  2645. kfree(dev->ep0out_buf);
  2646. pch_udc_exit(dev);
  2647. if (dev->irq_registered)
  2648. free_irq(pdev->irq, dev);
  2649. if (dev->base_addr)
  2650. iounmap(dev->base_addr);
  2651. if (dev->mem_region)
  2652. release_mem_region(dev->phys_addr,
  2653. pci_resource_len(pdev, PCH_UDC_PCI_BAR));
  2654. if (dev->active)
  2655. pci_disable_device(pdev);
  2656. if (dev->registered)
  2657. device_unregister(&dev->gadget.dev);
  2658. kfree(dev);
  2659. pci_set_drvdata(pdev, NULL);
  2660. }
  2661. #ifdef CONFIG_PM
  2662. static int pch_udc_suspend(struct pci_dev *pdev, pm_message_t state)
  2663. {
  2664. struct pch_udc_dev *dev = pci_get_drvdata(pdev);
  2665. pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
  2666. pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
  2667. pci_disable_device(pdev);
  2668. pci_enable_wake(pdev, PCI_D3hot, 0);
  2669. if (pci_save_state(pdev)) {
  2670. dev_err(&pdev->dev,
  2671. "%s: could not save PCI config state\n", __func__);
  2672. return -ENOMEM;
  2673. }
  2674. pci_set_power_state(pdev, pci_choose_state(pdev, state));
  2675. return 0;
  2676. }
  2677. static int pch_udc_resume(struct pci_dev *pdev)
  2678. {
  2679. int ret;
  2680. pci_set_power_state(pdev, PCI_D0);
  2681. pci_restore_state(pdev);
  2682. ret = pci_enable_device(pdev);
  2683. if (ret) {
  2684. dev_err(&pdev->dev, "%s: pci_enable_device failed\n", __func__);
  2685. return ret;
  2686. }
  2687. pci_enable_wake(pdev, PCI_D3hot, 0);
  2688. return 0;
  2689. }
  2690. #else
  2691. #define pch_udc_suspend NULL
  2692. #define pch_udc_resume NULL
  2693. #endif /* CONFIG_PM */
  2694. static int pch_udc_probe(struct pci_dev *pdev,
  2695. const struct pci_device_id *id)
  2696. {
  2697. unsigned long resource;
  2698. unsigned long len;
  2699. int retval;
  2700. struct pch_udc_dev *dev;
  2701. /* one udc only */
  2702. if (pch_udc) {
  2703. pr_err("%s: already probed\n", __func__);
  2704. return -EBUSY;
  2705. }
  2706. /* init */
  2707. dev = kzalloc(sizeof *dev, GFP_KERNEL);
  2708. if (!dev) {
  2709. pr_err("%s: no memory for device structure\n", __func__);
  2710. return -ENOMEM;
  2711. }
  2712. /* pci setup */
  2713. if (pci_enable_device(pdev) < 0) {
  2714. kfree(dev);
  2715. pr_err("%s: pci_enable_device failed\n", __func__);
  2716. return -ENODEV;
  2717. }
  2718. dev->active = 1;
  2719. pci_set_drvdata(pdev, dev);
  2720. /* PCI resource allocation */
  2721. resource = pci_resource_start(pdev, 1);
  2722. len = pci_resource_len(pdev, 1);
  2723. if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
  2724. dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
  2725. retval = -EBUSY;
  2726. goto finished;
  2727. }
  2728. dev->phys_addr = resource;
  2729. dev->mem_region = 1;
  2730. dev->base_addr = ioremap_nocache(resource, len);
  2731. if (!dev->base_addr) {
  2732. pr_err("%s: device memory cannot be mapped\n", __func__);
  2733. retval = -ENOMEM;
  2734. goto finished;
  2735. }
  2736. if (!pdev->irq) {
  2737. dev_err(&pdev->dev, "%s: irq not set\n", __func__);
  2738. retval = -ENODEV;
  2739. goto finished;
  2740. }
  2741. pch_udc = dev;
  2742. /* initialize the hardware */
  2743. if (pch_udc_pcd_init(dev)) {
  2744. retval = -ENODEV;
  2745. goto finished;
  2746. }
  2747. if (request_irq(pdev->irq, pch_udc_isr, IRQF_SHARED, KBUILD_MODNAME,
  2748. dev)) {
  2749. dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
  2750. pdev->irq);
  2751. retval = -ENODEV;
  2752. goto finished;
  2753. }
  2754. dev->irq = pdev->irq;
  2755. dev->irq_registered = 1;
  2756. pci_set_master(pdev);
  2757. pci_try_set_mwi(pdev);
  2758. /* device struct setup */
  2759. spin_lock_init(&dev->lock);
  2760. dev->pdev = pdev;
  2761. dev->gadget.ops = &pch_udc_ops;
  2762. retval = init_dma_pools(dev);
  2763. if (retval)
  2764. goto finished;
  2765. dev_set_name(&dev->gadget.dev, "gadget");
  2766. dev->gadget.dev.parent = &pdev->dev;
  2767. dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
  2768. dev->gadget.dev.release = gadget_release;
  2769. dev->gadget.name = KBUILD_MODNAME;
  2770. dev->gadget.is_dualspeed = 1;
  2771. retval = device_register(&dev->gadget.dev);
  2772. if (retval)
  2773. goto finished;
  2774. dev->registered = 1;
  2775. /* Put the device in disconnected state till a driver is bound */
  2776. pch_udc_set_disconnect(dev);
  2777. return 0;
  2778. finished:
  2779. pch_udc_remove(pdev);
  2780. return retval;
  2781. }
  2782. static DEFINE_PCI_DEVICE_TABLE(pch_udc_pcidev_id) = {
  2783. {
  2784. PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
  2785. .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
  2786. .class_mask = 0xffffffff,
  2787. },
  2788. {
  2789. PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7213_IOH_UDC),
  2790. .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
  2791. .class_mask = 0xffffffff,
  2792. },
  2793. {
  2794. PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7831_IOH_UDC),
  2795. .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
  2796. .class_mask = 0xffffffff,
  2797. },
  2798. { 0 },
  2799. };
  2800. MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
  2801. static struct pci_driver pch_udc_driver = {
  2802. .name = KBUILD_MODNAME,
  2803. .id_table = pch_udc_pcidev_id,
  2804. .probe = pch_udc_probe,
  2805. .remove = pch_udc_remove,
  2806. .suspend = pch_udc_suspend,
  2807. .resume = pch_udc_resume,
  2808. .shutdown = pch_udc_shutdown,
  2809. };
  2810. static int __init pch_udc_pci_init(void)
  2811. {
  2812. return pci_register_driver(&pch_udc_driver);
  2813. }
  2814. module_init(pch_udc_pci_init);
  2815. static void __exit pch_udc_pci_exit(void)
  2816. {
  2817. pci_unregister_driver(&pch_udc_driver);
  2818. }
  2819. module_exit(pch_udc_pci_exit);
  2820. MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
  2821. MODULE_AUTHOR("OKI SEMICONDUCTOR, <toshiharu-linux@dsn.okisemi.com>");
  2822. MODULE_LICENSE("GPL");