[U-Boot] [RFC PATCH 0/7] RFC: dm: Add USB support

Vivek Gautam
2015-02-25T14:07:17Z

Hi Simon,

On Sat, Jan 31, 2015 at 12:34 AM, Simon Glass <sjg@chromium.org> wrote:
> This series adds basic driver model support to USB. The intent is to permit
> the various subsystems (OHCI, EHCI, XHCI) to co-exist and allow any number
> of USB ports of different types. So far the absolute limit on the number
> of USB devices is only slightly relaxed.
>
> Only USB controllers have a real driver model device. USB devices (including
> the hub in the controller) are not modelled as driver model devices. This
> is for two reasons:
>
> - it is easier since we don't need to bind a whole lot of devices when
> scanning
> - the two main USB devices (block devices and Ethernet) don't have driver
> mode support yet anyway, so it would be pointless. However the recent
> network RFC has encouraged me to send this.
>
> The basic approach is to set up the driver model structures in parallel to
> what already exists rather than to replace them. This allows both driver
> model and legacy to be used for USB, although not with the same board.
>
> So far only XHCI is supported. As an example the Exynos XHCI driver is
> converted to driver model.
>
> I would appreciate comments before going further.
>
> Caveats:
> - sandbox code is incomplete and there are no tests
> - 'usb stop' does not remove existing devices (I have not yet settled on
> the best approach)
> - the usb.h changes need to be split correctly into the patches once they
> are final
>
> This series is available at u-boot-dm/usb-working.

Just ran a quick test on smdk5250. I used Below is what i get :

--------------------------------------------------------------------------------------
SMDK5250 # usb start
starting USB...
USBRegister 2000140 NbrPorts 2
Starting the controller
USB XHCI 1.00
0: scanning bus 0 for devices... cannot reset port 1!?
1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
scanning usb for ethernet devices... 0 Ethernet Device(s) found
SMDK5250 # usb start
starting USB...
USB0: scanning bus 0 for devices... BUG: failure at
drivers/usb/host/xhci-mem.c:666/xhci_setup_addressable_virt_dev()!
BUG!
resetting ...
--------------------------------------------------------------------------------------

The first time when "scanning bus 0 for devices... cannot reset port 1!?" comes.
This seems to be smdk issue only which i am looking into currently.

But the second time when i run usb start, the setup itself hits a NULL
pointer it seems.
However just tot of u-boot-dm doesn't give this issue. The device gets detected
when "usb reset" is used after doing a "usb start" first time.

Even with my patch series, i hit a NULL pointer BUG, when doing a "usb reset"

--------------------------------------------------------------------------------------
SMDK5250 # usb reset
resetting USB...
Host not halted after 16000 microseconds.
BUG: failure at drivers/usb/host/xhci-mem.c:83/xhci_ring_free()!
BUG!
resetting ...
--------------------------------------------------------------------------------------
However i could understand why this is coming, since usb_lowlevel_stop()
called in xhci.c; at that time xhci's data structures are not
initialized, and we
hit this BUG.

I will check further on snow.

>
>
> Simon Glass (7):
> dm: usb: Add a uclass for USB controllers
> dm: usb: Support driver model in exynos XHCI
> dm: usb: Adjust users of the USB stack to work with driver model
> dm: usb: WIP sandbox USB implementation
> dm: core: Add a function to get the uclass data for a device
> arm: Show relocated PC/LR in the register dump
> dm: exynos: Enable driver model for snow XHCI
>
> Makefile | 1 +
> arch/arm/lib/interrupts.c | 13 +-
> arch/sandbox/dts/sandbox.dts | 20 +++
> arch/sandbox/include/asm/processor.h | 0
> common/cmd_usb.c | 74 ++++++++---
> common/usb.c | 28 +++--
> common/usb_hub.c | 13 +-
> common/usb_storage.c | 148 +++++++++++++---------
> drivers/core/device.c | 10 ++
> drivers/usb/dev/Makefile | 10 ++
> drivers/usb/dev/sandbox-flash.c | 95 +++++++++++++++
> drivers/usb/dev/sandbox-hub.c | 116 ++++++++++++++++++
> drivers/usb/dev/usb-emul-uclass.c | 16 +++
> drivers/usb/eth/usb_ether.c | 46 +++++--
> drivers/usb/host/Makefile | 5 +
> drivers/usb/host/usb-sandbox.c | 151 +++++++++++++++++++++++
> drivers/usb/host/usb-uclass.c | 227 ++++++++++++++++++++++++++++++++++
> drivers/usb/host/xhci-exynos5.c | 115 +++++++++++++++++-
> drivers/usb/host/xhci.c | 229 ++++++++++++++++++++++++++++-------
> drivers/usb/host/xhci.h | 24 ++++
> include/configs/sandbox.h | 3 +
> include/configs/snow.h | 1 +
> include/dm/device.h | 10 ++
> include/dm/uclass-id.h | 2 +
> include/usb.h | 76 +++++++++++-
> include/usb_defs.h | 14 ++-
> 26 files changed, 1294 insertions(+), 153 deletions(-)
> create mode 100644 arch/sandbox/include/asm/processor.h
> create mode 100644 drivers/usb/dev/Makefile
> create mode 100644 drivers/usb/dev/sandbox-flash.c
> create mode 100644 drivers/usb/dev/sandbox-hub.c
> create mode 100644 drivers/usb/dev/usb-emul-uclass.c
> create mode 100644 drivers/usb/host/usb-sandbox.c
> create mode 100644 drivers/usb/host/usb-uclass.c
>
> --
> 2.2.0.rc0.207.ga3a616c
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot

--
Best Regards
Vivek Gautam
Samsung R&D Institute, Bangalore
India