Simon Glass [Wed, 25 Mar 2015 18:23:00 +0000 (12:23 -0600)]
dm: usb: Add a generic descriptor struct
This is useful for creating lists of descriptors, and is better than using
void * for this purpose.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:58 +0000 (12:22 -0600)]
dm: usb: exynos: Enable both EHCI and XHCI on snow
Since we can support both controllers now, enable this in the device tree.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:57 +0000 (12:22 -0600)]
dm: usb: exynos: Enable both USB ports on snow
Switch snow over to use both EHCI and XHCI at the same time.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:56 +0000 (12:22 -0600)]
dm: usb: exynos: Use driver model for USB
Convert Exynos boards over to use driver model for USB. This does not remove
any unnecessary code so far.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:55 +0000 (12:22 -0600)]
dm: usb: exynos: Adjust XHCI driver to support driver model
Support driver model in the exynos XHCI driver.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:54 +0000 (12:22 -0600)]
dm: usb: Rename the XHCI HCD to U-Boot
This should be "U-Boot", not "u-boot".
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:53 +0000 (12:22 -0600)]
dm: usb: Support driver model in XHCI
Add driver model support in the XHCI support code so that it can be used by
XHCI USB drivers.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:52 +0000 (12:22 -0600)]
dm: usb: xhci: Factor out common init/uninit
Since driver model will want to use most of the same code for XHCI init
and uninit, put it in a separate function.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:51 +0000 (12:22 -0600)]
dm: usb: xhci: Use explicit parameters for xhci_setup_addressable_virt_dev()
This function should not be delving into struct usb_device. Pass in the
parameters it needs directly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:50 +0000 (12:22 -0600)]
dm: usb: xhci: Use explicit parameters for xhci_alloc_virt_device()
This function should not be delving into struct usb_device. Pass in the
parameters it needs directly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:49 +0000 (12:22 -0600)]
dm: usb: xhci: Use a function to get xhci_ctrl
Rather than getting this directly from struct usb_device, call a function
to obtain it. This will make it possible for driver model to provide it
another way.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:48 +0000 (12:22 -0600)]
dm: usb: tegra: Add driver model support to tegra EHCI
Update this driver with driver model support for USB.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:47 +0000 (12:22 -0600)]
dm: usb: tegra: Move most of init/uninit into a function
We want to use mostly the same init and uninit code for driver model, so move
the common part into two functions.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:46 +0000 (12:22 -0600)]
dm: usb: tegra: Tidy up error handling and a static function
Try to return useful error numbers where possible. Also avoid swallowing
an error number when it is returned by a called function.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:45 +0000 (12:22 -0600)]
dm: usb: tegra: Remove the port_addr_clear_csc variable
This variable is a bit of a hack. We can obtain the same information from
the normal device config. This will fit better with driver model, where
global variables are best avoided.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:44 +0000 (12:22 -0600)]
dm: usb: exynos: Add driver model support to exynos EHCI
Update this driver with driver model support for USB.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:43 +0000 (12:22 -0600)]
dm: usb: Add support for USB ethernet devices with driver model
Add support for scanning USB etghernet devices with driver model. This mostly
involves scanning all buses since device numbering is not unique across
buses.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:42 +0000 (12:22 -0600)]
dm: usb: dts: sandbox: Add some sample USB devices to sandbox
These allow basic testing of the USB functionality within sandbox.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:41 +0000 (12:22 -0600)]
dm: usb: sandbox: Add a driver for sandbox
This driver supports using emulation devices to provide a USB bus within
sandbox.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:40 +0000 (12:22 -0600)]
dm: usb: sandbox: Add an emulator for USB hub emulation
All USB controllers need a root hub. Add a sandbox emulation for this so
that we can add USB devices to sandbox.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:39 +0000 (12:22 -0600)]
dm: usb: sandbox: Add an emulator for USB flash devices
This emulator supports USB enumeration and allows a local file to be provided
as the contents of the emulated flash stick. U-Boot can then use the file as
it would a normal device, with all access passing through the usb_stor layer
and the USB stack.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:38 +0000 (12:22 -0600)]
dm: usb: sandbox: Reset emulation devices in usb stop()
These devices must have their addresses removed ready for the next USB
bus enumeration. Add this logic to usb_stop().
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:37 +0000 (12:22 -0600)]
dm: usb: sandbox: Add a uclass for USB device emulation
With sandbox we want to be able to emulate USB devices so that we can test
the USB stack. Add a uclass to support this. It implements the same
operations as a normal USB device driver, but in this case passes them on
to an emulation driver.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:36 +0000 (12:22 -0600)]
dm: usb: Move struct usb_string to a common place
This is needed for sandbox USB device emulation, so move it to a place
where it can be found by things other than gadgets.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:35 +0000 (12:22 -0600)]
dm: usb: tegra: Add vbus GPIOs for nyan
These are needed to enable the USB bus (although not sufficient since it
still does not work).
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:34 +0000 (12:22 -0600)]
dm: usb: Support driver model with USB keyboards
Allow USB keyboards to work with driver model. The main difference is that
we can have multiple buses (each with its own device numbering) and each
bus must be scanned.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:33 +0000 (12:22 -0600)]
dm: usb: Split out the keyboard probe into its own function
Before adding driver model support, split out code from this over-long
function.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:32 +0000 (12:22 -0600)]
dm: usb: Allow setting up a USB controller as a device/gadget
Some controllers support OTG (on-the-go) where they can operate as either
host or device. The gadget layer in U-Boot supports this.
While this layer does not interact with driver model, we can provide a
function which sets up the controller in the correct way. This way the code
at least builds (although it likely will not work).
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:31 +0000 (12:22 -0600)]
dm: usb: Bind generic USB devices when there is no driver
At present USB devices with no driver model driver cannot be seen in the
device list, and we fail to set them up correctly. This means they cannot
be used.
While having real drivers that support driver model for all USB devices
is the eventual goal, we are not there yet.
As a stop-gap, add a generic USB driver which is bound when we do not have
a real driver. This allows the device to be set up and shown on the bus.
It also allows ad-hoc code (such as usb_ether) to find these devices and
set them up.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:30 +0000 (12:22 -0600)]
dm: usb: Allow USB drivers to be declared and auto-probed
USB devices in U-Boot are currently probed only after all devices have
been enumerated. Each type of device is probed by custom code, e.g.:
- USB storage
- Keyboard
- Ethernet
With driver model this approach doesn't work very well. We could build
a picture of the bus and then go back and add the devices later, but
this means that the data structures are incomplete for quite a while.
It also does not follow the model of being able to bind a device when we
discover it.
We would prefer to have devices automatically be bound as the device is
enumerated. This allows us to attach drivers to particular USB classes
or product/vendor IDs. This is the method used by Linux.
Add the required #defines from Linux, a way of declaring a USB driver and
the logic to locate the correct driver given the USB device's descriptors.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:29 +0000 (12:22 -0600)]
dm: usb: Add driver model support to EHCI
Add a way for EHCI controller drivers to support driver model. Drivers can
call ehci_register() to register themselves in their probe() methods.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:28 +0000 (12:22 -0600)]
dm: usb: Change ehci_reset() to use a pointer
The index cannot be used with driver model, and isn't needed anyway. Change
the parameter to a pointer.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:27 +0000 (12:22 -0600)]
dm: usb: Drop the EHCI weak functions
These are a pain with driver model because we might have different EHCI
drivers which want to implement them differently. Now that they use
consistent function signatures, we can in good conscience move them to
a struct.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Fix non-driver-model EHCI to set up the EHCI operations correctly:
Signed-off-by: Tom Rini <trini@konsulko.com>
Simon Glass [Wed, 25 Mar 2015 18:22:26 +0000 (12:22 -0600)]
dm: usb: Refactor EHCI init
Move the bulk of the code in usb_lowlevel_init() into a separate function
which will also be used by driver model. Keep the CONFIG options out of
this function by providing a tweak flag for Faraday. We need to avoid using
CONFIG options in driver model code where possible, since it makes it
impossible to use multiple controllers in that code where they have
different options.
The CONFIG_EHCI_HCD_INIT_AFTER_RESET option is also kept out of the
common init function. With driver model the controller will be able to
perform this extra init itself after registering with the EHCI layer.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:25 +0000 (12:22 -0600)]
dm: usb: ehci: Use a function to find the controller from struct udevice
With driver model we want to remove the controller pointer in struct udevice
and use driver model data structures instead. To prepare for this, move
access to this field to a function which can provide a different
implementation for driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:24 +0000 (12:22 -0600)]
dm: usb: Pass EHCI controller pointer to ehci_get_portsc_register()
Adjust this function so that it is passed an EHCI controller pointer so that
implementations can look up their controller. This makes the weak functions
use a consistent API.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:23 +0000 (12:22 -0600)]
dm: usb: Pass EHCI controller pointer to ehci_set_usbmode()
Adjust this function so that it is passed an EHCI controller pointer so that
implementations can look up their controller. This makes the weak functions
use a consistent API.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:22 +0000 (12:22 -0600)]
dm: usb: tegra: Drop use of global controller variable
We don't need this anymore, so adjust the code to avoid using it.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:21 +0000 (12:22 -0600)]
dm: usb: Pass EHCI controller pointer to ehci_powerup_fixup()
Adjust this function so that it is passed an EHCI controller pointer so that
implementations can look up their controller.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:20 +0000 (12:22 -0600)]
dm: usb: tegra: Store the controller type explicitly
At present the tegra driver uses a separate pointer to know which controller
type is in use. This works because only one controller type is used at a
time.
With driver model we want to make the controller state hermetic in the sense
that it is not necessary to look elsewhere to know the controller type. This
will permit a controller to implement the EHCI weak functions without
reference to global data structures.
To achieve this, define an enum for the controller type and store it with
the information on each EHCI controller.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:19 +0000 (12:22 -0600)]
dm: usb: Allow ECHI to hold private data for the controller
Add a private data pointer that clients of EHCI can use to access their
private information. This establishes a link between struct ehci_ctrl and
its associated controller data structure.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:18 +0000 (12:22 -0600)]
dm: usb: Pass EHCI controller pointer to ehci_get_port_speed()
Adjust this function so that it is passed an EHCI controller pointer so that
implementations can look up their controller.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:17 +0000 (12:22 -0600)]
dm: usb: Move all the EHCI weak functions together and declare them
Put these at the top of the file so they are in one place. Also add function
prototypes to the header file to avoid call site mismatches.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:16 +0000 (12:22 -0600)]
dm: usb: Convert usb_storage to driver model
Add support for scanning USB storage devices with driver model. This mostly
involves adding a USB device ID for storage devices.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:15 +0000 (12:22 -0600)]
dm: usb: Move storage device scanning into its own function
The usb_stor_scan() function is quite long, so split out the code that scans
each device into its own function. Also, rather than setting up the block
device list once at the start, set it up as each device is scanned. This
makes it possible to use this code from driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Thu, 16 Apr 2015 23:27:34 +0000 (17:27 -0600)]
Revert "usb_storage : scan all interfaces to find a storage device"
This reverts commit
cd749658d5994978579628a6333e5c2a6c8ec632.
The conflicts with this commit are hard for me to figure out. I will re-apply
it later.
Simon Glass [Wed, 25 Mar 2015 18:22:14 +0000 (12:22 -0600)]
dm: usb: Adjust usb_storage to work with sandbox
With a few tweaks we can compile this code with sandbox and enable testing
of the USB storage layer.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:13 +0000 (12:22 -0600)]
dm: usb: Simply device finding code in usb_storage
The for() loop is not needed since the value is immediately accessible.
Use this instead to simplify the code.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:12 +0000 (12:22 -0600)]
dm: usb: Fix type problems in usb_stor_get_info()
This function assumes that unsigned long is 32-bits wide, but it is not
on 64-bit machines. Use the correct type, and add a few debug() lines also.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:11 +0000 (12:22 -0600)]
dm: usb: Move USB storage definitions to usb_defs.h
These are better off in a header file so they can be used by other code (e.g.
the sandbox USB storage emulator).
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:10 +0000 (12:22 -0600)]
dm: usb: Add driver model support for hubs
Adjust the existing hub code to support driver model, and add a USB driver
for hubs.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:09 +0000 (12:22 -0600)]
dm: usb: Split hub detection into its own function
Split out the hub detection logic so it can be used by driver model. Also
adjust the code to return errors correctly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:08 +0000 (12:22 -0600)]
dm: usb: Convert core usb.c file to support driver model
Add the required #ifdefs and remove unwanted data structures so that the
USB uclass will be able to use this file.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:07 +0000 (12:22 -0600)]
dm: usb: Complete the splitting up of usb_new_device()
This function now calls usb_setup_device() to set up the device and
usb_hub_probe() to check if it is a hub. The XHCI special case is now a
parameter to usb_setup_device(). The latter will be used by the USB uclass
when it is added, since it does not rely on any CONFIGs or legacy data
structures.
Signed-off-by: Simon Glass <sjg@chromium.org>
Bug-fixes for descriptor reading and usb_new_device() return value
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Tested-by: Tom Rini <trini@konsulko.com>
Simon Glass [Wed, 25 Mar 2015 18:22:06 +0000 (12:22 -0600)]
dm: usb: Split out more code from usb_new_device()
Move the code that sets up the device with a new address into its own
function, usb_prepare_device().
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:05 +0000 (12:22 -0600)]
dm: usb: Move descriptor setup code into its own function
usb_new_device() is far too long and does far too much. As a first step, move
the code that does initial setup and reads a descriptor into its own function
called usb_setup_descriptor().
For XHCI the init order is different - we set up the device but don't
actually read the descriptor until after we set an address. Support this
option as a parameter to usb_setup_descriptor().
Avoid changing this torturous code more than necessary to make it easy to
review.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:04 +0000 (12:22 -0600)]
dm: usb: Refactor port resets
Move the port reset code into its own function. Rename usb_hub_reset() to
indicate that is is now a legacy function.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:03 +0000 (12:22 -0600)]
dm: usb: Drop the legacy USB init sequence
This CONFIG is not used anywhere in U-Boot, so drop it.
Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:02 +0000 (12:22 -0600)]
dm: usb: Convert 'usb' command to support driver model
Adjust this command to work with the new driver model uclass. It needs to
iterate through multiple independent controllers to find hubs, and work
through their children recursively in a different way. Otherwise the
functionality is much the same.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:01 +0000 (12:22 -0600)]
dm: usb: Adjust usb_alloc_new_device() to return an error
This function returns NULL on error at present. Adjust it so that we can
return a real error, as is needed with driver model. Also improve the
error handling in its caller, usb_hub_port_connect_change(), and adjust
the code order to prepare for driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:22:00 +0000 (12:22 -0600)]
dm: usb: Adjust usb command to prepare for driver model
Use 'udev' instead of 'dev' in a few places, reserving 'dev' for driver
model's struct udevice. Also adjust the code in a few minor ways to make
it easier to plumb in driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:59 +0000 (12:21 -0600)]
dm: usb: Add a uclass for USB controllers
Add a uclass that can represent a USB controller. For now we do not create
devices for things attached to the controller. This will be added later.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:58 +0000 (12:21 -0600)]
dm: gpio: Add an implementation for gpio_get_number()
This has a prototype but no implementation. It returns the global GPIO number
given a gpio_desc. It is useful for debugging in some cases.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:57 +0000 (12:21 -0600)]
dm: core: Add device children and sibling functions
Add some utility functions to check for children and for the last sibling in
a device's parent.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:56 +0000 (12:21 -0600)]
dm: core: Mark device as active before calling uclass probe() methods
The uclass pre-probe functions may end up calling back into the device in
some circumstances. This can fail if recursion takes place. Adjust the
ordering so that we mark the device as active early, then retract this
later if needed.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:55 +0000 (12:21 -0600)]
dm: core: Rename driver data function to dev_get_driver_data()
The existing get_get_of_data() function provides access to both the driver's
compatible string and its driver data. However only the latter is actually
useful. Update the interface to reflect this and fix up existing users.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:54 +0000 (12:21 -0600)]
dm: core: Convert driver_bind() to use const
The driver is not modified by driver model, so update driver_bind() to
recognise that.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:53 +0000 (12:21 -0600)]
dm: core: Support allocating driver-private data for DMA
Some driver want to put DMA buffers in their private data. Add a flag
to tell driver model to align driver-private data to a cache boundary so
that DMA will work correctly in this case.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:51 +0000 (12:21 -0600)]
dm: test: bus: Use a local variable to simplify code
Adjust this test to avoid repeating the same code too often.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:50 +0000 (12:21 -0600)]
sandbox: Fix comment for os_open()
This has the wrong #define in the function comment. Fix it.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Simon Glass [Wed, 25 Mar 2015 18:21:49 +0000 (12:21 -0600)]
linker_lists: Add a function to access a linker list entry
Once declared, you cannot access a linker_list entry since you do not have
a symbol name for it. Add llsym() macro to provide this. This avoids
searching for the symbol at run-time based on name.
An example usage is to declare a driver with U_BOOT_DRIVER(), then obtain
a pointer to that driver later.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
Joe Hershberger [Sat, 4 Apr 2015 01:09:46 +0000 (20:09 -0500)]
dm: eth: Provide a way for drivers to manage packet buffers
Some drivers need a chance to manage their receive buffers after the
packet has been handled by the network stack. Add an operation that
will allow the driver to be called in that case.
Reported-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Tested-on: pcduino3
Haikun.Wang@freescale.com [Wed, 1 Apr 2015 03:10:40 +0000 (11:10 +0800)]
dm: spi: Convert Freescale QSPI driver to driver model
Move the Freescale QSPI driver over to driver model.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Signed-off-by: Peng Fan <Peng.Fan@freescale.com>
Tested-by: Peng Fan <Peng.Fan@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
Haikun.Wang@freescale.com [Tue, 24 Mar 2015 14:03:58 +0000 (22:03 +0800)]
dm: spi: Convert Freescale DSPI driver to driver model
Move the Freescale DSPI driver over to driver model.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
Haikun.Wang@freescale.com [Tue, 24 Mar 2015 13:20:40 +0000 (21:20 +0800)]
dm: ls1021a: dts: Add QSPI dts node
Add QSPI controller dts node in ls1021a.dtsi.
Add QSPI slave device dts node in ls1021a-twr.dts and ls1021a-qds.dts.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
Haikun.Wang@freescale.com [Tue, 24 Mar 2015 13:19:23 +0000 (21:19 +0800)]
dm: ls1021a: dts: Update DSPI node to support DM SPI
Update DSPI controller node in ls1021a.dtsi.
Update flash device node in ls1021a-qds.dts.
Ls1021a-twr board doesn't support DSPI, so remove DSPI node
in ls1021a-twr.dts.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
haikun [Tue, 24 Mar 2015 13:16:31 +0000 (21:16 +0800)]
dm: ls1021a: dts: Change address_cells and size_cells from 2 to 1
Change address_cells and size_cells of root node and 'soc' node
from 2 to 1.
We backport ls1021a device tree source files from kernel to u-boot.
Kernel files set address_cells and size_cells to 2 in order to access
more than 4GB space.
But we don't have this requirement now and u-boot fdtdec_get_xxx interfaces
can't support property whose size is 'u64' completely.
So make this change.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
haikun [Wed, 25 Mar 2015 12:23:26 +0000 (20:23 +0800)]
dm: ls1021a: Bring in ls1021a dts files from linux kernel
Bring in required device tree files for ls1021a from Linux.
These are initially unchanged and have a number of pieces not needed by U-Boot.
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
Haikun.Wang@freescale.com [Tue, 24 Mar 2015 13:12:13 +0000 (21:12 +0800)]
dm: arm: Bring in skeleton64 device tree file from Linux
Backport of kernel commits:
7c14f6c719de092d69c81877786e83ce7ae1a860
35faad2a1563b3d4dc983a82ac41033fe053870c
Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Acked-by: Simon Glass <sjg@chromium.org>
Przemyslaw Marczak [Tue, 31 Mar 2015 16:57:18 +0000 (18:57 +0200)]
dm: i2c: add i2c-gpio driver
This commit adds driver model support to software emulated i2c bus driver.
This driver supports kernel-style device tree bindings. Fdt properties in use:
- compatible - "i2c-gpio"
- gpios - data and clock GPIO pin phandles
- delay-us - micro seconds delay between GPIOs toggle operations,
which is 1/4 of I2C speed clock period.
Added:
- Config: CONFIG_DM_I2C_GPIO
- File: drivers/i2c/i2c-gpio.c
- File: doc/device-tree-bindings/i2c/i2c-gpio.txt
Driver base code is taken from: drivers/i2c/soft-i2c.c, changes:
- use "i2c-gpio" naming
- update comments style
- move preprocesor macros into functions
- add device tree support
- add driver model i2c support
- code cleanup,
- add Kconfig entry
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Added braces in i2c_gpio_xfer() to fix style nit:
Signed-off-by: Simon Glass <sjg@chromium.org>
Przemyslaw Marczak [Tue, 31 Mar 2015 16:57:17 +0000 (18:57 +0200)]
Kconfig: i2c: fix help message related to dm i2c
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Przemyslaw Marczak [Tue, 31 Mar 2015 16:57:16 +0000 (18:57 +0200)]
dm: gpio: request list: return the count if requests max_count reached
The function gpio_request_list_by_name_nodev() returned -ENOSPC error,
when the loop count was greater than requested count. This was wrong,
because function should return the requested gpio count, when meets
the call request without errors. Now, the loop ends on requested
max_count.
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:41 +0000 (09:29 -0600)]
i8042: Add keyboard enable logic in kbd_reset()
This code appears to be missing a piece that is needed on some keyboards
to enable the keyboard. Add this in.
This makes the keyboard work correctly on chromebook_link.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:40 +0000 (09:29 -0600)]
sandbox: cros_ec: Add Kconfig for sandbox EC config
Move CONFIG_CROS_EC_SANDBOX to Kconfig.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:39 +0000 (09:29 -0600)]
cros_ec: exynos: Match up device tree with kernel version
The U-Boot device trees are slightly different in a few places. Adjust them
to remove most of the differences. Note that U-Boot does not support the
concept of interrupts as distinct from GPIOs, so this difference remains.
For sandbox, use the same keyboard file as for ARM boards and drop the
host emulation bus which seems redundant.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:38 +0000 (09:29 -0600)]
fdt: Drop LPC compatible string in fdtdec
This is not needed now that we have moved chromebook_link and cros_ec to
driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:37 +0000 (09:29 -0600)]
fdt: cros_ec: Drop compatible string in fdtdec
This is not needed now that we have moved to driver model.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:36 +0000 (09:29 -0600)]
cros_ec: Remove unused cros_ec_board_init() function
Now that driver model handles cros_ec init, we can drop this special code.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:35 +0000 (09:29 -0600)]
exynos: cros_ec: Drop unnecessary init
Since driver model will probe the EC when it is first used, we do not
need to init it explicitly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:34 +0000 (09:29 -0600)]
x86: cros_ec: Drop unnecessary init
Since driver model will probe the EC when it is first used, we do not
need to init it explicitly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:33 +0000 (09:29 -0600)]
sandbox: cros_ec: Drop unnecessary init
Since driver model will probe the EC when it is first used, we do not
need to init it explicitly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:32 +0000 (09:29 -0600)]
cros_ec: Drop unused CONFIG_DM_CROS_EC
Since all supported boards enable this option now, we can remove it along
with the old code.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:31 +0000 (09:29 -0600)]
cros_ec: Reinit the cros_ec device when 'crosec init' is used
This command is supposed to reinit the device. At present with driver
model is does nothing. Implement this feature.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:30 +0000 (09:29 -0600)]
dm: cros_ec: Convert cros_ec LPC driver to driver model
This is the last driver to be converted. It requires an LPC bus and a
special check_version() method.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:29 +0000 (09:29 -0600)]
x86: chromebook_link: dts: Add PCH and LPC devices
The PCH (Platform Controller Hub) is on the PCI bus, so show it as such.
The LPC (Low Pin Count) and SPI bus are inside the PCH, so put these in the
right place also.
Rename the compatible strings to be more descriptive since this board is the
only user. Once we are using driver model fully on x86, these will be
dropped.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:28 +0000 (09:29 -0600)]
dm: x86: Add a uclass for an Low Pin Count (LPC) device
On x86 systems this device is commonly used to provide legacy port access.
It is sort-of a replacement for the old ISA bus.
Add a uclass for this, and allow it to have child devices.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:27 +0000 (09:29 -0600)]
dm: x86: Add a uclass for a Platform Controller Hub
Add a simple uclass for this chip which is often found in x86 systems
where the CPU is a separate device.
The device can have children, so make it scan the device tree for these.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:26 +0000 (09:29 -0600)]
dm: x86: spi: Convert ICH SPI driver to driver model
Convert this driver over to use driver model. Since all x86 platforms use
it, move x86 to use driver model for SPI and SPI flash. Adjust all dependent
code and remove the old x86 spi_init() function.
Note that this does not make full use of the new PCI uclass as yet. We still
scan the bus looking for the device. It should move to finding its details
in the device tree.
Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass [Thu, 26 Mar 2015 15:29:25 +0000 (09:29 -0600)]
dm: sf: Add driver model read/write/erase methods
Permit use of a udevice to talk to SPI flash. Ultimately we would like
to retire the use of 'struct spi_flash' for this purpose, so create the
new API for those who want to move to it.
Signed-off-by: Simon Glass <sjg@chromium.org>
Joe Hershberger [Sun, 22 Mar 2015 22:09:24 +0000 (17:09 -0500)]
net: Improve error handling
Take a pass at plumbing errors through to the users of the network stack
Currently only the start() function errors will be returned from
NetLoop(). recv() tends not to have errors, so that is likely not worth
adding. send() certainly can return errors, but this patch does not
attempt to plumb them yet. halt() is not expected to error.
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Reviewed-by: Simon Glass <sjg@chromium.org>