platform/kernel/u-boot.git
7 years agonet: zynq_gem: Use wait_for_bit with non breakable
Siva Durga Prasad Paladugu [Tue, 30 May 2017 12:28:39 +0000 (14:28 +0200)]
net: zynq_gem: Use wait_for_bit with non breakable

Use wait_for_bit to be non breakable as using it with
breakable causes issue of un interruptible auto negotiation.
This is due to the ctrlc pressed will taken for wait_for_bit()
abort during phy_read() and hence not coming out of
auto negotiation.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: phy: marvell 88e151x: Fix handling of RGMII interface types
Phil Edworthy [Wed, 24 May 2017 13:43:06 +0000 (14:43 +0100)]
net: phy: marvell 88e151x: Fix handling of RGMII interface types

The 88E1518 code is programming the wrong registers for rgmii-id,
rgmii-txid and rgmii-rxid interfaces.

Since the PHY defaults to rgmii-id, it would appear that the code
was previously only used with sgmii and rgmii-id interfaces.

Tested on 88E1512 PHY in rgmii-id mode which is from the same family
as 88E1518.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: core: avoid possible NULL pointer dereference
xypron.glpk@gmx.de [Tue, 16 May 2017 03:07:01 +0000 (05:07 +0200)]
net: core: avoid possible NULL pointer dereference

Checking if dev is NULL after dereferencing it does not make sense.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agodrivers: net: cpsw: abort init() on aneg timeout
Sekhar Nori [Mon, 8 May 2017 15:19:56 +0000 (20:49 +0530)]
drivers: net: cpsw: abort init() on aneg timeout

Abort CPSW driver init when auto-negotiation of link
times out. Currently, the code ignores return status
of phy_startup(), and goes ahead with network operation
(like DHCP) even though the link may be down.

Instead, abort init process if link is down or if there
is another error, so phy_startup() can easily be retried
again. This also helps quick fallback to next network interface
(like USB RNDIS) without inordinate delay.

Tested on AM571x IDK and AM335x BeagleBone black.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: macb: Fix GMAC not work when enable DM_ETH
Wenyou Yang [Thu, 20 Apr 2017 03:13:13 +0000 (11:13 +0800)]
net: macb: Fix GMAC not work when enable DM_ETH

Always search the PHY to determine the macb->phy_addr before using
the PHY to fix "No PHY present" error.

Fix the wrong test of the GMAC's phy interface mode, it should be
PHY_INTERFACE_MODE_RGMII.

Signed-off-by: Wenyou Yang <wenyou.yang@atmel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: mvpp2.c: Enable 10G support for port 0 (SFI)
Stefan Chulski [Thu, 6 Apr 2017 13:39:08 +0000 (15:39 +0200)]
net: mvpp2.c: Enable 10G support for port 0 (SFI)

This patch fixes some remaining issues in the mvpp2 driver for the 10GB
support on port 0. These changes are:

- Incorrect PCS configuration
- Skip PHY configuration when no PHY is connected
- Skip GMAC configurations if 10G SFI mode set

Signed-off-by: Stefan Chulski <stefanc@marvell.com>
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Kostya Porotchkin <kostap@marvell.com>
Cc: Nadav Haklai <nadavh@marvell.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agoarmv8/ls1046a: RGMII PHY requires internal delay on Tx
Madalin Bucur [Mon, 3 Apr 2017 14:43:56 +0000 (17:43 +0300)]
armv8/ls1046a: RGMII PHY requires internal delay on Tx

Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agoarmv8/ls1043a: RGMII PHY requires internal delay on Tx
Madalin Bucur [Mon, 3 Apr 2017 14:43:55 +0000 (17:43 +0300)]
armv8/ls1043a: RGMII PHY requires internal delay on Tx

Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: zynq_gem: Do not return -ENOSYS on success
Olliver Schinagl [Mon, 3 Apr 2017 14:18:53 +0000 (16:18 +0200)]
net: zynq_gem: Do not return -ENOSYS on success

The .read_rom_hwaddr net_ops hook does not check the return value, which
is why it was never caught that we are currently returning 0 if the
read_rom_hwaddr function return -ENOSYS and -ENOSYS otherwise.

In this case we can simplify this by just returning the result of the
function.

Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Michal Simek <michal.simek@xilinx.com>
7 years agonet: designware: Add phy supply support
Jacob Chen [Mon, 27 Mar 2017 08:54:17 +0000 (16:54 +0800)]
net: designware: Add phy supply support

Some board need a regulator for gmac phy, so add this code to handle it.
Signed-off-by: Jacob Chen <jacob2.chen@rock-chips.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agonet: Kconfig:make PHY_GIGE and individual Micrel PHYs selectable
Philipp Tomsich [Sun, 26 Mar 2017 16:50:23 +0000 (18:50 +0200)]
net: Kconfig:make PHY_GIGE and individual Micrel PHYs selectable

This change migrate the following configuration options for Kconfig:
 * PHY_GIGE, indicates that a controller (with an appropriate PHY) is
   Gigabit capable and enables extra support in the miiutil for
   parsing the status of Gigabit PHYs
 * adds configuration options for Micrel KSZ9021 and KSZ9031 GbE PHYs,
   which previously had to enabled through a board-specific config file

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
7 years agosandbox: Move to use live tree
Simon Glass [Fri, 19 May 2017 02:10:02 +0000 (20:10 -0600)]
sandbox: Move to use live tree

This updates sandbox to use a live device tree. This means that after
relocation (from board_init_r() onwards) it no-longer uses flat device
tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: gpio: power: Convert pm8916 drivers to livetree
Simon Glass [Fri, 19 May 2017 02:10:01 +0000 (20:10 -0600)]
dm: gpio: power: Convert pm8916 drivers to livetree

This PMIC driver (power and GPIO) is used by the sandbox SPMI tests.
Update the drivers to support a live device tree so that the tests pass.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Fix nit with position of backslash
Simon Glass [Fri, 19 May 2017 02:10:00 +0000 (20:10 -0600)]
dm: test: Fix nit with position of backslash

Line up this backslash with all the others.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: sandbox: sysreset: Convert driver to livetree
Simon Glass [Fri, 19 May 2017 02:09:59 +0000 (20:09 -0600)]
dm: sandbox: sysreset: Convert driver to livetree

Update this driver to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: sandbox: spi: Convert driver to support livetree
Simon Glass [Fri, 19 May 2017 02:09:58 +0000 (20:09 -0600)]
dm: sandbox: spi: Convert driver to support livetree

Update this driver to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: spi-flash: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:57 +0000 (20:09 -0600)]
dm: spi-flash: Convert uclass to livetree

Update the SPI flash uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: sandbox: i2c_rtc: Drop fdtdec.h header
Simon Glass [Fri, 19 May 2017 02:09:56 +0000 (20:09 -0600)]
dm: sandbox: i2c_rtc: Drop fdtdec.h header

This is not needed in this driver. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: sandbox: i2c: Drop fdtdec.h header
Simon Glass [Fri, 19 May 2017 02:09:55 +0000 (20:09 -0600)]
dm: sandbox: i2c: Drop fdtdec.h header

This is not needed in this driver. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: spi: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:54 +0000 (20:09 -0600)]
dm: spi: Convert uclass to livetree

Update the SPI uclass to support a live device tree. Also adjust
spi_slave_ofdata_to_platdata() to accept a device instead of a blob and
offset.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agocros_ec: Update the cros_ec keyboard driver to livetree
Simon Glass [Fri, 19 May 2017 02:09:53 +0000 (20:09 -0600)]
cros_ec: Update the cros_ec keyboard driver to livetree

Update this driver and key_matrix to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Update the I2C eeprom driver for livetree
Simon Glass [Fri, 19 May 2017 02:09:52 +0000 (20:09 -0600)]
dm: Update the I2C eeprom driver for livetree

Update this driver so that it works with livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: pci: Update uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:51 +0000 (20:09 -0600)]
dm: pci: Update uclass to support livetree

Update the PCI uclass to support livetree. This mostly involves fixing
the address decoding from the device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: reset: Update uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:50 +0000 (20:09 -0600)]
dm: reset: Update uclass to support livetree

Update the reset domain uclass to support livetree. Fix the xlate() method
which has no callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: power-domain: Update uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:49 +0000 (20:09 -0600)]
dm: power-domain: Update uclass to support livetree

Update the power domain uclass to support livetree. Fix the xlate() method
which has no callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosandbox: phy: Update driver for livetree
Simon Glass [Fri, 19 May 2017 02:09:48 +0000 (20:09 -0600)]
sandbox: phy: Update driver for livetree

Update the sandbox phy driver to support livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: phy: Update uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:47 +0000 (20:09 -0600)]
dm: phy: Update uclass to support livetree

Update the phy uclass to support livetree. Fix the xlate() method
which has no callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mailbox: Update uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:46 +0000 (20:09 -0600)]
dm: mailbox: Update uclass to support livetree

Update the mailbox uclass to support livetree. Fix the xlate() method
in all callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: phy: Update tests to use ut_asserteq()
Simon Glass [Fri, 19 May 2017 02:09:45 +0000 (20:09 -0600)]
dm: phy: Update tests to use ut_asserteq()

Use ut_asserteq() to test equality since this gives a better error message
on failure. Also make a few of the tests more specific.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Disable the fdt_offset test with livetree
Simon Glass [Fri, 19 May 2017 02:09:44 +0000 (20:09 -0600)]
dm: test: Disable the fdt_offset test with livetree

We cannot run this test with livetree since it uses device tree offsets.
Mark it as flat tree only.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Separate out the bus DT offset test
Simon Glass [Fri, 19 May 2017 02:09:43 +0000 (20:09 -0600)]
dm: test: Separate out the bus DT offset test

We cannot access the device tree via an offset when running in livetree
mode. Separate out that part of the bus' children tests and mark it as
for the flat tree only.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: clk: fixed: Update to support livetree
Simon Glass [Fri, 19 May 2017 02:09:42 +0000 (20:09 -0600)]
dm: clk: fixed: Update to support livetree

Update the fixed-rate clock driver to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: clk: Update uclass to support livetree
Simon Glass [Wed, 31 May 2017 03:47:29 +0000 (21:47 -0600)]
dm: clk: Update uclass to support livetree

Update the clk uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agoclk: Modify xlate() method for livetree
Simon Glass [Fri, 19 May 2017 02:09:40 +0000 (20:09 -0600)]
clk: Modify xlate() method for livetree

Update the xlate() method to use ofnode_phandle_args instead of the fdtdec
variant. This will allow drivers to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosandbox: usb: Convert emulators to livetree
Simon Glass [Fri, 19 May 2017 02:09:39 +0000 (20:09 -0600)]
sandbox: usb: Convert emulators to livetree

Update the sandbox flash and hub USB emulators to support a live device
tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: usb: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:38 +0000 (20:09 -0600)]
dm: usb: Convert uclass to livetree

Update the usb uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: adc: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:37 +0000 (20:09 -0600)]
dm: adc: Convert uclass to livetree

Update the adc uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mmc: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:36 +0000 (20:09 -0600)]
dm: mmc: Convert uclass to livetree

Update the mmc uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: regulator: Update fixed regulator to support livetree.
Simon Glass [Fri, 19 May 2017 02:09:35 +0000 (20:09 -0600)]
dm: regulator: Update fixed regulator to support livetree.

Update this driver to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: regulator: Convert regulator uclass to support livetree
Simon Glass [Fri, 19 May 2017 02:09:34 +0000 (20:09 -0600)]
dm: regulator: Convert regulator uclass to support livetree

Update the regulator uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosandbox: pmic: Convert pmic emulator to support livetree
Simon Glass [Fri, 19 May 2017 02:09:33 +0000 (20:09 -0600)]
sandbox: pmic: Convert pmic emulator to support livetree

Update this driver to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: pmic: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:32 +0000 (20:09 -0600)]
dm: pmic: Convert uclass to livetree

Update the pmic uclass and all pmics to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosamsung: Move pmic header out of config file
Simon Glass [Fri, 19 May 2017 02:09:31 +0000 (20:09 -0600)]
samsung: Move pmic header out of config file

We should not be including a PMIC header file in the board config. Move it
to a C file.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: i2c: Convert uclass to livetree
Simon Glass [Fri, 19 May 2017 02:09:30 +0000 (20:09 -0600)]
dm: i2c: Convert uclass to livetree

Update the i2c uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agostring: Add strcspn()
Simon Glass [Fri, 19 May 2017 02:09:29 +0000 (20:09 -0600)]
string: Add strcspn()

Add an implementation of strcspn() which returns the number of initial
characters that do not match any in a rejection list.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agostring: Add strchrnul()
Simon Glass [Fri, 19 May 2017 02:09:28 +0000 (20:09 -0600)]
string: Add strchrnul()

This functions works like strchr() but returns the end of the string if
the character is not found. Add an implementation of this.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Add more livetree helpers and definitions
Simon Glass [Fri, 19 May 2017 02:09:27 +0000 (20:09 -0600)]
dm: Add more livetree helpers and definitions

Add some definitions and helpers for livetree in the main of.h header
file. These include:

- reading multi-cell integers
- default number of address/size cells
- functions for comparing names

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agofdt: Rename a few functions in fdt_support
Simon Glass [Fri, 19 May 2017 02:09:26 +0000 (20:09 -0600)]
fdt: Rename a few functions in fdt_support

These two functions have an of_ prefix which conflicts with naming used
in of_addr. Rename them:

   fdt_read_number
   fdt_support_bus_default_count_cells

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agotest: Update 'make test' to run more tests
Simon Glass [Fri, 19 May 2017 02:09:25 +0000 (20:09 -0600)]
test: Update 'make test' to run more tests

The standard sandbox board cannot run the of-platdata test since it needs
SPL. Also, we should test the flat tree version of sandbox.

Add these tests to the default test script.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosandbox: Add a new sandbox_flattree board
Simon Glass [Fri, 19 May 2017 02:09:24 +0000 (20:09 -0600)]
sandbox: Add a new sandbox_flattree board

Add a sandbox board to test the non-livetree build (i.e. with
CONFIG_OF_FLAT disabled). This increases our build and test coverage.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agocros_ec: Convert to support live tree
Simon Glass [Fri, 19 May 2017 02:09:23 +0000 (20:09 -0600)]
cros_ec: Convert to support live tree

Convert this driver to support the live device tree and remove the old
fdtdec support.

The keyboard is not yet converted.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agocros_ec: Fix debug() statement in ec_command_inptr()
Simon Glass [Fri, 19 May 2017 02:09:22 +0000 (20:09 -0600)]
cros_ec: Fix debug() statement in ec_command_inptr()

This prints out the wrong pointers. Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: gpio: Add live tree support
Simon Glass [Wed, 31 May 2017 03:47:09 +0000 (21:47 -0600)]
dm: gpio: Add live tree support

Add support for requesting GPIOs with a live device tree.

This involves adjusting the function signature for the legacy function
gpio_request_by_name_nodev(), so fix up all callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
Fixes to stm32f746-disco.c:
Signed-off-by: Tom Rini <trini@konsulko.com>
7 years agodm: gpio: sandbox: Use dev_read...() functions to access DT
Simon Glass [Fri, 19 May 2017 02:09:20 +0000 (20:09 -0600)]
dm: gpio: sandbox: Use dev_read...() functions to access DT

Use the new dev_read...() functions to access the device tree, so that a
live tree can be used.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: gpio: Drop blank line in gpio_xlate_offs_flags() comment
Simon Glass [Fri, 19 May 2017 02:09:19 +0000 (20:09 -0600)]
dm: gpio: Drop blank line in gpio_xlate_offs_flags() comment

This is not needed. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: gpio: Refactor to prepare for live tree support
Simon Glass [Fri, 19 May 2017 02:09:18 +0000 (20:09 -0600)]
dm: gpio: Refactor to prepare for live tree support

Move the main part of the GPIO request function into a separate function
so that it can be used by the live tree function when added. Update the
xlate method to use a node reference.

Update all GPIO drivers to handle the modified xlate() method.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Run tests with both livetree and flat tree
Simon Glass [Fri, 19 May 2017 02:09:17 +0000 (20:09 -0600)]
dm: core: Run tests with both livetree and flat tree

Some tests require either livetree or flat tree. Add flags to allow the
tests to specify this. Adjust the test runner to run with livetree (if
supported) and then flat tree.

Some video tests are quite slow and running on flat tree adds little extra
test value, so run these on livetree only.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Add support for running tests with livetree
Simon Glass [Fri, 19 May 2017 02:09:16 +0000 (20:09 -0600)]
dm: test: Add support for running tests with livetree

It is useful to run the driver model tests with both livetree and flat
tree in case something is different between the two. Add this feature to
the test runner.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Show the test filename when running
Simon Glass [Fri, 19 May 2017 02:09:15 +0000 (20:09 -0600)]
dm: test: Show the test filename when running

Show the filename of the test being run. Skip the path and show just the
base name.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: test: Move test running code into a separate function
Simon Glass [Fri, 19 May 2017 02:09:14 +0000 (20:09 -0600)]
dm: test: Move test running code into a separate function

We want to run the same test on flat and live trees. In preparation for
this, create a new function which handles running a test.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agosandbox: Add a way to reset sandbox state for tests
Simon Glass [Fri, 19 May 2017 02:09:13 +0000 (20:09 -0600)]
sandbox: Add a way to reset sandbox state for tests

Running a new test should reset the sandbox state to avoid tests
interferring with each other. Move the existing state-reset code into a
function so it can be used from tests.

Also update the code to reset the SPI devices and adjust the test code to
call it.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Update uclass_find_device_by_phandle() for livetree
Simon Glass [Fri, 19 May 2017 02:09:12 +0000 (20:09 -0600)]
dm: core: Update uclass_find_device_by_phandle() for livetree

Adjust this function to work with livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: simple-bus: Add support for livetree
Simon Glass [Fri, 19 May 2017 02:09:11 +0000 (20:09 -0600)]
dm: simple-bus: Add support for livetree

Modify simple-bus to support livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: regmap: Add support for livetree
Simon Glass [Fri, 19 May 2017 02:09:10 +0000 (20:09 -0600)]
dm: regmap: Add support for livetree

Modify regmap to support livetree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add a way to find a device by ofnode
Simon Glass [Fri, 19 May 2017 02:09:09 +0000 (20:09 -0600)]
dm: core: Add a way to find a device by ofnode

Add a function which looks up a device by its node (either in live tree
or flat tree).

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Scan the live tree when setting up driver model
Simon Glass [Fri, 19 May 2017 02:09:08 +0000 (20:09 -0600)]
dm: core: Scan the live tree when setting up driver model

When starting up driver model with a live tree we need to scan the tree
for devices. Add code to handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Update device_bind_driver_to_node() to use ofnode
Simon Glass [Fri, 19 May 2017 02:09:07 +0000 (20:09 -0600)]
dm: core: Update device_bind_driver_to_node() to use ofnode

Adjust this function to us an ofnode instead of an offset, so it can be
used with livetree. This involves updating all callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Update lists_bind_fdt() to use ofnode
Simon Glass [Fri, 19 May 2017 02:09:06 +0000 (20:09 -0600)]
dm: core: Update lists_bind_fdt() to use ofnode

Adjust this function to use an ofnode instead of an offset, so it can be
used with livetree. This involves updating all callers.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Allow binding a device from a live tree
Simon Glass [Fri, 19 May 2017 02:09:05 +0000 (20:09 -0600)]
dm: core: Allow binding a device from a live tree

When a live tree is being used we need to record the node that was used to
create the device. Update device_bind_with_driver_data() to support this.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Implement live tree 'read' functions
Simon Glass [Fri, 19 May 2017 02:09:04 +0000 (20:09 -0600)]
dm: core: Implement live tree 'read' functions

When the live tree is supported some functions need to change a little.
Add an implementation which is used when not inlining these functions.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add device-based 'read' functions to access DT
Simon Glass [Fri, 19 May 2017 02:09:03 +0000 (20:09 -0600)]
dm: core: Add device-based 'read' functions to access DT

It is common to read a device-tree property from the node associated with
a device. Add convenience functions to do this so that drivers do not need
to deal with accessing the ofnode from the device.

These functions all start with 'dev_read_' to provide consistent naming
for all functions which read information from a device's device tree node.

These are inlined when using the flat DT to save code size. The live tree
implementation is added in a later commit.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add a place to put extra device-tree reading functions
Simon Glass [Fri, 19 May 2017 02:09:02 +0000 (20:09 -0600)]
dm: core: Add a place to put extra device-tree reading functions

Some functions deal with structured data rather than simple data types.
It makes sense to have these in their own file. For now this just has a
function to read a flashmap entry. Move the data types also.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add address operations on device tree references
Simon Glass [Fri, 19 May 2017 02:09:01 +0000 (20:09 -0600)]
dm: core: Add address operations on device tree references

Add functions to add addresses in the device tree using ofnode references.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agofdt: Update fdt_get_base_address() to use const
Simon Glass [Fri, 19 May 2017 02:09:00 +0000 (20:09 -0600)]
fdt: Update fdt_get_base_address() to use const

This function does not change the device tree so adjust it to use const
for this parameter.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add livetree address functions
Simon Glass [Fri, 19 May 2017 02:08:59 +0000 (20:08 -0600)]
dm: core: Add livetree address functions

Add functions to access addresses in the device tree. These are brought
in from Linux 4.10.

Also fix up the header guard for fdtaddr.h to avoid confusion.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add operations on device tree references
Simon Glass [Fri, 19 May 2017 02:08:58 +0000 (20:08 -0600)]
dm: core: Add operations on device tree references

Since U-Boot supports both a live tree and a flat tree, we need an easy
way to access the tree without worrying about which is currently active.
To support this, U-Boot has the concept of an ofnode, which can refer
either to a live tree node or a flat tree node.

For the live tree, the reference contains a pointer to the node (struct
device_node *) or NULL if the node is invalid. For the flat tree, the
reference contains the node offset or -1 if the node is invalid.

Add a basic set of operations using ofnodes. These are implemented by
using either libfdt functions (in the case of a flat DT reference) or
the live-tree of_...() functions.

Note that it is not possible to have both live and flat references active
at the same time. As soon as the live tree is available, everything in
U-Boot should switch to using that. This avoids confusion and allows us to
assume that the type of a reference is simply based on whether we have a
live tree yet, or not.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Rename of_device_is_compatible()
Simon Glass [Fri, 19 May 2017 02:08:57 +0000 (20:08 -0600)]
dm: core: Rename of_device_is_compatible()

The of_ prefix conflicts with the livetree version of this function.
Rename it to avoid problems when we add livetree support.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Build a live tree after relocation
Simon Glass [Fri, 19 May 2017 02:08:56 +0000 (20:08 -0600)]
dm: Build a live tree after relocation

If enabled, build a live device tree after relocation. This can then be
used by driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Add a function to create a 'live' device tree
Simon Glass [Fri, 19 May 2017 02:08:55 +0000 (20:08 -0600)]
dm: Add a function to create a 'live' device tree

This function converts the flat device tree into a hierarchical one with
C structures and pointers. This is easier to access.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add livetree access functions
Simon Glass [Fri, 19 May 2017 02:08:54 +0000 (20:08 -0600)]
dm: core: Add livetree access functions

Add a basic assortment of functions to access the live device tree. These
come from Linux v4.9 and are modified for U-Boot to the minimum extent
possible. While these functions are now very stable in Linux, it will be
possible to merge in fixes if needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add livetree definitions
Simon Glass [Fri, 19 May 2017 02:08:53 +0000 (20:08 -0600)]
dm: core: Add livetree definitions

Add a Kconfig option to enable a live device tree, built at run time from
the flat tree. Also add structure definitions and a root node.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agoUpdate WARN_ON() to return a value
Simon Glass [Fri, 19 May 2017 02:08:52 +0000 (20:08 -0600)]
Update WARN_ON() to return a value

In linux v4.9 this returns a value. This saves checking the warning
condition twice in some code.

Update the U-Boot version to do this also.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Set return value first in lists_bind_fdt()
Simon Glass [Fri, 19 May 2017 02:08:51 +0000 (20:08 -0600)]
dm: core: Set return value first in lists_bind_fdt()

Adjust the order to make it clear that *devp is set to NULL by default.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agotegra: Convert MMC to use driver model for operations
Simon Glass [Mon, 24 Apr 2017 02:02:11 +0000 (20:02 -0600)]
tegra: Convert MMC to use driver model for operations

Enable CONFIG_DM_MMC_OPS and CONFIG_BLK for all Tegra devices. This moves
Tegra to use driver model fully for MMC.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mmc: Rewrite mmc_blk_probe()
Simon Glass [Mon, 24 Apr 2017 02:02:10 +0000 (20:02 -0600)]
dm: mmc: Rewrite mmc_blk_probe()

This function is called when the MMC block device is being probed. There
is a recursive call in this function since find_mmc_device() itself can
cause the MMC device to be probed.

Admittedly the MMC device should already be probed, since we would not be
probing its child otherwise, but the current code is unnecessarily
convoluted.

Rewrite this to access the MMC structure directly.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mmc: Check that drivers have operations
Simon Glass [Mon, 24 Apr 2017 02:02:09 +0000 (20:02 -0600)]
dm: mmc: Check that drivers have operations

When binding a new MMC device, make sure that it has the required
operations. Since for now we still support *not* having the operations
(with CONFIG_DM_MMC_OPS not enabled) it makes sense to add this check.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: blk: Improve block device claiming
Simon Glass [Mon, 24 Apr 2017 02:02:07 +0000 (20:02 -0600)]
dm: blk: Improve block device claiming

The intention with block devices is that the device number (devnum field
in its descriptor) matches the alias of its parent device. For example,
with:

aliases {
mmc0 = "/sdhci@700b0600";
mmc1 = "/sdhci@700b0400";
}

we expect that the block devices for mmc0 and mmc1 would have device
numbers of 0 and 1 respectively.

Unfortunately this does not currently always happen. If there is another
MMC device earlier in the driver model data structures its block device
will be created first. It will therefore get device number 0 and mmc0
will therefore miss out. In this case the MMC device will have sequence
number 0 but its block device will not.

To avoid this, allow a device to request a device number and bump any
existing device number that is using it. This all happens during the
binding phase so it is safe to change these numbers around. This allows
device numbers to match the aliases in all circumstances.

Add a test to verify the behaviour.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: blk: Add a function to find the next block device number
Simon Glass [Mon, 24 Apr 2017 02:02:06 +0000 (20:02 -0600)]
dm: blk: Add a function to find the next block device number

At present this code is inline. Move it into a function to allow it to
be used elsewhere.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: blk: Allow finding block devices without probing
Simon Glass [Mon, 24 Apr 2017 02:02:05 +0000 (20:02 -0600)]
dm: blk: Allow finding block devices without probing

Sometimes it is useful to be able to find a block device without also
probing it. Add a function for this as well as the associated test.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mmc: Don't re-init when accessing environment
Simon Glass [Mon, 24 Apr 2017 02:02:04 +0000 (20:02 -0600)]
dm: mmc: Don't re-init when accessing environment

With driver model MMC is probed automatically when needed. We should not
re-init MMC each time.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: mmc: Don't call board_mmc_power_init() with driver model
Simon Glass [Sun, 23 Apr 2017 01:10:56 +0000 (19:10 -0600)]
dm: mmc: Don't call board_mmc_power_init() with driver model

We should not call out to board code from drivers. With driver model,
mmc_power_init() already has code to use a named regulator, but the
legacy code path remains. Update the code to make this clear.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Adjust device_bind_common() to take an ofnode
Simon Glass [Wed, 17 May 2017 23:18:11 +0000 (17:18 -0600)]
dm: core: Adjust device_bind_common() to take an ofnode

This core function will need to work with a live tree also. Update it to
accept an ofnode instead of an offset.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Add ofnode to represent device tree nodes
Simon Glass [Wed, 17 May 2017 23:18:10 +0000 (17:18 -0600)]
dm: core: Add ofnode to represent device tree nodes

With live tree we need a struct device_node * to reference a node. With
the existing flat tree, we need an int offset. We need to unify these into
a single value which can represent both.

Add an ofnode union for this and adjust existing code to move to this.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Replace of_offset with accessor (part 2)
Simon Glass [Wed, 17 May 2017 23:18:09 +0000 (17:18 -0600)]
dm: core: Replace of_offset with accessor (part 2)

At present devices use a simple integer offset to record the device tree
node associated with the device. In preparation for supporting a live
device tree, which uses a node pointer instead, refactor existing code to
access this field through an inline function.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Dont export dm_scan_fdt_node()
Simon Glass [Wed, 17 May 2017 23:18:08 +0000 (17:18 -0600)]
dm: core: Dont export dm_scan_fdt_node()

This function is only used in one place. It is better to just declare it
internally since there is a simpler replacement for use outside the
driver-model core code.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Fix up inclusion of common.h
Simon Glass [Wed, 17 May 2017 23:18:07 +0000 (17:18 -0600)]
dm: Fix up inclusion of common.h

It is good practice to include common.h as the first header. This ensures
that required features like the DECLARE_GLOBAL_DATA_PTR macro,
configuration options and common types are available.

Fix up some files which currently don't do this. This is necessary because
driver model will soon start using global data and configuration in the
dm/read.h header file, included via dm.h. The gd->fdt_blob value will be
used to access the device tree and CONFIG options will be used to
determine whether to support inline functions in the header file.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agoatmel: Fix up use of dm_scan_fdt_node()
Simon Glass [Wed, 17 May 2017 23:18:06 +0000 (17:18 -0600)]
atmel: Fix up use of dm_scan_fdt_node()

This function should not be used outside the core driver-model code.
Update it to use dm_scan_fdt_dev() instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Rename dev_addr..() functions
Simon Glass [Wed, 17 May 2017 23:18:05 +0000 (17:18 -0600)]
dm: Rename dev_addr..() functions

These support the flat device tree. We want to use the dev_read_..()
prefix for functions that support both flat tree and live tree. So rename
the existing functions to avoid confusion.

In the end we will have:

   1. dev_read_addr...()    - works on devices, supports flat/live tree
   2. devfdt_get_addr...()  - current functions, flat tree only
   3. of_get_address() etc. - new functions, live tree only

All drivers will be written to use 1. That function will in turn call
either 2 or 3 depending on whether the flat or live tree is in use.

Note this involves changing some dead code - the imx_lpi2c.c file.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: core: Move dev_get_addr() etc. into a separate file
Simon Glass [Wed, 17 May 2017 23:18:04 +0000 (17:18 -0600)]
dm: core: Move dev_get_addr() etc. into a separate file

Move this group of address-related functions into a new file. These use
the flat device tree. Future work will provide new versions of these which
can support the live tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
7 years agodm: Use dm.h header when driver mode is used
Simon Glass [Wed, 17 May 2017 23:18:03 +0000 (17:18 -0600)]
dm: Use dm.h header when driver mode is used

This header includes things that are needed to make driver build. Adjust
existing users to include that always, even if other dm/ includes are
present

Signed-off-by: Simon Glass <sjg@chromium.org>