Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 235312
b: refs/heads/master
c: b14e840
h: refs/heads/master
v: v3
  • Loading branch information
Sebastian Andrzej Siewior authored and Greg Kroah-Hartman committed Feb 17, 2011
1 parent 22cee55 commit 195dbec
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4f9e6c64d1fc4668f3153f456b41cf40b30c730f
refs/heads/master: b14e840d04dba211fbdc930247e379085623eacd
22 changes: 16 additions & 6 deletions trunk/drivers/usb/host/isp1760-hcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct isp1760_hcd {
struct inter_packet_info atl_ints[32];
struct inter_packet_info int_ints[32];
struct memory_chunk memory_pool[BLOCKS];
u32 atl_queued;

/* periodic schedule support */
#define DEFAULT_I_TDPS 1024
Expand Down Expand Up @@ -850,6 +851,11 @@ static void enqueue_an_ATL_packet(struct usb_hcd *hcd, struct isp1760_qh *qh,
skip_map &= ~queue_entry;
isp1760_writel(skip_map, hcd->regs + HC_ATL_PTD_SKIPMAP_REG);

priv->atl_queued++;
if (priv->atl_queued == 2)
isp1760_writel(INTERRUPT_ENABLE_SOT_MASK,
hcd->regs + HC_INTERRUPT_ENABLE);

buffstatus = isp1760_readl(hcd->regs + HC_BUFFER_STATUS_REG);
buffstatus |= ATL_BUFFER;
isp1760_writel(buffstatus, hcd->regs + HC_BUFFER_STATUS_REG);
Expand Down Expand Up @@ -992,6 +998,7 @@ static void do_atl_int(struct usb_hcd *usb_hcd)
u32 dw3;

status = 0;
priv->atl_queued--;

queue_entry = __ffs(done_map);
done_map &= ~(1 << queue_entry);
Expand Down Expand Up @@ -1054,11 +1061,6 @@ static void do_atl_int(struct usb_hcd *usb_hcd)
* device is not able to send data fast enough.
* This happens mostly on slower hardware.
*/
printk(KERN_NOTICE "Reloading ptd %p/%p... qh %p read: "
"%d of %zu done: %08x cur: %08x\n", qtd,
urb, qh, PTD_XFERRED_LENGTH(dw3),
qtd->length, done_map,
(1 << queue_entry));

/* RL counter = ERR counter */
dw3 &= ~(0xf << 19);
Expand Down Expand Up @@ -1086,6 +1088,11 @@ static void do_atl_int(struct usb_hcd *usb_hcd)
priv_write_copy(priv, (u32 *)&ptd, usb_hcd->regs +
atl_regs, sizeof(ptd));

priv->atl_queued++;
if (priv->atl_queued == 2)
isp1760_writel(INTERRUPT_ENABLE_SOT_MASK,
usb_hcd->regs + HC_INTERRUPT_ENABLE);

buffstatus = isp1760_readl(usb_hcd->regs +
HC_BUFFER_STATUS_REG);
buffstatus |= ATL_BUFFER;
Expand Down Expand Up @@ -1191,6 +1198,9 @@ static void do_atl_int(struct usb_hcd *usb_hcd)
skip_map = isp1760_readl(usb_hcd->regs +
HC_ATL_PTD_SKIPMAP_REG);
}
if (priv->atl_queued <= 1)
isp1760_writel(INTERRUPT_ENABLE_MASK,
usb_hcd->regs + HC_INTERRUPT_ENABLE);
}

static void do_intl_int(struct usb_hcd *usb_hcd)
Expand Down Expand Up @@ -1770,7 +1780,7 @@ static irqreturn_t isp1760_irq(struct usb_hcd *usb_hcd)
goto leave;

isp1760_writel(imask, usb_hcd->regs + HC_INTERRUPT_REG);
if (imask & HC_ATL_INT)
if (imask & (HC_ATL_INT | HC_SOT_INT))
do_atl_int(usb_hcd);

if (imask & HC_INTL_INT)
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/usb/host/isp1760-hcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ void deinit_kmem_cache(void);

#define HC_INTERRUPT_ENABLE 0x314
#define INTERRUPT_ENABLE_MASK (HC_INTL_INT | HC_ATL_INT | HC_EOT_INT)
#define INTERRUPT_ENABLE_SOT_MASK (HC_INTL_INT | HC_SOT_INT | HC_EOT_INT)

#define HC_ISO_INT (1 << 9)
#define HC_ATL_INT (1 << 8)
Expand Down

0 comments on commit 195dbec

Please sign in to comment.