]> git.sur5r.net Git - u-boot/log
u-boot
9 years agodm: usb: Avoid using USB ethernet with CONFIG_DM_USB and no DM_ETH
Simon Glass [Mon, 6 Jul 2015 22:47:48 +0000 (16:47 -0600)]
dm: usb: Avoid using USB ethernet with CONFIG_DM_USB and no DM_ETH

If driver model is used for Ethernet then USB Ethernet does not build. This
can be made to work with driver model is used for USB also. Add #ifdef logic
to make this clear when building.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Marek Vasut <marex@denx.de>
9 years agodm: usb: Correct the struct usb_driver_entry comment
Simon Glass [Mon, 6 Jul 2015 22:47:47 +0000 (16:47 -0600)]
dm: usb: Correct the struct usb_driver_entry comment

The function documentation is incorrect. Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Marek Vasut <marex@denx.de>
9 years agodm: pci: Add a function to get the BDF for a device
Simon Glass [Mon, 6 Jul 2015 22:47:46 +0000 (16:47 -0600)]
dm: pci: Add a function to get the BDF for a device

It is useful to be able to find the full PCI address (bus, device and
function) for a PCI device. Add a function to provide this.

Adjust the existing code to use this.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: eth: Add driver-model support to the rtl8169 driver
Simon Glass [Mon, 6 Jul 2015 22:47:45 +0000 (16:47 -0600)]
dm: eth: Add driver-model support to the rtl8169 driver

This driver is used by the Intel Minnowmax board. Convert it to driver model
so it can use the new Ethernet implementation.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: pci: Add support for PCI driver matching
Simon Glass [Mon, 6 Jul 2015 22:47:44 +0000 (16:47 -0600)]
dm: pci: Add support for PCI driver matching

At present all PCI devices must be present in the device tree in order to
be used. Many or most PCI devices don't require any configuration other than
that which is done automatically by U-Boot. It is inefficent to add a node
with nothing but a compatible string in order to get a device working.

Add a mechanism whereby PCI drivers can be declared along with the device
parameters they support (vendor/device/class). When no suitable driver is
found in the device tree the list of such devices is consulted to determine
the correct driver. If this also fails, then a generic driver is used as
before.

The mechanism used is very similar to that provided by Linux and the header
file defintions are copied from Linux 4.1.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Joe Hershberger <joe.hershberger@ni.com>
9 years agousb: Update some EHCI driver licenses to use SPDX
Simon Glass [Mon, 6 Jul 2015 22:47:42 +0000 (16:47 -0600)]
usb: Update some EHCI driver licenses to use SPDX

A few drivers still write out the license in full. Fix these.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Marek Vasut <marex@denx.de>
9 years agousb: ehci: Correct a missing hypen in an error message
Simon Glass [Mon, 6 Jul 2015 22:47:41 +0000 (16:47 -0600)]
usb: ehci: Correct a missing hypen in an error message

Add a hyphen to correct the grammar.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: core: Add \n to two dm_warn() messages
Simon Glass [Mon, 6 Jul 2015 22:47:40 +0000 (16:47 -0600)]
dm: core: Add \n to two dm_warn() messages

These should finish with a newline like the others.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agomusb: Add device-model support to the musb-host u-boot glue
Hans de Goede [Wed, 17 Jun 2015 19:33:58 +0000 (21:33 +0200)]
musb: Add device-model support to the musb-host u-boot glue

Add device-model support to the musb-host u-boot glue, note this only
adds device-model support to the musb-core glue code, it does not add
support for device-model to any of the SoC specific musb glue code.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agomusb: Add musb_host_data struct to hold global data
Hans de Goede [Wed, 17 Jun 2015 19:33:57 +0000 (21:33 +0200)]
musb: Add musb_host_data struct to hold global data

Add a musb_host_data struct to hold all the global data host related musb
data. This is a preparation patch for adding device-model support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agomusb: Rename and wrap public functions
Hans de Goede [Wed, 17 Jun 2015 19:33:56 +0000 (21:33 +0200)]
musb: Rename and wrap public functions

Rename and wrap the usb host API public functions, this is a preparation
patch for adding device-model support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agomusb: Update usb-compat to work with struct usb_device without a parent ptr
Hans de Goede [Wed, 17 Jun 2015 19:33:55 +0000 (21:33 +0200)]
musb: Update usb-compat to work with struct usb_device without a parent ptr

When building with CONFIG_DM_USB=y struct usb_device does not have a parent
pointer. This commit adds support to the musb code to deal with this.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agomusb: Allow musb_platform_enable to return an error code
Hans de Goede [Wed, 17 Jun 2015 19:33:54 +0000 (21:33 +0200)]
musb: Allow musb_platform_enable to return an error code

Allow musb_platform_enable to return an error code and propagate it up to
usb_lowlevel_init().

This allows moving the checks for an external vbus being present to be
moved from platform_init to platform_enable, so that the user can unplug a
charger, plug in a host adapter with a usb-device, do a "usb reset" and
have things working.

This also allows adding a check for the id-pin to platform_enable, so that
it can short circuit the 1s delay in usb_lowlevel_init() when no host cable
is plugged in and thus waiting for a device to show up is useless.

Note that all the changes to code shared with the kernel are wrapped in
the kernel.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Do not assume that first child is always a hub
Hans de Goede [Wed, 17 Jun 2015 19:33:53 +0000 (21:33 +0200)]
dm: usb: Do not assume that first child is always a hub

On some single port (otg) controllers there is no emulated root hub, so
the first child (if any) may be one of: UCLASS_MASS_STORAGE,
UCLASS_USB_DEV_GENERIC or UCLASS_USB_HUB.

All three of these (and in the future others) are suitable for our
purposes, remove the check for the device being a hub, and add a check to
deal with the fact that there may be no child-dev.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Allow usb host drivers to implement usb_reset_root_port
Hans de Goede [Wed, 17 Jun 2015 19:33:52 +0000 (21:33 +0200)]
dm: usb: Allow usb host drivers to implement usb_reset_root_port

Allow usb uclass host drivers to implement usb_reset_root_port, this is
used by single port usb hosts which do not emulate a hub, such as otg
controllers.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Rename usb_find_child to usb_find_emul_child
Hans de Goede [Wed, 1 Jul 2015 18:53:01 +0000 (20:53 +0200)]
dm: usb: Rename usb_find_child to usb_find_emul_child

Now that we unbind usb devices from usb_stop() usb_find_child() is
only necessary to deal with emulated usb devices.

Rename it to make this clear and add a #ifdef to make it a nop in
other cases.

Note the #ifdef turns usb_find_emul_child() into a nop, rather then not
building it and adding another #ifdef to the caller, this is done this way
because adding a #ifdef to the caller is somewhat hairy.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Use device_unbind_children to clean up usb devs on stop
Hans de Goede [Wed, 1 Jul 2015 18:53:00 +0000 (20:53 +0200)]
dm: usb: Use device_unbind_children to clean up usb devs on stop

On an usb stop instead of leaving orphan usb devices behind simply remove
them.

The result of this commit is best seen in the output of "dm tree" after
plugging out an usb hub with 2 devices plugges in and plugging in a keyb.
instead, before this commit the output would be:

 usb         [ + ]    `-- sunxi-musb
 usb_hub     [   ]        |-- usb_hub
 usb_mass_st [   ]        |   |-- usb_mass_storage
 usb_dev_gen [   ]        |   `-- generic_bus_0_dev_3
 usb_dev_gen [ + ]        `-- generic_bus_0_dev_1

Notice the non active usb_hub child and its 2 non active children. The
first child being non-active as in this example also causes usb_get_dev_index
to return NULL when probing the first child, which results in the usb kbd
code not binding to the keyboard.

With this commit in place the output after swapping and "usb reset" is:

 usb         [ + ]    `-- sunxi-musb
 usb_dev_gen [ + ]        `-- generic_bus_0_dev_1

As expected, and usb_get_dev_index works properly and the keyboard works.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Document that mixing DM_DEVICE_REMOVE and DM_USB is a bad idea
Hans de Goede [Wed, 1 Jul 2015 18:52:59 +0000 (20:52 +0200)]
dm: usb: Document that mixing DM_DEVICE_REMOVE and DM_USB is a bad idea

Document that mixing DM_DEVICE_REMOVE and DM_USB is a bad idea, and also why
this is a bad idea.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: usb: Fix "usb tree" output
Hans de Goede [Wed, 17 Jun 2015 19:33:50 +0000 (21:33 +0200)]
dm: usb: Fix "usb tree" output

last_child was abused by the old usb code to first store 1 if the
usb_device was not the root of the usb tree, and then later on re-used
to store whether or not the usb_device is actually the last child.

The dm-usb code was always setting it to actually reflect the last-child
status which is wrong for the last child leading to output like this:

USB device tree:
  1  Hub (12 Mb/s, 100mA)
  |  ALCOR USB Hub 2.0
  |
  | 2  Mass Storage (12 Mb/s, 100mA)
  |    USB Flash Disk 4C0E960F
  |
  +-3  Human Interface (1.5 Mb/s, 100mA)
       SINO WEALTH USB Composite Device

Instead of this:

USB device tree:
  1  Hub (12 Mb/s, 100mA)
  |  ALCOR USB Hub 2.0
  |
  +-2  Mass Storage (12 Mb/s, 100mA)
  |    USB Flash Disk 4C0E960F
  |
  +-3  Human Interface (1.5 Mb/s, 100mA)
       SINO WEALTH USB Composite Device

This commit fixes this by first checking that the device is not root,
and then setting last_child. This commit also updates the old code to not
abuse the last_child variable to store the root check result.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: Export device_remove_children / device_unbind_children
Hans de Goede [Wed, 1 Jul 2015 18:52:58 +0000 (20:52 +0200)]
dm: Export device_remove_children / device_unbind_children

These functions are useful to remove all children from an usb bus before
rescanning the bus. Give them a better name and export them.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agousb: Add an usb_device parameter to usb_reset_root_port
Hans de Goede [Wed, 17 Jun 2015 19:33:48 +0000 (21:33 +0200)]
usb: Add an usb_device parameter to usb_reset_root_port

Add an usb_device parameter to usb_reset_root_port so that it knows which
root-port it is resetting. This is necessary for proper device-model support
for usb_reset_root_port.

Also remove a duplicate declaration of usb_reset_root_port() from usb.h .

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agousb: Pass device instead of portnr to usb_legacy_port_reset
Hans de Goede [Wed, 17 Jun 2015 19:33:47 +0000 (21:33 +0200)]
usb: Pass device instead of portnr to usb_legacy_port_reset

Pass the usb_device instead of the portnr to usb_legacy_port_reset and
rename it to usb_hub_port_reset as there is nothing legacy about it.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agousb: usb_setup_device: Drop unneeded portnr function argument
Hans de Goede [Wed, 17 Jun 2015 19:33:46 +0000 (21:33 +0200)]
usb: usb_setup_device: Drop unneeded portnr function argument

Drop the unneeded portnr function argument, the portnr is part of the
usb_device struct which is passed via the dev argument.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agousb: Drop device-model specific copy of usb_legacy_port_reset
Hans de Goede [Wed, 17 Jun 2015 19:33:45 +0000 (21:33 +0200)]
usb: Drop device-model specific copy of usb_legacy_port_reset

The device-model usb_legacy_port_reset function calls the device-model
usb_port_reset function which is a 1 on 1 copy of the non dm
usb_legacy_port_reset and this is the only use of usb_port_reset in all
of u-boot.

Drop both, and alway use the usb_legacy_port_reset() version in
common/usb.c .

Also while at it make it static as it is only used in common/usb.c .

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: remove redundant CONFIG_DM from driver/core/Makefile
Masahiro Yamada [Mon, 13 Jul 2015 04:17:16 +0000 (13:17 +0900)]
dm: remove redundant CONFIG_DM from driver/core/Makefile

As you see in driver/Makefile, Kbuild descends into the driver/core/
directory only when CONFIG_DM is enabled.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: do not set DM_FLAG_ACTIVATED twice
Masahiro Yamada [Thu, 9 Jul 2015 13:11:49 +0000 (22:11 +0900)]
dm: do not set DM_FLAG_ACTIVATED twice

Currently, DM_FLAG_ACTIVATED is set twice; before calling
uclass_pre_probe_device() and again before calling drv->probe().

It looks like Simon's intention is the first one.
The DM_FLAG_ACTIVATED was moved twice, by commit 02eeb1bbb174
(dm: core: Mark device as active before calling its probe()
method), and then by commit 206d4d2b4b30 (dm: core: Mark device
as active before calling uclass probe() methods).
The first marking was added by the last move.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agodm: change dm_warn() message into debug() in uclass_add()
Masahiro Yamada [Tue, 7 Jul 2015 09:51:32 +0000 (18:51 +0900)]
dm: change dm_warn() message into debug() in uclass_add()

The command "dm uclass" tries to display all the UClasses, but
some of them might be disabled by Kconfig.

The function do_dm_dump_uclass() iterates over all the UClass IDs
and calls uclass_get() for each of them.  Then, it displays annoying
message "Cannot find uclass for id ..." every time it fails to get
the UClass.

As a result, we get much noisier log for the "dm uclass" command.

  => dm uclass
  uclass 0: root
  - * root_driver @ bfb54028, seq 0, (req -1)

  Cannot find uclass for id 1: please add the UCLASS_DRIVER() ...
  Cannot find uclass for id 2: please add the UCLASS_DRIVER() ...
  Cannot find uclass for id 3: please add the UCLASS_DRIVER() ...
  Cannot find uclass for id 4: please add the UCLASS_DRIVER() ...
  Cannot find uclass for id 5: please add the UCLASS_DRIVER() ...
  Cannot find uclass for id 6: please add the UCLASS_DRIVER() ...

This commit suppresses these warnings.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Simon Glass <sjg@chromium.org>
9 years agotest: Add a test for regmap
Simon Glass [Mon, 6 Jul 2015 18:54:39 +0000 (12:54 -0600)]
test: Add a test for regmap

We use syscon to test that the regmap functions work as expected.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: core: Add device checking to syscon_get_regmap()
Simon Glass [Mon, 6 Jul 2015 18:54:38 +0000 (12:54 -0600)]
dm: core: Add device checking to syscon_get_regmap()

This function can only handle a syscon device. It is possible that someone
will make a mistake, so add a check for this.

Also we should return -ENODEV when a device cannot be found, so update the
syscon_get_regmap_by_driver_data() to follow this convention.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agotest: Add a macro to check that a value is not an error pointer
Simon Glass [Mon, 6 Jul 2015 18:54:37 +0000 (12:54 -0600)]
test: Add a macro to check that a value is not an error pointer

Some functions can return ERR_PTR(errval). Add a unit test macro to check
that no error is returned in a pointer.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a size to each reg property
Simon Glass [Mon, 6 Jul 2015 18:54:36 +0000 (12:54 -0600)]
dm: test: Add a size to each reg property

Each sandbox peripheral should have a size as well as a base address. This
is required for regmaps to work, so make this change for all nodes that have
an address.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a test for the system controller uclass
Simon Glass [Mon, 6 Jul 2015 18:54:35 +0000 (12:54 -0600)]
dm: test: Add a test for the system controller uclass

Add a test to confirm that we can access system controllers and find their
driver data.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a test for the LED uclass
Simon Glass [Mon, 6 Jul 2015 18:54:34 +0000 (12:54 -0600)]
dm: test: Add a test for the LED uclass

Add a test to confirm that we can adjust LEDs using the led_gpio driver.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoled: Return -ENODEV if the LED device cannot be found
Simon Glass [Mon, 6 Jul 2015 18:54:33 +0000 (12:54 -0600)]
led: Return -ENODEV if the LED device cannot be found

We normally use -ENODEV for a missing device, rather than -ENOENT. The
latter is reserved for when we have a device but cannot find something
within it.

Also avoid looking at the root LED device since it is only a container.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a test for the mmc uclass
Simon Glass [Mon, 6 Jul 2015 18:54:32 +0000 (12:54 -0600)]
dm: test: Add a test for the mmc uclass

Add a test to confirm that we can probe this device. Since there is no
MMC stack support in sandbox at present, this is as far as the test goes.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a test for the ram uclass
Simon Glass [Mon, 6 Jul 2015 18:54:31 +0000 (12:54 -0600)]
dm: test: Add a test for the ram uclass

Add a test to confirm that we can probe this device and get information on
the available RAM.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add a test for the reset uclass
Simon Glass [Mon, 6 Jul 2015 18:54:30 +0000 (12:54 -0600)]
dm: test: Add a test for the reset uclass

Add tests that confirm that the drivers work as expected, and we can walk
through the available reset types trying to reset the board.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agosandbox: Use the reset driver to handle reset
Simon Glass [Mon, 6 Jul 2015 18:54:29 +0000 (12:54 -0600)]
sandbox: Use the reset driver to handle reset

Move sandbox over to use the reset uclass for reset, instead of a direct
call to do_reset(). This allows us to add tests.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agosandbox: Add a warm and cold reset driver
Simon Glass [Mon, 6 Jul 2015 18:54:28 +0000 (12:54 -0600)]
sandbox: Add a warm and cold reset driver

Add drivers for sandbox. One can only perform a warm reset (which does
nothing). The other can perform a cold reset or a power reset (the
latter will quit U-Boot). These can be used for testing the reset uclass.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: reset: Allow reset_walk() to return
Simon Glass [Mon, 6 Jul 2015 18:54:27 +0000 (12:54 -0600)]
dm: reset: Allow reset_walk() to return

Add a new reset_walk_halt() function to cause a reset and then halt on
failure. The reset_walk() function returns an error code.

This is needed for testing since otherwise U-Boot will halt in the middle
of a test.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agosandbox: Support multiple reset types
Simon Glass [Mon, 6 Jul 2015 18:54:26 +0000 (12:54 -0600)]
sandbox: Support multiple reset types

Add settings for the last reset generated, and the types of resets which
are permitted. This will be used for testing.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Add tests for the clk uclass
Simon Glass [Mon, 6 Jul 2015 18:54:24 +0000 (12:54 -0600)]
dm: test: Add tests for the clk uclass

Add tests of each API call using a sandbox clock device.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: test: Allow test names to leave out the dm_test_ prefix
Simon Glass [Mon, 6 Jul 2015 18:54:23 +0000 (12:54 -0600)]
dm: test: Allow test names to leave out the dm_test_ prefix

All driver model tests have a dm_test_ prefix. Ignore it when matching a
test name. This makes it easier to run individual tests, like this:

   ./sandbox/u-boot -d ./sandbox/arch/sandbox/dts/test.dtb \
-c "ut dm clk_periph"

We can use 'clk_periph' instead of 'dm_test_clk_periph'.

Also print a message if the requested test is not found.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add platform data advice and admonishment
Simon Glass [Mon, 6 Jul 2015 18:54:22 +0000 (12:54 -0600)]
dm: Add platform data advice and admonishment

We should guide people more strongly towards device tree to avoid the
proliferation of platform data structures. Add documentation to the driver
model README, and also the platform data header file.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agopower: pmic: Use trailing_strtol() instead of a local function
Simon Glass [Tue, 23 Jun 2015 21:39:16 +0000 (15:39 -0600)]
power: pmic: Use trailing_strtol() instead of a local function

Use the common function to obtain the number from the end of the string,
instead of a local function. Also tweak the position of a debug() statement.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: Add a clock uclass
Simon Glass [Tue, 23 Jun 2015 21:39:15 +0000 (15:39 -0600)]
dm: Add a clock uclass

Clocks are an important feature of platforms and have become increasing
complex with time. Most modern SoCs have multiple PLLs and dozens of clock
dividers which distribute clocks to on-chip peripherals.

Some SoC implementations have a clock API which is private to that SoC family,
e.g. Tegra and Exynos. This is useful but it would be better to have a
common API that can be understood and used throughout U-Boot.

Add a simple clock API as a starting point. It supports querying and setting
the rate of a clock. Each clock is a device. To reduce memory and processing
overhead the concept of peripheral clocks is provided. These do not need to
be explicit devices - it is possible to write a driver that can adjust the
I2C clock (for example) without an explicit I2C clock device. This can
dramatically reduce the number of devices (and associated overhead) in a
complex SoC.

Clocks are referenced by a number, and it is expected that SoCs will define
that numbering themselves via an enum.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agozynq: Rename struct clk_ops to zynq_clk_ops
Simon Glass [Tue, 23 Jun 2015 21:39:14 +0000 (15:39 -0600)]
zynq: Rename struct clk_ops to zynq_clk_ops

Since we want clk_ops to be used in U-Boot as a whole, rename the Zynq
version until it can be converted to driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add a system reset uclass
Simon Glass [Tue, 23 Jun 2015 21:39:13 +0000 (15:39 -0600)]
dm: Add a system reset uclass

It is common for system reset to be available at multiple levels in modern
hardware. For example, an SoC may provide a reset option, and a board may
provide its own reset for reasons of security or thoroughness. It is useful
to be able to model this hardware without hard-coding the behaviour in the
SoC or board. Also there is a distinction sometimes between resetting just
the CPU (leaving GPIO state alone) and resetting all the PMICs, just cutting
power.

To achieve this, add a simple system reset uclass. It allows multiple devices
to provide reset functionality and provides a way to walk through them,
requesting a particular reset type until is it provided.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agomkimage: Set up a file size parameter and keep it updated
Simon Glass [Tue, 23 Jun 2015 21:39:12 +0000 (15:39 -0600)]
mkimage: Set up a file size parameter and keep it updated

Some functions called by mkimage would like to know the output file size.
Initially this is the same as the input file size, but it may be affected by
adding headers, etc.

Add this information to the image parameters.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
9 years agospl: Add a debug string before the jump to U-Boot
Simon Glass [Tue, 23 Jun 2015 21:39:11 +0000 (15:39 -0600)]
spl: Add a debug string before the jump to U-Boot

As a debug option, add positive confirmation that SPL has completed
execution. This can help with diagnosing the location of unexpected hangs.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: spl: Allow device tree/driver model in board_init_f()
Simon Glass [Tue, 23 Jun 2015 21:39:10 +0000 (15:39 -0600)]
dm: spl: Allow device tree/driver model in board_init_f()

Add an spl_init() function that does basic init such that board_init_f() can
use simple malloc(), device tree and driver model. Each one is set up only
if enabled for SPL.

Note: We really should refactor SPL such that there is a single
board_init_f() and rename the existing weak board_init_f() functions
provided by boards, calling them from the single board_init_f().

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agofdt: Provide debug info when a device tree cannot be found
Simon Glass [Tue, 23 Jun 2015 21:39:09 +0000 (15:39 -0600)]
fdt: Provide debug info when a device tree cannot be found

It can be quite confusing with a new platform to figure out why the device
tree cannot be located. Add some debug information for this case.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agolib: Add function to extract a number from the end of a string
Simon Glass [Tue, 23 Jun 2015 21:39:08 +0000 (15:39 -0600)]
lib: Add function to extract a number from the end of a string

Split out the code in fdtdec which finds a number at the end of a string. It
can be useful in other situations.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoAdd rivest cipher 4 (rc4) implementation
Simon Glass [Tue, 23 Jun 2015 21:39:07 +0000 (15:39 -0600)]
Add rivest cipher 4 (rc4) implementation

Add an implementation of RC4. This will be used by Rockchip booting but may
be useful in other situations.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agons16550: Improve debug UART so it can work with 32-bit access
Simon Glass [Tue, 23 Jun 2015 21:39:06 +0000 (15:39 -0600)]
ns16550: Improve debug UART so it can work with 32-bit access

Since Rockchip requires 32-bit serial access, add this to the driver.
Refactor a little to make this easier.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: spi: Make local functions static
Simon Glass [Tue, 23 Jun 2015 21:39:05 +0000 (15:39 -0600)]
dm: spi: Make local functions static

Several functions in this file should be marked as static. Update them.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add support for RAM drivers
Simon Glass [Tue, 23 Jun 2015 21:39:04 +0000 (15:39 -0600)]
dm: Add support for RAM drivers

Add support for a driver which sets up DRAM and can return information about
the amount of RAM available. This is a first step towards moving RAM init
to driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoDrop CONFIG_ERRNO_STR from SPL
Simon Glass [Tue, 23 Jun 2015 21:39:03 +0000 (15:39 -0600)]
Drop CONFIG_ERRNO_STR from SPL

This bloats the code size quite a bit and is less useful in SPL where there
is no command line.

Avoid including this code in SPL.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: power: Allow use of regulators in SPL
Simon Glass [Tue, 23 Jun 2015 21:39:02 +0000 (15:39 -0600)]
dm: power: Allow use of regulators in SPL

This functionality may be useful for setting up regulators early during
boot.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: pmic: Add functions to adjust PMIC registers
Simon Glass [Tue, 23 Jun 2015 21:39:01 +0000 (15:39 -0600)]
dm: pmic: Add functions to adjust PMIC registers

It is a common requirement to update some PMIC registers. Provide some
simple convenience functions to do this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: power: Use debug() for errors in regulator uclass
Simon Glass [Tue, 23 Jun 2015 21:39:00 +0000 (15:39 -0600)]
dm: power: Use debug() for errors in regulator uclass

To reduce unnecessary code size in an uncommon code path, use debug()
where possible(). The driver returns an error which indicates failure.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: power: Add a function to set up all regulators
Simon Glass [Tue, 23 Jun 2015 21:38:59 +0000 (15:38 -0600)]
dm: power: Add a function to set up all regulators

The device tree provides information about which regulators should be
on at boot, or always on. Use this to set them up automatically.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: pmic: Split output from function
Simon Glass [Tue, 23 Jun 2015 21:38:58 +0000 (15:38 -0600)]
dm: pmic: Split output from function

The regulator_autoset() function mixes printf() output and PMIC adjustment
code. It provides a boolean to control the output. It is better to avoid
missing logic and output, and this permits a smaller SPL code size. So
split the output into a separate function.

Also rename the function to have a by_name() suffix, since we would like
to be able to pass a device when we know it, and thus avoid the name
search.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: power: Add regulator flags to centralise auto-set logic
Simon Glass [Tue, 23 Jun 2015 21:38:57 +0000 (15:38 -0600)]
dm: power: Add regulator flags to centralise auto-set logic

Decide when the regulator is set up whether we want to auto-set the voltage
or current. This avoids the complex logic spilling into the processing code.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agodm: power: Avoid case-insensitve match for child names
Simon Glass [Tue, 23 Jun 2015 21:38:56 +0000 (15:38 -0600)]
dm: power: Avoid case-insensitve match for child names

This is not user input (i.e. from the command line). It should be possible
to get the case correct and avoid the case-insensitive match. This will
help avoid sloppy device tree setups.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
9 years agommc: Add structure comments for dwmmc
Simon Glass [Tue, 23 Jun 2015 21:38:52 +0000 (15:38 -0600)]
mmc: Add structure comments for dwmmc

It took a little while to figure this out, so this patch adds documentation
to help the next person who needs to do this.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: mmc: Allow driver model to be used for MMC in SPL
Simon Glass [Tue, 23 Jun 2015 21:38:51 +0000 (15:38 -0600)]
dm: mmc: Allow driver model to be used for MMC in SPL

Enable MMC using driver model in SPL for consistency with U-Boot proper.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agommc: Add debug() output on read errors
Simon Glass [Tue, 23 Jun 2015 21:38:50 +0000 (15:38 -0600)]
mmc: Add debug() output on read errors

Allow read errors to be diagnosed more easily.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: mmc: Add an MMC uclass
Simon Glass [Tue, 23 Jun 2015 21:38:48 +0000 (15:38 -0600)]
dm: mmc: Add an MMC uclass

Add basic support for MMC, providing a uclass which can set up an MMC
device. This allows MMC drivers to move to using driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agospl: Add debugging info for spl_mmc boot
Simon Glass [Tue, 23 Jun 2015 21:38:47 +0000 (15:38 -0600)]
spl: Add debugging info for spl_mmc boot

Add a few messages to indicate progress and failure.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: led: Add a driver for GPIO-controlled LEDs
Simon Glass [Tue, 23 Jun 2015 21:38:46 +0000 (15:38 -0600)]
dm: led: Add a driver for GPIO-controlled LEDs

Add a simple driver which allows use of LEDs attached to GPIOs. The linux
device tree binding is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add support for LEDs
Simon Glass [Tue, 23 Jun 2015 21:38:45 +0000 (15:38 -0600)]
dm: Add support for LEDs

Add a simple uclass for LEDs, so that these can be controlled by the device
tree and activated when needed. LEDs are referred to by their label.

This implementation requires a driver for each type of LED (e.g GPIO, I2C).

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add support for generic system controllers (syscon)
Simon Glass [Tue, 23 Jun 2015 21:38:43 +0000 (15:38 -0600)]
dm: Add support for generic system controllers (syscon)

Many SoCs have a number of system controllers which are dealt with as a
group by a single driver. It is a pain to have to add lots of compatible
strings and/or separate drivers for each. Instead we can identify the
controllers by a number and request the address of the one we want.

Add a simple implementation of this which can be used by SoC driver code.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Add support for register maps (regmap)
Simon Glass [Tue, 23 Jun 2015 21:38:42 +0000 (15:38 -0600)]
dm: Add support for register maps (regmap)

Add a simple implementaton of register maps, supporting only direct I/O
for now. This can be enhanced later to support buses which have registers,
such as I2C, SPI and PCI.

It allows drivers which can operate with multiple buses to avoid dealing
with the particulars of register access on that bus.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: gpio: Add dm_gpio_request() to manually request a GPIO
Simon Glass [Tue, 23 Jun 2015 21:38:41 +0000 (15:38 -0600)]
dm: gpio: Add dm_gpio_request() to manually request a GPIO

This function can be used for testing to manually request a GPIO for use,
without resorting to the legacy GPIO API.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: gpio: Add dm_gpio_lookup_name() to look up a GPIO name
Simon Glass [Tue, 23 Jun 2015 21:38:40 +0000 (15:38 -0600)]
dm: gpio: Add dm_gpio_lookup_name() to look up a GPIO name

Provide a driver-model function to look up a GPIO name. Make the standard
function use it.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: gpio: Allow GPIO uclass to be used in SPL
Simon Glass [Tue, 23 Jun 2015 21:38:39 +0000 (15:38 -0600)]
dm: gpio: Allow GPIO uclass to be used in SPL

Now that we support driver model in SPL, allow GPIO drivers to be used there
also.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: core: Correct device_get_child_by_of_offset() parameter
Simon Glass [Tue, 23 Jun 2015 21:38:38 +0000 (15:38 -0600)]
dm: core: Correct device_get_child_by_of_offset() parameter

This parameter is named 'seq' but should be named 'of_offset'.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: core: Add a function to find any device from device tree
Simon Glass [Tue, 23 Jun 2015 21:38:37 +0000 (15:38 -0600)]
dm: core: Add a function to find any device from device tree

In some rare cases it is useful to be able to locate a device given a device
tree node offset. An example is when you have an alias that points to a node
and you want to find the associated device. The device may be SPI, MMC or
something else, but you don't need to know the uclass to find it.

Add a function to do a global search for a device, given its device tree
offset.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: core: Use debug() instead of printf() for failures
Simon Glass [Tue, 23 Jun 2015 21:38:36 +0000 (15:38 -0600)]
dm: core: Use debug() instead of printf() for failures

To avoid bloating SPL code, use debug() where possible in the driver model
core code. The error code is already returned, and can be investigated as
needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Move the tree/uclass dump code into its own file
Simon Glass [Tue, 23 Jun 2015 21:38:35 +0000 (15:38 -0600)]
dm: Move the tree/uclass dump code into its own file

In SPL it is sometimes useful to be able to obtain a dump of the current
driver model state. Since commands are not available, provide a way to
directly call the functions to output this information.

Adjust the existing commands to use these functions.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agosandbox: Drop special-case sandbox console code
Simon Glass [Tue, 23 Jun 2015 21:38:34 +0000 (15:38 -0600)]
sandbox: Drop special-case sandbox console code

At present printf() skips output if it can see there is no console. This
is really just an optimisation, and is not necessary. Also it is currently
incorrect in some cases. Rather than update the logic, just remove it so
that we don't need to keep it in sync.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Allow debug UART to support an early console
Simon Glass [Tue, 23 Jun 2015 21:38:33 +0000 (15:38 -0600)]
dm: Allow debug UART to support an early console

When there is no console ready, allow the debug UART to be used for output.
This makes debugging of early code considerably easier.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodebug_uart: Remove use of asmlinkage
Simon Glass [Tue, 23 Jun 2015 21:38:32 +0000 (15:38 -0600)]
debug_uart: Remove use of asmlinkage

This does not actually help any current arch. For x86 it makes it harder
to call (requires stack) and for ARM it has no effect. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoAdd a way of checking the position of a structure member
Simon Glass [Tue, 23 Jun 2015 21:38:31 +0000 (15:38 -0600)]
Add a way of checking the position of a structure member

U-Boot uses structures for hardware access so it is important that these
structures are correct. Add a way of asserting that a structure member is
at a particular offset. This can be created using the datasheet for the
hardware.

This implementation uses Static_assert() since BUILD_BUG_ON() only works
within functions.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: arm: Put driver model I2C drivers before legacy ones
Simon Glass [Tue, 23 Jun 2015 21:38:30 +0000 (15:38 -0600)]
dm: arm: Put driver model I2C drivers before legacy ones

Driver-model I2C drivers can be picked up by the linker script rule for
legacy drivers. Change the order to avoid this.

We could make the legacy code depend on !CONFIG_DM_I2C but that is not
necessary and it is good to keep conditions to a minimum.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agodm: Reduce SPL device tree size
Simon Glass [Tue, 23 Jun 2015 21:38:29 +0000 (15:38 -0600)]
dm: Reduce SPL device tree size

The SPL device tree size must be minimised to save memory. Only include
properties that are needed by SPL - this is determined by the presence
of the "u-boot,dm-pre-reloc" property. Also remove a predefined list of
unused properties from the nodes that remain.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agofdt: Add fdtgrep tool
Simon Glass [Tue, 23 Jun 2015 21:38:28 +0000 (15:38 -0600)]
fdt: Add fdtgrep tool

This tool allows us to extract subsets of a device tree file. It is used by
the SPL vuild, which needs to cut down the device tree size for use in
limited memory.

This tool was originally written for libfdt but it has not been accepted
upstream, so for now, include it in U-Boot. Several utilfdt library
functions been included inline here.

If fdtgrep is eventually accepted in libfdt then we can bring that version
of libfdt in here, and drop fdtgrep (requiring that fdtgrep is provided by
the user).

If it is not accepted then another approach would be to write a special
tool for chopping down device tree files for SPL. While it would use the
same libfdt support, it would be less code than fdtgrep.c because it would
not have general-purpose functions.

Another approach (which was used with v1 of this series) is to sprinkler all
the device tree files with #ifdef. I don't like that idea.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agofdt: Add fdt_first/next_region() functions
Simon Glass [Tue, 23 Jun 2015 21:38:27 +0000 (15:38 -0600)]
fdt: Add fdt_first/next_region() functions

These have been sent upstream but not accepted to libfdt. For now, bring
these into U-Boot to enable fdtgrep to operate. We will use fdtgrep to
cut device tree files down for SPL.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agofdt: Add a function to remove unused strings from a device tree
Simon Glass [Tue, 23 Jun 2015 21:38:26 +0000 (15:38 -0600)]
fdt: Add a function to remove unused strings from a device tree

Property names are stored in a string table. When a node property is
removed, the string table is not updated since other nodes may have a
property with the same name.

Thus it is possible for the string table to build up a number of unused
strings. Add a function to remove these. This works by building a new device
tree from the old one, adding strings one by one as needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agomkimage: Display a better list of available image types
Simon Glass [Tue, 23 Jun 2015 21:38:25 +0000 (15:38 -0600)]
mkimage: Display a better list of available image types

Offer to display the available image types in help. Also, rather than
hacking the genimg_get_type_id() function to display a list of types,
do this in the tool. Also, sort the list.

The list of image types is quite long, and hard to discover. Print it out
when we show help information.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agosandbox: Enable dhry command
Simon Glass [Tue, 23 Jun 2015 21:38:24 +0000 (15:38 -0600)]
sandbox: Enable dhry command

Provide access to the dhrystone benchmark command.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoAdd a dhrystone benchmark command
Simon Glass [Tue, 23 Jun 2015 21:38:23 +0000 (15:38 -0600)]
Add a dhrystone benchmark command

Drystone provides a convenient sanity check that the CPU is running at full
speed. Add this as a command which can be enabled as needed.

Note: I investigated using Coremark for this but there was a license
agreement and I could not work out if it was GPL-compatible.

Signed-off-by: Simon Glass <sjg@chromium.org>
9 years agoMerge branch 'master' of git://git.denx.de/u-boot-fsl-qoriq
Tom Rini [Mon, 20 Jul 2015 21:12:52 +0000 (17:12 -0400)]
Merge branch 'master' of git://git.denx.de/u-boot-fsl-qoriq

9 years agoarmv8/fsl-lsch3: Fix TCR_EL3 for the final MMU setup.
Zhichun Hua [Mon, 29 Jun 2015 07:50:42 +0000 (15:50 +0800)]
armv8/fsl-lsch3: Fix TCR_EL3 for the final MMU setup.

When final MMU table is setup in DDR, TCR attributes must match
those of the memroy for cacheability and shareability.

Signed-off-by: Zhichun Hua <zhichun.hua@freescale.com>
Signed-off-by: York Sun <yorksun@freescale.com>
9 years agoarmv8: Fix TCR macros for shareability attribute
Zhichun Hua [Mon, 29 Jun 2015 07:49:37 +0000 (15:49 +0800)]
armv8: Fix TCR macros for shareability attribute

For ARMv8, outer shareable is 0b10, inner shareable is 0b11 at bit
position [13:12] of TCR_ELx register.

Signed-off-by: Zhichun Hua <zhichun.hua@freescale.com>
Signed-off-by: York Sun <yorksun@freescale.com>
9 years agoarmv8/ls2085a/defconfig: Enable FSL_DSPI, OF_CONTROL and DM support
Haikun.Wang@freescale.com [Fri, 3 Jul 2015 08:51:36 +0000 (16:51 +0800)]
armv8/ls2085a/defconfig: Enable FSL_DSPI, OF_CONTROL and DM support

Freescale DSPI driver has been converted to Driver Model.
The new driver depends on OF_CONTROL, DM, DM_SPI.
This patch enable FSL_DSPI and its dependence configure options.

Signed-off-by: Haikun Wang <haikun.wang@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
9 years agoarmv8/ls2085ardb: Enable DSPI flash support for LS2085ARDB
Haikun Wang [Fri, 3 Jul 2015 08:51:35 +0000 (16:51 +0800)]
armv8/ls2085ardb: Enable DSPI flash support for LS2085ARDB

Enable DSPI flash related configurations for LS2085ARDB.

Signed-off-by: Haikun Wang <haikun.wang@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
9 years agoarmv8/ls2085aqds: Enable DSPI flash support for LS2085AQDS
Haikun Wang [Fri, 3 Jul 2015 08:51:34 +0000 (16:51 +0800)]
armv8/ls2085aqds: Enable DSPI flash support for LS2085AQDS

Enable DSPI flash related configurations.

Signed-off-by: Haikun Wang <haikun.wang@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
9 years agoarmv8/ls2085ardb: DSPI pin muxing configure through QIXIS CPLD
Haikun.Wang@freescale.com [Fri, 26 Jun 2015 11:58:24 +0000 (19:58 +0800)]
armv8/ls2085ardb: DSPI pin muxing configure through QIXIS CPLD

DSPI has pin muxing with SDHC and other IPs, this patch check the
value of RCW SPI_PCS_BASE and SPI_BASE_BASE fields, it also check
the "hwconfig" variable. If those pins are configured to DSPI and
"hwconfig" enable DSPI, set the BRDCFG5 of QIXIS CPLD to configure
the routing to on-board SPI memory. Otherwise will configure to SDHC.
DSPI is enabled in "hwconfig" by appending "dspi", eg.
setenv hwconfig "$hwconfig;dspi"

Signed-off-by: Haikun Wang <Haikun.Wang@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>