Patchwork [U-Boot,v5,1/4] usb: hub: make minimum power-on delay configurable

login
register
mail settings
Submitter Kuo-Jung Su
Date May 9, 2013, 3:20 a.m.
Message ID <1368069645-14582-2-git-send-email-dantesu@gmail.com>
Download mbox | patch
Permalink /patch/242701/
State Superseded
Delegated to: Marek Vasut
Headers show

Comments

Kuo-Jung Su - May 9, 2013, 3:20 a.m.
From: Kuo-Jung Su <dantesu@faraday-tech.com>

This patch makes the minimum power-on delay for USB HUB
become configurable. The original design waits at least
100 msec here, but some EHCI controlers(e.g. Faraday EHCI)
are known to require much longer delay interval.

NOTE:
The minimal delay is still 100 msec, a small value defined
in CONFIG_USB_HUB_MIN_POWER_ON_DELAY would be automatically
justified in common/usb_hub.c.

Signed-off-by: Kuo-Jung Su <dantesu@faraday-tech.com>
CC: Marek Vasut <marex@denx.de>
---
Changes for v5:
   - Split up from Faraday EHCI patch
   - Replace the Faraday EHCI ifdef for the long delay
     in usb_hub_configure() with the new configuration option:
     USB_HUB_MIN_POWER_ON_DELAY, which is used in usb_hub_power_on()
     to control the minimum usb hub power-on delay.

Changes for v2 - v4:
   - See 'usb: ehci: add Faraday USB 2.0 EHCI support'

 README           |    3 +++
 common/usb_hub.c |    8 +++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

--
1.7.9.5
Marek Vasut - May 10, 2013, 11:41 a.m.
Dear Kuo-Jung Su,

> From: Kuo-Jung Su <dantesu@faraday-tech.com>
> 
> This patch makes the minimum power-on delay for USB HUB
> become configurable. The original design waits at least
> 100 msec here, but some EHCI controlers(e.g. Faraday EHCI)
> are known to require much longer delay interval.
> 
> NOTE:
> The minimal delay is still 100 msec, a small value defined
> in CONFIG_USB_HUB_MIN_POWER_ON_DELAY would be automatically
> justified in common/usb_hub.c.
> 
> Signed-off-by: Kuo-Jung Su <dantesu@faraday-tech.com>
> CC: Marek Vasut <marex@denx.de>
> ---
> Changes for v5:
>    - Split up from Faraday EHCI patch
>    - Replace the Faraday EHCI ifdef for the long delay
>      in usb_hub_configure() with the new configuration option:
>      USB_HUB_MIN_POWER_ON_DELAY, which is used in usb_hub_power_on()
>      to control the minimum usb hub power-on delay.
> 
> Changes for v2 - v4:
>    - See 'usb: ehci: add Faraday USB 2.0 EHCI support'
> 
>  README           |    3 +++
>  common/usb_hub.c |    8 +++++++-
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/README b/README
> index 0d37d56..c70a59b 100644
> --- a/README
> +++ b/README
> @@ -1244,6 +1244,9 @@ The following options need to be configured:
>  		CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
>  		txfilltuning field in the EHCI controller on reset.
> 
> +		CONFIG_USB_HUB_MIN_POWER_ON_DELAY defines the minimum
> +		interval for usb hub power-on delay.(minimum 100msec)
> +
>  - USB Device:
>  		Define the below if you wish to use the USB console.
>  		Once firmware is rebuilt from a serial console issue the
> diff --git a/common/usb_hub.c b/common/usb_hub.c
> index b5eeb62..0db3530 100644
> --- a/common/usb_hub.c
> +++ b/common/usb_hub.c
> @@ -61,6 +61,12 @@
>  #define USB_HUB_DEBUG	0
>  #endif
> 
> +#if CONFIG_USB_HUB_MIN_POWER_ON_DELAY > 100
> +# define USB_HUB_MIN_POWER_ON_DELAY	CONFIG_USB_HUB_MIN_POWER_ON_DELAY
> +#else
> +# define USB_HUB_MIN_POWER_ON_DELAY	100
> +#endif

Even better (and easier) solution here would be:

ifndef CONFIG_USB_HUB_MIN_POWER_ON_DELAY
#define CONFIG_USB_HUB_MIN_POWER_ON_DELAY 100
#endif

no ? ;-)

>  #define USB_PRINTF(fmt, args...)	debug_cond(USB_DEBUG, fmt, ##args)
>  #define USB_HUB_PRINTF(fmt, args...)	debug_cond(USB_HUB_DEBUG, fmt,
> ##args)
> 
> @@ -121,7 +127,7 @@ static void usb_hub_power_on(struct usb_hub_device
> *hub) }
> 
>  	/* Wait at least 100 msec for power to become stable */
> -	mdelay(max(pgood_delay, (unsigned)100));
> +	mdelay(max(pgood_delay, USB_HUB_MIN_POWER_ON_DELAY));
>  }
> 
>  void usb_hub_reset(void)
> --
> 1.7.9.5

Best regards,
Marek Vasut
Kuo-Jung Su - May 13, 2013, 1:11 a.m.
2013/5/10 Marek Vasut <marex@denx.de>:
> Dear Kuo-Jung Su,
>
>> From: Kuo-Jung Su <dantesu@faraday-tech.com>
>>
>> This patch makes the minimum power-on delay for USB HUB
>> become configurable. The original design waits at least
>> 100 msec here, but some EHCI controlers(e.g. Faraday EHCI)
>> are known to require much longer delay interval.
>>
>> NOTE:
>> The minimal delay is still 100 msec, a small value defined
>> in CONFIG_USB_HUB_MIN_POWER_ON_DELAY would be automatically
>> justified in common/usb_hub.c.
>>
>> Signed-off-by: Kuo-Jung Su <dantesu@faraday-tech.com>
>> CC: Marek Vasut <marex@denx.de>
>> ---
>> Changes for v5:
>>    - Split up from Faraday EHCI patch
>>    - Replace the Faraday EHCI ifdef for the long delay
>>      in usb_hub_configure() with the new configuration option:
>>      USB_HUB_MIN_POWER_ON_DELAY, which is used in usb_hub_power_on()
>>      to control the minimum usb hub power-on delay.
>>
>> Changes for v2 - v4:
>>    - See 'usb: ehci: add Faraday USB 2.0 EHCI support'
>>
>>  README           |    3 +++
>>  common/usb_hub.c |    8 +++++++-
>>  2 files changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/README b/README
>> index 0d37d56..c70a59b 100644
>> --- a/README
>> +++ b/README
>> @@ -1244,6 +1244,9 @@ The following options need to be configured:
>>               CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
>>               txfilltuning field in the EHCI controller on reset.
>>
>> +             CONFIG_USB_HUB_MIN_POWER_ON_DELAY defines the minimum
>> +             interval for usb hub power-on delay.(minimum 100msec)
>> +
>>  - USB Device:
>>               Define the below if you wish to use the USB console.
>>               Once firmware is rebuilt from a serial console issue the
>> diff --git a/common/usb_hub.c b/common/usb_hub.c
>> index b5eeb62..0db3530 100644
>> --- a/common/usb_hub.c
>> +++ b/common/usb_hub.c
>> @@ -61,6 +61,12 @@
>>  #define USB_HUB_DEBUG        0
>>  #endif
>>
>> +#if CONFIG_USB_HUB_MIN_POWER_ON_DELAY > 100
>> +# define USB_HUB_MIN_POWER_ON_DELAY  CONFIG_USB_HUB_MIN_POWER_ON_DELAY
>> +#else
>> +# define USB_HUB_MIN_POWER_ON_DELAY  100
>> +#endif
>
> Even better (and easier) solution here would be:
>
> ifndef CONFIG_USB_HUB_MIN_POWER_ON_DELAY
> #define CONFIG_USB_HUB_MIN_POWER_ON_DELAY 100
> #endif
>
> no ? ;-)
>

Yep, it looks better, I'll have it fixed.

>>  #define USB_PRINTF(fmt, args...)     debug_cond(USB_DEBUG, fmt, ##args)
>>  #define USB_HUB_PRINTF(fmt, args...) debug_cond(USB_HUB_DEBUG, fmt,
>> ##args)
>>
>> @@ -121,7 +127,7 @@ static void usb_hub_power_on(struct usb_hub_device
>> *hub) }
>>
>>       /* Wait at least 100 msec for power to become stable */
>> -     mdelay(max(pgood_delay, (unsigned)100));
>> +     mdelay(max(pgood_delay, USB_HUB_MIN_POWER_ON_DELAY));
>>  }
>>
>>  void usb_hub_reset(void)
>> --
>> 1.7.9.5
>
> Best regards,
> Marek Vasut



--
Best wishes,
Kuo-Jung Su
Kuo-Jung Su - May 13, 2013, 2:07 a.m.
From: Kuo-Jung Su <dantesu@faraday-tech.com>

This patch adds support to both Faraday FUSBH200 and FOTG210,
the differences between Faraday EHCI and standard EHCI are
listed bellow:

1. The PORTSC starts at 0x30 instead of 0x44.
2. The CONFIGFLAG(0x40) is not only un-implemented, and
   also has its address removed.
3. Faraday EHCI is a TDI design, but it doesn't
   compatible with the general TDI implementation
   found at both U-Boot and Linux.
4. The ISOC descriptors differs from standard EHCI in
   several ways. But since U-boot doesn't support ISOC,
   we don't have to worry about that.

The Faraday FOTG210 is an OTG chip which could operate
as either an EHCI Host or a USB Device at a time.

Changes for v6:
   - usb_hub: Simplify CONFIG_USB_HUB_MIN_POWER_ON_DELAY
     default value setup.
   - ehci-hcd: Simplify weak aliased function declaration
   - ehci-hcd: Drop redundant line feed

Changes for v5:
   - Split up EHCI changeset
   - usb_hub: replace the Faraday EHCI ifdef for the long delay
     in usb_hub_configure() with the new configuration option:
     USB_HUB_MIN_POWER_ON_DELAY, which is used in usb_hub_power_on()
     to control the minimum usb hub power-on delay.
   - ehci-faraday: fix the invalid multi-line comment style.
   - gadget-fotg210: coding style cleanup.
   - gadget-fotg210: drop postfix '__iomem' from struct fotg210_regs
   - gadget-fotg210: use permanent delay for hardware reset
   - gadget-fotg210: drop '#ifndef CONFIG_SYS_DCACHE_OFF'
   - gadget-fotg210: drop magic numbers

Changes for v4:
   - Use only macro constants and named bit/mask
   - Use weak-aliased functions for tdi implementation and
     also portsc registers to avoid poluting ehci.h with ifdefs

Changes for v3:
   - Coding Style cleanup.
   - Drop bit fields from c struct.
   - Drop macros for wirtel()/readl(), call them directly.
   - Always insert a blank line between declarations and code.
   - Replace all the infinite wait loop with a timeout.
   - Add '__iomem' to all the declaration of HW register pointers.

Changes for v2:
   - Coding Style cleanup.
   - Use readl(), writel(), clrsetbits_le32() to replace REG() macros.
   - Use structure based hardware registers to replace the macro constants.
   - Replace BIT() with BIT_MASK().
   - echi-faraday: Remove debug codes.

Kuo-Jung Su (4):
  usb: hub: make minimum power-on delay configurable
  usb: ehci: add weak-aliased functions to portsc & tdi
  usb: ehci: add Faraday USB 2.0 EHCI support
  usb: gadget: add Faraday FOTG210 USB gadget support

 README                            |    3 +
 common/usb_hub.c                  |   15 +-
 drivers/usb/gadget/Makefile       |    1 +
 drivers/usb/gadget/fotg210.c      |  948 +++++++++++++++++++++++++++++++++++++
 drivers/usb/gadget/gadget_chips.h |    8 +
 drivers/usb/host/Makefile         |    1 +
 drivers/usb/host/ehci-faraday.c   |  146 ++++++
 drivers/usb/host/ehci-hcd.c       |   96 ++--
 include/usb/fotg210.h             |  364 ++++++++++++++
 include/usb/fusbh200.h            |   61 +++
 10 files changed, 1604 insertions(+), 39 deletions(-)
 create mode 100644 drivers/usb/gadget/fotg210.c
 create mode 100644 drivers/usb/host/ehci-faraday.c
 create mode 100644 include/usb/fotg210.h
 create mode 100644 include/usb/fusbh200.h

--
1.7.9.5

Patch

diff --git a/README b/README
index 0d37d56..c70a59b 100644
--- a/README
+++ b/README
@@ -1244,6 +1244,9 @@  The following options need to be configured:
 		CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
 		txfilltuning field in the EHCI controller on reset.

+		CONFIG_USB_HUB_MIN_POWER_ON_DELAY defines the minimum
+		interval for usb hub power-on delay.(minimum 100msec)
+
 - USB Device:
 		Define the below if you wish to use the USB console.
 		Once firmware is rebuilt from a serial console issue the
diff --git a/common/usb_hub.c b/common/usb_hub.c
index b5eeb62..0db3530 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -61,6 +61,12 @@ 
 #define USB_HUB_DEBUG	0
 #endif

+#if CONFIG_USB_HUB_MIN_POWER_ON_DELAY > 100
+# define USB_HUB_MIN_POWER_ON_DELAY	CONFIG_USB_HUB_MIN_POWER_ON_DELAY
+#else
+# define USB_HUB_MIN_POWER_ON_DELAY	100
+#endif
+
 #define USB_PRINTF(fmt, args...)	debug_cond(USB_DEBUG, fmt, ##args)
 #define USB_HUB_PRINTF(fmt, args...)	debug_cond(USB_HUB_DEBUG, fmt, ##args)

@@ -121,7 +127,7 @@  static void usb_hub_power_on(struct usb_hub_device *hub)
 	}

 	/* Wait at least 100 msec for power to become stable */
-	mdelay(max(pgood_delay, (unsigned)100));
+	mdelay(max(pgood_delay, USB_HUB_MIN_POWER_ON_DELAY));
 }

 void usb_hub_reset(void)