Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 165033
b: refs/heads/master
c: 56faf0f
h: refs/heads/master
i:
  165031: 3f7a212
v: v3
  • Loading branch information
Jason Wessel authored and Greg Kroah-Hartman committed Sep 23, 2009
1 parent 403222a commit e0e13ac
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 20 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: 093344e1362cbf9525a5da09a565f357d8102f3b
refs/heads/master: 56faf0f98fd53e4a27cec331a3ff6d4aa55b1213
45 changes: 26 additions & 19 deletions trunk/drivers/usb/early/ehci-dbgp.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
#include <asm/pci-direct.h>
#include <asm/fixmap.h>

#ifdef DBGP_DEBUG
# define dbgp_printk printk
#else
static inline void dbgp_printk(const char *fmt, ...) { }
#endif

static struct ehci_caps __iomem *ehci_caps;
static struct ehci_regs __iomem *ehci_regs;
static struct ehci_dbg_port __iomem *ehci_debug;
Expand Down Expand Up @@ -342,6 +348,7 @@ static int __init ehci_reset_port(int port)
u32 delay_time, delay;
int loop;

dbgp_printk("ehci_reset_port %i\n", port);
/* Reset the usb debug port */
portsc = readl(&ehci_regs->port_status[port - 1]);
portsc &= ~PORT_PE;
Expand All @@ -352,14 +359,17 @@ static int __init ehci_reset_port(int port)
for (delay_time = 0; delay_time < HUB_RESET_TIMEOUT;
delay_time += delay) {
dbgp_mdelay(delay);

portsc = readl(&ehci_regs->port_status[port - 1]);
if (!(portsc & PORT_RESET))
break;
}
if (portsc & PORT_RESET) {
/* force reset to complete */
loop = 2;
loop = 100 * 1000;
writel(portsc & ~(PORT_RWC_BITS | PORT_RESET),
&ehci_regs->port_status[port - 1]);
do {
udelay(1);
portsc = readl(&ehci_regs->port_status[port-1]);
} while ((portsc & PORT_RESET) && (--loop > 0));
}
Expand All @@ -375,7 +385,6 @@ static int __init ehci_reset_port(int port)
/* If we've finished resetting, then break out of the loop */
if (!(portsc & PORT_RESET) && (portsc & PORT_PE))
return 0;
}
return -EBUSY;
}

Expand All @@ -384,24 +393,18 @@ static int __init ehci_wait_for_port(int port)
u32 status;
int ret, reps;

for (reps = 0; reps < 3; reps++) {
dbgp_mdelay(100);
for (reps = 0; reps < 300; reps++) {
status = readl(&ehci_regs->status);
if (status & STS_PCD) {
ret = ehci_reset_port(port);
if (ret == 0)
return 0;
}
if (status & STS_PCD)
break;
dbgp_mdelay(1);
}
ret = ehci_reset_port(port);
if (ret == 0)
return 0;
return -ENOTCONN;
}

#ifdef DBGP_DEBUG
# define dbgp_printk early_printk
#else
static inline void dbgp_printk(const char *fmt, ...) { }
#endif

typedef void (*set_debug_port_t)(int port);

static void __init default_set_debug_port(int port)
Expand Down Expand Up @@ -520,7 +523,7 @@ static int __init ehci_setup(void)
return -1;
}

loop = 100000;
loop = 250 * 1000;
/* Reset the EHCI controller */
cmd = readl(&ehci_regs->command);
cmd |= CMD_RESET;
Expand All @@ -540,6 +543,7 @@ static int __init ehci_setup(void)
ctrl |= DBGP_OWNER;
ctrl &= ~(DBGP_ENABLED | DBGP_INUSE);
writel(ctrl, &ehci_debug->control);
udelay(1);

/* Start the ehci running */
cmd = readl(&ehci_regs->command);
Expand All @@ -554,10 +558,13 @@ static int __init ehci_setup(void)
loop = 10;
do {
status = readl(&ehci_regs->status);
} while ((status & STS_HALT) && (--loop > 0));
if (!(status & STS_HALT))
break;
udelay(1);
} while (--loop > 0);

if (!loop) {
dbgp_printk("ehci can be started\n");
dbgp_printk("ehci can not be started\n");
return -1;
}
dbgp_printk("ehci started\n");
Expand Down

0 comments on commit e0e13ac

Please sign in to comment.