* [U-Boot] [PATCH v3 1/1] tegra: usb: Fix device enumeration problem of USB1
@ 2012-06-20 9:15 Jim Lin
2012-06-20 16:41 ` Stephen Warren
0 siblings, 1 reply; 2+ messages in thread
From: Jim Lin @ 2012-06-20 9:15 UTC (permalink / raw)
To: u-boot
A known hardware issue of USB1 port where bit 1 (connect status
change) of PORTSC register will be set after issuing Port Reset
(like "usb reset" in u-boot command line).
This will be treated as an error and stops later device enumeration.
Therefore we clear that bit after Port Reset in order to proceed
later device enumeration.
Signed-off-by: Jim Lin <jilin@nvidia.com>
---
To reproduce this issue, you can modify board .dts file to set
as the following to build u-boot binary.
"
usb0 = "/usb at c5000000";
usb1 = "/usb at c5008000";
"
Install device on USB1 port (address at 0xc5000000).
And run "usb reset" in u-boot console to enumerate device.
Before adding this patch, we could see problem every time.
After adding, tried 10 times of "usb reset", "usb tree", "usb stop"
, without seeing issue.
Changes in v3:
- Move patch for USB1 controller into ehci_powerup_fixup of ehci-tegra.c
- Update copyright year to 2012
Changes in v2:
- Change config name
- Add a callback function at the end of ehci_submit_root() function
drivers/usb/host/ehci-tegra.c | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index a7e105b..8e516e5 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009 NVIDIA Corporation
+ * Copyright (c) 2009-2012 NVIDIA Corporation
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -29,6 +29,23 @@
#include <asm/errno.h>
#include <asm/arch/usb.h>
+/*
+ * A known hardware issue where Connect Status Change bit of PORTSC register
+ * of USB1 controller will be set after Port Reset.
+ * We have to clear it in order for later device enumeration to proceed.
+ */
+void ehci_powerup_fixup(uint32_t *status_reg, uint32_t *reg)
+{
+ uint32_t my_reg;
+
+ mdelay(50);
+ if (((u32) status_reg & 0xFFFFC000) != TEGRA_USB1_BASE)
+ return;
+ my_reg = ehci_readl(status_reg);
+ /* For EHCI_PS_CSC to be cleared in ehci_hcd.c */
+ if (my_reg & EHCI_PS_CSC)
+ *reg |= EHCI_PS_CSC;
+}
/*
* Create the appropriate control structures to manage
--
1.7.3
nvpublic
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [U-Boot] [PATCH v3 1/1] tegra: usb: Fix device enumeration problem of USB1
2012-06-20 9:15 [U-Boot] [PATCH v3 1/1] tegra: usb: Fix device enumeration problem of USB1 Jim Lin
@ 2012-06-20 16:41 ` Stephen Warren
0 siblings, 0 replies; 2+ messages in thread
From: Stephen Warren @ 2012-06-20 16:41 UTC (permalink / raw)
To: u-boot
On 06/20/2012 03:15 AM, Jim Lin wrote:
> A known hardware issue of USB1 port where bit 1 (connect status
> change) of PORTSC register will be set after issuing Port Reset
> (like "usb reset" in u-boot command line).
> This will be treated as an error and stops later device enumeration.
>
> Therefore we clear that bit after Port Reset in order to proceed
> later device enumeration.
>
> Signed-off-by: Jim Lin <jilin@nvidia.com>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
But a couple of nits below,
> diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
> +/*
> + * A known hardware issue where Connect Status Change bit of PORTSC register
> + * of USB1 controller will be set after Port Reset.
> + * We have to clear it in order for later device enumeration to proceed.
> + */
It might be worth adding a note in that comment saying that this
overrides a weak symbol in ehci-hcd.c so that people know where it's called.
> +void ehci_powerup_fixup(uint32_t *status_reg, uint32_t *reg)
> +{
> + uint32_t my_reg;
I would rename this variable just "reg"; the variable doesn't belong to
a person, and names with "my" in just make me cringe.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-06-20 16:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-20 9:15 [U-Boot] [PATCH v3 1/1] tegra: usb: Fix device enumeration problem of USB1 Jim Lin
2012-06-20 16:41 ` Stephen Warren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox