[U-Boot] [PATCH v2 0/80] dm: Add USB support

Simon Glass sjg at chromium.org
Wed Mar 25 19:21:48 CET 2015


This series adds 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.

With the RFC series, only USB controllers had a real driver model device.
USB devices (including the hub in the controller) were not modelled as driver
model devices.

While this was expedient, and produced much fewer patches, it is not a
long-term solution. Also, since then, driver model Ethernet support (which
USB can use) has been merged to u-boot-dm/next. It seems better to bite the
bullet and do a full conversion.

Unfortunately this results in a very large series. It includes:

- USB uclass
- USB hub uclass
- Adjustments to make USB keyboard, Ethernet and storage continue to work
- Sandbox USB emulation support
- Sandbox USB emulations for flash and hub devices
- A reasonable set of tests
- EHCI and XHCI support (not OHCI)
- Conversion of Tegra and Exynos drivers to driver model
- Adjustments to make the 'usb' command operate as expected
- README describing how USB works with driver model

Both EHCI and XHCI needed a little bit of refactoring before they are
converted to driver model - e.g. removal of weak fuctions and splitting up
the init code.

This series includes patches to remove the non-driver-model code for Exynos
and Tegra, to be applied once everything is stable. For now it is convenient
to be able to compare the two options.

This series does not change how USB is started up. The 'usb start' command
scans the buses as before, and takes just as long. Once it has started you
can use 'dm tree' to see the tree structure of the USB bus, although 'usb
tree' provides a better view. It is unclear how we could implement lazy init
for USB given the long time it takes to probe the bus.

A README is provided to describe how USB works under driver model.

This series is available at u-boot-dm/usb-working.

Changes in v2:
- Rewrite and expand series to support driver model fully

Simon Glass (80):
  linker_lists: Add a function to access a linker list entry
  sandbox: Fix comment for os_open()
  dm: test: bus: Use a local variable to simplify code
  dm: exynos: snow: Move the keyboard to I2C
  dm: core: Support allocating driver-private data for DMA
  dm: core: Convert driver_bind() to use const
  dm: core: Rename driver data function to dev_get_driver_data()
  dm: core: Mark device as active before calling uclass probe() methods
  dm: core: Add device children and sibling functions
  dm: gpio: Add an implementation for gpio_get_number()
  dm: usb: Add a uclass for USB controllers
  dm: usb: Adjust usb command to prepare for driver model
  dm: usb: Adjust usb_alloc_new_device() to return an error
  dm: usb: Convert 'usb' command to support driver model
  dm: usb: Drop the legacy USB init sequence
  dm: usb: Refactor port resets
  dm: usb: Move descriptor setup code into its own function
  dm: usb: Split out more code from usb_new_device()
  dm: usb: Complete the splitting up of usb_new_device()
  dm: usb: Convert core usb.c file to support driver model
  dm: usb: Split hub detection into its own function
  dm: usb: Add driver model support for hubs
  dm: usb: Move USB storage definitions to usb_defs.h
  dm: usb: Fix type problems in usb_stor_get_info()
  dm: usb: Simply device finding code in usb_storage
  dm: usb: Adjust usb_storage to work with sandbox
  dm: usb: Move storage device scanning into its own function
  dm: usb: Convert usb_storage to driver model
  dm: usb: Move all the EHCI weak functions together and declare them
  dm: usb: Pass EHCI controller pointer to ehci_get_port_speed()
  dm: usb: Allow ECHI to hold private data for the controller
  dm: usb: tegra: Store the controller type explicitly
  dm: usb: Pass EHCI controller pointer to ehci_powerup_fixup()
  dm: usb: tegra: Drop use of global controller variable
  dm: usb: Pass EHCI controller pointer to ehci_set_usbmode()
  dm: usb: Pass EHCI controller pointer to ehci_get_portsc_register()
  dm: usb: ehci: Use a function to find the controller from struct
    udevice
  dm: usb: Refactor EHCI init
  dm: usb: Drop the EHCI weak functions
  dm: usb: Change ehci_reset() to use a pointer
  dm: usb: Add driver model support to EHCI
  dm: usb: Allow USB drivers to be declared and auto-probed
  dm: usb: Bind generic USB devices when there is no driver
  dm: usb: Allow setting up a USB controller as a device/gadget
  dm: usb: Split out the keyboard probe into its own function
  dm: usb: Support driver model with USB keyboards
  dm: usb: tegra: Add vbus GPIOs for nyan
  dm: usb: Move struct usb_string to a common place
  dm: usb: sandbox: Add a uclass for USB device emulation
  dm: usb: sandbox: Reset emulation devices in usb stop()
  dm: usb: sandbox: Add an emulator for USB flash devices
  dm: usb: sandbox: Add an emulator for USB hub emulation
  dm: usb: sandbox: Add a driver for sandbox
  dm: usb: dts: sandbox: Add some sample USB devices to sandbox
  dm: usb: Add support for USB ethernet devices with driver model
  dm: usb: exynos: Add driver model support to exynos EHCI
  dm: usb: tegra: Remove the port_addr_clear_csc variable
  dm: usb: tegra: Tidy up error handling and a static function
  dm: usb: tegra: Move most of init/uninit into a function
  dm: usb: tegra: Add driver model support to tegra EHCI
  dm: usb: xhci: Use a function to get xhci_ctrl
  dm: usb: xhci: Use explicit parameters for xhci_alloc_virt_device()
  dm: usb: xhci: Use explicit parameters for
    xhci_setup_addressable_virt_dev()
  dm: usb: xhci: Factor out common init/uninit
  dm: usb: Support driver model in XHCI
  dm: usb: Rename the XHCI HCD to U-Boot
  dm: usb: exynos: Adjust XHCI driver to support driver model
  dm: usb: exynos: Use driver model for USB
  dm: usb: exynos: Enable both USB ports on snow
  dm: usb: exynos: Enable both EHCI and XHCI on snow
  dm: usb: tegra: Move to driver model for USB
  dm: usb: Add a generic descriptor struct
  dm: usb: Tidy up pipe value decoding
  dm: usb: sandbox: Enable USB
  dm: test: Correct printf() output nit in 'dm uclass'
  dm: test: Allow 'dm test' to select a particular test to run
  dm: usb: Add tests for the USB uclass
  dm: usb: tegra: Drop legacy USB code
  dm: usb: exynos: Drop legacy USB code
  dm: usb: Add a README for driver model

 Makefile                                |   1 +
 arch/arm/cpu/armv7/exynos/Kconfig       |   3 +
 arch/arm/dts/exynos5250-snow.dts        |   5 +-
 arch/arm/dts/tegra124-nyan-big.dts      |   2 +
 arch/arm/mach-tegra/Kconfig             |   3 +
 arch/sandbox/dts/sandbox.dts            |  40 ++
 board/genesi/mx51_efikamx/efikamx-usb.c |   4 +-
 board/nvidia/common/board.c             |   1 -
 common/cmd_usb.c                        | 198 ++++++++--
 common/usb.c                            | 277 ++++++++------
 common/usb_hub.c                        | 194 ++++++++--
 common/usb_kbd.c                        | 119 ++++--
 common/usb_storage.c                    | 249 ++++++------
 configs/sandbox_defconfig               |   4 +
 doc/driver-model/usb-info.txt           | 415 ++++++++++++++++++++
 drivers/core/device-remove.c            |   4 +-
 drivers/core/device.c                   |  66 +++-
 drivers/core/lists.c                    |   2 +-
 drivers/gpio/gpio-uclass.c              |  12 +
 drivers/i2c/s3c24x0_i2c.c               |   2 +-
 drivers/i2c/tegra_i2c.c                 |   6 +-
 drivers/usb/Kconfig                     |  16 +
 drivers/usb/emul/Kconfig                |   8 +
 drivers/usb/emul/Makefile               |  10 +
 drivers/usb/emul/sandbox_flash.c        | 423 +++++++++++++++++++++
 drivers/usb/emul/sandbox_hub.c          | 303 +++++++++++++++
 drivers/usb/emul/usb-emul-uclass.c      | 263 +++++++++++++
 drivers/usb/eth/usb_ether.c             |  52 ++-
 drivers/usb/gadget/ci_udc.c             |   4 +
 drivers/usb/host/Makefile               |   5 +
 drivers/usb/host/ehci-exynos.c          | 127 +++----
 drivers/usb/host/ehci-faraday.c         | 112 +++---
 drivers/usb/host/ehci-hcd.c             | 379 ++++++++++++++-----
 drivers/usb/host/ehci-mx5.c             |  12 +
 drivers/usb/host/ehci-tegra.c           | 288 +++++++-------
 drivers/usb/host/ehci.h                 |  47 +++
 drivers/usb/host/usb-sandbox.c          | 117 ++++++
 drivers/usb/host/usb-uclass.c           | 645 ++++++++++++++++++++++++++++++++
 drivers/usb/host/xhci-exynos5.c         | 106 +++---
 drivers/usb/host/xhci-mem.c             |  24 +-
 drivers/usb/host/xhci-ring.c            |   8 +-
 drivers/usb/host/xhci.c                 | 312 ++++++++++++---
 drivers/usb/host/xhci.h                 |  31 +-
 drivers/usb/musb-new/musb_uboot.c       |   4 +-
 include/configs/sandbox.h               |   2 +
 include/configs/snow.h                  |   2 +
 include/dm/device-internal.h            |   2 +-
 include/dm/device.h                     |  51 ++-
 include/dm/test.h                       |   7 +-
 include/dm/uclass-id.h                  |   5 +
 include/fdtdec.h                        |   5 -
 include/linker_lists.h                  |  10 +
 include/linux/usb/ch9.h                 |  18 +
 include/linux/usb/gadget.h              |  13 -
 include/os.h                            |   2 +-
 include/usb.h                           | 494 +++++++++++++++++++++++-
 include/usb_defs.h                      |  68 +++-
 lib/fdtdec.c                            |   5 -
 test/dm/Makefile                        |   1 +
 test/dm/bus.c                           |  16 +-
 test/dm/cmd_dm.c                        |  13 +-
 test/dm/test-dm.sh                      |   3 +
 test/dm/test-main.c                     |   7 +-
 test/dm/test-uclass.c                   |   3 +-
 test/dm/test.dts                        |  41 ++
 test/dm/usb.c                           |  50 +++
 66 files changed, 4807 insertions(+), 914 deletions(-)
 create mode 100644 doc/driver-model/usb-info.txt
 create mode 100644 drivers/usb/emul/Kconfig
 create mode 100644 drivers/usb/emul/Makefile
 create mode 100644 drivers/usb/emul/sandbox_flash.c
 create mode 100644 drivers/usb/emul/sandbox_hub.c
 create mode 100644 drivers/usb/emul/usb-emul-uclass.c
 create mode 100644 drivers/usb/host/usb-sandbox.c
 create mode 100644 drivers/usb/host/usb-uclass.c
 create mode 100644 test/dm/usb.c

-- 
2.2.0.rc0.207.ga3a616c



More information about the U-Boot mailing list