2 * ISP1362 HCD (Host Controller Driver) for USB.
4 * Copyright (C) 2005 Lothar Wassmann <LW@KARO-electronics.de>
6 * Derived from the SL811 HCD, rewritten for ISP116x.
7 * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee>
10 * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
11 * Copyright (C) 2004 David Brownell
15 * The ISP1362 chip requires a large delay (300ns and 462ns) between
16 * accesses to the address and data register.
17 * The following timing options exist:
19 * 1. Configure your memory controller to add such delays if it can (the best)
20 * 2. Implement platform-specific delay function possibly
21 * combined with configuring the memory controller; see
22 * include/linux/usb_isp1362.h for more info.
23 * 3. Use ndelay (easiest, poorest).
25 * Use the corresponding macros USE_PLATFORM_DELAY and USE_NDELAY in the
26 * platform specific section of isp1362.h to select the appropriate variant.
28 * Also note that according to the Philips "ISP1362 Errata" document
29 * Rev 1.00 from 27 May data corruption may occur when the #WR signal
30 * is reasserted (even with #CS deasserted) within 132ns after a
31 * write cycle to any controller register. If the hardware doesn't
32 * implement the recommended fix (gating the #WR with #CS) software
33 * must ensure that no further write cycle (not necessarily to the chip!)
34 * is issued by the CPU within this interval.
36 * For PXA25x this can be ensured by using VLIO with the maximum
37 * recovery time (MSCx = 0x7f8c) with a memory clock of 99.53 MHz.
40 #ifdef CONFIG_USB_DEBUG
41 # define ISP1362_DEBUG
47 * The PXA255 UDC apparently doesn't handle GET_STATUS, GET_CONFIG and
48 * GET_INTERFACE requests correctly when the SETUP and DATA stages of the
49 * requests are carried out in separate frames. This will delay any SETUP
50 * packets until the start of the next frame so that this situation is
51 * unlikely to occur (and makes usbtest happy running with a PXA255 target
54 #undef BUGGY_PXA2XX_UDC_USBTEST
61 /* This enables a memory test on the ISP1362 chip memory to make sure the
62 * chip access timing is correct.
64 #undef CHIP_BUFFER_TEST
66 #include <linux/module.h>
67 #include <linux/moduleparam.h>
68 #include <linux/kernel.h>
69 #include <linux/delay.h>
70 #include <linux/ioport.h>
71 #include <linux/sched.h>
72 #include <linux/slab.h>
73 #include <linux/errno.h>
74 #include <linux/init.h>
75 #include <linux/list.h>
76 #include <linux/interrupt.h>
77 #include <linux/usb.h>
78 #include <linux/usb/isp1362.h>
79 #include <linux/usb/hcd.h>
80 #include <linux/platform_device.h>
83 #include <linux/bitmap.h>
86 #include <asm/system.h>
87 #include <asm/byteorder.h>
88 #include <asm/unaligned.h>
92 module_param(dbg_level
, int, 0644);
94 module_param(dbg_level
, int, 0);
95 #define STUB_DEBUG_FILE
98 #include "../core/usb.h"
102 #define DRIVER_VERSION "2005-04-04"
103 #define DRIVER_DESC "ISP1362 USB Host Controller Driver"
105 MODULE_DESCRIPTION(DRIVER_DESC
);
106 MODULE_LICENSE("GPL");
108 static const char hcd_name
[] = "isp1362-hcd";
110 static void isp1362_hc_stop(struct usb_hcd
*hcd
);
111 static int isp1362_hc_start(struct usb_hcd
*hcd
);
113 /*-------------------------------------------------------------------------*/
116 * When called from the interrupthandler only isp1362_hcd->irqenb is modified,
117 * since the interrupt handler will write isp1362_hcd->irqenb to HCuPINT upon
119 * We don't need a 'disable' counterpart, since interrupts will be disabled
120 * only by the interrupt handler.
122 static inline void isp1362_enable_int(struct isp1362_hcd
*isp1362_hcd
, u16 mask
)
124 if ((isp1362_hcd
->irqenb
| mask
) == isp1362_hcd
->irqenb
)
126 if (mask
& ~isp1362_hcd
->irqenb
)
127 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, mask
& ~isp1362_hcd
->irqenb
);
128 isp1362_hcd
->irqenb
|= mask
;
129 if (isp1362_hcd
->irq_active
)
131 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
134 /*-------------------------------------------------------------------------*/
136 static inline struct isp1362_ep_queue
*get_ptd_queue(struct isp1362_hcd
*isp1362_hcd
,
139 struct isp1362_ep_queue
*epq
= NULL
;
141 if (offset
< isp1362_hcd
->istl_queue
[1].buf_start
)
142 epq
= &isp1362_hcd
->istl_queue
[0];
143 else if (offset
< isp1362_hcd
->intl_queue
.buf_start
)
144 epq
= &isp1362_hcd
->istl_queue
[1];
145 else if (offset
< isp1362_hcd
->atl_queue
.buf_start
)
146 epq
= &isp1362_hcd
->intl_queue
;
147 else if (offset
< isp1362_hcd
->atl_queue
.buf_start
+
148 isp1362_hcd
->atl_queue
.buf_size
)
149 epq
= &isp1362_hcd
->atl_queue
;
152 DBG(1, "%s: PTD $%04x is on %s queue\n", __func__
, offset
, epq
->name
);
154 pr_warning("%s: invalid PTD $%04x\n", __func__
, offset
);
159 static inline int get_ptd_offset(struct isp1362_ep_queue
*epq
, u8 index
)
163 if (index
* epq
->blk_size
> epq
->buf_size
) {
164 pr_warning("%s: Bad %s index %d(%d)\n", __func__
, epq
->name
, index
,
165 epq
->buf_size
/ epq
->blk_size
);
168 offset
= epq
->buf_start
+ index
* epq
->blk_size
;
169 DBG(3, "%s: %s PTD[%02x] # %04x\n", __func__
, epq
->name
, index
, offset
);
174 /*-------------------------------------------------------------------------*/
176 static inline u16
max_transfer_size(struct isp1362_ep_queue
*epq
, size_t size
,
179 u16 xfer_size
= min_t(size_t, MAX_XFER_SIZE
, size
);
181 xfer_size
= min_t(size_t, xfer_size
, epq
->buf_avail
* epq
->blk_size
- PTD_HEADER_SIZE
);
182 if (xfer_size
< size
&& xfer_size
% mps
)
183 xfer_size
-= xfer_size
% mps
;
188 static int claim_ptd_buffers(struct isp1362_ep_queue
*epq
,
189 struct isp1362_ep
*ep
, u16 len
)
191 int ptd_offset
= -EINVAL
;
192 int num_ptds
= ((len
+ PTD_HEADER_SIZE
- 1) / epq
->blk_size
) + 1;
195 BUG_ON(len
> epq
->buf_size
);
201 pr_err("%s: %s len %d/%d num_ptds %d buf_map %08lx skip_map %08lx\n", __func__
,
202 epq
->name
, len
, epq
->blk_size
, num_ptds
, epq
->buf_map
, epq
->skip_map
);
203 BUG_ON(ep
->num_ptds
!= 0);
205 found
= bitmap_find_next_zero_area(&epq
->buf_map
, epq
->buf_count
, 0,
207 if (found
>= epq
->buf_count
)
210 DBG(1, "%s: Found %d PTDs[%d] for %d/%d byte\n", __func__
,
211 num_ptds
, found
, len
, (int)(epq
->blk_size
- PTD_HEADER_SIZE
));
212 ptd_offset
= get_ptd_offset(epq
, found
);
213 WARN_ON(ptd_offset
< 0);
214 ep
->ptd_offset
= ptd_offset
;
215 ep
->num_ptds
+= num_ptds
;
216 epq
->buf_avail
-= num_ptds
;
217 BUG_ON(epq
->buf_avail
> epq
->buf_count
);
218 ep
->ptd_index
= found
;
219 bitmap_set(&epq
->buf_map
, found
, num_ptds
);
220 DBG(1, "%s: Done %s PTD[%d] $%04x, avail %d count %d claimed %d %08lx:%08lx\n",
221 __func__
, epq
->name
, ep
->ptd_index
, ep
->ptd_offset
,
222 epq
->buf_avail
, epq
->buf_count
, num_ptds
, epq
->buf_map
, epq
->skip_map
);
227 static inline void release_ptd_buffers(struct isp1362_ep_queue
*epq
, struct isp1362_ep
*ep
)
229 int last
= ep
->ptd_index
+ ep
->num_ptds
;
231 if (last
> epq
->buf_count
)
232 pr_err("%s: ep %p req %d len %d %s PTD[%d] $%04x num_ptds %d buf_count %d buf_avail %d buf_map %08lx skip_map %08lx\n",
233 __func__
, ep
, ep
->num_req
, ep
->length
, epq
->name
, ep
->ptd_index
,
234 ep
->ptd_offset
, ep
->num_ptds
, epq
->buf_count
, epq
->buf_avail
,
235 epq
->buf_map
, epq
->skip_map
);
236 BUG_ON(last
> epq
->buf_count
);
238 bitmap_clear(&epq
->buf_map
, ep
->ptd_index
, ep
->num_ptds
);
239 bitmap_set(&epq
->skip_map
, ep
->ptd_index
, ep
->num_ptds
);
240 epq
->buf_avail
+= ep
->num_ptds
;
243 BUG_ON(epq
->buf_avail
> epq
->buf_count
);
244 BUG_ON(epq
->ptd_count
> epq
->buf_count
);
246 DBG(1, "%s: Done %s PTDs $%04x released %d avail %d count %d\n",
248 ep
->ptd_offset
, ep
->num_ptds
, epq
->buf_avail
, epq
->buf_count
);
249 DBG(1, "%s: buf_map %08lx skip_map %08lx\n", __func__
,
250 epq
->buf_map
, epq
->skip_map
);
253 ep
->ptd_offset
= -EINVAL
;
254 ep
->ptd_index
= -EINVAL
;
257 /*-------------------------------------------------------------------------*/
262 static void prepare_ptd(struct isp1362_hcd
*isp1362_hcd
, struct urb
*urb
,
263 struct isp1362_ep
*ep
, struct isp1362_ep_queue
*epq
,
270 size_t buf_len
= urb
->transfer_buffer_length
- urb
->actual_length
;
272 DBG(3, "%s: %s ep %p\n", __func__
, epq
->name
, ep
);
276 ep
->data
= (unsigned char *)urb
->transfer_buffer
+ urb
->actual_length
;
278 switch (ep
->nextpid
) {
280 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 0);
282 if (usb_pipecontrol(urb
->pipe
)) {
283 len
= min_t(size_t, ep
->maxpacket
, buf_len
);
284 } else if (usb_pipeisoc(urb
->pipe
)) {
285 len
= min_t(size_t, urb
->iso_frame_desc
[fno
].length
, MAX_XFER_SIZE
);
286 ep
->data
= urb
->transfer_buffer
+ urb
->iso_frame_desc
[fno
].offset
;
288 len
= max_transfer_size(epq
, buf_len
, ep
->maxpacket
);
289 DBG(1, "%s: IN len %d/%d/%d from URB\n", __func__
, len
, ep
->maxpacket
,
293 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 1);
295 if (usb_pipecontrol(urb
->pipe
))
296 len
= min_t(size_t, ep
->maxpacket
, buf_len
);
297 else if (usb_pipeisoc(urb
->pipe
))
298 len
= min_t(size_t, urb
->iso_frame_desc
[0].length
, MAX_XFER_SIZE
);
300 len
= max_transfer_size(epq
, buf_len
, ep
->maxpacket
);
302 pr_info("%s: Sending ZERO packet: %d\n", __func__
,
303 urb
->transfer_flags
& URB_ZERO_PACKET
);
304 DBG(1, "%s: OUT len %d/%d/%d from URB\n", __func__
, len
, ep
->maxpacket
,
310 len
= sizeof(struct usb_ctrlrequest
);
311 DBG(1, "%s: SETUP len %d\n", __func__
, len
);
312 ep
->data
= urb
->setup_packet
;
317 dir
= (urb
->transfer_buffer_length
&& usb_pipein(urb
->pipe
)) ?
318 PTD_DIR_OUT
: PTD_DIR_IN
;
319 DBG(1, "%s: ACK len %d\n", __func__
, len
);
322 toggle
= dir
= len
= 0;
323 pr_err("%s@%d: ep->nextpid %02x\n", __func__
, __LINE__
, ep
->nextpid
);
331 ptd
->count
= PTD_CC_MSK
| PTD_ACTIVE_MSK
| PTD_TOGGLE(toggle
);
332 ptd
->mps
= PTD_MPS(ep
->maxpacket
) | PTD_SPD(urb
->dev
->speed
== USB_SPEED_LOW
) |
334 ptd
->len
= PTD_LEN(len
) | PTD_DIR(dir
);
335 ptd
->faddr
= PTD_FA(usb_pipedevice(urb
->pipe
));
337 if (usb_pipeint(urb
->pipe
)) {
338 ptd
->faddr
|= PTD_SF_INT(ep
->branch
);
339 ptd
->faddr
|= PTD_PR(ep
->interval
? __ffs(ep
->interval
) : 0);
341 if (usb_pipeisoc(urb
->pipe
))
342 ptd
->faddr
|= PTD_SF_ISO(fno
);
344 DBG(1, "%s: Finished\n", __func__
);
347 static void isp1362_write_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
348 struct isp1362_ep_queue
*epq
)
350 struct ptd
*ptd
= &ep
->ptd
;
351 int len
= PTD_GET_DIR(ptd
) == PTD_DIR_IN
? 0 : ep
->length
;
353 _BUG_ON(ep
->ptd_offset
< 0);
356 isp1362_write_buffer(isp1362_hcd
, ptd
, ep
->ptd_offset
, PTD_HEADER_SIZE
);
358 isp1362_write_buffer(isp1362_hcd
, ep
->data
,
359 ep
->ptd_offset
+ PTD_HEADER_SIZE
, len
);
362 dump_ptd_out_data(ptd
, ep
->data
);
365 static void isp1362_read_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
366 struct isp1362_ep_queue
*epq
)
368 struct ptd
*ptd
= &ep
->ptd
;
371 WARN_ON(list_empty(&ep
->active
));
372 BUG_ON(ep
->ptd_offset
< 0);
374 list_del_init(&ep
->active
);
375 DBG(1, "%s: ep %p removed from active list %p\n", __func__
, ep
, &epq
->active
);
378 isp1362_read_buffer(isp1362_hcd
, ptd
, ep
->ptd_offset
, PTD_HEADER_SIZE
);
380 act_len
= PTD_GET_COUNT(ptd
);
381 if (PTD_GET_DIR(ptd
) != PTD_DIR_IN
|| act_len
== 0)
383 if (act_len
> ep
->length
)
384 pr_err("%s: ep %p PTD $%04x act_len %d ep->length %d\n", __func__
, ep
,
385 ep
->ptd_offset
, act_len
, ep
->length
);
386 BUG_ON(act_len
> ep
->length
);
387 /* Only transfer the amount of data that has actually been overwritten
388 * in the chip buffer. We don't want any data that doesn't belong to the
389 * transfer to leak out of the chip to the callers transfer buffer!
392 isp1362_read_buffer(isp1362_hcd
, ep
->data
,
393 ep
->ptd_offset
+ PTD_HEADER_SIZE
, act_len
);
394 dump_ptd_in_data(ptd
, ep
->data
);
398 * INT PTDs will stay in the chip until data is available.
399 * This function will remove a PTD from the chip when the URB is dequeued.
400 * Must be called with the spinlock held and IRQs disabled
402 static void remove_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
)
406 struct isp1362_ep_queue
*epq
;
408 DBG(1, "%s: ep %p PTD[%d] $%04x\n", __func__
, ep
, ep
->ptd_index
, ep
->ptd_offset
);
409 BUG_ON(ep
->ptd_offset
< 0);
411 epq
= get_ptd_queue(isp1362_hcd
, ep
->ptd_offset
);
414 /* put ep in remove_list for cleanup */
415 WARN_ON(!list_empty(&ep
->remove_list
));
416 list_add_tail(&ep
->remove_list
, &isp1362_hcd
->remove_list
);
417 /* let SOF interrupt handle the cleanup */
418 isp1362_enable_int(isp1362_hcd
, HCuPINT_SOF
);
420 index
= ep
->ptd_index
;
422 /* ISO queues don't have SKIP registers */
425 DBG(1, "%s: Disabling PTD[%02x] $%04x %08lx|%08x\n", __func__
,
426 index
, ep
->ptd_offset
, epq
->skip_map
, 1 << index
);
428 /* prevent further processing of PTD (will be effective after next SOF) */
429 epq
->skip_map
|= 1 << index
;
430 if (epq
== &isp1362_hcd
->atl_queue
) {
431 DBG(2, "%s: ATLSKIP = %08x -> %08lx\n", __func__
,
432 isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
), epq
->skip_map
);
433 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, epq
->skip_map
);
434 if (~epq
->skip_map
== 0)
435 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
436 } else if (epq
== &isp1362_hcd
->intl_queue
) {
437 DBG(2, "%s: INTLSKIP = %08x -> %08lx\n", __func__
,
438 isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
), epq
->skip_map
);
439 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, epq
->skip_map
);
440 if (~epq
->skip_map
== 0)
441 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
446 Take done or failed requests out of schedule. Give back
449 static void finish_request(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
450 struct urb
*urb
, int status
)
451 __releases(isp1362_hcd
->lock
)
452 __acquires(isp1362_hcd
->lock
)
457 if (usb_pipecontrol(urb
->pipe
))
458 ep
->nextpid
= USB_PID_SETUP
;
460 URB_DBG("%s: req %d FA %d ep%d%s %s: len %d/%d %s stat %d\n", __func__
,
461 ep
->num_req
, usb_pipedevice(urb
->pipe
),
462 usb_pipeendpoint(urb
->pipe
),
463 !usb_pipein(urb
->pipe
) ? "out" : "in",
464 usb_pipecontrol(urb
->pipe
) ? "ctrl" :
465 usb_pipeint(urb
->pipe
) ? "int" :
466 usb_pipebulk(urb
->pipe
) ? "bulk" :
468 urb
->actual_length
, urb
->transfer_buffer_length
,
469 !(urb
->transfer_flags
& URB_SHORT_NOT_OK
) ?
470 "short_ok" : "", urb
->status
);
473 usb_hcd_unlink_urb_from_ep(isp1362_hcd_to_hcd(isp1362_hcd
), urb
);
474 spin_unlock(&isp1362_hcd
->lock
);
475 usb_hcd_giveback_urb(isp1362_hcd_to_hcd(isp1362_hcd
), urb
, status
);
476 spin_lock(&isp1362_hcd
->lock
);
478 /* take idle endpoints out of the schedule right away */
479 if (!list_empty(&ep
->hep
->urb_list
))
482 /* async deschedule */
483 if (!list_empty(&ep
->schedule
)) {
484 list_del_init(&ep
->schedule
);
490 /* periodic deschedule */
491 DBG(1, "deschedule qh%d/%p branch %d load %d bandwidth %d -> %d\n", ep
->interval
,
492 ep
, ep
->branch
, ep
->load
,
493 isp1362_hcd
->load
[ep
->branch
],
494 isp1362_hcd
->load
[ep
->branch
] - ep
->load
);
495 isp1362_hcd
->load
[ep
->branch
] -= ep
->load
;
496 ep
->branch
= PERIODIC_SIZE
;
501 * Analyze transfer results, handle partial transfers and errors
503 static void postproc_ep(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
)
505 struct urb
*urb
= get_urb(ep
);
506 struct usb_device
*udev
;
510 int urbstat
= -EINPROGRESS
;
513 DBG(2, "%s: ep %p req %d\n", __func__
, ep
, ep
->num_req
);
517 cc
= PTD_GET_CC(ptd
);
518 if (cc
== PTD_NOTACCESSED
) {
519 pr_err("%s: req %d PTD %p Untouched by ISP1362\n", __func__
,
524 short_ok
= !(urb
->transfer_flags
& URB_SHORT_NOT_OK
);
525 len
= urb
->transfer_buffer_length
- urb
->actual_length
;
527 /* Data underrun is special. For allowed underrun
528 we clear the error and continue as normal. For
529 forbidden underrun we finish the DATA stage
530 immediately while for control transfer,
531 we do a STATUS stage.
533 if (cc
== PTD_DATAUNDERRUN
) {
535 DBG(1, "%s: req %d Allowed data underrun short_%sok %d/%d/%d byte\n",
536 __func__
, ep
->num_req
, short_ok
? "" : "not_",
537 PTD_GET_COUNT(ptd
), ep
->maxpacket
, len
);
541 DBG(1, "%s: req %d Data Underrun %s nextpid %02x short_%sok %d/%d/%d byte\n",
542 __func__
, ep
->num_req
,
543 usb_pipein(urb
->pipe
) ? "IN" : "OUT", ep
->nextpid
,
544 short_ok
? "" : "not_",
545 PTD_GET_COUNT(ptd
), ep
->maxpacket
, len
);
546 if (usb_pipecontrol(urb
->pipe
)) {
547 ep
->nextpid
= USB_PID_ACK
;
548 /* save the data underrun error code for later and
549 * proceed with the status stage
551 urb
->actual_length
+= PTD_GET_COUNT(ptd
);
552 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
554 if (urb
->status
== -EINPROGRESS
)
555 urb
->status
= cc_to_error
[PTD_DATAUNDERRUN
];
557 usb_settoggle(udev
, ep
->epnum
, ep
->nextpid
== USB_PID_OUT
,
558 PTD_GET_TOGGLE(ptd
));
559 urbstat
= cc_to_error
[PTD_DATAUNDERRUN
];
565 if (cc
!= PTD_CC_NOERROR
) {
566 if (++ep
->error_count
>= 3 || cc
== PTD_CC_STALL
|| cc
== PTD_DATAOVERRUN
) {
567 urbstat
= cc_to_error
[cc
];
568 DBG(1, "%s: req %d nextpid %02x, status %d, error %d, error_count %d\n",
569 __func__
, ep
->num_req
, ep
->nextpid
, urbstat
, cc
,
575 switch (ep
->nextpid
) {
577 if (PTD_GET_COUNT(ptd
) != ep
->length
)
578 pr_err("%s: count=%d len=%d\n", __func__
,
579 PTD_GET_COUNT(ptd
), ep
->length
);
580 BUG_ON(PTD_GET_COUNT(ptd
) != ep
->length
);
581 urb
->actual_length
+= ep
->length
;
582 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
583 usb_settoggle(udev
, ep
->epnum
, 1, PTD_GET_TOGGLE(ptd
));
584 if (urb
->actual_length
== urb
->transfer_buffer_length
) {
585 DBG(3, "%s: req %d xfer complete %d/%d status %d -> 0\n", __func__
,
586 ep
->num_req
, len
, ep
->maxpacket
, urbstat
);
587 if (usb_pipecontrol(urb
->pipe
)) {
588 DBG(3, "%s: req %d %s Wait for ACK\n", __func__
,
590 usb_pipein(urb
->pipe
) ? "IN" : "OUT");
591 ep
->nextpid
= USB_PID_ACK
;
593 if (len
% ep
->maxpacket
||
594 !(urb
->transfer_flags
& URB_ZERO_PACKET
)) {
596 DBG(3, "%s: req %d URB %s status %d count %d/%d/%d\n",
597 __func__
, ep
->num_req
, usb_pipein(urb
->pipe
) ? "IN" : "OUT",
598 urbstat
, len
, ep
->maxpacket
, urb
->actual_length
);
604 len
= PTD_GET_COUNT(ptd
);
605 BUG_ON(len
> ep
->length
);
606 urb
->actual_length
+= len
;
607 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
608 usb_settoggle(udev
, ep
->epnum
, 0, PTD_GET_TOGGLE(ptd
));
609 /* if transfer completed or (allowed) data underrun */
610 if ((urb
->transfer_buffer_length
== urb
->actual_length
) ||
611 len
% ep
->maxpacket
) {
612 DBG(3, "%s: req %d xfer complete %d/%d status %d -> 0\n", __func__
,
613 ep
->num_req
, len
, ep
->maxpacket
, urbstat
);
614 if (usb_pipecontrol(urb
->pipe
)) {
615 DBG(3, "%s: req %d %s Wait for ACK\n", __func__
,
617 usb_pipein(urb
->pipe
) ? "IN" : "OUT");
618 ep
->nextpid
= USB_PID_ACK
;
621 DBG(3, "%s: req %d URB %s status %d count %d/%d/%d\n",
622 __func__
, ep
->num_req
, usb_pipein(urb
->pipe
) ? "IN" : "OUT",
623 urbstat
, len
, ep
->maxpacket
, urb
->actual_length
);
628 if (urb
->transfer_buffer_length
== urb
->actual_length
) {
629 ep
->nextpid
= USB_PID_ACK
;
630 } else if (usb_pipeout(urb
->pipe
)) {
631 usb_settoggle(udev
, 0, 1, 1);
632 ep
->nextpid
= USB_PID_OUT
;
634 usb_settoggle(udev
, 0, 0, 1);
635 ep
->nextpid
= USB_PID_IN
;
639 DBG(3, "%s: req %d got ACK %d -> 0\n", __func__
, ep
->num_req
,
641 WARN_ON(urbstat
!= -EINPROGRESS
);
650 if (urbstat
!= -EINPROGRESS
) {
651 DBG(2, "%s: Finishing ep %p req %d urb %p status %d\n", __func__
,
652 ep
, ep
->num_req
, urb
, urbstat
);
653 finish_request(isp1362_hcd
, ep
, urb
, urbstat
);
657 static void finish_unlinks(struct isp1362_hcd
*isp1362_hcd
)
659 struct isp1362_ep
*ep
;
660 struct isp1362_ep
*tmp
;
662 list_for_each_entry_safe(ep
, tmp
, &isp1362_hcd
->remove_list
, remove_list
) {
663 struct isp1362_ep_queue
*epq
=
664 get_ptd_queue(isp1362_hcd
, ep
->ptd_offset
);
665 int index
= ep
->ptd_index
;
669 DBG(1, "%s: remove PTD[%d] $%04x\n", __func__
, index
, ep
->ptd_offset
);
670 BUG_ON(ep
->num_ptds
== 0);
671 release_ptd_buffers(epq
, ep
);
673 if (!list_empty(&ep
->hep
->urb_list
)) {
674 struct urb
*urb
= get_urb(ep
);
676 DBG(1, "%s: Finishing req %d ep %p from remove_list\n", __func__
,
678 finish_request(isp1362_hcd
, ep
, urb
, -ESHUTDOWN
);
680 WARN_ON(list_empty(&ep
->active
));
681 if (!list_empty(&ep
->active
)) {
682 list_del_init(&ep
->active
);
683 DBG(1, "%s: ep %p removed from active list\n", __func__
, ep
);
685 list_del_init(&ep
->remove_list
);
686 DBG(1, "%s: ep %p removed from remove_list\n", __func__
, ep
);
688 DBG(1, "%s: Done\n", __func__
);
691 static inline void enable_atl_transfers(struct isp1362_hcd
*isp1362_hcd
, int count
)
694 if (count
< isp1362_hcd
->atl_queue
.ptd_count
)
695 isp1362_write_reg16(isp1362_hcd
, HCATLDTC
, count
);
696 isp1362_enable_int(isp1362_hcd
, HCuPINT_ATL
);
697 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, isp1362_hcd
->atl_queue
.skip_map
);
698 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
700 isp1362_enable_int(isp1362_hcd
, HCuPINT_SOF
);
703 static inline void enable_intl_transfers(struct isp1362_hcd
*isp1362_hcd
)
705 isp1362_enable_int(isp1362_hcd
, HCuPINT_INTL
);
706 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
707 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, isp1362_hcd
->intl_queue
.skip_map
);
710 static inline void enable_istl_transfers(struct isp1362_hcd
*isp1362_hcd
, int flip
)
712 isp1362_enable_int(isp1362_hcd
, flip
? HCuPINT_ISTL1
: HCuPINT_ISTL0
);
713 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, flip
?
714 HCBUFSTAT_ISTL1_FULL
: HCBUFSTAT_ISTL0_FULL
);
717 static int submit_req(struct isp1362_hcd
*isp1362_hcd
, struct urb
*urb
,
718 struct isp1362_ep
*ep
, struct isp1362_ep_queue
*epq
)
720 int index
= epq
->free_ptd
;
722 prepare_ptd(isp1362_hcd
, urb
, ep
, epq
, 0);
723 index
= claim_ptd_buffers(epq
, ep
, ep
->length
);
724 if (index
== -ENOMEM
) {
725 DBG(1, "%s: req %d No free %s PTD available: %d, %08lx:%08lx\n", __func__
,
726 ep
->num_req
, epq
->name
, ep
->num_ptds
, epq
->buf_map
, epq
->skip_map
);
728 } else if (index
== -EOVERFLOW
) {
729 DBG(1, "%s: req %d Not enough space for %d byte %s PTD %d %08lx:%08lx\n",
730 __func__
, ep
->num_req
, ep
->length
, epq
->name
, ep
->num_ptds
,
731 epq
->buf_map
, epq
->skip_map
);
735 list_add_tail(&ep
->active
, &epq
->active
);
736 DBG(1, "%s: ep %p req %d len %d added to active list %p\n", __func__
,
737 ep
, ep
->num_req
, ep
->length
, &epq
->active
);
738 DBG(1, "%s: Submitting %s PTD $%04x for ep %p req %d\n", __func__
, epq
->name
,
739 ep
->ptd_offset
, ep
, ep
->num_req
);
740 isp1362_write_ptd(isp1362_hcd
, ep
, epq
);
741 __clear_bit(ep
->ptd_index
, &epq
->skip_map
);
746 static void start_atl_transfers(struct isp1362_hcd
*isp1362_hcd
)
749 struct isp1362_ep_queue
*epq
= &isp1362_hcd
->atl_queue
;
750 struct isp1362_ep
*ep
;
753 if (atomic_read(&epq
->finishing
)) {
754 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
758 list_for_each_entry(ep
, &isp1362_hcd
->async
, schedule
) {
759 struct urb
*urb
= get_urb(ep
);
762 if (!list_empty(&ep
->active
)) {
763 DBG(2, "%s: Skipping active %s ep %p\n", __func__
, epq
->name
, ep
);
767 DBG(1, "%s: Processing %s ep %p req %d\n", __func__
, epq
->name
,
770 ret
= submit_req(isp1362_hcd
, urb
, ep
, epq
);
771 if (ret
== -ENOMEM
) {
774 } else if (ret
== -EOVERFLOW
) {
778 #ifdef BUGGY_PXA2XX_UDC_USBTEST
779 defer
= ep
->nextpid
== USB_PID_SETUP
;
784 /* Avoid starving of endpoints */
785 if (isp1362_hcd
->async
.next
!= isp1362_hcd
->async
.prev
) {
786 DBG(2, "%s: Cycling ASYNC schedule %d\n", __func__
, ptd_count
);
787 list_move(&isp1362_hcd
->async
, isp1362_hcd
->async
.next
);
789 if (ptd_count
|| defer
)
790 enable_atl_transfers(isp1362_hcd
, defer
? 0 : ptd_count
);
792 epq
->ptd_count
+= ptd_count
;
793 if (epq
->ptd_count
> epq
->stat_maxptds
) {
794 epq
->stat_maxptds
= epq
->ptd_count
;
795 DBG(0, "%s: max_ptds: %d\n", __func__
, epq
->stat_maxptds
);
799 static void start_intl_transfers(struct isp1362_hcd
*isp1362_hcd
)
802 struct isp1362_ep_queue
*epq
= &isp1362_hcd
->intl_queue
;
803 struct isp1362_ep
*ep
;
805 if (atomic_read(&epq
->finishing
)) {
806 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
810 list_for_each_entry(ep
, &isp1362_hcd
->periodic
, schedule
) {
811 struct urb
*urb
= get_urb(ep
);
814 if (!list_empty(&ep
->active
)) {
815 DBG(1, "%s: Skipping active %s ep %p\n", __func__
,
820 DBG(1, "%s: Processing %s ep %p req %d\n", __func__
,
821 epq
->name
, ep
, ep
->num_req
);
822 ret
= submit_req(isp1362_hcd
, urb
, ep
, epq
);
825 else if (ret
== -EOVERFLOW
)
831 static int last_count
;
833 if (ptd_count
!= last_count
) {
834 DBG(0, "%s: ptd_count: %d\n", __func__
, ptd_count
);
835 last_count
= ptd_count
;
837 enable_intl_transfers(isp1362_hcd
);
840 epq
->ptd_count
+= ptd_count
;
841 if (epq
->ptd_count
> epq
->stat_maxptds
)
842 epq
->stat_maxptds
= epq
->ptd_count
;
845 static inline int next_ptd(struct isp1362_ep_queue
*epq
, struct isp1362_ep
*ep
)
847 u16 ptd_offset
= ep
->ptd_offset
;
848 int num_ptds
= (ep
->length
+ PTD_HEADER_SIZE
+ (epq
->blk_size
- 1)) / epq
->blk_size
;
850 DBG(2, "%s: PTD offset $%04x + %04x => %d * %04x -> $%04x\n", __func__
, ptd_offset
,
851 ep
->length
, num_ptds
, epq
->blk_size
, ptd_offset
+ num_ptds
* epq
->blk_size
);
853 ptd_offset
+= num_ptds
* epq
->blk_size
;
854 if (ptd_offset
< epq
->buf_start
+ epq
->buf_size
)
860 static void start_iso_transfers(struct isp1362_hcd
*isp1362_hcd
)
863 int flip
= isp1362_hcd
->istl_flip
;
864 struct isp1362_ep_queue
*epq
;
866 struct isp1362_ep
*ep
;
867 struct isp1362_ep
*tmp
;
868 u16 fno
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
871 epq
= &isp1362_hcd
->istl_queue
[flip
];
872 if (atomic_read(&epq
->finishing
)) {
873 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
877 if (!list_empty(&epq
->active
))
880 ptd_offset
= epq
->buf_start
;
881 list_for_each_entry_safe(ep
, tmp
, &isp1362_hcd
->isoc
, schedule
) {
882 struct urb
*urb
= get_urb(ep
);
883 s16 diff
= fno
- (u16
)urb
->start_frame
;
885 DBG(1, "%s: Processing %s ep %p\n", __func__
, epq
->name
, ep
);
887 if (diff
> urb
->number_of_packets
) {
888 /* time frame for this URB has elapsed */
889 finish_request(isp1362_hcd
, ep
, urb
, -EOVERFLOW
);
891 } else if (diff
< -1) {
892 /* URB is not due in this frame or the next one.
893 * Comparing with '-1' instead of '0' accounts for double
894 * buffering in the ISP1362 which enables us to queue the PTD
895 * one frame ahead of time
897 } else if (diff
== -1) {
898 /* submit PTD's that are due in the next frame */
899 prepare_ptd(isp1362_hcd
, urb
, ep
, epq
, fno
);
900 if (ptd_offset
+ PTD_HEADER_SIZE
+ ep
->length
>
901 epq
->buf_start
+ epq
->buf_size
) {
902 pr_err("%s: Not enough ISO buffer space for %d byte PTD\n",
903 __func__
, ep
->length
);
906 ep
->ptd_offset
= ptd_offset
;
907 list_add_tail(&ep
->active
, &epq
->active
);
909 ptd_offset
= next_ptd(epq
, ep
);
910 if (ptd_offset
< 0) {
911 pr_warning("%s: req %d No more %s PTD buffers available\n", __func__
,
912 ep
->num_req
, epq
->name
);
917 list_for_each_entry(ep
, &epq
->active
, active
) {
918 if (epq
->active
.next
== &ep
->active
)
919 ep
->ptd
.mps
|= PTD_LAST_MSK
;
920 isp1362_write_ptd(isp1362_hcd
, ep
, epq
);
925 enable_istl_transfers(isp1362_hcd
, flip
);
927 epq
->ptd_count
+= ptd_count
;
928 if (epq
->ptd_count
> epq
->stat_maxptds
)
929 epq
->stat_maxptds
= epq
->ptd_count
;
931 /* check, whether the second ISTL buffer may also be filled */
932 if (!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
933 (flip
? HCBUFSTAT_ISTL0_FULL
: HCBUFSTAT_ISTL1_FULL
))) {
941 static void finish_transfers(struct isp1362_hcd
*isp1362_hcd
, unsigned long done_map
,
942 struct isp1362_ep_queue
*epq
)
944 struct isp1362_ep
*ep
;
945 struct isp1362_ep
*tmp
;
947 if (list_empty(&epq
->active
)) {
948 DBG(1, "%s: Nothing to do for %s queue\n", __func__
, epq
->name
);
952 DBG(1, "%s: Finishing %s transfers %08lx\n", __func__
, epq
->name
, done_map
);
954 atomic_inc(&epq
->finishing
);
955 list_for_each_entry_safe(ep
, tmp
, &epq
->active
, active
) {
956 int index
= ep
->ptd_index
;
958 DBG(1, "%s: Checking %s PTD[%02x] $%04x\n", __func__
, epq
->name
,
959 index
, ep
->ptd_offset
);
962 if (__test_and_clear_bit(index
, &done_map
)) {
963 isp1362_read_ptd(isp1362_hcd
, ep
, epq
);
964 epq
->free_ptd
= index
;
965 BUG_ON(ep
->num_ptds
== 0);
966 release_ptd_buffers(epq
, ep
);
968 DBG(1, "%s: ep %p req %d removed from active list\n", __func__
,
970 if (!list_empty(&ep
->remove_list
)) {
971 list_del_init(&ep
->remove_list
);
972 DBG(1, "%s: ep %p removed from remove list\n", __func__
, ep
);
974 DBG(1, "%s: Postprocessing %s ep %p req %d\n", __func__
, epq
->name
,
976 postproc_ep(isp1362_hcd
, ep
);
982 pr_warning("%s: done_map not clear: %08lx:%08lx\n", __func__
, done_map
,
984 atomic_dec(&epq
->finishing
);
987 static void finish_iso_transfers(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep_queue
*epq
)
989 struct isp1362_ep
*ep
;
990 struct isp1362_ep
*tmp
;
992 if (list_empty(&epq
->active
)) {
993 DBG(1, "%s: Nothing to do for %s queue\n", __func__
, epq
->name
);
997 DBG(1, "%s: Finishing %s transfers\n", __func__
, epq
->name
);
999 atomic_inc(&epq
->finishing
);
1000 list_for_each_entry_safe(ep
, tmp
, &epq
->active
, active
) {
1001 DBG(1, "%s: Checking PTD $%04x\n", __func__
, ep
->ptd_offset
);
1003 isp1362_read_ptd(isp1362_hcd
, ep
, epq
);
1004 DBG(1, "%s: Postprocessing %s ep %p\n", __func__
, epq
->name
, ep
);
1005 postproc_ep(isp1362_hcd
, ep
);
1007 WARN_ON(epq
->blk_size
!= 0);
1008 atomic_dec(&epq
->finishing
);
1011 static irqreturn_t
isp1362_irq(struct usb_hcd
*hcd
)
1014 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1018 spin_lock(&isp1362_hcd
->lock
);
1020 BUG_ON(isp1362_hcd
->irq_active
++);
1022 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
1024 irqstat
= isp1362_read_reg16(isp1362_hcd
, HCuPINT
);
1025 DBG(3, "%s: got IRQ %04x:%04x\n", __func__
, irqstat
, isp1362_hcd
->irqenb
);
1027 /* only handle interrupts that are currently enabled */
1028 irqstat
&= isp1362_hcd
->irqenb
;
1029 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, irqstat
);
1032 if (irqstat
& HCuPINT_SOF
) {
1033 isp1362_hcd
->irqenb
&= ~HCuPINT_SOF
;
1034 isp1362_hcd
->irq_stat
[ISP1362_INT_SOF
]++;
1036 svc_mask
&= ~HCuPINT_SOF
;
1037 DBG(3, "%s: SOF\n", __func__
);
1038 isp1362_hcd
->fmindex
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1039 if (!list_empty(&isp1362_hcd
->remove_list
))
1040 finish_unlinks(isp1362_hcd
);
1041 if (!list_empty(&isp1362_hcd
->async
) && !(irqstat
& HCuPINT_ATL
)) {
1042 if (list_empty(&isp1362_hcd
->atl_queue
.active
)) {
1043 start_atl_transfers(isp1362_hcd
);
1045 isp1362_enable_int(isp1362_hcd
, HCuPINT_ATL
);
1046 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
,
1047 isp1362_hcd
->atl_queue
.skip_map
);
1048 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
1053 if (irqstat
& HCuPINT_ISTL0
) {
1054 isp1362_hcd
->irq_stat
[ISP1362_INT_ISTL0
]++;
1056 svc_mask
&= ~HCuPINT_ISTL0
;
1057 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ISTL0_FULL
);
1058 DBG(1, "%s: ISTL0\n", __func__
);
1059 WARN_ON((int)!!isp1362_hcd
->istl_flip
);
1060 WARN_ON(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1061 HCBUFSTAT_ISTL0_ACTIVE
);
1062 WARN_ON(!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1063 HCBUFSTAT_ISTL0_DONE
));
1064 isp1362_hcd
->irqenb
&= ~HCuPINT_ISTL0
;
1067 if (irqstat
& HCuPINT_ISTL1
) {
1068 isp1362_hcd
->irq_stat
[ISP1362_INT_ISTL1
]++;
1070 svc_mask
&= ~HCuPINT_ISTL1
;
1071 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ISTL1_FULL
);
1072 DBG(1, "%s: ISTL1\n", __func__
);
1073 WARN_ON(!(int)isp1362_hcd
->istl_flip
);
1074 WARN_ON(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1075 HCBUFSTAT_ISTL1_ACTIVE
);
1076 WARN_ON(!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1077 HCBUFSTAT_ISTL1_DONE
));
1078 isp1362_hcd
->irqenb
&= ~HCuPINT_ISTL1
;
1081 if (irqstat
& (HCuPINT_ISTL0
| HCuPINT_ISTL1
)) {
1082 WARN_ON((irqstat
& (HCuPINT_ISTL0
| HCuPINT_ISTL1
)) ==
1083 (HCuPINT_ISTL0
| HCuPINT_ISTL1
));
1084 finish_iso_transfers(isp1362_hcd
,
1085 &isp1362_hcd
->istl_queue
[isp1362_hcd
->istl_flip
]);
1086 start_iso_transfers(isp1362_hcd
);
1087 isp1362_hcd
->istl_flip
= 1 - isp1362_hcd
->istl_flip
;
1090 if (irqstat
& HCuPINT_INTL
) {
1091 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
);
1092 u32 skip_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
);
1093 isp1362_hcd
->irq_stat
[ISP1362_INT_INTL
]++;
1095 DBG(2, "%s: INTL\n", __func__
);
1097 svc_mask
&= ~HCuPINT_INTL
;
1099 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, skip_map
| done_map
);
1100 if (~(done_map
| skip_map
) == 0)
1101 /* All PTDs are finished, disable INTL processing entirely */
1102 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
1107 DBG(3, "%s: INTL done_map %08x\n", __func__
, done_map
);
1108 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->intl_queue
);
1109 start_intl_transfers(isp1362_hcd
);
1113 if (irqstat
& HCuPINT_ATL
) {
1114 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCATLDONE
);
1115 u32 skip_map
= isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
);
1116 isp1362_hcd
->irq_stat
[ISP1362_INT_ATL
]++;
1118 DBG(2, "%s: ATL\n", __func__
);
1120 svc_mask
&= ~HCuPINT_ATL
;
1122 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, skip_map
| done_map
);
1123 if (~(done_map
| skip_map
) == 0)
1124 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
1126 DBG(3, "%s: ATL done_map %08x\n", __func__
, done_map
);
1127 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->atl_queue
);
1128 start_atl_transfers(isp1362_hcd
);
1133 if (irqstat
& HCuPINT_OPR
) {
1134 u32 intstat
= isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
);
1135 isp1362_hcd
->irq_stat
[ISP1362_INT_OPR
]++;
1137 svc_mask
&= ~HCuPINT_OPR
;
1138 DBG(2, "%s: OPR %08x:%08x\n", __func__
, intstat
, isp1362_hcd
->intenb
);
1139 intstat
&= isp1362_hcd
->intenb
;
1140 if (intstat
& OHCI_INTR_UE
) {
1141 pr_err("Unrecoverable error\n");
1142 /* FIXME: do here reset or cleanup or whatever */
1144 if (intstat
& OHCI_INTR_RHSC
) {
1145 isp1362_hcd
->rhstatus
= isp1362_read_reg32(isp1362_hcd
, HCRHSTATUS
);
1146 isp1362_hcd
->rhport
[0] = isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
);
1147 isp1362_hcd
->rhport
[1] = isp1362_read_reg32(isp1362_hcd
, HCRHPORT2
);
1149 if (intstat
& OHCI_INTR_RD
) {
1150 pr_info("%s: RESUME DETECTED\n", __func__
);
1151 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1152 usb_hcd_resume_root_hub(hcd
);
1154 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
, intstat
);
1155 irqstat
&= ~HCuPINT_OPR
;
1159 if (irqstat
& HCuPINT_SUSP
) {
1160 isp1362_hcd
->irq_stat
[ISP1362_INT_SUSP
]++;
1162 svc_mask
&= ~HCuPINT_SUSP
;
1164 pr_info("%s: SUSPEND IRQ\n", __func__
);
1167 if (irqstat
& HCuPINT_CLKRDY
) {
1168 isp1362_hcd
->irq_stat
[ISP1362_INT_CLKRDY
]++;
1170 isp1362_hcd
->irqenb
&= ~HCuPINT_CLKRDY
;
1171 svc_mask
&= ~HCuPINT_CLKRDY
;
1172 pr_info("%s: CLKRDY IRQ\n", __func__
);
1176 pr_err("%s: Unserviced interrupt(s) %04x\n", __func__
, svc_mask
);
1178 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
1179 isp1362_hcd
->irq_active
--;
1180 spin_unlock(&isp1362_hcd
->lock
);
1182 return IRQ_RETVAL(handled
);
1185 /*-------------------------------------------------------------------------*/
1187 #define MAX_PERIODIC_LOAD 900 /* out of 1000 usec */
1188 static int balance(struct isp1362_hcd
*isp1362_hcd
, u16 interval
, u16 load
)
1190 int i
, branch
= -ENOSPC
;
1192 /* search for the least loaded schedule branch of that interval
1193 * which has enough bandwidth left unreserved.
1195 for (i
= 0; i
< interval
; i
++) {
1196 if (branch
< 0 || isp1362_hcd
->load
[branch
] > isp1362_hcd
->load
[i
]) {
1199 for (j
= i
; j
< PERIODIC_SIZE
; j
+= interval
) {
1200 if ((isp1362_hcd
->load
[j
] + load
) > MAX_PERIODIC_LOAD
) {
1201 pr_err("%s: new load %d load[%02x] %d max %d\n", __func__
,
1202 load
, j
, isp1362_hcd
->load
[j
], MAX_PERIODIC_LOAD
);
1206 if (j
< PERIODIC_SIZE
)
1214 /* NB! ALL the code above this point runs with isp1362_hcd->lock
1218 /*-------------------------------------------------------------------------*/
1220 static int isp1362_urb_enqueue(struct usb_hcd
*hcd
,
1224 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1225 struct usb_device
*udev
= urb
->dev
;
1226 unsigned int pipe
= urb
->pipe
;
1227 int is_out
= !usb_pipein(pipe
);
1228 int type
= usb_pipetype(pipe
);
1229 int epnum
= usb_pipeendpoint(pipe
);
1230 struct usb_host_endpoint
*hep
= urb
->ep
;
1231 struct isp1362_ep
*ep
= NULL
;
1232 unsigned long flags
;
1235 DBG(3, "%s: urb %p\n", __func__
, urb
);
1237 if (type
== PIPE_ISOCHRONOUS
) {
1238 pr_err("Isochronous transfers not supported\n");
1242 URB_DBG("%s: FA %d ep%d%s %s: len %d %s%s\n", __func__
,
1243 usb_pipedevice(pipe
), epnum
,
1244 is_out
? "out" : "in",
1245 usb_pipecontrol(pipe
) ? "ctrl" :
1246 usb_pipeint(pipe
) ? "int" :
1247 usb_pipebulk(pipe
) ? "bulk" :
1249 urb
->transfer_buffer_length
,
1250 (urb
->transfer_flags
& URB_ZERO_PACKET
) ? "ZERO_PACKET " : "",
1251 !(urb
->transfer_flags
& URB_SHORT_NOT_OK
) ?
1254 /* avoid all allocations within spinlocks: request or endpoint */
1256 ep
= kzalloc(sizeof *ep
, mem_flags
);
1260 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1262 /* don't submit to a dead or disabled port */
1263 if (!((isp1362_hcd
->rhport
[0] | isp1362_hcd
->rhport
[1]) &
1264 USB_PORT_STAT_ENABLE
) ||
1265 !HC_IS_RUNNING(hcd
->state
)) {
1268 goto fail_not_linked
;
1271 retval
= usb_hcd_link_urb_to_ep(hcd
, urb
);
1274 goto fail_not_linked
;
1280 INIT_LIST_HEAD(&ep
->schedule
);
1281 INIT_LIST_HEAD(&ep
->active
);
1282 INIT_LIST_HEAD(&ep
->remove_list
);
1283 ep
->udev
= usb_get_dev(udev
);
1286 ep
->maxpacket
= usb_maxpacket(udev
, urb
->pipe
, is_out
);
1287 ep
->ptd_offset
= -EINVAL
;
1288 ep
->ptd_index
= -EINVAL
;
1289 usb_settoggle(udev
, epnum
, is_out
, 0);
1291 if (type
== PIPE_CONTROL
)
1292 ep
->nextpid
= USB_PID_SETUP
;
1294 ep
->nextpid
= USB_PID_OUT
;
1296 ep
->nextpid
= USB_PID_IN
;
1299 case PIPE_ISOCHRONOUS
:
1300 case PIPE_INTERRUPT
:
1301 if (urb
->interval
> PERIODIC_SIZE
)
1302 urb
->interval
= PERIODIC_SIZE
;
1303 ep
->interval
= urb
->interval
;
1304 ep
->branch
= PERIODIC_SIZE
;
1305 ep
->load
= usb_calc_bus_time(udev
->speed
, !is_out
,
1306 (type
== PIPE_ISOCHRONOUS
),
1307 usb_maxpacket(udev
, pipe
, is_out
)) / 1000;
1312 ep
->num_req
= isp1362_hcd
->req_serial
++;
1314 /* maybe put endpoint into schedule */
1318 if (list_empty(&ep
->schedule
)) {
1319 DBG(1, "%s: Adding ep %p req %d to async schedule\n",
1320 __func__
, ep
, ep
->num_req
);
1321 list_add_tail(&ep
->schedule
, &isp1362_hcd
->async
);
1324 case PIPE_ISOCHRONOUS
:
1325 case PIPE_INTERRUPT
:
1326 urb
->interval
= ep
->interval
;
1328 /* urb submitted for already existing EP */
1329 if (ep
->branch
< PERIODIC_SIZE
)
1332 retval
= balance(isp1362_hcd
, ep
->interval
, ep
->load
);
1334 pr_err("%s: balance returned %d\n", __func__
, retval
);
1337 ep
->branch
= retval
;
1339 isp1362_hcd
->fmindex
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1340 DBG(1, "%s: Current frame %04x branch %02x start_frame %04x(%04x)\n",
1341 __func__
, isp1362_hcd
->fmindex
, ep
->branch
,
1342 ((isp1362_hcd
->fmindex
+ PERIODIC_SIZE
- 1) &
1343 ~(PERIODIC_SIZE
- 1)) + ep
->branch
,
1344 (isp1362_hcd
->fmindex
& (PERIODIC_SIZE
- 1)) + ep
->branch
);
1346 if (list_empty(&ep
->schedule
)) {
1347 if (type
== PIPE_ISOCHRONOUS
) {
1348 u16 frame
= isp1362_hcd
->fmindex
;
1350 frame
+= max_t(u16
, 8, ep
->interval
);
1351 frame
&= ~(ep
->interval
- 1);
1352 frame
|= ep
->branch
;
1353 if (frame_before(frame
, isp1362_hcd
->fmindex
))
1354 frame
+= ep
->interval
;
1355 urb
->start_frame
= frame
;
1357 DBG(1, "%s: Adding ep %p to isoc schedule\n", __func__
, ep
);
1358 list_add_tail(&ep
->schedule
, &isp1362_hcd
->isoc
);
1360 DBG(1, "%s: Adding ep %p to periodic schedule\n", __func__
, ep
);
1361 list_add_tail(&ep
->schedule
, &isp1362_hcd
->periodic
);
1364 DBG(1, "%s: ep %p already scheduled\n", __func__
, ep
);
1366 DBG(2, "%s: load %d bandwidth %d -> %d\n", __func__
,
1367 ep
->load
/ ep
->interval
, isp1362_hcd
->load
[ep
->branch
],
1368 isp1362_hcd
->load
[ep
->branch
] + ep
->load
);
1369 isp1362_hcd
->load
[ep
->branch
] += ep
->load
;
1373 ALIGNSTAT(isp1362_hcd
, urb
->transfer_buffer
);
1378 start_atl_transfers(isp1362_hcd
);
1380 case PIPE_INTERRUPT
:
1381 start_intl_transfers(isp1362_hcd
);
1383 case PIPE_ISOCHRONOUS
:
1384 start_iso_transfers(isp1362_hcd
);
1391 usb_hcd_unlink_urb_from_ep(hcd
, urb
);
1395 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1397 DBG(0, "%s: urb %p failed with %d\n", __func__
, urb
, retval
);
1401 static int isp1362_urb_dequeue(struct usb_hcd
*hcd
, struct urb
*urb
, int status
)
1403 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1404 struct usb_host_endpoint
*hep
;
1405 unsigned long flags
;
1406 struct isp1362_ep
*ep
;
1409 DBG(3, "%s: urb %p\n", __func__
, urb
);
1411 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1412 retval
= usb_hcd_check_unlink_urb(hcd
, urb
, status
);
1419 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1425 /* In front of queue? */
1426 if (ep
->hep
->urb_list
.next
== &urb
->urb_list
) {
1427 if (!list_empty(&ep
->active
)) {
1428 DBG(1, "%s: urb %p ep %p req %d active PTD[%d] $%04x\n", __func__
,
1429 urb
, ep
, ep
->num_req
, ep
->ptd_index
, ep
->ptd_offset
);
1430 /* disable processing and queue PTD for removal */
1431 remove_ptd(isp1362_hcd
, ep
);
1436 DBG(1, "%s: Finishing ep %p req %d\n", __func__
, ep
,
1438 finish_request(isp1362_hcd
, ep
, urb
, status
);
1440 DBG(1, "%s: urb %p active; wait4irq\n", __func__
, urb
);
1442 pr_warning("%s: No EP in URB %p\n", __func__
, urb
);
1446 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1448 DBG(3, "%s: exit\n", __func__
);
1453 static void isp1362_endpoint_disable(struct usb_hcd
*hcd
, struct usb_host_endpoint
*hep
)
1455 struct isp1362_ep
*ep
= hep
->hcpriv
;
1456 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1457 unsigned long flags
;
1459 DBG(1, "%s: ep %p\n", __func__
, ep
);
1462 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1463 if (!list_empty(&hep
->urb_list
)) {
1464 if (!list_empty(&ep
->active
) && list_empty(&ep
->remove_list
)) {
1465 DBG(1, "%s: Removing ep %p req %d PTD[%d] $%04x\n", __func__
,
1466 ep
, ep
->num_req
, ep
->ptd_index
, ep
->ptd_offset
);
1467 remove_ptd(isp1362_hcd
, ep
);
1468 pr_info("%s: Waiting for Interrupt to clean up\n", __func__
);
1471 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1472 /* Wait for interrupt to clear out active list */
1473 while (!list_empty(&ep
->active
))
1476 DBG(1, "%s: Freeing EP %p\n", __func__
, ep
);
1478 usb_put_dev(ep
->udev
);
1483 static int isp1362_get_frame(struct usb_hcd
*hcd
)
1485 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1487 unsigned long flags
;
1489 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1490 fmnum
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1491 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1496 /*-------------------------------------------------------------------------*/
1498 /* Adapted from ohci-hub.c */
1499 static int isp1362_hub_status_data(struct usb_hcd
*hcd
, char *buf
)
1501 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1502 int ports
, i
, changed
= 0;
1503 unsigned long flags
;
1505 if (!HC_IS_RUNNING(hcd
->state
))
1508 /* Report no status change now, if we are scheduled to be
1510 if (timer_pending(&hcd
->rh_timer
))
1513 ports
= isp1362_hcd
->rhdesca
& RH_A_NDP
;
1516 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1518 if (isp1362_hcd
->rhstatus
& (RH_HS_LPSC
| RH_HS_OCIC
))
1519 buf
[0] = changed
= 1;
1523 for (i
= 0; i
< ports
; i
++) {
1524 u32 status
= isp1362_hcd
->rhport
[i
];
1526 if (status
& (RH_PS_CSC
| RH_PS_PESC
| RH_PS_PSSC
|
1527 RH_PS_OCIC
| RH_PS_PRSC
)) {
1529 buf
[0] |= 1 << (i
+ 1);
1533 if (!(status
& RH_PS_CCS
))
1536 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1540 static void isp1362_hub_descriptor(struct isp1362_hcd
*isp1362_hcd
,
1541 struct usb_hub_descriptor
*desc
)
1543 u32 reg
= isp1362_hcd
->rhdesca
;
1545 DBG(3, "%s: enter\n", __func__
);
1547 desc
->bDescriptorType
= 0x29;
1548 desc
->bDescLength
= 9;
1549 desc
->bHubContrCurrent
= 0;
1550 desc
->bNbrPorts
= reg
& 0x3;
1551 /* Power switching, device type, overcurrent. */
1552 desc
->wHubCharacteristics
= cpu_to_le16((reg
>> 8) & 0x1f);
1553 DBG(0, "%s: hubcharacteristics = %02x\n", __func__
, cpu_to_le16((reg
>> 8) & 0x1f));
1554 desc
->bPwrOn2PwrGood
= (reg
>> 24) & 0xff;
1555 /* ports removable, and legacy PortPwrCtrlMask */
1556 desc
->u
.hs
.DeviceRemovable
[0] = desc
->bNbrPorts
== 1 ? 1 << 1 : 3 << 1;
1557 desc
->u
.hs
.DeviceRemovable
[1] = ~0;
1559 DBG(3, "%s: exit\n", __func__
);
1562 /* Adapted from ohci-hub.c */
1563 static int isp1362_hub_control(struct usb_hcd
*hcd
, u16 typeReq
, u16 wValue
,
1564 u16 wIndex
, char *buf
, u16 wLength
)
1566 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1568 unsigned long flags
;
1570 int ports
= isp1362_hcd
->rhdesca
& RH_A_NDP
;
1574 case ClearHubFeature
:
1575 DBG(0, "ClearHubFeature: ");
1577 case C_HUB_OVER_CURRENT
:
1578 _DBG(0, "C_HUB_OVER_CURRENT\n");
1579 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1580 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_OCIC
);
1581 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1582 case C_HUB_LOCAL_POWER
:
1583 _DBG(0, "C_HUB_LOCAL_POWER\n");
1590 DBG(0, "SetHubFeature: ");
1592 case C_HUB_OVER_CURRENT
:
1593 case C_HUB_LOCAL_POWER
:
1594 _DBG(0, "C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1600 case GetHubDescriptor
:
1601 DBG(0, "GetHubDescriptor\n");
1602 isp1362_hub_descriptor(isp1362_hcd
, (struct usb_hub_descriptor
*)buf
);
1605 DBG(0, "GetHubStatus\n");
1606 put_unaligned(cpu_to_le32(0), (__le32
*) buf
);
1610 DBG(0, "GetPortStatus\n");
1612 if (!wIndex
|| wIndex
> ports
)
1614 tmp
= isp1362_hcd
->rhport
[--wIndex
];
1615 put_unaligned(cpu_to_le32(tmp
), (__le32
*) buf
);
1617 case ClearPortFeature
:
1618 DBG(0, "ClearPortFeature: ");
1619 if (!wIndex
|| wIndex
> ports
)
1624 case USB_PORT_FEAT_ENABLE
:
1625 _DBG(0, "USB_PORT_FEAT_ENABLE\n");
1628 case USB_PORT_FEAT_C_ENABLE
:
1629 _DBG(0, "USB_PORT_FEAT_C_ENABLE\n");
1632 case USB_PORT_FEAT_SUSPEND
:
1633 _DBG(0, "USB_PORT_FEAT_SUSPEND\n");
1636 case USB_PORT_FEAT_C_SUSPEND
:
1637 _DBG(0, "USB_PORT_FEAT_C_SUSPEND\n");
1640 case USB_PORT_FEAT_POWER
:
1641 _DBG(0, "USB_PORT_FEAT_POWER\n");
1645 case USB_PORT_FEAT_C_CONNECTION
:
1646 _DBG(0, "USB_PORT_FEAT_C_CONNECTION\n");
1649 case USB_PORT_FEAT_C_OVER_CURRENT
:
1650 _DBG(0, "USB_PORT_FEAT_C_OVER_CURRENT\n");
1653 case USB_PORT_FEAT_C_RESET
:
1654 _DBG(0, "USB_PORT_FEAT_C_RESET\n");
1661 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1662 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, tmp
);
1663 isp1362_hcd
->rhport
[wIndex
] =
1664 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1665 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1667 case SetPortFeature
:
1668 DBG(0, "SetPortFeature: ");
1669 if (!wIndex
|| wIndex
> ports
)
1673 case USB_PORT_FEAT_SUSPEND
:
1674 _DBG(0, "USB_PORT_FEAT_SUSPEND\n");
1675 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1676 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, RH_PS_PSS
);
1677 isp1362_hcd
->rhport
[wIndex
] =
1678 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1679 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1681 case USB_PORT_FEAT_POWER
:
1682 _DBG(0, "USB_PORT_FEAT_POWER\n");
1683 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1684 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, RH_PS_PPS
);
1685 isp1362_hcd
->rhport
[wIndex
] =
1686 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1687 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1689 case USB_PORT_FEAT_RESET
:
1690 _DBG(0, "USB_PORT_FEAT_RESET\n");
1691 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1693 t1
= jiffies
+ msecs_to_jiffies(USB_RESET_WIDTH
);
1694 while (time_before(jiffies
, t1
)) {
1695 /* spin until any current reset finishes */
1697 tmp
= isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1698 if (!(tmp
& RH_PS_PRS
))
1702 if (!(tmp
& RH_PS_CCS
))
1704 /* Reset lasts 10ms (claims datasheet) */
1705 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, (RH_PS_PRS
));
1707 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1709 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1712 isp1362_hcd
->rhport
[wIndex
] = isp1362_read_reg32(isp1362_hcd
,
1713 HCRHPORT1
+ wIndex
);
1714 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1723 /* "protocol stall" on error */
1724 _DBG(0, "PROTOCOL STALL\n");
1732 static int isp1362_bus_suspend(struct usb_hcd
*hcd
)
1735 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1736 unsigned long flags
;
1738 if (time_before(jiffies
, isp1362_hcd
->next_statechange
))
1741 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1743 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1744 switch (isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) {
1745 case OHCI_USB_RESUME
:
1746 DBG(0, "%s: resume/suspend?\n", __func__
);
1747 isp1362_hcd
->hc_control
&= ~OHCI_CTRL_HCFS
;
1748 isp1362_hcd
->hc_control
|= OHCI_USB_RESET
;
1749 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1751 case OHCI_USB_RESET
:
1753 pr_warning("%s: needs reinit!\n", __func__
);
1755 case OHCI_USB_SUSPEND
:
1756 pr_warning("%s: already suspended?\n", __func__
);
1759 DBG(0, "%s: suspend root hub\n", __func__
);
1761 /* First stop any processing */
1762 hcd
->state
= HC_STATE_QUIESCING
;
1763 if (!list_empty(&isp1362_hcd
->atl_queue
.active
) ||
1764 !list_empty(&isp1362_hcd
->intl_queue
.active
) ||
1765 !list_empty(&isp1362_hcd
->istl_queue
[0] .active
) ||
1766 !list_empty(&isp1362_hcd
->istl_queue
[1] .active
)) {
1769 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, ~0);
1770 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, ~0);
1771 isp1362_write_reg16(isp1362_hcd
, HCBUFSTAT
, 0);
1772 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
1773 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
, OHCI_INTR_SF
);
1775 DBG(0, "%s: stopping schedules ...\n", __func__
);
1780 if (isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
) & OHCI_INTR_SF
)
1784 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ATL
) {
1785 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCATLDONE
);
1786 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->atl_queue
);
1788 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_INTL
) {
1789 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
);
1790 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->intl_queue
);
1792 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ISTL0
)
1793 finish_iso_transfers(isp1362_hcd
, &isp1362_hcd
->istl_queue
[0]);
1794 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ISTL1
)
1795 finish_iso_transfers(isp1362_hcd
, &isp1362_hcd
->istl_queue
[1]);
1797 DBG(0, "%s: HCINTSTAT: %08x\n", __func__
,
1798 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1799 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
,
1800 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1803 isp1362_hcd
->hc_control
= OHCI_USB_SUSPEND
;
1804 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1805 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1806 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1809 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1810 if ((isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) != OHCI_USB_SUSPEND
) {
1811 pr_err("%s: controller won't suspend %08x\n", __func__
,
1812 isp1362_hcd
->hc_control
);
1817 /* no resumes until devices finish suspending */
1818 isp1362_hcd
->next_statechange
= jiffies
+ msecs_to_jiffies(5);
1822 hcd
->state
= HC_STATE_SUSPENDED
;
1823 DBG(0, "%s: HCD suspended: %08x\n", __func__
,
1824 isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
1826 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1830 static int isp1362_bus_resume(struct usb_hcd
*hcd
)
1832 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1834 unsigned long flags
;
1835 int status
= -EINPROGRESS
;
1837 if (time_before(jiffies
, isp1362_hcd
->next_statechange
))
1840 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1841 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1842 pr_info("%s: HCCONTROL: %08x\n", __func__
, isp1362_hcd
->hc_control
);
1843 if (hcd
->state
== HC_STATE_RESUMING
) {
1844 pr_warning("%s: duplicate resume\n", __func__
);
1847 switch (isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) {
1848 case OHCI_USB_SUSPEND
:
1849 DBG(0, "%s: resume root hub\n", __func__
);
1850 isp1362_hcd
->hc_control
&= ~OHCI_CTRL_HCFS
;
1851 isp1362_hcd
->hc_control
|= OHCI_USB_RESUME
;
1852 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1854 case OHCI_USB_RESUME
:
1855 /* HCFS changes sometime after INTR_RD */
1856 DBG(0, "%s: remote wakeup\n", __func__
);
1859 DBG(0, "%s: odd resume\n", __func__
);
1861 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1863 default: /* RESET, we lost power */
1864 DBG(0, "%s: root hub hardware reset\n", __func__
);
1867 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1868 if (status
== -EBUSY
) {
1869 DBG(0, "%s: Restarting HC\n", __func__
);
1870 isp1362_hc_stop(hcd
);
1871 return isp1362_hc_start(hcd
);
1873 if (status
!= -EINPROGRESS
)
1875 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1876 port
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
) & RH_A_NDP
;
1878 u32 stat
= isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ port
);
1880 /* force global, not selective, resume */
1881 if (!(stat
& RH_PS_PSS
)) {
1882 DBG(0, "%s: Not Resuming RH port %d\n", __func__
, port
);
1885 DBG(0, "%s: Resuming RH port %d\n", __func__
, port
);
1886 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ port
, RH_PS_POCI
);
1888 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1890 /* Some controllers (lucent) need extra-long delays */
1891 hcd
->state
= HC_STATE_RESUMING
;
1892 mdelay(20 /* usb 11.5.1.10 */ + 15);
1894 isp1362_hcd
->hc_control
= OHCI_USB_OPER
;
1895 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1896 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1897 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1898 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1902 /* keep it alive for ~5x suspend + resume costs */
1903 isp1362_hcd
->next_statechange
= jiffies
+ msecs_to_jiffies(250);
1905 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1906 hcd
->state
= HC_STATE_RUNNING
;
1910 #define isp1362_bus_suspend NULL
1911 #define isp1362_bus_resume NULL
1914 /*-------------------------------------------------------------------------*/
1916 #ifdef STUB_DEBUG_FILE
1918 static inline void create_debug_file(struct isp1362_hcd
*isp1362_hcd
)
1921 static inline void remove_debug_file(struct isp1362_hcd
*isp1362_hcd
)
1927 #include <linux/proc_fs.h>
1928 #include <linux/seq_file.h>
1930 static void dump_irq(struct seq_file
*s
, char *label
, u16 mask
)
1932 seq_printf(s
, "%-15s %04x%s%s%s%s%s%s\n", label
, mask
,
1933 mask
& HCuPINT_CLKRDY
? " clkrdy" : "",
1934 mask
& HCuPINT_SUSP
? " susp" : "",
1935 mask
& HCuPINT_OPR
? " opr" : "",
1936 mask
& HCuPINT_EOT
? " eot" : "",
1937 mask
& HCuPINT_ATL
? " atl" : "",
1938 mask
& HCuPINT_SOF
? " sof" : "");
1941 static void dump_int(struct seq_file
*s
, char *label
, u32 mask
)
1943 seq_printf(s
, "%-15s %08x%s%s%s%s%s%s%s\n", label
, mask
,
1944 mask
& OHCI_INTR_MIE
? " MIE" : "",
1945 mask
& OHCI_INTR_RHSC
? " rhsc" : "",
1946 mask
& OHCI_INTR_FNO
? " fno" : "",
1947 mask
& OHCI_INTR_UE
? " ue" : "",
1948 mask
& OHCI_INTR_RD
? " rd" : "",
1949 mask
& OHCI_INTR_SF
? " sof" : "",
1950 mask
& OHCI_INTR_SO
? " so" : "");
1953 static void dump_ctrl(struct seq_file
*s
, char *label
, u32 mask
)
1955 seq_printf(s
, "%-15s %08x%s%s%s\n", label
, mask
,
1956 mask
& OHCI_CTRL_RWC
? " rwc" : "",
1957 mask
& OHCI_CTRL_RWE
? " rwe" : "",
1960 switch (mask
& OHCI_CTRL_HCFS
) {
1964 case OHCI_USB_RESET
:
1967 case OHCI_USB_RESUME
:
1970 case OHCI_USB_SUSPEND
:
1980 static void dump_regs(struct seq_file
*s
, struct isp1362_hcd
*isp1362_hcd
)
1982 seq_printf(s
, "HCREVISION [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCREVISION
),
1983 isp1362_read_reg32(isp1362_hcd
, HCREVISION
));
1984 seq_printf(s
, "HCCONTROL [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCCONTROL
),
1985 isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
1986 seq_printf(s
, "HCCMDSTAT [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCCMDSTAT
),
1987 isp1362_read_reg32(isp1362_hcd
, HCCMDSTAT
));
1988 seq_printf(s
, "HCINTSTAT [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTSTAT
),
1989 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1990 seq_printf(s
, "HCINTENB [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTENB
),
1991 isp1362_read_reg32(isp1362_hcd
, HCINTENB
));
1992 seq_printf(s
, "HCFMINTVL [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMINTVL
),
1993 isp1362_read_reg32(isp1362_hcd
, HCFMINTVL
));
1994 seq_printf(s
, "HCFMREM [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMREM
),
1995 isp1362_read_reg32(isp1362_hcd
, HCFMREM
));
1996 seq_printf(s
, "HCFMNUM [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMNUM
),
1997 isp1362_read_reg32(isp1362_hcd
, HCFMNUM
));
1998 seq_printf(s
, "HCLSTHRESH [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCLSTHRESH
),
1999 isp1362_read_reg32(isp1362_hcd
, HCLSTHRESH
));
2000 seq_printf(s
, "HCRHDESCA [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHDESCA
),
2001 isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
));
2002 seq_printf(s
, "HCRHDESCB [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHDESCB
),
2003 isp1362_read_reg32(isp1362_hcd
, HCRHDESCB
));
2004 seq_printf(s
, "HCRHSTATUS [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHSTATUS
),
2005 isp1362_read_reg32(isp1362_hcd
, HCRHSTATUS
));
2006 seq_printf(s
, "HCRHPORT1 [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHPORT1
),
2007 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
));
2008 seq_printf(s
, "HCRHPORT2 [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHPORT2
),
2009 isp1362_read_reg32(isp1362_hcd
, HCRHPORT2
));
2010 seq_printf(s
, "\n");
2011 seq_printf(s
, "HCHWCFG [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCHWCFG
),
2012 isp1362_read_reg16(isp1362_hcd
, HCHWCFG
));
2013 seq_printf(s
, "HCDMACFG [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCDMACFG
),
2014 isp1362_read_reg16(isp1362_hcd
, HCDMACFG
));
2015 seq_printf(s
, "HCXFERCTR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCXFERCTR
),
2016 isp1362_read_reg16(isp1362_hcd
, HCXFERCTR
));
2017 seq_printf(s
, "HCuPINT [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCuPINT
),
2018 isp1362_read_reg16(isp1362_hcd
, HCuPINT
));
2019 seq_printf(s
, "HCuPINTENB [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCuPINTENB
),
2020 isp1362_read_reg16(isp1362_hcd
, HCuPINTENB
));
2021 seq_printf(s
, "HCCHIPID [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCCHIPID
),
2022 isp1362_read_reg16(isp1362_hcd
, HCCHIPID
));
2023 seq_printf(s
, "HCSCRATCH [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCSCRATCH
),
2024 isp1362_read_reg16(isp1362_hcd
, HCSCRATCH
));
2025 seq_printf(s
, "HCBUFSTAT [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCBUFSTAT
),
2026 isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
));
2027 seq_printf(s
, "HCDIRADDR [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCDIRADDR
),
2028 isp1362_read_reg32(isp1362_hcd
, HCDIRADDR
));
2030 seq_printf(s
, "HCDIRDATA [%02x] %04x\n", ISP1362_REG_NO(HCDIRDATA
),
2031 isp1362_read_reg16(isp1362_hcd
, HCDIRDATA
));
2033 seq_printf(s
, "HCISTLBUFSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCISTLBUFSZ
),
2034 isp1362_read_reg16(isp1362_hcd
, HCISTLBUFSZ
));
2035 seq_printf(s
, "HCISTLRATE [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCISTLRATE
),
2036 isp1362_read_reg16(isp1362_hcd
, HCISTLRATE
));
2037 seq_printf(s
, "\n");
2038 seq_printf(s
, "HCINTLBUFSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLBUFSZ
),
2039 isp1362_read_reg16(isp1362_hcd
, HCINTLBUFSZ
));
2040 seq_printf(s
, "HCINTLBLKSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLBLKSZ
),
2041 isp1362_read_reg16(isp1362_hcd
, HCINTLBLKSZ
));
2042 seq_printf(s
, "HCINTLDONE [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLDONE
),
2043 isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
));
2044 seq_printf(s
, "HCINTLSKIP [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLSKIP
),
2045 isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
));
2046 seq_printf(s
, "HCINTLLAST [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLLAST
),
2047 isp1362_read_reg32(isp1362_hcd
, HCINTLLAST
));
2048 seq_printf(s
, "HCINTLCURR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLCURR
),
2049 isp1362_read_reg16(isp1362_hcd
, HCINTLCURR
));
2050 seq_printf(s
, "\n");
2051 seq_printf(s
, "HCATLBUFSZ [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLBUFSZ
),
2052 isp1362_read_reg16(isp1362_hcd
, HCATLBUFSZ
));
2053 seq_printf(s
, "HCATLBLKSZ [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLBLKSZ
),
2054 isp1362_read_reg16(isp1362_hcd
, HCATLBLKSZ
));
2056 seq_printf(s
, "HCATLDONE [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDONE
),
2057 isp1362_read_reg32(isp1362_hcd
, HCATLDONE
));
2059 seq_printf(s
, "HCATLSKIP [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLSKIP
),
2060 isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
));
2061 seq_printf(s
, "HCATLLAST [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLLAST
),
2062 isp1362_read_reg32(isp1362_hcd
, HCATLLAST
));
2063 seq_printf(s
, "HCATLCURR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLCURR
),
2064 isp1362_read_reg16(isp1362_hcd
, HCATLCURR
));
2065 seq_printf(s
, "\n");
2066 seq_printf(s
, "HCATLDTC [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDTC
),
2067 isp1362_read_reg16(isp1362_hcd
, HCATLDTC
));
2068 seq_printf(s
, "HCATLDTCTO [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDTCTO
),
2069 isp1362_read_reg16(isp1362_hcd
, HCATLDTCTO
));
2072 static int proc_isp1362_show(struct seq_file
*s
, void *unused
)
2074 struct isp1362_hcd
*isp1362_hcd
= s
->private;
2075 struct isp1362_ep
*ep
;
2078 seq_printf(s
, "%s\n%s version %s\n",
2079 isp1362_hcd_to_hcd(isp1362_hcd
)->product_desc
, hcd_name
, DRIVER_VERSION
);
2081 /* collect statistics to help estimate potential win for
2082 * DMA engines that care about alignment (PXA)
2084 seq_printf(s
, "alignment: 16b/%ld 8b/%ld 4b/%ld 2b/%ld 1b/%ld\n",
2085 isp1362_hcd
->stat16
, isp1362_hcd
->stat8
, isp1362_hcd
->stat4
,
2086 isp1362_hcd
->stat2
, isp1362_hcd
->stat1
);
2087 seq_printf(s
, "max # ptds in ATL fifo: %d\n", isp1362_hcd
->atl_queue
.stat_maxptds
);
2088 seq_printf(s
, "max # ptds in INTL fifo: %d\n", isp1362_hcd
->intl_queue
.stat_maxptds
);
2089 seq_printf(s
, "max # ptds in ISTL fifo: %d\n",
2090 max(isp1362_hcd
->istl_queue
[0] .stat_maxptds
,
2091 isp1362_hcd
->istl_queue
[1] .stat_maxptds
));
2093 /* FIXME: don't show the following in suspended state */
2094 spin_lock_irq(&isp1362_hcd
->lock
);
2096 dump_irq(s
, "hc_irq_enable", isp1362_read_reg16(isp1362_hcd
, HCuPINTENB
));
2097 dump_irq(s
, "hc_irq_status", isp1362_read_reg16(isp1362_hcd
, HCuPINT
));
2098 dump_int(s
, "ohci_int_enable", isp1362_read_reg32(isp1362_hcd
, HCINTENB
));
2099 dump_int(s
, "ohci_int_status", isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
2100 dump_ctrl(s
, "ohci_control", isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
2102 for (i
= 0; i
< NUM_ISP1362_IRQS
; i
++)
2103 if (isp1362_hcd
->irq_stat
[i
])
2104 seq_printf(s
, "%-15s: %d\n",
2105 ISP1362_INT_NAME(i
), isp1362_hcd
->irq_stat
[i
]);
2107 dump_regs(s
, isp1362_hcd
);
2108 list_for_each_entry(ep
, &isp1362_hcd
->async
, schedule
) {
2111 seq_printf(s
, "%p, ep%d%s, maxpacket %d:\n", ep
, ep
->epnum
,
2114 switch (ep
->nextpid
) {
2131 s
;}), ep
->maxpacket
) ;
2132 list_for_each_entry(urb
, &ep
->hep
->urb_list
, urb_list
) {
2133 seq_printf(s
, " urb%p, %d/%d\n", urb
,
2135 urb
->transfer_buffer_length
);
2138 if (!list_empty(&isp1362_hcd
->async
))
2139 seq_printf(s
, "\n");
2140 dump_ptd_queue(&isp1362_hcd
->atl_queue
);
2142 seq_printf(s
, "periodic size= %d\n", PERIODIC_SIZE
);
2144 list_for_each_entry(ep
, &isp1362_hcd
->periodic
, schedule
) {
2145 seq_printf(s
, "branch:%2d load:%3d PTD[%d] $%04x:\n", ep
->branch
,
2146 isp1362_hcd
->load
[ep
->branch
], ep
->ptd_index
, ep
->ptd_offset
);
2148 seq_printf(s
, " %d/%p (%sdev%d ep%d%s max %d)\n",
2150 (ep
->udev
->speed
== USB_SPEED_FULL
) ? "" : "ls ",
2151 ep
->udev
->devnum
, ep
->epnum
,
2152 (ep
->epnum
== 0) ? "" :
2153 ((ep
->nextpid
== USB_PID_IN
) ?
2154 "in" : "out"), ep
->maxpacket
);
2156 dump_ptd_queue(&isp1362_hcd
->intl_queue
);
2158 seq_printf(s
, "ISO:\n");
2160 list_for_each_entry(ep
, &isp1362_hcd
->isoc
, schedule
) {
2161 seq_printf(s
, " %d/%p (%sdev%d ep%d%s max %d)\n",
2163 (ep
->udev
->speed
== USB_SPEED_FULL
) ? "" : "ls ",
2164 ep
->udev
->devnum
, ep
->epnum
,
2165 (ep
->epnum
== 0) ? "" :
2166 ((ep
->nextpid
== USB_PID_IN
) ?
2167 "in" : "out"), ep
->maxpacket
);
2170 spin_unlock_irq(&isp1362_hcd
->lock
);
2171 seq_printf(s
, "\n");
2176 static int proc_isp1362_open(struct inode
*inode
, struct file
*file
)
2178 return single_open(file
, proc_isp1362_show
, PDE(inode
)->data
);
2181 static const struct file_operations proc_ops
= {
2182 .open
= proc_isp1362_open
,
2184 .llseek
= seq_lseek
,
2185 .release
= single_release
,
2188 /* expect just one isp1362_hcd per system */
2189 static const char proc_filename
[] = "driver/isp1362";
2191 static void create_debug_file(struct isp1362_hcd
*isp1362_hcd
)
2193 struct proc_dir_entry
*pde
;
2195 pde
= create_proc_entry(proc_filename
, 0, NULL
);
2197 pr_warning("%s: Failed to create debug file '%s'\n", __func__
, proc_filename
);
2201 pde
->proc_fops
= &proc_ops
;
2202 pde
->data
= isp1362_hcd
;
2203 isp1362_hcd
->pde
= pde
;
2206 static void remove_debug_file(struct isp1362_hcd
*isp1362_hcd
)
2208 if (isp1362_hcd
->pde
)
2209 remove_proc_entry(proc_filename
, NULL
);
2214 /*-------------------------------------------------------------------------*/
2216 static void __isp1362_sw_reset(struct isp1362_hcd
*isp1362_hcd
)
2220 isp1362_write_reg16(isp1362_hcd
, HCSWRES
, HCSWRES_MAGIC
);
2221 isp1362_write_reg32(isp1362_hcd
, HCCMDSTAT
, OHCI_HCR
);
2224 if (!(isp1362_read_reg32(isp1362_hcd
, HCCMDSTAT
) & OHCI_HCR
))
2228 pr_err("Software reset timeout\n");
2231 static void isp1362_sw_reset(struct isp1362_hcd
*isp1362_hcd
)
2233 unsigned long flags
;
2235 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2236 __isp1362_sw_reset(isp1362_hcd
);
2237 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2240 static int isp1362_mem_config(struct usb_hcd
*hcd
)
2242 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2243 unsigned long flags
;
2245 u16 istl_size
= ISP1362_ISTL_BUFSIZE
;
2246 u16 intl_blksize
= ISP1362_INTL_BLKSIZE
+ PTD_HEADER_SIZE
;
2247 u16 intl_size
= ISP1362_INTL_BUFFERS
* intl_blksize
;
2248 u16 atl_blksize
= ISP1362_ATL_BLKSIZE
+ PTD_HEADER_SIZE
;
2249 u16 atl_buffers
= (ISP1362_BUF_SIZE
- (istl_size
+ intl_size
)) / atl_blksize
;
2253 WARN_ON(istl_size
& 3);
2254 WARN_ON(atl_blksize
& 3);
2255 WARN_ON(intl_blksize
& 3);
2256 WARN_ON(atl_blksize
< PTD_HEADER_SIZE
);
2257 WARN_ON(intl_blksize
< PTD_HEADER_SIZE
);
2259 BUG_ON((unsigned)ISP1362_INTL_BUFFERS
> 32);
2260 if (atl_buffers
> 32)
2262 atl_size
= atl_buffers
* atl_blksize
;
2263 total
= atl_size
+ intl_size
+ istl_size
;
2264 dev_info(hcd
->self
.controller
, "ISP1362 Memory usage:\n");
2265 dev_info(hcd
->self
.controller
, " ISTL: 2 * %4d: %4d @ $%04x:$%04x\n",
2266 istl_size
/ 2, istl_size
, 0, istl_size
/ 2);
2267 dev_info(hcd
->self
.controller
, " INTL: %4d * (%3zu+8): %4d @ $%04x\n",
2268 ISP1362_INTL_BUFFERS
, intl_blksize
- PTD_HEADER_SIZE
,
2269 intl_size
, istl_size
);
2270 dev_info(hcd
->self
.controller
, " ATL : %4d * (%3zu+8): %4d @ $%04x\n",
2271 atl_buffers
, atl_blksize
- PTD_HEADER_SIZE
,
2272 atl_size
, istl_size
+ intl_size
);
2273 dev_info(hcd
->self
.controller
, " USED/FREE: %4d %4d\n", total
,
2274 ISP1362_BUF_SIZE
- total
);
2276 if (total
> ISP1362_BUF_SIZE
) {
2277 dev_err(hcd
->self
.controller
, "%s: Memory requested: %d, available %d\n",
2278 __func__
, total
, ISP1362_BUF_SIZE
);
2282 total
= istl_size
+ intl_size
+ atl_size
;
2283 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2285 for (i
= 0; i
< 2; i
++) {
2286 isp1362_hcd
->istl_queue
[i
].buf_start
= i
* istl_size
/ 2,
2287 isp1362_hcd
->istl_queue
[i
].buf_size
= istl_size
/ 2;
2288 isp1362_hcd
->istl_queue
[i
].blk_size
= 4;
2289 INIT_LIST_HEAD(&isp1362_hcd
->istl_queue
[i
].active
);
2290 snprintf(isp1362_hcd
->istl_queue
[i
].name
,
2291 sizeof(isp1362_hcd
->istl_queue
[i
].name
), "ISTL%d", i
);
2292 DBG(3, "%s: %5s buf $%04x %d\n", __func__
,
2293 isp1362_hcd
->istl_queue
[i
].name
,
2294 isp1362_hcd
->istl_queue
[i
].buf_start
,
2295 isp1362_hcd
->istl_queue
[i
].buf_size
);
2297 isp1362_write_reg16(isp1362_hcd
, HCISTLBUFSZ
, istl_size
/ 2);
2299 isp1362_hcd
->intl_queue
.buf_start
= istl_size
;
2300 isp1362_hcd
->intl_queue
.buf_size
= intl_size
;
2301 isp1362_hcd
->intl_queue
.buf_count
= ISP1362_INTL_BUFFERS
;
2302 isp1362_hcd
->intl_queue
.blk_size
= intl_blksize
;
2303 isp1362_hcd
->intl_queue
.buf_avail
= isp1362_hcd
->intl_queue
.buf_count
;
2304 isp1362_hcd
->intl_queue
.skip_map
= ~0;
2305 INIT_LIST_HEAD(&isp1362_hcd
->intl_queue
.active
);
2307 isp1362_write_reg16(isp1362_hcd
, HCINTLBUFSZ
,
2308 isp1362_hcd
->intl_queue
.buf_size
);
2309 isp1362_write_reg16(isp1362_hcd
, HCINTLBLKSZ
,
2310 isp1362_hcd
->intl_queue
.blk_size
- PTD_HEADER_SIZE
);
2311 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, ~0);
2312 isp1362_write_reg32(isp1362_hcd
, HCINTLLAST
,
2313 1 << (ISP1362_INTL_BUFFERS
- 1));
2315 isp1362_hcd
->atl_queue
.buf_start
= istl_size
+ intl_size
;
2316 isp1362_hcd
->atl_queue
.buf_size
= atl_size
;
2317 isp1362_hcd
->atl_queue
.buf_count
= atl_buffers
;
2318 isp1362_hcd
->atl_queue
.blk_size
= atl_blksize
;
2319 isp1362_hcd
->atl_queue
.buf_avail
= isp1362_hcd
->atl_queue
.buf_count
;
2320 isp1362_hcd
->atl_queue
.skip_map
= ~0;
2321 INIT_LIST_HEAD(&isp1362_hcd
->atl_queue
.active
);
2323 isp1362_write_reg16(isp1362_hcd
, HCATLBUFSZ
,
2324 isp1362_hcd
->atl_queue
.buf_size
);
2325 isp1362_write_reg16(isp1362_hcd
, HCATLBLKSZ
,
2326 isp1362_hcd
->atl_queue
.blk_size
- PTD_HEADER_SIZE
);
2327 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, ~0);
2328 isp1362_write_reg32(isp1362_hcd
, HCATLLAST
,
2329 1 << (atl_buffers
- 1));
2331 snprintf(isp1362_hcd
->atl_queue
.name
,
2332 sizeof(isp1362_hcd
->atl_queue
.name
), "ATL");
2333 snprintf(isp1362_hcd
->intl_queue
.name
,
2334 sizeof(isp1362_hcd
->intl_queue
.name
), "INTL");
2335 DBG(3, "%s: %5s buf $%04x %2d * %4d = %4d\n", __func__
,
2336 isp1362_hcd
->intl_queue
.name
,
2337 isp1362_hcd
->intl_queue
.buf_start
,
2338 ISP1362_INTL_BUFFERS
, isp1362_hcd
->intl_queue
.blk_size
,
2339 isp1362_hcd
->intl_queue
.buf_size
);
2340 DBG(3, "%s: %5s buf $%04x %2d * %4d = %4d\n", __func__
,
2341 isp1362_hcd
->atl_queue
.name
,
2342 isp1362_hcd
->atl_queue
.buf_start
,
2343 atl_buffers
, isp1362_hcd
->atl_queue
.blk_size
,
2344 isp1362_hcd
->atl_queue
.buf_size
);
2346 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2351 static int isp1362_hc_reset(struct usb_hcd
*hcd
)
2354 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2356 unsigned long timeout
= 100;
2357 unsigned long flags
;
2360 pr_info("%s:\n", __func__
);
2362 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->reset
) {
2363 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 1);
2365 if (isp1362_hcd
->board
->clock
)
2366 isp1362_hcd
->board
->clock(hcd
->self
.controller
, 1);
2367 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 0);
2369 isp1362_sw_reset(isp1362_hcd
);
2371 /* chip has been reset. First we need to see a clock */
2372 t
= jiffies
+ msecs_to_jiffies(timeout
);
2373 while (!clkrdy
&& time_before_eq(jiffies
, t
)) {
2374 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2375 clkrdy
= isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_CLKRDY
;
2376 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2381 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2382 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, HCuPINT_CLKRDY
);
2383 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2385 pr_err("Clock not ready after %lums\n", timeout
);
2391 static void isp1362_hc_stop(struct usb_hcd
*hcd
)
2393 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2394 unsigned long flags
;
2397 pr_info("%s:\n", __func__
);
2399 del_timer_sync(&hcd
->rh_timer
);
2401 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2403 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
2405 /* Switch off power for all ports */
2406 tmp
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
);
2407 tmp
&= ~(RH_A_NPS
| RH_A_PSM
);
2408 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, tmp
);
2409 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPS
);
2411 /* Reset the chip */
2412 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->reset
)
2413 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 1);
2415 __isp1362_sw_reset(isp1362_hcd
);
2417 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->clock
)
2418 isp1362_hcd
->board
->clock(hcd
->self
.controller
, 0);
2420 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2423 #ifdef CHIP_BUFFER_TEST
2424 static int isp1362_chip_test(struct isp1362_hcd
*isp1362_hcd
)
2428 unsigned long flags
;
2430 ref
= kmalloc(2 * ISP1362_BUF_SIZE
, GFP_KERNEL
);
2433 u16
*tst
= &ref
[ISP1362_BUF_SIZE
/ 2];
2435 for (offset
= 0; offset
< ISP1362_BUF_SIZE
/ 2; offset
++) {
2436 ref
[offset
] = ~offset
;
2437 tst
[offset
] = offset
;
2440 for (offset
= 0; offset
< 4; offset
++) {
2443 for (j
= 0; j
< 8; j
++) {
2444 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2445 isp1362_write_buffer(isp1362_hcd
, (u8
*)ref
+ offset
, 0, j
);
2446 isp1362_read_buffer(isp1362_hcd
, (u8
*)tst
+ offset
, 0, j
);
2447 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2449 if (memcmp(ref
, tst
, j
)) {
2451 pr_err("%s: memory check with %d byte offset %d failed\n",
2452 __func__
, j
, offset
);
2453 dump_data((u8
*)ref
+ offset
, j
);
2454 dump_data((u8
*)tst
+ offset
, j
);
2459 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2460 isp1362_write_buffer(isp1362_hcd
, ref
, 0, ISP1362_BUF_SIZE
);
2461 isp1362_read_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2462 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2464 if (memcmp(ref
, tst
, ISP1362_BUF_SIZE
)) {
2466 pr_err("%s: memory check failed\n", __func__
);
2467 dump_data((u8
*)tst
, ISP1362_BUF_SIZE
/ 2);
2470 for (offset
= 0; offset
< 256; offset
++) {
2475 memset(tst
, 0, ISP1362_BUF_SIZE
);
2476 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2477 isp1362_write_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2478 isp1362_read_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2479 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2480 if (memcmp(tst
, tst
+ (ISP1362_BUF_SIZE
/ (2 * sizeof(*tst
))),
2481 ISP1362_BUF_SIZE
/ 2)) {
2482 pr_err("%s: Failed to clear buffer\n", __func__
);
2483 dump_data((u8
*)tst
, ISP1362_BUF_SIZE
);
2486 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2487 isp1362_write_buffer(isp1362_hcd
, ref
, offset
* 2, PTD_HEADER_SIZE
);
2488 isp1362_write_buffer(isp1362_hcd
, ref
+ PTD_HEADER_SIZE
/ sizeof(*ref
),
2489 offset
* 2 + PTD_HEADER_SIZE
, test_size
);
2490 isp1362_read_buffer(isp1362_hcd
, tst
, offset
* 2,
2491 PTD_HEADER_SIZE
+ test_size
);
2492 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2493 if (memcmp(ref
, tst
, PTD_HEADER_SIZE
+ test_size
)) {
2494 dump_data(((u8
*)ref
) + offset
, PTD_HEADER_SIZE
+ test_size
);
2495 dump_data((u8
*)tst
, PTD_HEADER_SIZE
+ test_size
);
2496 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2497 isp1362_read_buffer(isp1362_hcd
, tst
, offset
* 2,
2498 PTD_HEADER_SIZE
+ test_size
);
2499 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2500 if (memcmp(ref
, tst
, PTD_HEADER_SIZE
+ test_size
)) {
2502 pr_err("%s: memory check with offset %02x failed\n",
2506 pr_warning("%s: memory check with offset %02x ok after second read\n",
2516 static int isp1362_hc_start(struct usb_hcd
*hcd
)
2519 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2520 struct isp1362_platform_data
*board
= isp1362_hcd
->board
;
2523 unsigned long flags
;
2525 pr_info("%s:\n", __func__
);
2527 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2528 chipid
= isp1362_read_reg16(isp1362_hcd
, HCCHIPID
);
2529 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2531 if ((chipid
& HCCHIPID_MASK
) != HCCHIPID_MAGIC
) {
2532 pr_err("%s: Invalid chip ID %04x\n", __func__
, chipid
);
2536 #ifdef CHIP_BUFFER_TEST
2537 ret
= isp1362_chip_test(isp1362_hcd
);
2541 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2542 /* clear interrupt status and disable all interrupt sources */
2543 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, 0xff);
2544 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
2547 hwcfg
= HCHWCFG_INT_ENABLE
| HCHWCFG_DBWIDTH(1);
2548 if (board
->sel15Kres
)
2549 hwcfg
|= HCHWCFG_PULLDOWN_DS2
|
2550 ((MAX_ROOT_PORTS
> 1) ? HCHWCFG_PULLDOWN_DS1
: 0);
2551 if (board
->clknotstop
)
2552 hwcfg
|= HCHWCFG_CLKNOTSTOP
;
2553 if (board
->oc_enable
)
2554 hwcfg
|= HCHWCFG_ANALOG_OC
;
2555 if (board
->int_act_high
)
2556 hwcfg
|= HCHWCFG_INT_POL
;
2557 if (board
->int_edge_triggered
)
2558 hwcfg
|= HCHWCFG_INT_TRIGGER
;
2559 if (board
->dreq_act_high
)
2560 hwcfg
|= HCHWCFG_DREQ_POL
;
2561 if (board
->dack_act_high
)
2562 hwcfg
|= HCHWCFG_DACK_POL
;
2563 isp1362_write_reg16(isp1362_hcd
, HCHWCFG
, hwcfg
);
2564 isp1362_show_reg(isp1362_hcd
, HCHWCFG
);
2565 isp1362_write_reg16(isp1362_hcd
, HCDMACFG
, 0);
2566 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2568 ret
= isp1362_mem_config(hcd
);
2572 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2575 isp1362_hcd
->rhdesca
= 0;
2576 if (board
->no_power_switching
)
2577 isp1362_hcd
->rhdesca
|= RH_A_NPS
;
2578 if (board
->power_switching_mode
)
2579 isp1362_hcd
->rhdesca
|= RH_A_PSM
;
2581 isp1362_hcd
->rhdesca
|= (board
->potpg
<< 24) & RH_A_POTPGT
;
2583 isp1362_hcd
->rhdesca
|= (25 << 24) & RH_A_POTPGT
;
2585 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, isp1362_hcd
->rhdesca
& ~RH_A_OCPM
);
2586 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, isp1362_hcd
->rhdesca
| RH_A_OCPM
);
2587 isp1362_hcd
->rhdesca
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
);
2589 isp1362_hcd
->rhdescb
= RH_B_PPCM
;
2590 isp1362_write_reg32(isp1362_hcd
, HCRHDESCB
, isp1362_hcd
->rhdescb
);
2591 isp1362_hcd
->rhdescb
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCB
);
2593 isp1362_read_reg32(isp1362_hcd
, HCFMINTVL
);
2594 isp1362_write_reg32(isp1362_hcd
, HCFMINTVL
, (FSMP(FI
) << 16) | FI
);
2595 isp1362_write_reg32(isp1362_hcd
, HCLSTHRESH
, LSTHRESH
);
2597 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2599 isp1362_hcd
->hc_control
= OHCI_USB_OPER
;
2600 hcd
->state
= HC_STATE_RUNNING
;
2602 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2603 /* Set up interrupts */
2604 isp1362_hcd
->intenb
= OHCI_INTR_MIE
| OHCI_INTR_RHSC
| OHCI_INTR_UE
;
2605 isp1362_hcd
->intenb
|= OHCI_INTR_RD
;
2606 isp1362_hcd
->irqenb
= HCuPINT_OPR
| HCuPINT_SUSP
;
2607 isp1362_write_reg32(isp1362_hcd
, HCINTENB
, isp1362_hcd
->intenb
);
2608 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
2610 /* Go operational */
2611 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
2612 /* enable global power */
2613 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPSC
| RH_HS_DRWE
);
2615 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2620 /*-------------------------------------------------------------------------*/
2622 static struct hc_driver isp1362_hc_driver
= {
2623 .description
= hcd_name
,
2624 .product_desc
= "ISP1362 Host Controller",
2625 .hcd_priv_size
= sizeof(struct isp1362_hcd
),
2628 .flags
= HCD_USB11
| HCD_MEMORY
,
2630 .reset
= isp1362_hc_reset
,
2631 .start
= isp1362_hc_start
,
2632 .stop
= isp1362_hc_stop
,
2634 .urb_enqueue
= isp1362_urb_enqueue
,
2635 .urb_dequeue
= isp1362_urb_dequeue
,
2636 .endpoint_disable
= isp1362_endpoint_disable
,
2638 .get_frame_number
= isp1362_get_frame
,
2640 .hub_status_data
= isp1362_hub_status_data
,
2641 .hub_control
= isp1362_hub_control
,
2642 .bus_suspend
= isp1362_bus_suspend
,
2643 .bus_resume
= isp1362_bus_resume
,
2646 /*-------------------------------------------------------------------------*/
2648 static int __devexit
isp1362_remove(struct platform_device
*pdev
)
2650 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2651 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2652 struct resource
*res
;
2654 remove_debug_file(isp1362_hcd
);
2655 DBG(0, "%s: Removing HCD\n", __func__
);
2656 usb_remove_hcd(hcd
);
2658 DBG(0, "%s: Unmapping data_reg @ %p\n", __func__
,
2659 isp1362_hcd
->data_reg
);
2660 iounmap(isp1362_hcd
->data_reg
);
2662 DBG(0, "%s: Unmapping addr_reg @ %p\n", __func__
,
2663 isp1362_hcd
->addr_reg
);
2664 iounmap(isp1362_hcd
->addr_reg
);
2666 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
2667 DBG(0, "%s: release mem_region: %08lx\n", __func__
, (long unsigned int)res
->start
);
2669 release_mem_region(res
->start
, resource_size(res
));
2671 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2672 DBG(0, "%s: release mem_region: %08lx\n", __func__
, (long unsigned int)res
->start
);
2674 release_mem_region(res
->start
, resource_size(res
));
2676 DBG(0, "%s: put_hcd\n", __func__
);
2678 DBG(0, "%s: Done\n", __func__
);
2683 static int __devinit
isp1362_probe(struct platform_device
*pdev
)
2685 struct usb_hcd
*hcd
;
2686 struct isp1362_hcd
*isp1362_hcd
;
2687 struct resource
*addr
, *data
;
2688 void __iomem
*addr_reg
;
2689 void __iomem
*data_reg
;
2692 struct resource
*irq_res
;
2693 unsigned int irq_flags
= 0;
2695 /* basic sanity checks first. board-specific init logic should
2696 * have initialized this the three resources and probably board
2697 * specific platform_data. we don't probe for IRQs, and do only
2698 * minimal sanity checking.
2700 if (pdev
->num_resources
< 3) {
2705 data
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2706 addr
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
2707 irq_res
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
2708 if (!addr
|| !data
|| !irq_res
) {
2712 irq
= irq_res
->start
;
2714 if (pdev
->dev
.dma_mask
) {
2715 DBG(1, "won't do DMA");
2720 if (!request_mem_region(addr
->start
, resource_size(addr
), hcd_name
)) {
2724 addr_reg
= ioremap(addr
->start
, resource_size(addr
));
2725 if (addr_reg
== NULL
) {
2730 if (!request_mem_region(data
->start
, resource_size(data
), hcd_name
)) {
2734 data_reg
= ioremap(data
->start
, resource_size(data
));
2735 if (data_reg
== NULL
) {
2740 /* allocate and initialize hcd */
2741 hcd
= usb_create_hcd(&isp1362_hc_driver
, &pdev
->dev
, dev_name(&pdev
->dev
));
2746 hcd
->rsrc_start
= data
->start
;
2747 isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2748 isp1362_hcd
->data_reg
= data_reg
;
2749 isp1362_hcd
->addr_reg
= addr_reg
;
2751 isp1362_hcd
->next_statechange
= jiffies
;
2752 spin_lock_init(&isp1362_hcd
->lock
);
2753 INIT_LIST_HEAD(&isp1362_hcd
->async
);
2754 INIT_LIST_HEAD(&isp1362_hcd
->periodic
);
2755 INIT_LIST_HEAD(&isp1362_hcd
->isoc
);
2756 INIT_LIST_HEAD(&isp1362_hcd
->remove_list
);
2757 isp1362_hcd
->board
= pdev
->dev
.platform_data
;
2758 #if USE_PLATFORM_DELAY
2759 if (!isp1362_hcd
->board
->delay
) {
2760 dev_err(hcd
->self
.controller
, "No platform delay function given\n");
2766 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHEDGE
)
2767 irq_flags
|= IRQF_TRIGGER_RISING
;
2768 if (irq_res
->flags
& IORESOURCE_IRQ_LOWEDGE
)
2769 irq_flags
|= IRQF_TRIGGER_FALLING
;
2770 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHLEVEL
)
2771 irq_flags
|= IRQF_TRIGGER_HIGH
;
2772 if (irq_res
->flags
& IORESOURCE_IRQ_LOWLEVEL
)
2773 irq_flags
|= IRQF_TRIGGER_LOW
;
2775 retval
= usb_add_hcd(hcd
, irq
, irq_flags
| IRQF_DISABLED
| IRQF_SHARED
);
2778 pr_info("%s, irq %d\n", hcd
->product_desc
, irq
);
2780 create_debug_file(isp1362_hcd
);
2785 DBG(0, "%s: Freeing dev %p\n", __func__
, isp1362_hcd
);
2788 DBG(0, "%s: Unmapping data_reg @ %p\n", __func__
, data_reg
);
2791 DBG(0, "%s: Releasing mem region %08lx\n", __func__
, (long unsigned int)data
->start
);
2792 release_mem_region(data
->start
, resource_size(data
));
2794 DBG(0, "%s: Unmapping addr_reg @ %p\n", __func__
, addr_reg
);
2797 DBG(0, "%s: Releasing mem region %08lx\n", __func__
, (long unsigned int)addr
->start
);
2798 release_mem_region(addr
->start
, resource_size(addr
));
2800 pr_err("%s: init error, %d\n", __func__
, retval
);
2806 static int isp1362_suspend(struct platform_device
*pdev
, pm_message_t state
)
2808 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2809 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2810 unsigned long flags
;
2813 DBG(0, "%s: Suspending device\n", __func__
);
2815 if (state
.event
== PM_EVENT_FREEZE
) {
2816 DBG(0, "%s: Suspending root hub\n", __func__
);
2817 retval
= isp1362_bus_suspend(hcd
);
2819 DBG(0, "%s: Suspending RH ports\n", __func__
);
2820 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2821 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPS
);
2822 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2825 pdev
->dev
.power
.power_state
= state
;
2829 static int isp1362_resume(struct platform_device
*pdev
)
2831 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2832 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2833 unsigned long flags
;
2835 DBG(0, "%s: Resuming\n", __func__
);
2837 if (pdev
->dev
.power
.power_state
.event
== PM_EVENT_SUSPEND
) {
2838 DBG(0, "%s: Resume RH ports\n", __func__
);
2839 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2840 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPSC
);
2841 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2845 pdev
->dev
.power
.power_state
= PMSG_ON
;
2847 return isp1362_bus_resume(isp1362_hcd_to_hcd(isp1362_hcd
));
2850 #define isp1362_suspend NULL
2851 #define isp1362_resume NULL
2854 static struct platform_driver isp1362_driver
= {
2855 .probe
= isp1362_probe
,
2856 .remove
= __devexit_p(isp1362_remove
),
2858 .suspend
= isp1362_suspend
,
2859 .resume
= isp1362_resume
,
2861 .name
= (char *)hcd_name
,
2862 .owner
= THIS_MODULE
,
2866 /*-------------------------------------------------------------------------*/
2868 static int __init
isp1362_init(void)
2872 pr_info("driver %s, %s\n", hcd_name
, DRIVER_VERSION
);
2873 return platform_driver_register(&isp1362_driver
);
2875 module_init(isp1362_init
);
2877 static void __exit
isp1362_cleanup(void)
2879 platform_driver_unregister(&isp1362_driver
);
2881 module_exit(isp1362_cleanup
);