
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@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot