[U-Boot] [PATCH v2] sunxi: Avoid any assumption between musb gadget and host but fallback to host

Hans de Goede
2015-04-04T14:14:36Z

Hi,

On 04-04-15 16:02, Paul Kocialkowski wrote:
> Le samedi 04 avril 2015 ? 15:48 +0200, Hans de Goede a ?crit :
>> Hi,
>>
>> On 04-04-15 15:42, Paul Kocialkowski wrote:
>>> Le dimanche 29 mars 2015 ? 13:18 +0200, Hans de Goede a ?crit :
>>>> Hi,
>>>>
>>>> On 28-03-15 18:26, Paul Kocialkowski wrote:
>>>>> musb might be used in gadget mode on sunxi, so we don't want to assume anything
>>>>> related to host mode, especially USB keyboard support. Thus, there is no reason
>>>>> to keep USB_KEYBOARD always enabled and in Kconfig: it is much better fit to
>>>>> enable it in the common sunxi config header, when needed (some devices also have
>>>>> no USB support at all).
>>>>>
>>>>> In case gadget mode is not explicitly enabled, this will fallback to host mode.
>>>>>
>>>>> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
>>>>
>>>> Nack, I'm not going to take any patch which removes config USB_KEYBOARD,
>>>> having USB_KEYBOARD always enabled on devices with usb host capability
>>>> causes a significant penalty in boot time, and some people may want to turn
>>>> it off because of that.
>>>
>>> Actually, I said I would give up on this, but there are still parts of
>>> that patch that I need for USB gadget (not related to USB keyboard).
>>>
>>> Regarding USB keyboard, the best solution IMO would be to set it
>>> disabled by default in board/sunxi/Kconfig (both because of the boot
>>> time penality and because it's not relevant when using gadget mode) and
>>> have it enabled individually in each configs/*_defconfig that uses USB
>>> in host mode.
>>
>> We try to offer the best ootb experience with the defconfigs and many
>> users will not have serial consoles attached, so we really want
>> usb-keyboard by default. Actually we can currently already use
>> host mode on ehci and gadget mode on musb and then we still want
>> usb-keyboard and that is how I expect the majority of the boards
>> to eventually be configured ootb.
>
> I hadn't thought of that, it makes sense.
>
>> The only time when we do not want USB_KEYBOARD is when we've no
>> usb hosts at all because that will cause linking errors, this
>> should go away once we move over usb to the device model which
>> will happen soon.
>
> Of course, the best solution would be to have USB keyboard enabled but
> not used at run-time when there is no host available at all.
>
>> I'm happy to take patches you need to enable gadget mode, but I
>> do not think it is a good idea to flip the the default and then
>> add CONFIG_USB_KEYBOARD=y to pretty much every one of our 55
>> defconfig files.
>
> Well, the long way to do it without modifying each board would be to:
> * switch USB_EHCI to Kconfig
> * switch MUSB_HOST and MUSB_GADGET to Kconfig
> * default MUSB_GADGET to n
> * default MUSB_HOST to y if !MUSB_GADGET
> * default USB_KEYBORAD to y if USB_EHCI || MUSB_HOST
>
> That way, we don't have to change the defconfigs and my problem is
> solved. What do you think?
>
> This would also be one more step to eliminating
> CONFIG_SYS_EXTRA_OPTIONS, which is not a bad thing.

This sounds good to me, note there already is a USB_EHCI_HCD
Kconfig which does what you want in drivers/usb/host/Kconfig
(it automatically defines CONFIG_USB_EHCI to keep non converted
boards working).

So step 1 would be a patch moving sunxi over to stop setting
USB_EHCI in CONFIG_SYS_EXTRA_OPTIONS and instead have it use
define USB_ARCH_HAS_HCD and use USB_EHCI_HCD please
set USB_EHCI_HCD by default in board/sunxi/Kconfig like
how we also set a default for e.g. SYS_CLK_FREQ, I think
in the initial patch it should have a default of:
default y
And then later be changed to:
default y if !MUSB_HOST

As for moving MUSB_HOST / GADGET to Kconfig please coordinate
that with Marek.

Regards,

Hans