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>
84 #include <linux/prefetch.h>
87 #include <asm/system.h>
88 #include <asm/byteorder.h>
89 #include <asm/unaligned.h>
93 module_param(dbg_level
, int, 0644);
95 module_param(dbg_level
, int, 0);
96 #define STUB_DEBUG_FILE
99 #include "../core/usb.h"
103 #define DRIVER_VERSION "2005-04-04"
104 #define DRIVER_DESC "ISP1362 USB Host Controller Driver"
106 MODULE_DESCRIPTION(DRIVER_DESC
);
107 MODULE_LICENSE("GPL");
109 static const char hcd_name
[] = "isp1362-hcd";
111 static void isp1362_hc_stop(struct usb_hcd
*hcd
);
112 static int isp1362_hc_start(struct usb_hcd
*hcd
);
114 /*-------------------------------------------------------------------------*/
117 * When called from the interrupthandler only isp1362_hcd->irqenb is modified,
118 * since the interrupt handler will write isp1362_hcd->irqenb to HCuPINT upon
120 * We don't need a 'disable' counterpart, since interrupts will be disabled
121 * only by the interrupt handler.
123 static inline void isp1362_enable_int(struct isp1362_hcd
*isp1362_hcd
, u16 mask
)
125 if ((isp1362_hcd
->irqenb
| mask
) == isp1362_hcd
->irqenb
)
127 if (mask
& ~isp1362_hcd
->irqenb
)
128 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, mask
& ~isp1362_hcd
->irqenb
);
129 isp1362_hcd
->irqenb
|= mask
;
130 if (isp1362_hcd
->irq_active
)
132 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
135 /*-------------------------------------------------------------------------*/
137 static inline struct isp1362_ep_queue
*get_ptd_queue(struct isp1362_hcd
*isp1362_hcd
,
140 struct isp1362_ep_queue
*epq
= NULL
;
142 if (offset
< isp1362_hcd
->istl_queue
[1].buf_start
)
143 epq
= &isp1362_hcd
->istl_queue
[0];
144 else if (offset
< isp1362_hcd
->intl_queue
.buf_start
)
145 epq
= &isp1362_hcd
->istl_queue
[1];
146 else if (offset
< isp1362_hcd
->atl_queue
.buf_start
)
147 epq
= &isp1362_hcd
->intl_queue
;
148 else if (offset
< isp1362_hcd
->atl_queue
.buf_start
+
149 isp1362_hcd
->atl_queue
.buf_size
)
150 epq
= &isp1362_hcd
->atl_queue
;
153 DBG(1, "%s: PTD $%04x is on %s queue\n", __func__
, offset
, epq
->name
);
155 pr_warning("%s: invalid PTD $%04x\n", __func__
, offset
);
160 static inline int get_ptd_offset(struct isp1362_ep_queue
*epq
, u8 index
)
164 if (index
* epq
->blk_size
> epq
->buf_size
) {
165 pr_warning("%s: Bad %s index %d(%d)\n", __func__
, epq
->name
, index
,
166 epq
->buf_size
/ epq
->blk_size
);
169 offset
= epq
->buf_start
+ index
* epq
->blk_size
;
170 DBG(3, "%s: %s PTD[%02x] # %04x\n", __func__
, epq
->name
, index
, offset
);
175 /*-------------------------------------------------------------------------*/
177 static inline u16
max_transfer_size(struct isp1362_ep_queue
*epq
, size_t size
,
180 u16 xfer_size
= min_t(size_t, MAX_XFER_SIZE
, size
);
182 xfer_size
= min_t(size_t, xfer_size
, epq
->buf_avail
* epq
->blk_size
- PTD_HEADER_SIZE
);
183 if (xfer_size
< size
&& xfer_size
% mps
)
184 xfer_size
-= xfer_size
% mps
;
189 static int claim_ptd_buffers(struct isp1362_ep_queue
*epq
,
190 struct isp1362_ep
*ep
, u16 len
)
192 int ptd_offset
= -EINVAL
;
193 int num_ptds
= ((len
+ PTD_HEADER_SIZE
- 1) / epq
->blk_size
) + 1;
196 BUG_ON(len
> epq
->buf_size
);
202 pr_err("%s: %s len %d/%d num_ptds %d buf_map %08lx skip_map %08lx\n", __func__
,
203 epq
->name
, len
, epq
->blk_size
, num_ptds
, epq
->buf_map
, epq
->skip_map
);
204 BUG_ON(ep
->num_ptds
!= 0);
206 found
= bitmap_find_next_zero_area(&epq
->buf_map
, epq
->buf_count
, 0,
208 if (found
>= epq
->buf_count
)
211 DBG(1, "%s: Found %d PTDs[%d] for %d/%d byte\n", __func__
,
212 num_ptds
, found
, len
, (int)(epq
->blk_size
- PTD_HEADER_SIZE
));
213 ptd_offset
= get_ptd_offset(epq
, found
);
214 WARN_ON(ptd_offset
< 0);
215 ep
->ptd_offset
= ptd_offset
;
216 ep
->num_ptds
+= num_ptds
;
217 epq
->buf_avail
-= num_ptds
;
218 BUG_ON(epq
->buf_avail
> epq
->buf_count
);
219 ep
->ptd_index
= found
;
220 bitmap_set(&epq
->buf_map
, found
, num_ptds
);
221 DBG(1, "%s: Done %s PTD[%d] $%04x, avail %d count %d claimed %d %08lx:%08lx\n",
222 __func__
, epq
->name
, ep
->ptd_index
, ep
->ptd_offset
,
223 epq
->buf_avail
, epq
->buf_count
, num_ptds
, epq
->buf_map
, epq
->skip_map
);
228 static inline void release_ptd_buffers(struct isp1362_ep_queue
*epq
, struct isp1362_ep
*ep
)
230 int last
= ep
->ptd_index
+ ep
->num_ptds
;
232 if (last
> epq
->buf_count
)
233 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",
234 __func__
, ep
, ep
->num_req
, ep
->length
, epq
->name
, ep
->ptd_index
,
235 ep
->ptd_offset
, ep
->num_ptds
, epq
->buf_count
, epq
->buf_avail
,
236 epq
->buf_map
, epq
->skip_map
);
237 BUG_ON(last
> epq
->buf_count
);
239 bitmap_clear(&epq
->buf_map
, ep
->ptd_index
, ep
->num_ptds
);
240 bitmap_set(&epq
->skip_map
, ep
->ptd_index
, ep
->num_ptds
);
241 epq
->buf_avail
+= ep
->num_ptds
;
244 BUG_ON(epq
->buf_avail
> epq
->buf_count
);
245 BUG_ON(epq
->ptd_count
> epq
->buf_count
);
247 DBG(1, "%s: Done %s PTDs $%04x released %d avail %d count %d\n",
249 ep
->ptd_offset
, ep
->num_ptds
, epq
->buf_avail
, epq
->buf_count
);
250 DBG(1, "%s: buf_map %08lx skip_map %08lx\n", __func__
,
251 epq
->buf_map
, epq
->skip_map
);
254 ep
->ptd_offset
= -EINVAL
;
255 ep
->ptd_index
= -EINVAL
;
258 /*-------------------------------------------------------------------------*/
263 static void prepare_ptd(struct isp1362_hcd
*isp1362_hcd
, struct urb
*urb
,
264 struct isp1362_ep
*ep
, struct isp1362_ep_queue
*epq
,
271 size_t buf_len
= urb
->transfer_buffer_length
- urb
->actual_length
;
273 DBG(3, "%s: %s ep %p\n", __func__
, epq
->name
, ep
);
277 ep
->data
= (unsigned char *)urb
->transfer_buffer
+ urb
->actual_length
;
279 switch (ep
->nextpid
) {
281 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 0);
283 if (usb_pipecontrol(urb
->pipe
)) {
284 len
= min_t(size_t, ep
->maxpacket
, buf_len
);
285 } else if (usb_pipeisoc(urb
->pipe
)) {
286 len
= min_t(size_t, urb
->iso_frame_desc
[fno
].length
, MAX_XFER_SIZE
);
287 ep
->data
= urb
->transfer_buffer
+ urb
->iso_frame_desc
[fno
].offset
;
289 len
= max_transfer_size(epq
, buf_len
, ep
->maxpacket
);
290 DBG(1, "%s: IN len %d/%d/%d from URB\n", __func__
, len
, ep
->maxpacket
,
294 toggle
= usb_gettoggle(urb
->dev
, ep
->epnum
, 1);
296 if (usb_pipecontrol(urb
->pipe
))
297 len
= min_t(size_t, ep
->maxpacket
, buf_len
);
298 else if (usb_pipeisoc(urb
->pipe
))
299 len
= min_t(size_t, urb
->iso_frame_desc
[0].length
, MAX_XFER_SIZE
);
301 len
= max_transfer_size(epq
, buf_len
, ep
->maxpacket
);
303 pr_info("%s: Sending ZERO packet: %d\n", __func__
,
304 urb
->transfer_flags
& URB_ZERO_PACKET
);
305 DBG(1, "%s: OUT len %d/%d/%d from URB\n", __func__
, len
, ep
->maxpacket
,
311 len
= sizeof(struct usb_ctrlrequest
);
312 DBG(1, "%s: SETUP len %d\n", __func__
, len
);
313 ep
->data
= urb
->setup_packet
;
318 dir
= (urb
->transfer_buffer_length
&& usb_pipein(urb
->pipe
)) ?
319 PTD_DIR_OUT
: PTD_DIR_IN
;
320 DBG(1, "%s: ACK len %d\n", __func__
, len
);
323 toggle
= dir
= len
= 0;
324 pr_err("%s@%d: ep->nextpid %02x\n", __func__
, __LINE__
, ep
->nextpid
);
332 ptd
->count
= PTD_CC_MSK
| PTD_ACTIVE_MSK
| PTD_TOGGLE(toggle
);
333 ptd
->mps
= PTD_MPS(ep
->maxpacket
) | PTD_SPD(urb
->dev
->speed
== USB_SPEED_LOW
) |
335 ptd
->len
= PTD_LEN(len
) | PTD_DIR(dir
);
336 ptd
->faddr
= PTD_FA(usb_pipedevice(urb
->pipe
));
338 if (usb_pipeint(urb
->pipe
)) {
339 ptd
->faddr
|= PTD_SF_INT(ep
->branch
);
340 ptd
->faddr
|= PTD_PR(ep
->interval
? __ffs(ep
->interval
) : 0);
342 if (usb_pipeisoc(urb
->pipe
))
343 ptd
->faddr
|= PTD_SF_ISO(fno
);
345 DBG(1, "%s: Finished\n", __func__
);
348 static void isp1362_write_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
349 struct isp1362_ep_queue
*epq
)
351 struct ptd
*ptd
= &ep
->ptd
;
352 int len
= PTD_GET_DIR(ptd
) == PTD_DIR_IN
? 0 : ep
->length
;
354 _BUG_ON(ep
->ptd_offset
< 0);
357 isp1362_write_buffer(isp1362_hcd
, ptd
, ep
->ptd_offset
, PTD_HEADER_SIZE
);
359 isp1362_write_buffer(isp1362_hcd
, ep
->data
,
360 ep
->ptd_offset
+ PTD_HEADER_SIZE
, len
);
363 dump_ptd_out_data(ptd
, ep
->data
);
366 static void isp1362_read_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
367 struct isp1362_ep_queue
*epq
)
369 struct ptd
*ptd
= &ep
->ptd
;
372 WARN_ON(list_empty(&ep
->active
));
373 BUG_ON(ep
->ptd_offset
< 0);
375 list_del_init(&ep
->active
);
376 DBG(1, "%s: ep %p removed from active list %p\n", __func__
, ep
, &epq
->active
);
379 isp1362_read_buffer(isp1362_hcd
, ptd
, ep
->ptd_offset
, PTD_HEADER_SIZE
);
381 act_len
= PTD_GET_COUNT(ptd
);
382 if (PTD_GET_DIR(ptd
) != PTD_DIR_IN
|| act_len
== 0)
384 if (act_len
> ep
->length
)
385 pr_err("%s: ep %p PTD $%04x act_len %d ep->length %d\n", __func__
, ep
,
386 ep
->ptd_offset
, act_len
, ep
->length
);
387 BUG_ON(act_len
> ep
->length
);
388 /* Only transfer the amount of data that has actually been overwritten
389 * in the chip buffer. We don't want any data that doesn't belong to the
390 * transfer to leak out of the chip to the callers transfer buffer!
393 isp1362_read_buffer(isp1362_hcd
, ep
->data
,
394 ep
->ptd_offset
+ PTD_HEADER_SIZE
, act_len
);
395 dump_ptd_in_data(ptd
, ep
->data
);
399 * INT PTDs will stay in the chip until data is available.
400 * This function will remove a PTD from the chip when the URB is dequeued.
401 * Must be called with the spinlock held and IRQs disabled
403 static void remove_ptd(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
)
407 struct isp1362_ep_queue
*epq
;
409 DBG(1, "%s: ep %p PTD[%d] $%04x\n", __func__
, ep
, ep
->ptd_index
, ep
->ptd_offset
);
410 BUG_ON(ep
->ptd_offset
< 0);
412 epq
= get_ptd_queue(isp1362_hcd
, ep
->ptd_offset
);
415 /* put ep in remove_list for cleanup */
416 WARN_ON(!list_empty(&ep
->remove_list
));
417 list_add_tail(&ep
->remove_list
, &isp1362_hcd
->remove_list
);
418 /* let SOF interrupt handle the cleanup */
419 isp1362_enable_int(isp1362_hcd
, HCuPINT_SOF
);
421 index
= ep
->ptd_index
;
423 /* ISO queues don't have SKIP registers */
426 DBG(1, "%s: Disabling PTD[%02x] $%04x %08lx|%08x\n", __func__
,
427 index
, ep
->ptd_offset
, epq
->skip_map
, 1 << index
);
429 /* prevent further processing of PTD (will be effective after next SOF) */
430 epq
->skip_map
|= 1 << index
;
431 if (epq
== &isp1362_hcd
->atl_queue
) {
432 DBG(2, "%s: ATLSKIP = %08x -> %08lx\n", __func__
,
433 isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
), epq
->skip_map
);
434 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, epq
->skip_map
);
435 if (~epq
->skip_map
== 0)
436 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
437 } else if (epq
== &isp1362_hcd
->intl_queue
) {
438 DBG(2, "%s: INTLSKIP = %08x -> %08lx\n", __func__
,
439 isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
), epq
->skip_map
);
440 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, epq
->skip_map
);
441 if (~epq
->skip_map
== 0)
442 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
447 Take done or failed requests out of schedule. Give back
450 static void finish_request(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
,
451 struct urb
*urb
, int status
)
452 __releases(isp1362_hcd
->lock
)
453 __acquires(isp1362_hcd
->lock
)
458 if (usb_pipecontrol(urb
->pipe
))
459 ep
->nextpid
= USB_PID_SETUP
;
461 URB_DBG("%s: req %d FA %d ep%d%s %s: len %d/%d %s stat %d\n", __func__
,
462 ep
->num_req
, usb_pipedevice(urb
->pipe
),
463 usb_pipeendpoint(urb
->pipe
),
464 !usb_pipein(urb
->pipe
) ? "out" : "in",
465 usb_pipecontrol(urb
->pipe
) ? "ctrl" :
466 usb_pipeint(urb
->pipe
) ? "int" :
467 usb_pipebulk(urb
->pipe
) ? "bulk" :
469 urb
->actual_length
, urb
->transfer_buffer_length
,
470 !(urb
->transfer_flags
& URB_SHORT_NOT_OK
) ?
471 "short_ok" : "", urb
->status
);
474 usb_hcd_unlink_urb_from_ep(isp1362_hcd_to_hcd(isp1362_hcd
), urb
);
475 spin_unlock(&isp1362_hcd
->lock
);
476 usb_hcd_giveback_urb(isp1362_hcd_to_hcd(isp1362_hcd
), urb
, status
);
477 spin_lock(&isp1362_hcd
->lock
);
479 /* take idle endpoints out of the schedule right away */
480 if (!list_empty(&ep
->hep
->urb_list
))
483 /* async deschedule */
484 if (!list_empty(&ep
->schedule
)) {
485 list_del_init(&ep
->schedule
);
491 /* periodic deschedule */
492 DBG(1, "deschedule qh%d/%p branch %d load %d bandwidth %d -> %d\n", ep
->interval
,
493 ep
, ep
->branch
, ep
->load
,
494 isp1362_hcd
->load
[ep
->branch
],
495 isp1362_hcd
->load
[ep
->branch
] - ep
->load
);
496 isp1362_hcd
->load
[ep
->branch
] -= ep
->load
;
497 ep
->branch
= PERIODIC_SIZE
;
502 * Analyze transfer results, handle partial transfers and errors
504 static void postproc_ep(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep
*ep
)
506 struct urb
*urb
= get_urb(ep
);
507 struct usb_device
*udev
;
511 int urbstat
= -EINPROGRESS
;
514 DBG(2, "%s: ep %p req %d\n", __func__
, ep
, ep
->num_req
);
518 cc
= PTD_GET_CC(ptd
);
519 if (cc
== PTD_NOTACCESSED
) {
520 pr_err("%s: req %d PTD %p Untouched by ISP1362\n", __func__
,
525 short_ok
= !(urb
->transfer_flags
& URB_SHORT_NOT_OK
);
526 len
= urb
->transfer_buffer_length
- urb
->actual_length
;
528 /* Data underrun is special. For allowed underrun
529 we clear the error and continue as normal. For
530 forbidden underrun we finish the DATA stage
531 immediately while for control transfer,
532 we do a STATUS stage.
534 if (cc
== PTD_DATAUNDERRUN
) {
536 DBG(1, "%s: req %d Allowed data underrun short_%sok %d/%d/%d byte\n",
537 __func__
, ep
->num_req
, short_ok
? "" : "not_",
538 PTD_GET_COUNT(ptd
), ep
->maxpacket
, len
);
542 DBG(1, "%s: req %d Data Underrun %s nextpid %02x short_%sok %d/%d/%d byte\n",
543 __func__
, ep
->num_req
,
544 usb_pipein(urb
->pipe
) ? "IN" : "OUT", ep
->nextpid
,
545 short_ok
? "" : "not_",
546 PTD_GET_COUNT(ptd
), ep
->maxpacket
, len
);
547 if (usb_pipecontrol(urb
->pipe
)) {
548 ep
->nextpid
= USB_PID_ACK
;
549 /* save the data underrun error code for later and
550 * proceed with the status stage
552 urb
->actual_length
+= PTD_GET_COUNT(ptd
);
553 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
555 if (urb
->status
== -EINPROGRESS
)
556 urb
->status
= cc_to_error
[PTD_DATAUNDERRUN
];
558 usb_settoggle(udev
, ep
->epnum
, ep
->nextpid
== USB_PID_OUT
,
559 PTD_GET_TOGGLE(ptd
));
560 urbstat
= cc_to_error
[PTD_DATAUNDERRUN
];
566 if (cc
!= PTD_CC_NOERROR
) {
567 if (++ep
->error_count
>= 3 || cc
== PTD_CC_STALL
|| cc
== PTD_DATAOVERRUN
) {
568 urbstat
= cc_to_error
[cc
];
569 DBG(1, "%s: req %d nextpid %02x, status %d, error %d, error_count %d\n",
570 __func__
, ep
->num_req
, ep
->nextpid
, urbstat
, cc
,
576 switch (ep
->nextpid
) {
578 if (PTD_GET_COUNT(ptd
) != ep
->length
)
579 pr_err("%s: count=%d len=%d\n", __func__
,
580 PTD_GET_COUNT(ptd
), ep
->length
);
581 BUG_ON(PTD_GET_COUNT(ptd
) != ep
->length
);
582 urb
->actual_length
+= ep
->length
;
583 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
584 usb_settoggle(udev
, ep
->epnum
, 1, PTD_GET_TOGGLE(ptd
));
585 if (urb
->actual_length
== urb
->transfer_buffer_length
) {
586 DBG(3, "%s: req %d xfer complete %d/%d status %d -> 0\n", __func__
,
587 ep
->num_req
, len
, ep
->maxpacket
, urbstat
);
588 if (usb_pipecontrol(urb
->pipe
)) {
589 DBG(3, "%s: req %d %s Wait for ACK\n", __func__
,
591 usb_pipein(urb
->pipe
) ? "IN" : "OUT");
592 ep
->nextpid
= USB_PID_ACK
;
594 if (len
% ep
->maxpacket
||
595 !(urb
->transfer_flags
& URB_ZERO_PACKET
)) {
597 DBG(3, "%s: req %d URB %s status %d count %d/%d/%d\n",
598 __func__
, ep
->num_req
, usb_pipein(urb
->pipe
) ? "IN" : "OUT",
599 urbstat
, len
, ep
->maxpacket
, urb
->actual_length
);
605 len
= PTD_GET_COUNT(ptd
);
606 BUG_ON(len
> ep
->length
);
607 urb
->actual_length
+= len
;
608 BUG_ON(urb
->actual_length
> urb
->transfer_buffer_length
);
609 usb_settoggle(udev
, ep
->epnum
, 0, PTD_GET_TOGGLE(ptd
));
610 /* if transfer completed or (allowed) data underrun */
611 if ((urb
->transfer_buffer_length
== urb
->actual_length
) ||
612 len
% ep
->maxpacket
) {
613 DBG(3, "%s: req %d xfer complete %d/%d status %d -> 0\n", __func__
,
614 ep
->num_req
, len
, ep
->maxpacket
, urbstat
);
615 if (usb_pipecontrol(urb
->pipe
)) {
616 DBG(3, "%s: req %d %s Wait for ACK\n", __func__
,
618 usb_pipein(urb
->pipe
) ? "IN" : "OUT");
619 ep
->nextpid
= USB_PID_ACK
;
622 DBG(3, "%s: req %d URB %s status %d count %d/%d/%d\n",
623 __func__
, ep
->num_req
, usb_pipein(urb
->pipe
) ? "IN" : "OUT",
624 urbstat
, len
, ep
->maxpacket
, urb
->actual_length
);
629 if (urb
->transfer_buffer_length
== urb
->actual_length
) {
630 ep
->nextpid
= USB_PID_ACK
;
631 } else if (usb_pipeout(urb
->pipe
)) {
632 usb_settoggle(udev
, 0, 1, 1);
633 ep
->nextpid
= USB_PID_OUT
;
635 usb_settoggle(udev
, 0, 0, 1);
636 ep
->nextpid
= USB_PID_IN
;
640 DBG(3, "%s: req %d got ACK %d -> 0\n", __func__
, ep
->num_req
,
642 WARN_ON(urbstat
!= -EINPROGRESS
);
651 if (urbstat
!= -EINPROGRESS
) {
652 DBG(2, "%s: Finishing ep %p req %d urb %p status %d\n", __func__
,
653 ep
, ep
->num_req
, urb
, urbstat
);
654 finish_request(isp1362_hcd
, ep
, urb
, urbstat
);
658 static void finish_unlinks(struct isp1362_hcd
*isp1362_hcd
)
660 struct isp1362_ep
*ep
;
661 struct isp1362_ep
*tmp
;
663 list_for_each_entry_safe(ep
, tmp
, &isp1362_hcd
->remove_list
, remove_list
) {
664 struct isp1362_ep_queue
*epq
=
665 get_ptd_queue(isp1362_hcd
, ep
->ptd_offset
);
666 int index
= ep
->ptd_index
;
670 DBG(1, "%s: remove PTD[%d] $%04x\n", __func__
, index
, ep
->ptd_offset
);
671 BUG_ON(ep
->num_ptds
== 0);
672 release_ptd_buffers(epq
, ep
);
674 if (!list_empty(&ep
->hep
->urb_list
)) {
675 struct urb
*urb
= get_urb(ep
);
677 DBG(1, "%s: Finishing req %d ep %p from remove_list\n", __func__
,
679 finish_request(isp1362_hcd
, ep
, urb
, -ESHUTDOWN
);
681 WARN_ON(list_empty(&ep
->active
));
682 if (!list_empty(&ep
->active
)) {
683 list_del_init(&ep
->active
);
684 DBG(1, "%s: ep %p removed from active list\n", __func__
, ep
);
686 list_del_init(&ep
->remove_list
);
687 DBG(1, "%s: ep %p removed from remove_list\n", __func__
, ep
);
689 DBG(1, "%s: Done\n", __func__
);
692 static inline void enable_atl_transfers(struct isp1362_hcd
*isp1362_hcd
, int count
)
695 if (count
< isp1362_hcd
->atl_queue
.ptd_count
)
696 isp1362_write_reg16(isp1362_hcd
, HCATLDTC
, count
);
697 isp1362_enable_int(isp1362_hcd
, HCuPINT_ATL
);
698 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, isp1362_hcd
->atl_queue
.skip_map
);
699 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
701 isp1362_enable_int(isp1362_hcd
, HCuPINT_SOF
);
704 static inline void enable_intl_transfers(struct isp1362_hcd
*isp1362_hcd
)
706 isp1362_enable_int(isp1362_hcd
, HCuPINT_INTL
);
707 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
708 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, isp1362_hcd
->intl_queue
.skip_map
);
711 static inline void enable_istl_transfers(struct isp1362_hcd
*isp1362_hcd
, int flip
)
713 isp1362_enable_int(isp1362_hcd
, flip
? HCuPINT_ISTL1
: HCuPINT_ISTL0
);
714 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, flip
?
715 HCBUFSTAT_ISTL1_FULL
: HCBUFSTAT_ISTL0_FULL
);
718 static int submit_req(struct isp1362_hcd
*isp1362_hcd
, struct urb
*urb
,
719 struct isp1362_ep
*ep
, struct isp1362_ep_queue
*epq
)
721 int index
= epq
->free_ptd
;
723 prepare_ptd(isp1362_hcd
, urb
, ep
, epq
, 0);
724 index
= claim_ptd_buffers(epq
, ep
, ep
->length
);
725 if (index
== -ENOMEM
) {
726 DBG(1, "%s: req %d No free %s PTD available: %d, %08lx:%08lx\n", __func__
,
727 ep
->num_req
, epq
->name
, ep
->num_ptds
, epq
->buf_map
, epq
->skip_map
);
729 } else if (index
== -EOVERFLOW
) {
730 DBG(1, "%s: req %d Not enough space for %d byte %s PTD %d %08lx:%08lx\n",
731 __func__
, ep
->num_req
, ep
->length
, epq
->name
, ep
->num_ptds
,
732 epq
->buf_map
, epq
->skip_map
);
736 list_add_tail(&ep
->active
, &epq
->active
);
737 DBG(1, "%s: ep %p req %d len %d added to active list %p\n", __func__
,
738 ep
, ep
->num_req
, ep
->length
, &epq
->active
);
739 DBG(1, "%s: Submitting %s PTD $%04x for ep %p req %d\n", __func__
, epq
->name
,
740 ep
->ptd_offset
, ep
, ep
->num_req
);
741 isp1362_write_ptd(isp1362_hcd
, ep
, epq
);
742 __clear_bit(ep
->ptd_index
, &epq
->skip_map
);
747 static void start_atl_transfers(struct isp1362_hcd
*isp1362_hcd
)
750 struct isp1362_ep_queue
*epq
= &isp1362_hcd
->atl_queue
;
751 struct isp1362_ep
*ep
;
754 if (atomic_read(&epq
->finishing
)) {
755 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
759 list_for_each_entry(ep
, &isp1362_hcd
->async
, schedule
) {
760 struct urb
*urb
= get_urb(ep
);
763 if (!list_empty(&ep
->active
)) {
764 DBG(2, "%s: Skipping active %s ep %p\n", __func__
, epq
->name
, ep
);
768 DBG(1, "%s: Processing %s ep %p req %d\n", __func__
, epq
->name
,
771 ret
= submit_req(isp1362_hcd
, urb
, ep
, epq
);
772 if (ret
== -ENOMEM
) {
775 } else if (ret
== -EOVERFLOW
) {
779 #ifdef BUGGY_PXA2XX_UDC_USBTEST
780 defer
= ep
->nextpid
== USB_PID_SETUP
;
785 /* Avoid starving of endpoints */
786 if (isp1362_hcd
->async
.next
!= isp1362_hcd
->async
.prev
) {
787 DBG(2, "%s: Cycling ASYNC schedule %d\n", __func__
, ptd_count
);
788 list_move(&isp1362_hcd
->async
, isp1362_hcd
->async
.next
);
790 if (ptd_count
|| defer
)
791 enable_atl_transfers(isp1362_hcd
, defer
? 0 : ptd_count
);
793 epq
->ptd_count
+= ptd_count
;
794 if (epq
->ptd_count
> epq
->stat_maxptds
) {
795 epq
->stat_maxptds
= epq
->ptd_count
;
796 DBG(0, "%s: max_ptds: %d\n", __func__
, epq
->stat_maxptds
);
800 static void start_intl_transfers(struct isp1362_hcd
*isp1362_hcd
)
803 struct isp1362_ep_queue
*epq
= &isp1362_hcd
->intl_queue
;
804 struct isp1362_ep
*ep
;
806 if (atomic_read(&epq
->finishing
)) {
807 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
811 list_for_each_entry(ep
, &isp1362_hcd
->periodic
, schedule
) {
812 struct urb
*urb
= get_urb(ep
);
815 if (!list_empty(&ep
->active
)) {
816 DBG(1, "%s: Skipping active %s ep %p\n", __func__
,
821 DBG(1, "%s: Processing %s ep %p req %d\n", __func__
,
822 epq
->name
, ep
, ep
->num_req
);
823 ret
= submit_req(isp1362_hcd
, urb
, ep
, epq
);
826 else if (ret
== -EOVERFLOW
)
832 static int last_count
;
834 if (ptd_count
!= last_count
) {
835 DBG(0, "%s: ptd_count: %d\n", __func__
, ptd_count
);
836 last_count
= ptd_count
;
838 enable_intl_transfers(isp1362_hcd
);
841 epq
->ptd_count
+= ptd_count
;
842 if (epq
->ptd_count
> epq
->stat_maxptds
)
843 epq
->stat_maxptds
= epq
->ptd_count
;
846 static inline int next_ptd(struct isp1362_ep_queue
*epq
, struct isp1362_ep
*ep
)
848 u16 ptd_offset
= ep
->ptd_offset
;
849 int num_ptds
= (ep
->length
+ PTD_HEADER_SIZE
+ (epq
->blk_size
- 1)) / epq
->blk_size
;
851 DBG(2, "%s: PTD offset $%04x + %04x => %d * %04x -> $%04x\n", __func__
, ptd_offset
,
852 ep
->length
, num_ptds
, epq
->blk_size
, ptd_offset
+ num_ptds
* epq
->blk_size
);
854 ptd_offset
+= num_ptds
* epq
->blk_size
;
855 if (ptd_offset
< epq
->buf_start
+ epq
->buf_size
)
861 static void start_iso_transfers(struct isp1362_hcd
*isp1362_hcd
)
864 int flip
= isp1362_hcd
->istl_flip
;
865 struct isp1362_ep_queue
*epq
;
867 struct isp1362_ep
*ep
;
868 struct isp1362_ep
*tmp
;
869 u16 fno
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
872 epq
= &isp1362_hcd
->istl_queue
[flip
];
873 if (atomic_read(&epq
->finishing
)) {
874 DBG(1, "%s: finish_transfers is active for %s\n", __func__
, epq
->name
);
878 if (!list_empty(&epq
->active
))
881 ptd_offset
= epq
->buf_start
;
882 list_for_each_entry_safe(ep
, tmp
, &isp1362_hcd
->isoc
, schedule
) {
883 struct urb
*urb
= get_urb(ep
);
884 s16 diff
= fno
- (u16
)urb
->start_frame
;
886 DBG(1, "%s: Processing %s ep %p\n", __func__
, epq
->name
, ep
);
888 if (diff
> urb
->number_of_packets
) {
889 /* time frame for this URB has elapsed */
890 finish_request(isp1362_hcd
, ep
, urb
, -EOVERFLOW
);
892 } else if (diff
< -1) {
893 /* URB is not due in this frame or the next one.
894 * Comparing with '-1' instead of '0' accounts for double
895 * buffering in the ISP1362 which enables us to queue the PTD
896 * one frame ahead of time
898 } else if (diff
== -1) {
899 /* submit PTD's that are due in the next frame */
900 prepare_ptd(isp1362_hcd
, urb
, ep
, epq
, fno
);
901 if (ptd_offset
+ PTD_HEADER_SIZE
+ ep
->length
>
902 epq
->buf_start
+ epq
->buf_size
) {
903 pr_err("%s: Not enough ISO buffer space for %d byte PTD\n",
904 __func__
, ep
->length
);
907 ep
->ptd_offset
= ptd_offset
;
908 list_add_tail(&ep
->active
, &epq
->active
);
910 ptd_offset
= next_ptd(epq
, ep
);
911 if (ptd_offset
< 0) {
912 pr_warning("%s: req %d No more %s PTD buffers available\n", __func__
,
913 ep
->num_req
, epq
->name
);
918 list_for_each_entry(ep
, &epq
->active
, active
) {
919 if (epq
->active
.next
== &ep
->active
)
920 ep
->ptd
.mps
|= PTD_LAST_MSK
;
921 isp1362_write_ptd(isp1362_hcd
, ep
, epq
);
926 enable_istl_transfers(isp1362_hcd
, flip
);
928 epq
->ptd_count
+= ptd_count
;
929 if (epq
->ptd_count
> epq
->stat_maxptds
)
930 epq
->stat_maxptds
= epq
->ptd_count
;
932 /* check, whether the second ISTL buffer may also be filled */
933 if (!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
934 (flip
? HCBUFSTAT_ISTL0_FULL
: HCBUFSTAT_ISTL1_FULL
))) {
942 static void finish_transfers(struct isp1362_hcd
*isp1362_hcd
, unsigned long done_map
,
943 struct isp1362_ep_queue
*epq
)
945 struct isp1362_ep
*ep
;
946 struct isp1362_ep
*tmp
;
948 if (list_empty(&epq
->active
)) {
949 DBG(1, "%s: Nothing to do for %s queue\n", __func__
, epq
->name
);
953 DBG(1, "%s: Finishing %s transfers %08lx\n", __func__
, epq
->name
, done_map
);
955 atomic_inc(&epq
->finishing
);
956 list_for_each_entry_safe(ep
, tmp
, &epq
->active
, active
) {
957 int index
= ep
->ptd_index
;
959 DBG(1, "%s: Checking %s PTD[%02x] $%04x\n", __func__
, epq
->name
,
960 index
, ep
->ptd_offset
);
963 if (__test_and_clear_bit(index
, &done_map
)) {
964 isp1362_read_ptd(isp1362_hcd
, ep
, epq
);
965 epq
->free_ptd
= index
;
966 BUG_ON(ep
->num_ptds
== 0);
967 release_ptd_buffers(epq
, ep
);
969 DBG(1, "%s: ep %p req %d removed from active list\n", __func__
,
971 if (!list_empty(&ep
->remove_list
)) {
972 list_del_init(&ep
->remove_list
);
973 DBG(1, "%s: ep %p removed from remove list\n", __func__
, ep
);
975 DBG(1, "%s: Postprocessing %s ep %p req %d\n", __func__
, epq
->name
,
977 postproc_ep(isp1362_hcd
, ep
);
983 pr_warning("%s: done_map not clear: %08lx:%08lx\n", __func__
, done_map
,
985 atomic_dec(&epq
->finishing
);
988 static void finish_iso_transfers(struct isp1362_hcd
*isp1362_hcd
, struct isp1362_ep_queue
*epq
)
990 struct isp1362_ep
*ep
;
991 struct isp1362_ep
*tmp
;
993 if (list_empty(&epq
->active
)) {
994 DBG(1, "%s: Nothing to do for %s queue\n", __func__
, epq
->name
);
998 DBG(1, "%s: Finishing %s transfers\n", __func__
, epq
->name
);
1000 atomic_inc(&epq
->finishing
);
1001 list_for_each_entry_safe(ep
, tmp
, &epq
->active
, active
) {
1002 DBG(1, "%s: Checking PTD $%04x\n", __func__
, ep
->ptd_offset
);
1004 isp1362_read_ptd(isp1362_hcd
, ep
, epq
);
1005 DBG(1, "%s: Postprocessing %s ep %p\n", __func__
, epq
->name
, ep
);
1006 postproc_ep(isp1362_hcd
, ep
);
1008 WARN_ON(epq
->blk_size
!= 0);
1009 atomic_dec(&epq
->finishing
);
1012 static irqreturn_t
isp1362_irq(struct usb_hcd
*hcd
)
1015 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1019 spin_lock(&isp1362_hcd
->lock
);
1021 BUG_ON(isp1362_hcd
->irq_active
++);
1023 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
1025 irqstat
= isp1362_read_reg16(isp1362_hcd
, HCuPINT
);
1026 DBG(3, "%s: got IRQ %04x:%04x\n", __func__
, irqstat
, isp1362_hcd
->irqenb
);
1028 /* only handle interrupts that are currently enabled */
1029 irqstat
&= isp1362_hcd
->irqenb
;
1030 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, irqstat
);
1033 if (irqstat
& HCuPINT_SOF
) {
1034 isp1362_hcd
->irqenb
&= ~HCuPINT_SOF
;
1035 isp1362_hcd
->irq_stat
[ISP1362_INT_SOF
]++;
1037 svc_mask
&= ~HCuPINT_SOF
;
1038 DBG(3, "%s: SOF\n", __func__
);
1039 isp1362_hcd
->fmindex
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1040 if (!list_empty(&isp1362_hcd
->remove_list
))
1041 finish_unlinks(isp1362_hcd
);
1042 if (!list_empty(&isp1362_hcd
->async
) && !(irqstat
& HCuPINT_ATL
)) {
1043 if (list_empty(&isp1362_hcd
->atl_queue
.active
)) {
1044 start_atl_transfers(isp1362_hcd
);
1046 isp1362_enable_int(isp1362_hcd
, HCuPINT_ATL
);
1047 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
,
1048 isp1362_hcd
->atl_queue
.skip_map
);
1049 isp1362_set_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
1054 if (irqstat
& HCuPINT_ISTL0
) {
1055 isp1362_hcd
->irq_stat
[ISP1362_INT_ISTL0
]++;
1057 svc_mask
&= ~HCuPINT_ISTL0
;
1058 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ISTL0_FULL
);
1059 DBG(1, "%s: ISTL0\n", __func__
);
1060 WARN_ON((int)!!isp1362_hcd
->istl_flip
);
1061 WARN_ON(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1062 HCBUFSTAT_ISTL0_ACTIVE
);
1063 WARN_ON(!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1064 HCBUFSTAT_ISTL0_DONE
));
1065 isp1362_hcd
->irqenb
&= ~HCuPINT_ISTL0
;
1068 if (irqstat
& HCuPINT_ISTL1
) {
1069 isp1362_hcd
->irq_stat
[ISP1362_INT_ISTL1
]++;
1071 svc_mask
&= ~HCuPINT_ISTL1
;
1072 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ISTL1_FULL
);
1073 DBG(1, "%s: ISTL1\n", __func__
);
1074 WARN_ON(!(int)isp1362_hcd
->istl_flip
);
1075 WARN_ON(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1076 HCBUFSTAT_ISTL1_ACTIVE
);
1077 WARN_ON(!(isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
) &
1078 HCBUFSTAT_ISTL1_DONE
));
1079 isp1362_hcd
->irqenb
&= ~HCuPINT_ISTL1
;
1082 if (irqstat
& (HCuPINT_ISTL0
| HCuPINT_ISTL1
)) {
1083 WARN_ON((irqstat
& (HCuPINT_ISTL0
| HCuPINT_ISTL1
)) ==
1084 (HCuPINT_ISTL0
| HCuPINT_ISTL1
));
1085 finish_iso_transfers(isp1362_hcd
,
1086 &isp1362_hcd
->istl_queue
[isp1362_hcd
->istl_flip
]);
1087 start_iso_transfers(isp1362_hcd
);
1088 isp1362_hcd
->istl_flip
= 1 - isp1362_hcd
->istl_flip
;
1091 if (irqstat
& HCuPINT_INTL
) {
1092 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
);
1093 u32 skip_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
);
1094 isp1362_hcd
->irq_stat
[ISP1362_INT_INTL
]++;
1096 DBG(2, "%s: INTL\n", __func__
);
1098 svc_mask
&= ~HCuPINT_INTL
;
1100 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, skip_map
| done_map
);
1101 if (~(done_map
| skip_map
) == 0)
1102 /* All PTDs are finished, disable INTL processing entirely */
1103 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_INTL_ACTIVE
);
1108 DBG(3, "%s: INTL done_map %08x\n", __func__
, done_map
);
1109 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->intl_queue
);
1110 start_intl_transfers(isp1362_hcd
);
1114 if (irqstat
& HCuPINT_ATL
) {
1115 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCATLDONE
);
1116 u32 skip_map
= isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
);
1117 isp1362_hcd
->irq_stat
[ISP1362_INT_ATL
]++;
1119 DBG(2, "%s: ATL\n", __func__
);
1121 svc_mask
&= ~HCuPINT_ATL
;
1123 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, skip_map
| done_map
);
1124 if (~(done_map
| skip_map
) == 0)
1125 isp1362_clr_mask16(isp1362_hcd
, HCBUFSTAT
, HCBUFSTAT_ATL_ACTIVE
);
1127 DBG(3, "%s: ATL done_map %08x\n", __func__
, done_map
);
1128 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->atl_queue
);
1129 start_atl_transfers(isp1362_hcd
);
1134 if (irqstat
& HCuPINT_OPR
) {
1135 u32 intstat
= isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
);
1136 isp1362_hcd
->irq_stat
[ISP1362_INT_OPR
]++;
1138 svc_mask
&= ~HCuPINT_OPR
;
1139 DBG(2, "%s: OPR %08x:%08x\n", __func__
, intstat
, isp1362_hcd
->intenb
);
1140 intstat
&= isp1362_hcd
->intenb
;
1141 if (intstat
& OHCI_INTR_UE
) {
1142 pr_err("Unrecoverable error\n");
1143 /* FIXME: do here reset or cleanup or whatever */
1145 if (intstat
& OHCI_INTR_RHSC
) {
1146 isp1362_hcd
->rhstatus
= isp1362_read_reg32(isp1362_hcd
, HCRHSTATUS
);
1147 isp1362_hcd
->rhport
[0] = isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
);
1148 isp1362_hcd
->rhport
[1] = isp1362_read_reg32(isp1362_hcd
, HCRHPORT2
);
1150 if (intstat
& OHCI_INTR_RD
) {
1151 pr_info("%s: RESUME DETECTED\n", __func__
);
1152 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1153 usb_hcd_resume_root_hub(hcd
);
1155 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
, intstat
);
1156 irqstat
&= ~HCuPINT_OPR
;
1160 if (irqstat
& HCuPINT_SUSP
) {
1161 isp1362_hcd
->irq_stat
[ISP1362_INT_SUSP
]++;
1163 svc_mask
&= ~HCuPINT_SUSP
;
1165 pr_info("%s: SUSPEND IRQ\n", __func__
);
1168 if (irqstat
& HCuPINT_CLKRDY
) {
1169 isp1362_hcd
->irq_stat
[ISP1362_INT_CLKRDY
]++;
1171 isp1362_hcd
->irqenb
&= ~HCuPINT_CLKRDY
;
1172 svc_mask
&= ~HCuPINT_CLKRDY
;
1173 pr_info("%s: CLKRDY IRQ\n", __func__
);
1177 pr_err("%s: Unserviced interrupt(s) %04x\n", __func__
, svc_mask
);
1179 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
1180 isp1362_hcd
->irq_active
--;
1181 spin_unlock(&isp1362_hcd
->lock
);
1183 return IRQ_RETVAL(handled
);
1186 /*-------------------------------------------------------------------------*/
1188 #define MAX_PERIODIC_LOAD 900 /* out of 1000 usec */
1189 static int balance(struct isp1362_hcd
*isp1362_hcd
, u16 interval
, u16 load
)
1191 int i
, branch
= -ENOSPC
;
1193 /* search for the least loaded schedule branch of that interval
1194 * which has enough bandwidth left unreserved.
1196 for (i
= 0; i
< interval
; i
++) {
1197 if (branch
< 0 || isp1362_hcd
->load
[branch
] > isp1362_hcd
->load
[i
]) {
1200 for (j
= i
; j
< PERIODIC_SIZE
; j
+= interval
) {
1201 if ((isp1362_hcd
->load
[j
] + load
) > MAX_PERIODIC_LOAD
) {
1202 pr_err("%s: new load %d load[%02x] %d max %d\n", __func__
,
1203 load
, j
, isp1362_hcd
->load
[j
], MAX_PERIODIC_LOAD
);
1207 if (j
< PERIODIC_SIZE
)
1215 /* NB! ALL the code above this point runs with isp1362_hcd->lock
1219 /*-------------------------------------------------------------------------*/
1221 static int isp1362_urb_enqueue(struct usb_hcd
*hcd
,
1225 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1226 struct usb_device
*udev
= urb
->dev
;
1227 unsigned int pipe
= urb
->pipe
;
1228 int is_out
= !usb_pipein(pipe
);
1229 int type
= usb_pipetype(pipe
);
1230 int epnum
= usb_pipeendpoint(pipe
);
1231 struct usb_host_endpoint
*hep
= urb
->ep
;
1232 struct isp1362_ep
*ep
= NULL
;
1233 unsigned long flags
;
1236 DBG(3, "%s: urb %p\n", __func__
, urb
);
1238 if (type
== PIPE_ISOCHRONOUS
) {
1239 pr_err("Isochronous transfers not supported\n");
1243 URB_DBG("%s: FA %d ep%d%s %s: len %d %s%s\n", __func__
,
1244 usb_pipedevice(pipe
), epnum
,
1245 is_out
? "out" : "in",
1246 usb_pipecontrol(pipe
) ? "ctrl" :
1247 usb_pipeint(pipe
) ? "int" :
1248 usb_pipebulk(pipe
) ? "bulk" :
1250 urb
->transfer_buffer_length
,
1251 (urb
->transfer_flags
& URB_ZERO_PACKET
) ? "ZERO_PACKET " : "",
1252 !(urb
->transfer_flags
& URB_SHORT_NOT_OK
) ?
1255 /* avoid all allocations within spinlocks: request or endpoint */
1257 ep
= kzalloc(sizeof *ep
, mem_flags
);
1261 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1263 /* don't submit to a dead or disabled port */
1264 if (!((isp1362_hcd
->rhport
[0] | isp1362_hcd
->rhport
[1]) &
1265 USB_PORT_STAT_ENABLE
) ||
1266 !HC_IS_RUNNING(hcd
->state
)) {
1269 goto fail_not_linked
;
1272 retval
= usb_hcd_link_urb_to_ep(hcd
, urb
);
1275 goto fail_not_linked
;
1281 INIT_LIST_HEAD(&ep
->schedule
);
1282 INIT_LIST_HEAD(&ep
->active
);
1283 INIT_LIST_HEAD(&ep
->remove_list
);
1284 ep
->udev
= usb_get_dev(udev
);
1287 ep
->maxpacket
= usb_maxpacket(udev
, urb
->pipe
, is_out
);
1288 ep
->ptd_offset
= -EINVAL
;
1289 ep
->ptd_index
= -EINVAL
;
1290 usb_settoggle(udev
, epnum
, is_out
, 0);
1292 if (type
== PIPE_CONTROL
)
1293 ep
->nextpid
= USB_PID_SETUP
;
1295 ep
->nextpid
= USB_PID_OUT
;
1297 ep
->nextpid
= USB_PID_IN
;
1300 case PIPE_ISOCHRONOUS
:
1301 case PIPE_INTERRUPT
:
1302 if (urb
->interval
> PERIODIC_SIZE
)
1303 urb
->interval
= PERIODIC_SIZE
;
1304 ep
->interval
= urb
->interval
;
1305 ep
->branch
= PERIODIC_SIZE
;
1306 ep
->load
= usb_calc_bus_time(udev
->speed
, !is_out
,
1307 (type
== PIPE_ISOCHRONOUS
),
1308 usb_maxpacket(udev
, pipe
, is_out
)) / 1000;
1313 ep
->num_req
= isp1362_hcd
->req_serial
++;
1315 /* maybe put endpoint into schedule */
1319 if (list_empty(&ep
->schedule
)) {
1320 DBG(1, "%s: Adding ep %p req %d to async schedule\n",
1321 __func__
, ep
, ep
->num_req
);
1322 list_add_tail(&ep
->schedule
, &isp1362_hcd
->async
);
1325 case PIPE_ISOCHRONOUS
:
1326 case PIPE_INTERRUPT
:
1327 urb
->interval
= ep
->interval
;
1329 /* urb submitted for already existing EP */
1330 if (ep
->branch
< PERIODIC_SIZE
)
1333 retval
= balance(isp1362_hcd
, ep
->interval
, ep
->load
);
1335 pr_err("%s: balance returned %d\n", __func__
, retval
);
1338 ep
->branch
= retval
;
1340 isp1362_hcd
->fmindex
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1341 DBG(1, "%s: Current frame %04x branch %02x start_frame %04x(%04x)\n",
1342 __func__
, isp1362_hcd
->fmindex
, ep
->branch
,
1343 ((isp1362_hcd
->fmindex
+ PERIODIC_SIZE
- 1) &
1344 ~(PERIODIC_SIZE
- 1)) + ep
->branch
,
1345 (isp1362_hcd
->fmindex
& (PERIODIC_SIZE
- 1)) + ep
->branch
);
1347 if (list_empty(&ep
->schedule
)) {
1348 if (type
== PIPE_ISOCHRONOUS
) {
1349 u16 frame
= isp1362_hcd
->fmindex
;
1351 frame
+= max_t(u16
, 8, ep
->interval
);
1352 frame
&= ~(ep
->interval
- 1);
1353 frame
|= ep
->branch
;
1354 if (frame_before(frame
, isp1362_hcd
->fmindex
))
1355 frame
+= ep
->interval
;
1356 urb
->start_frame
= frame
;
1358 DBG(1, "%s: Adding ep %p to isoc schedule\n", __func__
, ep
);
1359 list_add_tail(&ep
->schedule
, &isp1362_hcd
->isoc
);
1361 DBG(1, "%s: Adding ep %p to periodic schedule\n", __func__
, ep
);
1362 list_add_tail(&ep
->schedule
, &isp1362_hcd
->periodic
);
1365 DBG(1, "%s: ep %p already scheduled\n", __func__
, ep
);
1367 DBG(2, "%s: load %d bandwidth %d -> %d\n", __func__
,
1368 ep
->load
/ ep
->interval
, isp1362_hcd
->load
[ep
->branch
],
1369 isp1362_hcd
->load
[ep
->branch
] + ep
->load
);
1370 isp1362_hcd
->load
[ep
->branch
] += ep
->load
;
1374 ALIGNSTAT(isp1362_hcd
, urb
->transfer_buffer
);
1379 start_atl_transfers(isp1362_hcd
);
1381 case PIPE_INTERRUPT
:
1382 start_intl_transfers(isp1362_hcd
);
1384 case PIPE_ISOCHRONOUS
:
1385 start_iso_transfers(isp1362_hcd
);
1392 usb_hcd_unlink_urb_from_ep(hcd
, urb
);
1396 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1398 DBG(0, "%s: urb %p failed with %d\n", __func__
, urb
, retval
);
1402 static int isp1362_urb_dequeue(struct usb_hcd
*hcd
, struct urb
*urb
, int status
)
1404 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1405 struct usb_host_endpoint
*hep
;
1406 unsigned long flags
;
1407 struct isp1362_ep
*ep
;
1410 DBG(3, "%s: urb %p\n", __func__
, urb
);
1412 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1413 retval
= usb_hcd_check_unlink_urb(hcd
, urb
, status
);
1420 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1426 /* In front of queue? */
1427 if (ep
->hep
->urb_list
.next
== &urb
->urb_list
) {
1428 if (!list_empty(&ep
->active
)) {
1429 DBG(1, "%s: urb %p ep %p req %d active PTD[%d] $%04x\n", __func__
,
1430 urb
, ep
, ep
->num_req
, ep
->ptd_index
, ep
->ptd_offset
);
1431 /* disable processing and queue PTD for removal */
1432 remove_ptd(isp1362_hcd
, ep
);
1437 DBG(1, "%s: Finishing ep %p req %d\n", __func__
, ep
,
1439 finish_request(isp1362_hcd
, ep
, urb
, status
);
1441 DBG(1, "%s: urb %p active; wait4irq\n", __func__
, urb
);
1443 pr_warning("%s: No EP in URB %p\n", __func__
, urb
);
1447 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1449 DBG(3, "%s: exit\n", __func__
);
1454 static void isp1362_endpoint_disable(struct usb_hcd
*hcd
, struct usb_host_endpoint
*hep
)
1456 struct isp1362_ep
*ep
= hep
->hcpriv
;
1457 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1458 unsigned long flags
;
1460 DBG(1, "%s: ep %p\n", __func__
, ep
);
1463 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1464 if (!list_empty(&hep
->urb_list
)) {
1465 if (!list_empty(&ep
->active
) && list_empty(&ep
->remove_list
)) {
1466 DBG(1, "%s: Removing ep %p req %d PTD[%d] $%04x\n", __func__
,
1467 ep
, ep
->num_req
, ep
->ptd_index
, ep
->ptd_offset
);
1468 remove_ptd(isp1362_hcd
, ep
);
1469 pr_info("%s: Waiting for Interrupt to clean up\n", __func__
);
1472 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1473 /* Wait for interrupt to clear out active list */
1474 while (!list_empty(&ep
->active
))
1477 DBG(1, "%s: Freeing EP %p\n", __func__
, ep
);
1479 usb_put_dev(ep
->udev
);
1484 static int isp1362_get_frame(struct usb_hcd
*hcd
)
1486 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1488 unsigned long flags
;
1490 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1491 fmnum
= isp1362_read_reg32(isp1362_hcd
, HCFMNUM
);
1492 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1497 /*-------------------------------------------------------------------------*/
1499 /* Adapted from ohci-hub.c */
1500 static int isp1362_hub_status_data(struct usb_hcd
*hcd
, char *buf
)
1502 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1503 int ports
, i
, changed
= 0;
1504 unsigned long flags
;
1506 if (!HC_IS_RUNNING(hcd
->state
))
1509 /* Report no status change now, if we are scheduled to be
1511 if (timer_pending(&hcd
->rh_timer
))
1514 ports
= isp1362_hcd
->rhdesca
& RH_A_NDP
;
1517 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1519 if (isp1362_hcd
->rhstatus
& (RH_HS_LPSC
| RH_HS_OCIC
))
1520 buf
[0] = changed
= 1;
1524 for (i
= 0; i
< ports
; i
++) {
1525 u32 status
= isp1362_hcd
->rhport
[i
];
1527 if (status
& (RH_PS_CSC
| RH_PS_PESC
| RH_PS_PSSC
|
1528 RH_PS_OCIC
| RH_PS_PRSC
)) {
1530 buf
[0] |= 1 << (i
+ 1);
1534 if (!(status
& RH_PS_CCS
))
1537 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1541 static void isp1362_hub_descriptor(struct isp1362_hcd
*isp1362_hcd
,
1542 struct usb_hub_descriptor
*desc
)
1544 u32 reg
= isp1362_hcd
->rhdesca
;
1546 DBG(3, "%s: enter\n", __func__
);
1548 desc
->bDescriptorType
= 0x29;
1549 desc
->bDescLength
= 9;
1550 desc
->bHubContrCurrent
= 0;
1551 desc
->bNbrPorts
= reg
& 0x3;
1552 /* Power switching, device type, overcurrent. */
1553 desc
->wHubCharacteristics
= cpu_to_le16((reg
>> 8) & 0x1f);
1554 DBG(0, "%s: hubcharacteristics = %02x\n", __func__
, cpu_to_le16((reg
>> 8) & 0x1f));
1555 desc
->bPwrOn2PwrGood
= (reg
>> 24) & 0xff;
1556 /* ports removable, and legacy PortPwrCtrlMask */
1557 desc
->u
.hs
.DeviceRemovable
[0] = desc
->bNbrPorts
== 1 ? 1 << 1 : 3 << 1;
1558 desc
->u
.hs
.DeviceRemovable
[1] = ~0;
1560 DBG(3, "%s: exit\n", __func__
);
1563 /* Adapted from ohci-hub.c */
1564 static int isp1362_hub_control(struct usb_hcd
*hcd
, u16 typeReq
, u16 wValue
,
1565 u16 wIndex
, char *buf
, u16 wLength
)
1567 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1569 unsigned long flags
;
1571 int ports
= isp1362_hcd
->rhdesca
& RH_A_NDP
;
1575 case ClearHubFeature
:
1576 DBG(0, "ClearHubFeature: ");
1578 case C_HUB_OVER_CURRENT
:
1579 _DBG(0, "C_HUB_OVER_CURRENT\n");
1580 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1581 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_OCIC
);
1582 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1583 case C_HUB_LOCAL_POWER
:
1584 _DBG(0, "C_HUB_LOCAL_POWER\n");
1591 DBG(0, "SetHubFeature: ");
1593 case C_HUB_OVER_CURRENT
:
1594 case C_HUB_LOCAL_POWER
:
1595 _DBG(0, "C_HUB_OVER_CURRENT or C_HUB_LOCAL_POWER\n");
1601 case GetHubDescriptor
:
1602 DBG(0, "GetHubDescriptor\n");
1603 isp1362_hub_descriptor(isp1362_hcd
, (struct usb_hub_descriptor
*)buf
);
1606 DBG(0, "GetHubStatus\n");
1607 put_unaligned(cpu_to_le32(0), (__le32
*) buf
);
1611 DBG(0, "GetPortStatus\n");
1613 if (!wIndex
|| wIndex
> ports
)
1615 tmp
= isp1362_hcd
->rhport
[--wIndex
];
1616 put_unaligned(cpu_to_le32(tmp
), (__le32
*) buf
);
1618 case ClearPortFeature
:
1619 DBG(0, "ClearPortFeature: ");
1620 if (!wIndex
|| wIndex
> ports
)
1625 case USB_PORT_FEAT_ENABLE
:
1626 _DBG(0, "USB_PORT_FEAT_ENABLE\n");
1629 case USB_PORT_FEAT_C_ENABLE
:
1630 _DBG(0, "USB_PORT_FEAT_C_ENABLE\n");
1633 case USB_PORT_FEAT_SUSPEND
:
1634 _DBG(0, "USB_PORT_FEAT_SUSPEND\n");
1637 case USB_PORT_FEAT_C_SUSPEND
:
1638 _DBG(0, "USB_PORT_FEAT_C_SUSPEND\n");
1641 case USB_PORT_FEAT_POWER
:
1642 _DBG(0, "USB_PORT_FEAT_POWER\n");
1646 case USB_PORT_FEAT_C_CONNECTION
:
1647 _DBG(0, "USB_PORT_FEAT_C_CONNECTION\n");
1650 case USB_PORT_FEAT_C_OVER_CURRENT
:
1651 _DBG(0, "USB_PORT_FEAT_C_OVER_CURRENT\n");
1654 case USB_PORT_FEAT_C_RESET
:
1655 _DBG(0, "USB_PORT_FEAT_C_RESET\n");
1662 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1663 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, tmp
);
1664 isp1362_hcd
->rhport
[wIndex
] =
1665 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1666 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1668 case SetPortFeature
:
1669 DBG(0, "SetPortFeature: ");
1670 if (!wIndex
|| wIndex
> ports
)
1674 case USB_PORT_FEAT_SUSPEND
:
1675 _DBG(0, "USB_PORT_FEAT_SUSPEND\n");
1676 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1677 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, RH_PS_PSS
);
1678 isp1362_hcd
->rhport
[wIndex
] =
1679 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1680 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1682 case USB_PORT_FEAT_POWER
:
1683 _DBG(0, "USB_PORT_FEAT_POWER\n");
1684 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1685 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, RH_PS_PPS
);
1686 isp1362_hcd
->rhport
[wIndex
] =
1687 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1688 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1690 case USB_PORT_FEAT_RESET
:
1691 _DBG(0, "USB_PORT_FEAT_RESET\n");
1692 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1694 t1
= jiffies
+ msecs_to_jiffies(USB_RESET_WIDTH
);
1695 while (time_before(jiffies
, t1
)) {
1696 /* spin until any current reset finishes */
1698 tmp
= isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
);
1699 if (!(tmp
& RH_PS_PRS
))
1703 if (!(tmp
& RH_PS_CCS
))
1705 /* Reset lasts 10ms (claims datasheet) */
1706 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ wIndex
, (RH_PS_PRS
));
1708 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1710 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1713 isp1362_hcd
->rhport
[wIndex
] = isp1362_read_reg32(isp1362_hcd
,
1714 HCRHPORT1
+ wIndex
);
1715 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1724 /* "protocol stall" on error */
1725 _DBG(0, "PROTOCOL STALL\n");
1733 static int isp1362_bus_suspend(struct usb_hcd
*hcd
)
1736 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1737 unsigned long flags
;
1739 if (time_before(jiffies
, isp1362_hcd
->next_statechange
))
1742 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1744 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1745 switch (isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) {
1746 case OHCI_USB_RESUME
:
1747 DBG(0, "%s: resume/suspend?\n", __func__
);
1748 isp1362_hcd
->hc_control
&= ~OHCI_CTRL_HCFS
;
1749 isp1362_hcd
->hc_control
|= OHCI_USB_RESET
;
1750 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1752 case OHCI_USB_RESET
:
1754 pr_warning("%s: needs reinit!\n", __func__
);
1756 case OHCI_USB_SUSPEND
:
1757 pr_warning("%s: already suspended?\n", __func__
);
1760 DBG(0, "%s: suspend root hub\n", __func__
);
1762 /* First stop any processing */
1763 hcd
->state
= HC_STATE_QUIESCING
;
1764 if (!list_empty(&isp1362_hcd
->atl_queue
.active
) ||
1765 !list_empty(&isp1362_hcd
->intl_queue
.active
) ||
1766 !list_empty(&isp1362_hcd
->istl_queue
[0] .active
) ||
1767 !list_empty(&isp1362_hcd
->istl_queue
[1] .active
)) {
1770 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, ~0);
1771 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, ~0);
1772 isp1362_write_reg16(isp1362_hcd
, HCBUFSTAT
, 0);
1773 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
1774 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
, OHCI_INTR_SF
);
1776 DBG(0, "%s: stopping schedules ...\n", __func__
);
1781 if (isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
) & OHCI_INTR_SF
)
1785 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ATL
) {
1786 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCATLDONE
);
1787 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->atl_queue
);
1789 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_INTL
) {
1790 u32 done_map
= isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
);
1791 finish_transfers(isp1362_hcd
, done_map
, &isp1362_hcd
->intl_queue
);
1793 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ISTL0
)
1794 finish_iso_transfers(isp1362_hcd
, &isp1362_hcd
->istl_queue
[0]);
1795 if (isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_ISTL1
)
1796 finish_iso_transfers(isp1362_hcd
, &isp1362_hcd
->istl_queue
[1]);
1798 DBG(0, "%s: HCINTSTAT: %08x\n", __func__
,
1799 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1800 isp1362_write_reg32(isp1362_hcd
, HCINTSTAT
,
1801 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1804 isp1362_hcd
->hc_control
= OHCI_USB_SUSPEND
;
1805 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1806 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1807 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1810 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1811 if ((isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) != OHCI_USB_SUSPEND
) {
1812 pr_err("%s: controller won't suspend %08x\n", __func__
,
1813 isp1362_hcd
->hc_control
);
1818 /* no resumes until devices finish suspending */
1819 isp1362_hcd
->next_statechange
= jiffies
+ msecs_to_jiffies(5);
1823 hcd
->state
= HC_STATE_SUSPENDED
;
1824 DBG(0, "%s: HCD suspended: %08x\n", __func__
,
1825 isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
1827 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1831 static int isp1362_bus_resume(struct usb_hcd
*hcd
)
1833 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
1835 unsigned long flags
;
1836 int status
= -EINPROGRESS
;
1838 if (time_before(jiffies
, isp1362_hcd
->next_statechange
))
1841 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1842 isp1362_hcd
->hc_control
= isp1362_read_reg32(isp1362_hcd
, HCCONTROL
);
1843 pr_info("%s: HCCONTROL: %08x\n", __func__
, isp1362_hcd
->hc_control
);
1844 if (hcd
->state
== HC_STATE_RESUMING
) {
1845 pr_warning("%s: duplicate resume\n", __func__
);
1848 switch (isp1362_hcd
->hc_control
& OHCI_CTRL_HCFS
) {
1849 case OHCI_USB_SUSPEND
:
1850 DBG(0, "%s: resume root hub\n", __func__
);
1851 isp1362_hcd
->hc_control
&= ~OHCI_CTRL_HCFS
;
1852 isp1362_hcd
->hc_control
|= OHCI_USB_RESUME
;
1853 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1855 case OHCI_USB_RESUME
:
1856 /* HCFS changes sometime after INTR_RD */
1857 DBG(0, "%s: remote wakeup\n", __func__
);
1860 DBG(0, "%s: odd resume\n", __func__
);
1862 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1864 default: /* RESET, we lost power */
1865 DBG(0, "%s: root hub hardware reset\n", __func__
);
1868 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1869 if (status
== -EBUSY
) {
1870 DBG(0, "%s: Restarting HC\n", __func__
);
1871 isp1362_hc_stop(hcd
);
1872 return isp1362_hc_start(hcd
);
1874 if (status
!= -EINPROGRESS
)
1876 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1877 port
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
) & RH_A_NDP
;
1879 u32 stat
= isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
+ port
);
1881 /* force global, not selective, resume */
1882 if (!(stat
& RH_PS_PSS
)) {
1883 DBG(0, "%s: Not Resuming RH port %d\n", __func__
, port
);
1886 DBG(0, "%s: Resuming RH port %d\n", __func__
, port
);
1887 isp1362_write_reg32(isp1362_hcd
, HCRHPORT1
+ port
, RH_PS_POCI
);
1889 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1891 /* Some controllers (lucent) need extra-long delays */
1892 hcd
->state
= HC_STATE_RESUMING
;
1893 mdelay(20 /* usb 11.5.1.10 */ + 15);
1895 isp1362_hcd
->hc_control
= OHCI_USB_OPER
;
1896 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
1897 isp1362_show_reg(isp1362_hcd
, HCCONTROL
);
1898 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
1899 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
1903 /* keep it alive for ~5x suspend + resume costs */
1904 isp1362_hcd
->next_statechange
= jiffies
+ msecs_to_jiffies(250);
1906 hcd
->self
.root_hub
->dev
.power
.power_state
= PMSG_ON
;
1907 hcd
->state
= HC_STATE_RUNNING
;
1911 #define isp1362_bus_suspend NULL
1912 #define isp1362_bus_resume NULL
1915 /*-------------------------------------------------------------------------*/
1917 #ifdef STUB_DEBUG_FILE
1919 static inline void create_debug_file(struct isp1362_hcd
*isp1362_hcd
)
1922 static inline void remove_debug_file(struct isp1362_hcd
*isp1362_hcd
)
1928 #include <linux/proc_fs.h>
1929 #include <linux/seq_file.h>
1931 static void dump_irq(struct seq_file
*s
, char *label
, u16 mask
)
1933 seq_printf(s
, "%-15s %04x%s%s%s%s%s%s\n", label
, mask
,
1934 mask
& HCuPINT_CLKRDY
? " clkrdy" : "",
1935 mask
& HCuPINT_SUSP
? " susp" : "",
1936 mask
& HCuPINT_OPR
? " opr" : "",
1937 mask
& HCuPINT_EOT
? " eot" : "",
1938 mask
& HCuPINT_ATL
? " atl" : "",
1939 mask
& HCuPINT_SOF
? " sof" : "");
1942 static void dump_int(struct seq_file
*s
, char *label
, u32 mask
)
1944 seq_printf(s
, "%-15s %08x%s%s%s%s%s%s%s\n", label
, mask
,
1945 mask
& OHCI_INTR_MIE
? " MIE" : "",
1946 mask
& OHCI_INTR_RHSC
? " rhsc" : "",
1947 mask
& OHCI_INTR_FNO
? " fno" : "",
1948 mask
& OHCI_INTR_UE
? " ue" : "",
1949 mask
& OHCI_INTR_RD
? " rd" : "",
1950 mask
& OHCI_INTR_SF
? " sof" : "",
1951 mask
& OHCI_INTR_SO
? " so" : "");
1954 static void dump_ctrl(struct seq_file
*s
, char *label
, u32 mask
)
1956 seq_printf(s
, "%-15s %08x%s%s%s\n", label
, mask
,
1957 mask
& OHCI_CTRL_RWC
? " rwc" : "",
1958 mask
& OHCI_CTRL_RWE
? " rwe" : "",
1961 switch (mask
& OHCI_CTRL_HCFS
) {
1965 case OHCI_USB_RESET
:
1968 case OHCI_USB_RESUME
:
1971 case OHCI_USB_SUSPEND
:
1981 static void dump_regs(struct seq_file
*s
, struct isp1362_hcd
*isp1362_hcd
)
1983 seq_printf(s
, "HCREVISION [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCREVISION
),
1984 isp1362_read_reg32(isp1362_hcd
, HCREVISION
));
1985 seq_printf(s
, "HCCONTROL [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCCONTROL
),
1986 isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
1987 seq_printf(s
, "HCCMDSTAT [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCCMDSTAT
),
1988 isp1362_read_reg32(isp1362_hcd
, HCCMDSTAT
));
1989 seq_printf(s
, "HCINTSTAT [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTSTAT
),
1990 isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
1991 seq_printf(s
, "HCINTENB [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTENB
),
1992 isp1362_read_reg32(isp1362_hcd
, HCINTENB
));
1993 seq_printf(s
, "HCFMINTVL [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMINTVL
),
1994 isp1362_read_reg32(isp1362_hcd
, HCFMINTVL
));
1995 seq_printf(s
, "HCFMREM [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMREM
),
1996 isp1362_read_reg32(isp1362_hcd
, HCFMREM
));
1997 seq_printf(s
, "HCFMNUM [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCFMNUM
),
1998 isp1362_read_reg32(isp1362_hcd
, HCFMNUM
));
1999 seq_printf(s
, "HCLSTHRESH [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCLSTHRESH
),
2000 isp1362_read_reg32(isp1362_hcd
, HCLSTHRESH
));
2001 seq_printf(s
, "HCRHDESCA [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHDESCA
),
2002 isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
));
2003 seq_printf(s
, "HCRHDESCB [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHDESCB
),
2004 isp1362_read_reg32(isp1362_hcd
, HCRHDESCB
));
2005 seq_printf(s
, "HCRHSTATUS [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHSTATUS
),
2006 isp1362_read_reg32(isp1362_hcd
, HCRHSTATUS
));
2007 seq_printf(s
, "HCRHPORT1 [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHPORT1
),
2008 isp1362_read_reg32(isp1362_hcd
, HCRHPORT1
));
2009 seq_printf(s
, "HCRHPORT2 [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCRHPORT2
),
2010 isp1362_read_reg32(isp1362_hcd
, HCRHPORT2
));
2011 seq_printf(s
, "\n");
2012 seq_printf(s
, "HCHWCFG [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCHWCFG
),
2013 isp1362_read_reg16(isp1362_hcd
, HCHWCFG
));
2014 seq_printf(s
, "HCDMACFG [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCDMACFG
),
2015 isp1362_read_reg16(isp1362_hcd
, HCDMACFG
));
2016 seq_printf(s
, "HCXFERCTR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCXFERCTR
),
2017 isp1362_read_reg16(isp1362_hcd
, HCXFERCTR
));
2018 seq_printf(s
, "HCuPINT [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCuPINT
),
2019 isp1362_read_reg16(isp1362_hcd
, HCuPINT
));
2020 seq_printf(s
, "HCuPINTENB [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCuPINTENB
),
2021 isp1362_read_reg16(isp1362_hcd
, HCuPINTENB
));
2022 seq_printf(s
, "HCCHIPID [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCCHIPID
),
2023 isp1362_read_reg16(isp1362_hcd
, HCCHIPID
));
2024 seq_printf(s
, "HCSCRATCH [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCSCRATCH
),
2025 isp1362_read_reg16(isp1362_hcd
, HCSCRATCH
));
2026 seq_printf(s
, "HCBUFSTAT [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCBUFSTAT
),
2027 isp1362_read_reg16(isp1362_hcd
, HCBUFSTAT
));
2028 seq_printf(s
, "HCDIRADDR [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCDIRADDR
),
2029 isp1362_read_reg32(isp1362_hcd
, HCDIRADDR
));
2031 seq_printf(s
, "HCDIRDATA [%02x] %04x\n", ISP1362_REG_NO(HCDIRDATA
),
2032 isp1362_read_reg16(isp1362_hcd
, HCDIRDATA
));
2034 seq_printf(s
, "HCISTLBUFSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCISTLBUFSZ
),
2035 isp1362_read_reg16(isp1362_hcd
, HCISTLBUFSZ
));
2036 seq_printf(s
, "HCISTLRATE [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCISTLRATE
),
2037 isp1362_read_reg16(isp1362_hcd
, HCISTLRATE
));
2038 seq_printf(s
, "\n");
2039 seq_printf(s
, "HCINTLBUFSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLBUFSZ
),
2040 isp1362_read_reg16(isp1362_hcd
, HCINTLBUFSZ
));
2041 seq_printf(s
, "HCINTLBLKSZ[%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLBLKSZ
),
2042 isp1362_read_reg16(isp1362_hcd
, HCINTLBLKSZ
));
2043 seq_printf(s
, "HCINTLDONE [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLDONE
),
2044 isp1362_read_reg32(isp1362_hcd
, HCINTLDONE
));
2045 seq_printf(s
, "HCINTLSKIP [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLSKIP
),
2046 isp1362_read_reg32(isp1362_hcd
, HCINTLSKIP
));
2047 seq_printf(s
, "HCINTLLAST [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLLAST
),
2048 isp1362_read_reg32(isp1362_hcd
, HCINTLLAST
));
2049 seq_printf(s
, "HCINTLCURR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCINTLCURR
),
2050 isp1362_read_reg16(isp1362_hcd
, HCINTLCURR
));
2051 seq_printf(s
, "\n");
2052 seq_printf(s
, "HCATLBUFSZ [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLBUFSZ
),
2053 isp1362_read_reg16(isp1362_hcd
, HCATLBUFSZ
));
2054 seq_printf(s
, "HCATLBLKSZ [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLBLKSZ
),
2055 isp1362_read_reg16(isp1362_hcd
, HCATLBLKSZ
));
2057 seq_printf(s
, "HCATLDONE [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDONE
),
2058 isp1362_read_reg32(isp1362_hcd
, HCATLDONE
));
2060 seq_printf(s
, "HCATLSKIP [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLSKIP
),
2061 isp1362_read_reg32(isp1362_hcd
, HCATLSKIP
));
2062 seq_printf(s
, "HCATLLAST [%02x] %08x\n", ISP1362_REG_NO(ISP1362_REG_HCATLLAST
),
2063 isp1362_read_reg32(isp1362_hcd
, HCATLLAST
));
2064 seq_printf(s
, "HCATLCURR [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLCURR
),
2065 isp1362_read_reg16(isp1362_hcd
, HCATLCURR
));
2066 seq_printf(s
, "\n");
2067 seq_printf(s
, "HCATLDTC [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDTC
),
2068 isp1362_read_reg16(isp1362_hcd
, HCATLDTC
));
2069 seq_printf(s
, "HCATLDTCTO [%02x] %04x\n", ISP1362_REG_NO(ISP1362_REG_HCATLDTCTO
),
2070 isp1362_read_reg16(isp1362_hcd
, HCATLDTCTO
));
2073 static int proc_isp1362_show(struct seq_file
*s
, void *unused
)
2075 struct isp1362_hcd
*isp1362_hcd
= s
->private;
2076 struct isp1362_ep
*ep
;
2079 seq_printf(s
, "%s\n%s version %s\n",
2080 isp1362_hcd_to_hcd(isp1362_hcd
)->product_desc
, hcd_name
, DRIVER_VERSION
);
2082 /* collect statistics to help estimate potential win for
2083 * DMA engines that care about alignment (PXA)
2085 seq_printf(s
, "alignment: 16b/%ld 8b/%ld 4b/%ld 2b/%ld 1b/%ld\n",
2086 isp1362_hcd
->stat16
, isp1362_hcd
->stat8
, isp1362_hcd
->stat4
,
2087 isp1362_hcd
->stat2
, isp1362_hcd
->stat1
);
2088 seq_printf(s
, "max # ptds in ATL fifo: %d\n", isp1362_hcd
->atl_queue
.stat_maxptds
);
2089 seq_printf(s
, "max # ptds in INTL fifo: %d\n", isp1362_hcd
->intl_queue
.stat_maxptds
);
2090 seq_printf(s
, "max # ptds in ISTL fifo: %d\n",
2091 max(isp1362_hcd
->istl_queue
[0] .stat_maxptds
,
2092 isp1362_hcd
->istl_queue
[1] .stat_maxptds
));
2094 /* FIXME: don't show the following in suspended state */
2095 spin_lock_irq(&isp1362_hcd
->lock
);
2097 dump_irq(s
, "hc_irq_enable", isp1362_read_reg16(isp1362_hcd
, HCuPINTENB
));
2098 dump_irq(s
, "hc_irq_status", isp1362_read_reg16(isp1362_hcd
, HCuPINT
));
2099 dump_int(s
, "ohci_int_enable", isp1362_read_reg32(isp1362_hcd
, HCINTENB
));
2100 dump_int(s
, "ohci_int_status", isp1362_read_reg32(isp1362_hcd
, HCINTSTAT
));
2101 dump_ctrl(s
, "ohci_control", isp1362_read_reg32(isp1362_hcd
, HCCONTROL
));
2103 for (i
= 0; i
< NUM_ISP1362_IRQS
; i
++)
2104 if (isp1362_hcd
->irq_stat
[i
])
2105 seq_printf(s
, "%-15s: %d\n",
2106 ISP1362_INT_NAME(i
), isp1362_hcd
->irq_stat
[i
]);
2108 dump_regs(s
, isp1362_hcd
);
2109 list_for_each_entry(ep
, &isp1362_hcd
->async
, schedule
) {
2112 seq_printf(s
, "%p, ep%d%s, maxpacket %d:\n", ep
, ep
->epnum
,
2115 switch (ep
->nextpid
) {
2132 s
;}), ep
->maxpacket
) ;
2133 list_for_each_entry(urb
, &ep
->hep
->urb_list
, urb_list
) {
2134 seq_printf(s
, " urb%p, %d/%d\n", urb
,
2136 urb
->transfer_buffer_length
);
2139 if (!list_empty(&isp1362_hcd
->async
))
2140 seq_printf(s
, "\n");
2141 dump_ptd_queue(&isp1362_hcd
->atl_queue
);
2143 seq_printf(s
, "periodic size= %d\n", PERIODIC_SIZE
);
2145 list_for_each_entry(ep
, &isp1362_hcd
->periodic
, schedule
) {
2146 seq_printf(s
, "branch:%2d load:%3d PTD[%d] $%04x:\n", ep
->branch
,
2147 isp1362_hcd
->load
[ep
->branch
], ep
->ptd_index
, ep
->ptd_offset
);
2149 seq_printf(s
, " %d/%p (%sdev%d ep%d%s max %d)\n",
2151 (ep
->udev
->speed
== USB_SPEED_FULL
) ? "" : "ls ",
2152 ep
->udev
->devnum
, ep
->epnum
,
2153 (ep
->epnum
== 0) ? "" :
2154 ((ep
->nextpid
== USB_PID_IN
) ?
2155 "in" : "out"), ep
->maxpacket
);
2157 dump_ptd_queue(&isp1362_hcd
->intl_queue
);
2159 seq_printf(s
, "ISO:\n");
2161 list_for_each_entry(ep
, &isp1362_hcd
->isoc
, schedule
) {
2162 seq_printf(s
, " %d/%p (%sdev%d ep%d%s max %d)\n",
2164 (ep
->udev
->speed
== USB_SPEED_FULL
) ? "" : "ls ",
2165 ep
->udev
->devnum
, ep
->epnum
,
2166 (ep
->epnum
== 0) ? "" :
2167 ((ep
->nextpid
== USB_PID_IN
) ?
2168 "in" : "out"), ep
->maxpacket
);
2171 spin_unlock_irq(&isp1362_hcd
->lock
);
2172 seq_printf(s
, "\n");
2177 static int proc_isp1362_open(struct inode
*inode
, struct file
*file
)
2179 return single_open(file
, proc_isp1362_show
, PDE(inode
)->data
);
2182 static const struct file_operations proc_ops
= {
2183 .open
= proc_isp1362_open
,
2185 .llseek
= seq_lseek
,
2186 .release
= single_release
,
2189 /* expect just one isp1362_hcd per system */
2190 static const char proc_filename
[] = "driver/isp1362";
2192 static void create_debug_file(struct isp1362_hcd
*isp1362_hcd
)
2194 struct proc_dir_entry
*pde
;
2196 pde
= create_proc_entry(proc_filename
, 0, NULL
);
2198 pr_warning("%s: Failed to create debug file '%s'\n", __func__
, proc_filename
);
2202 pde
->proc_fops
= &proc_ops
;
2203 pde
->data
= isp1362_hcd
;
2204 isp1362_hcd
->pde
= pde
;
2207 static void remove_debug_file(struct isp1362_hcd
*isp1362_hcd
)
2209 if (isp1362_hcd
->pde
)
2210 remove_proc_entry(proc_filename
, NULL
);
2215 /*-------------------------------------------------------------------------*/
2217 static void __isp1362_sw_reset(struct isp1362_hcd
*isp1362_hcd
)
2221 isp1362_write_reg16(isp1362_hcd
, HCSWRES
, HCSWRES_MAGIC
);
2222 isp1362_write_reg32(isp1362_hcd
, HCCMDSTAT
, OHCI_HCR
);
2225 if (!(isp1362_read_reg32(isp1362_hcd
, HCCMDSTAT
) & OHCI_HCR
))
2229 pr_err("Software reset timeout\n");
2232 static void isp1362_sw_reset(struct isp1362_hcd
*isp1362_hcd
)
2234 unsigned long flags
;
2236 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2237 __isp1362_sw_reset(isp1362_hcd
);
2238 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2241 static int isp1362_mem_config(struct usb_hcd
*hcd
)
2243 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2244 unsigned long flags
;
2246 u16 istl_size
= ISP1362_ISTL_BUFSIZE
;
2247 u16 intl_blksize
= ISP1362_INTL_BLKSIZE
+ PTD_HEADER_SIZE
;
2248 u16 intl_size
= ISP1362_INTL_BUFFERS
* intl_blksize
;
2249 u16 atl_blksize
= ISP1362_ATL_BLKSIZE
+ PTD_HEADER_SIZE
;
2250 u16 atl_buffers
= (ISP1362_BUF_SIZE
- (istl_size
+ intl_size
)) / atl_blksize
;
2254 WARN_ON(istl_size
& 3);
2255 WARN_ON(atl_blksize
& 3);
2256 WARN_ON(intl_blksize
& 3);
2257 WARN_ON(atl_blksize
< PTD_HEADER_SIZE
);
2258 WARN_ON(intl_blksize
< PTD_HEADER_SIZE
);
2260 BUG_ON((unsigned)ISP1362_INTL_BUFFERS
> 32);
2261 if (atl_buffers
> 32)
2263 atl_size
= atl_buffers
* atl_blksize
;
2264 total
= atl_size
+ intl_size
+ istl_size
;
2265 dev_info(hcd
->self
.controller
, "ISP1362 Memory usage:\n");
2266 dev_info(hcd
->self
.controller
, " ISTL: 2 * %4d: %4d @ $%04x:$%04x\n",
2267 istl_size
/ 2, istl_size
, 0, istl_size
/ 2);
2268 dev_info(hcd
->self
.controller
, " INTL: %4d * (%3zu+8): %4d @ $%04x\n",
2269 ISP1362_INTL_BUFFERS
, intl_blksize
- PTD_HEADER_SIZE
,
2270 intl_size
, istl_size
);
2271 dev_info(hcd
->self
.controller
, " ATL : %4d * (%3zu+8): %4d @ $%04x\n",
2272 atl_buffers
, atl_blksize
- PTD_HEADER_SIZE
,
2273 atl_size
, istl_size
+ intl_size
);
2274 dev_info(hcd
->self
.controller
, " USED/FREE: %4d %4d\n", total
,
2275 ISP1362_BUF_SIZE
- total
);
2277 if (total
> ISP1362_BUF_SIZE
) {
2278 dev_err(hcd
->self
.controller
, "%s: Memory requested: %d, available %d\n",
2279 __func__
, total
, ISP1362_BUF_SIZE
);
2283 total
= istl_size
+ intl_size
+ atl_size
;
2284 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2286 for (i
= 0; i
< 2; i
++) {
2287 isp1362_hcd
->istl_queue
[i
].buf_start
= i
* istl_size
/ 2,
2288 isp1362_hcd
->istl_queue
[i
].buf_size
= istl_size
/ 2;
2289 isp1362_hcd
->istl_queue
[i
].blk_size
= 4;
2290 INIT_LIST_HEAD(&isp1362_hcd
->istl_queue
[i
].active
);
2291 snprintf(isp1362_hcd
->istl_queue
[i
].name
,
2292 sizeof(isp1362_hcd
->istl_queue
[i
].name
), "ISTL%d", i
);
2293 DBG(3, "%s: %5s buf $%04x %d\n", __func__
,
2294 isp1362_hcd
->istl_queue
[i
].name
,
2295 isp1362_hcd
->istl_queue
[i
].buf_start
,
2296 isp1362_hcd
->istl_queue
[i
].buf_size
);
2298 isp1362_write_reg16(isp1362_hcd
, HCISTLBUFSZ
, istl_size
/ 2);
2300 isp1362_hcd
->intl_queue
.buf_start
= istl_size
;
2301 isp1362_hcd
->intl_queue
.buf_size
= intl_size
;
2302 isp1362_hcd
->intl_queue
.buf_count
= ISP1362_INTL_BUFFERS
;
2303 isp1362_hcd
->intl_queue
.blk_size
= intl_blksize
;
2304 isp1362_hcd
->intl_queue
.buf_avail
= isp1362_hcd
->intl_queue
.buf_count
;
2305 isp1362_hcd
->intl_queue
.skip_map
= ~0;
2306 INIT_LIST_HEAD(&isp1362_hcd
->intl_queue
.active
);
2308 isp1362_write_reg16(isp1362_hcd
, HCINTLBUFSZ
,
2309 isp1362_hcd
->intl_queue
.buf_size
);
2310 isp1362_write_reg16(isp1362_hcd
, HCINTLBLKSZ
,
2311 isp1362_hcd
->intl_queue
.blk_size
- PTD_HEADER_SIZE
);
2312 isp1362_write_reg32(isp1362_hcd
, HCINTLSKIP
, ~0);
2313 isp1362_write_reg32(isp1362_hcd
, HCINTLLAST
,
2314 1 << (ISP1362_INTL_BUFFERS
- 1));
2316 isp1362_hcd
->atl_queue
.buf_start
= istl_size
+ intl_size
;
2317 isp1362_hcd
->atl_queue
.buf_size
= atl_size
;
2318 isp1362_hcd
->atl_queue
.buf_count
= atl_buffers
;
2319 isp1362_hcd
->atl_queue
.blk_size
= atl_blksize
;
2320 isp1362_hcd
->atl_queue
.buf_avail
= isp1362_hcd
->atl_queue
.buf_count
;
2321 isp1362_hcd
->atl_queue
.skip_map
= ~0;
2322 INIT_LIST_HEAD(&isp1362_hcd
->atl_queue
.active
);
2324 isp1362_write_reg16(isp1362_hcd
, HCATLBUFSZ
,
2325 isp1362_hcd
->atl_queue
.buf_size
);
2326 isp1362_write_reg16(isp1362_hcd
, HCATLBLKSZ
,
2327 isp1362_hcd
->atl_queue
.blk_size
- PTD_HEADER_SIZE
);
2328 isp1362_write_reg32(isp1362_hcd
, HCATLSKIP
, ~0);
2329 isp1362_write_reg32(isp1362_hcd
, HCATLLAST
,
2330 1 << (atl_buffers
- 1));
2332 snprintf(isp1362_hcd
->atl_queue
.name
,
2333 sizeof(isp1362_hcd
->atl_queue
.name
), "ATL");
2334 snprintf(isp1362_hcd
->intl_queue
.name
,
2335 sizeof(isp1362_hcd
->intl_queue
.name
), "INTL");
2336 DBG(3, "%s: %5s buf $%04x %2d * %4d = %4d\n", __func__
,
2337 isp1362_hcd
->intl_queue
.name
,
2338 isp1362_hcd
->intl_queue
.buf_start
,
2339 ISP1362_INTL_BUFFERS
, isp1362_hcd
->intl_queue
.blk_size
,
2340 isp1362_hcd
->intl_queue
.buf_size
);
2341 DBG(3, "%s: %5s buf $%04x %2d * %4d = %4d\n", __func__
,
2342 isp1362_hcd
->atl_queue
.name
,
2343 isp1362_hcd
->atl_queue
.buf_start
,
2344 atl_buffers
, isp1362_hcd
->atl_queue
.blk_size
,
2345 isp1362_hcd
->atl_queue
.buf_size
);
2347 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2352 static int isp1362_hc_reset(struct usb_hcd
*hcd
)
2355 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2357 unsigned long timeout
= 100;
2358 unsigned long flags
;
2361 pr_debug("%s:\n", __func__
);
2363 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->reset
) {
2364 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 1);
2366 if (isp1362_hcd
->board
->clock
)
2367 isp1362_hcd
->board
->clock(hcd
->self
.controller
, 1);
2368 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 0);
2370 isp1362_sw_reset(isp1362_hcd
);
2372 /* chip has been reset. First we need to see a clock */
2373 t
= jiffies
+ msecs_to_jiffies(timeout
);
2374 while (!clkrdy
&& time_before_eq(jiffies
, t
)) {
2375 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2376 clkrdy
= isp1362_read_reg16(isp1362_hcd
, HCuPINT
) & HCuPINT_CLKRDY
;
2377 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2382 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2383 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, HCuPINT_CLKRDY
);
2384 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2386 pr_err("Clock not ready after %lums\n", timeout
);
2392 static void isp1362_hc_stop(struct usb_hcd
*hcd
)
2394 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2395 unsigned long flags
;
2398 pr_debug("%s:\n", __func__
);
2400 del_timer_sync(&hcd
->rh_timer
);
2402 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2404 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
2406 /* Switch off power for all ports */
2407 tmp
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
);
2408 tmp
&= ~(RH_A_NPS
| RH_A_PSM
);
2409 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, tmp
);
2410 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPS
);
2412 /* Reset the chip */
2413 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->reset
)
2414 isp1362_hcd
->board
->reset(hcd
->self
.controller
, 1);
2416 __isp1362_sw_reset(isp1362_hcd
);
2418 if (isp1362_hcd
->board
&& isp1362_hcd
->board
->clock
)
2419 isp1362_hcd
->board
->clock(hcd
->self
.controller
, 0);
2421 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2424 #ifdef CHIP_BUFFER_TEST
2425 static int isp1362_chip_test(struct isp1362_hcd
*isp1362_hcd
)
2429 unsigned long flags
;
2431 ref
= kmalloc(2 * ISP1362_BUF_SIZE
, GFP_KERNEL
);
2434 u16
*tst
= &ref
[ISP1362_BUF_SIZE
/ 2];
2436 for (offset
= 0; offset
< ISP1362_BUF_SIZE
/ 2; offset
++) {
2437 ref
[offset
] = ~offset
;
2438 tst
[offset
] = offset
;
2441 for (offset
= 0; offset
< 4; offset
++) {
2444 for (j
= 0; j
< 8; j
++) {
2445 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2446 isp1362_write_buffer(isp1362_hcd
, (u8
*)ref
+ offset
, 0, j
);
2447 isp1362_read_buffer(isp1362_hcd
, (u8
*)tst
+ offset
, 0, j
);
2448 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2450 if (memcmp(ref
, tst
, j
)) {
2452 pr_err("%s: memory check with %d byte offset %d failed\n",
2453 __func__
, j
, offset
);
2454 dump_data((u8
*)ref
+ offset
, j
);
2455 dump_data((u8
*)tst
+ offset
, j
);
2460 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2461 isp1362_write_buffer(isp1362_hcd
, ref
, 0, ISP1362_BUF_SIZE
);
2462 isp1362_read_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2463 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2465 if (memcmp(ref
, tst
, ISP1362_BUF_SIZE
)) {
2467 pr_err("%s: memory check failed\n", __func__
);
2468 dump_data((u8
*)tst
, ISP1362_BUF_SIZE
/ 2);
2471 for (offset
= 0; offset
< 256; offset
++) {
2476 memset(tst
, 0, ISP1362_BUF_SIZE
);
2477 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2478 isp1362_write_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2479 isp1362_read_buffer(isp1362_hcd
, tst
, 0, ISP1362_BUF_SIZE
);
2480 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2481 if (memcmp(tst
, tst
+ (ISP1362_BUF_SIZE
/ (2 * sizeof(*tst
))),
2482 ISP1362_BUF_SIZE
/ 2)) {
2483 pr_err("%s: Failed to clear buffer\n", __func__
);
2484 dump_data((u8
*)tst
, ISP1362_BUF_SIZE
);
2487 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2488 isp1362_write_buffer(isp1362_hcd
, ref
, offset
* 2, PTD_HEADER_SIZE
);
2489 isp1362_write_buffer(isp1362_hcd
, ref
+ PTD_HEADER_SIZE
/ sizeof(*ref
),
2490 offset
* 2 + PTD_HEADER_SIZE
, test_size
);
2491 isp1362_read_buffer(isp1362_hcd
, tst
, offset
* 2,
2492 PTD_HEADER_SIZE
+ test_size
);
2493 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2494 if (memcmp(ref
, tst
, PTD_HEADER_SIZE
+ test_size
)) {
2495 dump_data(((u8
*)ref
) + offset
, PTD_HEADER_SIZE
+ test_size
);
2496 dump_data((u8
*)tst
, PTD_HEADER_SIZE
+ test_size
);
2497 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2498 isp1362_read_buffer(isp1362_hcd
, tst
, offset
* 2,
2499 PTD_HEADER_SIZE
+ test_size
);
2500 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2501 if (memcmp(ref
, tst
, PTD_HEADER_SIZE
+ test_size
)) {
2503 pr_err("%s: memory check with offset %02x failed\n",
2507 pr_warning("%s: memory check with offset %02x ok after second read\n",
2517 static int isp1362_hc_start(struct usb_hcd
*hcd
)
2520 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2521 struct isp1362_platform_data
*board
= isp1362_hcd
->board
;
2524 unsigned long flags
;
2526 pr_debug("%s:\n", __func__
);
2528 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2529 chipid
= isp1362_read_reg16(isp1362_hcd
, HCCHIPID
);
2530 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2532 if ((chipid
& HCCHIPID_MASK
) != HCCHIPID_MAGIC
) {
2533 pr_err("%s: Invalid chip ID %04x\n", __func__
, chipid
);
2537 #ifdef CHIP_BUFFER_TEST
2538 ret
= isp1362_chip_test(isp1362_hcd
);
2542 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2543 /* clear interrupt status and disable all interrupt sources */
2544 isp1362_write_reg16(isp1362_hcd
, HCuPINT
, 0xff);
2545 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, 0);
2548 hwcfg
= HCHWCFG_INT_ENABLE
| HCHWCFG_DBWIDTH(1);
2549 if (board
->sel15Kres
)
2550 hwcfg
|= HCHWCFG_PULLDOWN_DS2
|
2551 ((MAX_ROOT_PORTS
> 1) ? HCHWCFG_PULLDOWN_DS1
: 0);
2552 if (board
->clknotstop
)
2553 hwcfg
|= HCHWCFG_CLKNOTSTOP
;
2554 if (board
->oc_enable
)
2555 hwcfg
|= HCHWCFG_ANALOG_OC
;
2556 if (board
->int_act_high
)
2557 hwcfg
|= HCHWCFG_INT_POL
;
2558 if (board
->int_edge_triggered
)
2559 hwcfg
|= HCHWCFG_INT_TRIGGER
;
2560 if (board
->dreq_act_high
)
2561 hwcfg
|= HCHWCFG_DREQ_POL
;
2562 if (board
->dack_act_high
)
2563 hwcfg
|= HCHWCFG_DACK_POL
;
2564 isp1362_write_reg16(isp1362_hcd
, HCHWCFG
, hwcfg
);
2565 isp1362_show_reg(isp1362_hcd
, HCHWCFG
);
2566 isp1362_write_reg16(isp1362_hcd
, HCDMACFG
, 0);
2567 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2569 ret
= isp1362_mem_config(hcd
);
2573 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2576 isp1362_hcd
->rhdesca
= 0;
2577 if (board
->no_power_switching
)
2578 isp1362_hcd
->rhdesca
|= RH_A_NPS
;
2579 if (board
->power_switching_mode
)
2580 isp1362_hcd
->rhdesca
|= RH_A_PSM
;
2582 isp1362_hcd
->rhdesca
|= (board
->potpg
<< 24) & RH_A_POTPGT
;
2584 isp1362_hcd
->rhdesca
|= (25 << 24) & RH_A_POTPGT
;
2586 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, isp1362_hcd
->rhdesca
& ~RH_A_OCPM
);
2587 isp1362_write_reg32(isp1362_hcd
, HCRHDESCA
, isp1362_hcd
->rhdesca
| RH_A_OCPM
);
2588 isp1362_hcd
->rhdesca
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCA
);
2590 isp1362_hcd
->rhdescb
= RH_B_PPCM
;
2591 isp1362_write_reg32(isp1362_hcd
, HCRHDESCB
, isp1362_hcd
->rhdescb
);
2592 isp1362_hcd
->rhdescb
= isp1362_read_reg32(isp1362_hcd
, HCRHDESCB
);
2594 isp1362_read_reg32(isp1362_hcd
, HCFMINTVL
);
2595 isp1362_write_reg32(isp1362_hcd
, HCFMINTVL
, (FSMP(FI
) << 16) | FI
);
2596 isp1362_write_reg32(isp1362_hcd
, HCLSTHRESH
, LSTHRESH
);
2598 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2600 isp1362_hcd
->hc_control
= OHCI_USB_OPER
;
2601 hcd
->state
= HC_STATE_RUNNING
;
2603 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2604 /* Set up interrupts */
2605 isp1362_hcd
->intenb
= OHCI_INTR_MIE
| OHCI_INTR_RHSC
| OHCI_INTR_UE
;
2606 isp1362_hcd
->intenb
|= OHCI_INTR_RD
;
2607 isp1362_hcd
->irqenb
= HCuPINT_OPR
| HCuPINT_SUSP
;
2608 isp1362_write_reg32(isp1362_hcd
, HCINTENB
, isp1362_hcd
->intenb
);
2609 isp1362_write_reg16(isp1362_hcd
, HCuPINTENB
, isp1362_hcd
->irqenb
);
2611 /* Go operational */
2612 isp1362_write_reg32(isp1362_hcd
, HCCONTROL
, isp1362_hcd
->hc_control
);
2613 /* enable global power */
2614 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPSC
| RH_HS_DRWE
);
2616 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2621 /*-------------------------------------------------------------------------*/
2623 static struct hc_driver isp1362_hc_driver
= {
2624 .description
= hcd_name
,
2625 .product_desc
= "ISP1362 Host Controller",
2626 .hcd_priv_size
= sizeof(struct isp1362_hcd
),
2629 .flags
= HCD_USB11
| HCD_MEMORY
,
2631 .reset
= isp1362_hc_reset
,
2632 .start
= isp1362_hc_start
,
2633 .stop
= isp1362_hc_stop
,
2635 .urb_enqueue
= isp1362_urb_enqueue
,
2636 .urb_dequeue
= isp1362_urb_dequeue
,
2637 .endpoint_disable
= isp1362_endpoint_disable
,
2639 .get_frame_number
= isp1362_get_frame
,
2641 .hub_status_data
= isp1362_hub_status_data
,
2642 .hub_control
= isp1362_hub_control
,
2643 .bus_suspend
= isp1362_bus_suspend
,
2644 .bus_resume
= isp1362_bus_resume
,
2647 /*-------------------------------------------------------------------------*/
2649 static int __devexit
isp1362_remove(struct platform_device
*pdev
)
2651 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2652 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2653 struct resource
*res
;
2655 remove_debug_file(isp1362_hcd
);
2656 DBG(0, "%s: Removing HCD\n", __func__
);
2657 usb_remove_hcd(hcd
);
2659 DBG(0, "%s: Unmapping data_reg @ %p\n", __func__
,
2660 isp1362_hcd
->data_reg
);
2661 iounmap(isp1362_hcd
->data_reg
);
2663 DBG(0, "%s: Unmapping addr_reg @ %p\n", __func__
,
2664 isp1362_hcd
->addr_reg
);
2665 iounmap(isp1362_hcd
->addr_reg
);
2667 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
2668 DBG(0, "%s: release mem_region: %08lx\n", __func__
, (long unsigned int)res
->start
);
2670 release_mem_region(res
->start
, resource_size(res
));
2672 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2673 DBG(0, "%s: release mem_region: %08lx\n", __func__
, (long unsigned int)res
->start
);
2675 release_mem_region(res
->start
, resource_size(res
));
2677 DBG(0, "%s: put_hcd\n", __func__
);
2679 DBG(0, "%s: Done\n", __func__
);
2684 static int __devinit
isp1362_probe(struct platform_device
*pdev
)
2686 struct usb_hcd
*hcd
;
2687 struct isp1362_hcd
*isp1362_hcd
;
2688 struct resource
*addr
, *data
;
2689 void __iomem
*addr_reg
;
2690 void __iomem
*data_reg
;
2693 struct resource
*irq_res
;
2694 unsigned int irq_flags
= 0;
2696 /* basic sanity checks first. board-specific init logic should
2697 * have initialized this the three resources and probably board
2698 * specific platform_data. we don't probe for IRQs, and do only
2699 * minimal sanity checking.
2701 if (pdev
->num_resources
< 3) {
2706 data
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2707 addr
= platform_get_resource(pdev
, IORESOURCE_MEM
, 1);
2708 irq_res
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
2709 if (!addr
|| !data
|| !irq_res
) {
2713 irq
= irq_res
->start
;
2715 if (pdev
->dev
.dma_mask
) {
2716 DBG(1, "won't do DMA");
2721 if (!request_mem_region(addr
->start
, resource_size(addr
), hcd_name
)) {
2725 addr_reg
= ioremap(addr
->start
, resource_size(addr
));
2726 if (addr_reg
== NULL
) {
2731 if (!request_mem_region(data
->start
, resource_size(data
), hcd_name
)) {
2735 data_reg
= ioremap(data
->start
, resource_size(data
));
2736 if (data_reg
== NULL
) {
2741 /* allocate and initialize hcd */
2742 hcd
= usb_create_hcd(&isp1362_hc_driver
, &pdev
->dev
, dev_name(&pdev
->dev
));
2747 hcd
->rsrc_start
= data
->start
;
2748 isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2749 isp1362_hcd
->data_reg
= data_reg
;
2750 isp1362_hcd
->addr_reg
= addr_reg
;
2752 isp1362_hcd
->next_statechange
= jiffies
;
2753 spin_lock_init(&isp1362_hcd
->lock
);
2754 INIT_LIST_HEAD(&isp1362_hcd
->async
);
2755 INIT_LIST_HEAD(&isp1362_hcd
->periodic
);
2756 INIT_LIST_HEAD(&isp1362_hcd
->isoc
);
2757 INIT_LIST_HEAD(&isp1362_hcd
->remove_list
);
2758 isp1362_hcd
->board
= pdev
->dev
.platform_data
;
2759 #if USE_PLATFORM_DELAY
2760 if (!isp1362_hcd
->board
->delay
) {
2761 dev_err(hcd
->self
.controller
, "No platform delay function given\n");
2767 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHEDGE
)
2768 irq_flags
|= IRQF_TRIGGER_RISING
;
2769 if (irq_res
->flags
& IORESOURCE_IRQ_LOWEDGE
)
2770 irq_flags
|= IRQF_TRIGGER_FALLING
;
2771 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHLEVEL
)
2772 irq_flags
|= IRQF_TRIGGER_HIGH
;
2773 if (irq_res
->flags
& IORESOURCE_IRQ_LOWLEVEL
)
2774 irq_flags
|= IRQF_TRIGGER_LOW
;
2776 retval
= usb_add_hcd(hcd
, irq
, irq_flags
| IRQF_DISABLED
| IRQF_SHARED
);
2779 pr_info("%s, irq %d\n", hcd
->product_desc
, irq
);
2781 create_debug_file(isp1362_hcd
);
2786 DBG(0, "%s: Freeing dev %p\n", __func__
, isp1362_hcd
);
2789 DBG(0, "%s: Unmapping data_reg @ %p\n", __func__
, data_reg
);
2792 DBG(0, "%s: Releasing mem region %08lx\n", __func__
, (long unsigned int)data
->start
);
2793 release_mem_region(data
->start
, resource_size(data
));
2795 DBG(0, "%s: Unmapping addr_reg @ %p\n", __func__
, addr_reg
);
2798 DBG(0, "%s: Releasing mem region %08lx\n", __func__
, (long unsigned int)addr
->start
);
2799 release_mem_region(addr
->start
, resource_size(addr
));
2801 pr_err("%s: init error, %d\n", __func__
, retval
);
2807 static int isp1362_suspend(struct platform_device
*pdev
, pm_message_t state
)
2809 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2810 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2811 unsigned long flags
;
2814 DBG(0, "%s: Suspending device\n", __func__
);
2816 if (state
.event
== PM_EVENT_FREEZE
) {
2817 DBG(0, "%s: Suspending root hub\n", __func__
);
2818 retval
= isp1362_bus_suspend(hcd
);
2820 DBG(0, "%s: Suspending RH ports\n", __func__
);
2821 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2822 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPS
);
2823 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2826 pdev
->dev
.power
.power_state
= state
;
2830 static int isp1362_resume(struct platform_device
*pdev
)
2832 struct usb_hcd
*hcd
= platform_get_drvdata(pdev
);
2833 struct isp1362_hcd
*isp1362_hcd
= hcd_to_isp1362_hcd(hcd
);
2834 unsigned long flags
;
2836 DBG(0, "%s: Resuming\n", __func__
);
2838 if (pdev
->dev
.power
.power_state
.event
== PM_EVENT_SUSPEND
) {
2839 DBG(0, "%s: Resume RH ports\n", __func__
);
2840 spin_lock_irqsave(&isp1362_hcd
->lock
, flags
);
2841 isp1362_write_reg32(isp1362_hcd
, HCRHSTATUS
, RH_HS_LPSC
);
2842 spin_unlock_irqrestore(&isp1362_hcd
->lock
, flags
);
2846 pdev
->dev
.power
.power_state
= PMSG_ON
;
2848 return isp1362_bus_resume(isp1362_hcd_to_hcd(isp1362_hcd
));
2851 #define isp1362_suspend NULL
2852 #define isp1362_resume NULL
2855 static struct platform_driver isp1362_driver
= {
2856 .probe
= isp1362_probe
,
2857 .remove
= __devexit_p(isp1362_remove
),
2859 .suspend
= isp1362_suspend
,
2860 .resume
= isp1362_resume
,
2862 .name
= (char *)hcd_name
,
2863 .owner
= THIS_MODULE
,
2867 /*-------------------------------------------------------------------------*/
2869 static int __init
isp1362_init(void)
2873 pr_info("driver %s, %s\n", hcd_name
, DRIVER_VERSION
);
2874 return platform_driver_register(&isp1362_driver
);
2876 module_init(isp1362_init
);
2878 static void __exit
isp1362_cleanup(void)
2880 platform_driver_unregister(&isp1362_driver
);
2882 module_exit(isp1362_cleanup
);