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