2 years agodtc: remove extra parentheses to pass clang check 79/47879/2 factory-4128.B factory-4290.B factory-4455.B factory-pit-4280.B factory-pit-4390.B factory-pit-4471.B factory-spring-4131.B factory-spring-4262.B firmware-falco_peppy-4389.B firmware-leon-4389.26.B firmware-pit-4482.B firmware-wolf-4389.24.B master release-R28-4100.B release-R29-4319.B release-R30-4537.B stabilize-4008.0.B stabilize-4035.0.B stabilize-4068.0.B stabilize-4100.38.B stabilize-4255.B stabilize-4287.B stabilize-4443.B stabilize-4512.B stabilize-spring-4100.53.B toolchainB
Yunlian Jiang [Thu, 11 Apr 2013 18:02:50 +0000 (11:02 -0700)]
dtc: remove extra parentheses to pass clang check

TEST=the clang warning is gone

Change-Id: If9536c181d564e6ee3c1b5777dd78ad3a57a16c7
Reviewed-by: Han Shen <>
Commit-Queue: Yunlian Jiang <>
Tested-by: Yunlian Jiang <>
2 years agodtc/libfdt: install missing header 81/43381/2 factory-spring-3842.B firmware-spring-3824.4.B firmware-spring-3824.55.B firmware-spring-3824.84.B firmware-spring-3824.B firmware-spring-3833.B release-R27-3912.B stabilize-3881.0.B stabilize-3912.79.B toolchainA
Yann E. MORIN [Tue, 21 Aug 2012 23:48:17 +0000 (01:48 +0200)]
dtc/libfdt: install missing header

Previously, only two headers were installed: libfdt.h and fdt.h.
But libfdt.h also #includes libfdt_env.h, which was not installed.

Install this missing header too.

Signed-off-by: "Yann E. MORIN" <>
Acked-by: David Gibson <>
(cherry picked from commit 8716901d2215a314504b7df6282aedfcf89da1ea)

TEST=sudo emerge dtc

See that usr/include/libfdt_env.h now exists

Change-Id: I89548d85a94e0eb96364b287398f1745cee819e7
Reviewed-by: Mike Frysinger <>
Reviewed-by: David Hendricks <>
Commit-Queue: David Hendricks <>
Tested-by: David Hendricks <>
2 years agoupstream: fdtput: Add -p option to create subnodes along entire path 67/27467/1 factory-2717.B factory-2723.14.B factory-2846.B factory-2848.B factory-2914.B factory-2985.B factory-2993.B factory-3004.B factory-3536.B firmware-butterfly-2788.B firmware-link-2695.2.B firmware-link-2695.B firmware-parrot-2685.B firmware-snow-2695.90.B firmware-snow-2695.B firmware-stout-2817.B release-R22-2723.B release-R23-2913.B release-R25-3428.B release-R26-3701.B stabilize stabilize-3428.110.0 stabilize-3428.149 stabilize-3428.149.B stabilize-3428.193 stabilize-3658.0.0 stabilize-3701.30.0 stabilize-3701.30.0b stabilize-3701.46.B stabilize-3701.81.B stabilize-bluetooth-smart stabilize-daisy stabilize-link stabilize-link-2913.278 stabilize2 toolchain-3428.65.B toolchain-3701.42.B
Simon Glass [Thu, 12 Jul 2012 15:52:51 +0000 (08:52 -0700)]
upstream: fdtput: Add -p option to create subnodes along entire path

This option mimics mkdir's -p option. It automatically creates nodes
as needed along the path provided. If the node already exists, no
error is given.

Signed-off-by: Simon Glass <>
(cherry picked from commit f807af192828222dee7a5c9f94d999673bb4d8a1)

Change-Id: Iedaa4ff22cde214f2272fcf082fbbb20bdac6a95

2 years agoupstream: fdtput: Adjust report_error() to use name, namelen params 66/27466/1
Simon Glass [Tue, 10 Jul 2012 12:56:47 +0000 (05:56 -0700)]
upstream: fdtput: Adjust report_error() to use name, namelen params

As with many fdt functions, report_error() should permit a namelen to
be specified, thus obviating the need for nul termination in strings
passed to it.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
(cherry picked from commit 3553dfac224435233f2c0d33169194098e979c88)

Change-Id: I8419977662f5b69099359ef2f6d15a594f4fbc1b

2 years agoupstream: fdtput: Add -c option to create nodes 65/27465/1
Simon Glass [Thu, 12 Jul 2012 15:52:49 +0000 (08:52 -0700)]
upstream: fdtput: Add -c option to create nodes

This option allows the creation of new nodes in a dtb file. The syntax

   fdtput -c <dtb_file> <node_path>

The node_path contains the path of the node to be created. All path
components up to the final one must exist already. The final one must
not exist already.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
(cherry picked from commit d46c2de5700fd8d43de67ca3709c276beba39b39)

Change-Id: I95c3ab5585dec5830762e96267afb59b1b22d7e1

2 years agoupstream: fdtput: Prepare to support multiple operations 64/27464/1
Simon Glass [Thu, 12 Jul 2012 15:52:48 +0000 (08:52 -0700)]
upstream: fdtput: Prepare to support multiple operations

We want to add new options to this tool. In preparation for this, add
the concept of a current operation.

Signed-off-by: Simon Glass <>
(cherry picked from commit f58dff50407c0ee56b372ab201469c18dc042f56)

Change-Id: Ib78b2ee9493e7bd9ee7050abe44f5bda55269081

2 years agoupstream: fdtput: Fix nit in help message 63/27463/1
Simon Glass [Tue, 10 Jul 2012 12:56:44 +0000 (05:56 -0700)]
upstream: fdtput: Fix nit in help message

There was an extra < in the help message, so fix it.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
(cherry picked from commit bb21f0a766056114e4d9336324b4c294f640d9d1)

Change-Id: I39a5ef807ad29c2eddff254991f47cafb264d455
Signed-off-by: Simon Glass <>
2 years agoupstream: Allow toggling of semantic checks 41/27041/1
David Gibson [Sun, 8 Jul 2012 13:25:22 +0000 (23:25 +1000)]
upstream: Allow toggling of semantic checks

This patch adds -W and -E options to dtc which allow toggling on and off
of the various built in semantic checks on the tree.

Signed-off-by: David Gibson <>
(cherry picked from commit d5399197e9e0d8bad13de5c41df3b93804c0558a)

Change-Id: Ic77e49c9e3ac1048e9e33afdb73b95865ba8438b

2 years agoupstream: Re-work level setting on checks code 40/27040/1
David Gibson [Sun, 8 Jul 2012 13:25:21 +0000 (23:25 +1000)]
upstream: Re-work level setting on checks code

Currently each of the semantic checks in checks.c has a "level" between
IGNORE and ERROR.  This single level makes it awkward to implement the
semantics we want for toggling the checks on the command line.

This patch reworks the code to instead have separate boolean flags for
warning and error.  At present having both flags set will have the same
effect as having just the error flag set, but this can change in the

Signed-off-by: David Gibson <>
(cherry picked from commit 511dedd40f0372cd7c85e3d4c66553f5829142b7)

Change-Id: Ia66e770d2ce13cbf98ef8d6a80730f2fe5789fbe

2 years agoupstream: Add test for re-defining an identical label 39/27039/1
Stephen Warren [Tue, 3 Jul 2012 20:09:30 +0000 (14:09 -0600)]
upstream: Add test for re-defining an identical label

When merging one device tree over the top of a previous tree, it is
possible to define a duplicate label that has the same name and points
to the same property or node. This is currently allowed by the duplicate
label checking code. However, alternative duplicate label checking
algorithms might not allow this. Add an explicit test to ensure this
capability is maintained.

Signed-off-by: Stephen Warren <>
Acked-by: David Gibson <>
(cherry picked from commit f67dfe845930b32ea14df6ff18d69799828a5909)

Change-Id: Icbaef2a0ba75c7d21d4acb8546646f8233de6fbf

2 years agoupstream: Fix compilation warning/error in setprop_inplace.c 38/27038/1
Stephen Warren [Tue, 12 Jun 2012 20:48:12 +0000 (14:48 -0600)]
upstream: Fix compilation warning/error in setprop_inplace.c

When compiling the current code-base with gcc 4.6.1, the following warning
is raised, which is interpreted as an error:

cc1: warnings being treated as errors
tests/setprop_inplace.c: In function ‘main’:
tests/setprop_inplace.c:62: error: format ‘%016llx’ expects type ‘long long unsigned int’, but argument 2 has type ‘uint64_t’
tests/setprop_inplace.c:68: error: format ‘%016llx’ expects type ‘long long unsigned int’, but argument 2 has type ‘uint64_t’

Use printf format specifiers from <inttypes.h> to solve this.

Signed-off-by: Stephen Warren <>
Acked-by: David Gibson <>
(cherry picked from commit 942b3c065fb1c8788d2317977945c7283f1db7e2)

Change-Id: Ie7bd55884a62398d3beb549ee7c140006185affb

2 years agoupstream: libfdt: Add helper function to create a trivial, empty tree 37/27037/1
David Gibson [Fri, 1 Jun 2012 04:12:38 +0000 (14:12 +1000)]
upstream: libfdt: Add helper function to create a trivial, empty tree

The libfdt read/write functions are now usable enough that it's become a
moderately common pattern to use them to build and manipulate a device
tree from scratch.  For example, we do so ourself in our rw_tree1 testcase,
and qemu is starting to use this model when building device trees for some
targets such as e500.

However, the read/write functions require some sort of valid tree to begin
with, so this necessitates either having a trivial canned dtb to begin with
or, more commonly, creating an empty tree using the serial-write functions

This patch adds a helper function which uses the serial-write functions to
create a trivial, empty but complete and valid tree in a supplied buffer,
ready for manipulation with the read/write functions.

Signed-off-by: David Gibson <>
(cherry picked from commit be6026838e45b67800ac803f4ad8cca3cde57d6d)

Change-Id: I915abf6e5b6b2a281df4516b17228701cf84da80

2 years agoupstream: libfdt: Add helpers for 64-bit integer properties 36/27036/1
David Gibson [Fri, 1 Jun 2012 04:12:37 +0000 (14:12 +1000)]
upstream: libfdt: Add helpers for 64-bit integer properties

In device trees in the world, properties consisting of a single 64-bit
integer are not as common as those consisting of a single 32-bit, cell
sized integer, but they're common enough that they're worth including
convenience functions for.

This patch adds helper wrappers of fdt_setprop_inplace(), fdt_setprop() and
fdt_appendprop() for handling 64-bit integer quantities in properties.  For
better consistency with the names of these new *_u64() functions we also
add *_u32() functions as alternative names for the existing *_cell()
functions handling 32-bit integers.

Signed-off-by: David Gibson <>
(cherry picked from commit cbf1410eab4b7ce7be1b15f985ef71bfc1f5886d)

Change-Id: I317547463da35a4b4ba6a3058f9ad2f88cdec50c

2 years agoupstream: Remove test_tree1_dts0 testcases 35/27035/1
David Gibson [Fri, 1 Jun 2012 04:12:36 +0000 (14:12 +1000)]
upstream: Remove test_tree1_dts0 testcases

The testcases based on test_tree1_dts0.dts were added purely to test dtc's
backwards compatibility handling of the old dts-v0 format.  Since that
support has been removed, the dts has been updated to use the current
dts-v1 syntax, which makes the testcases pass, but be completely useless.

This patch removes the now obsolete testcases.

Signed-off-by: David Gibson <>
(cherry picked from commit 4adbb5336b0eed99f30c852d9dcf3cd125cae921)

Change-Id: I7c176cf9216b1ea81867cad78c447588df62af1d

2 years agoupstream: Add integer expressions files to .gitignore 34/27034/1
Simon Glass [Thu, 19 Apr 2012 16:33:36 +0000 (09:33 -0700)]
upstream: Add integer expressions files to .gitignore

Several files were added, and should be in .gitignore. The *.test.dts
pattern should catch future source files which are generated by tests.
It also subsumes the old *.dtb.test.dts pattern.

Signed-off-by: Simon Glass <>
(cherry picked from commit 3ec9cb570333769295774e4fd0e2000d35cf6eda)

Change-Id: If444cca49c870e55aa04b1d7679485f0b0e9a962

2 years agoupstream: dtc: Adjust .gitignore to be in alphabetical order 33/27033/1
Simon Glass [Thu, 19 Apr 2012 16:33:35 +0000 (09:33 -0700)]
upstream: dtc: Adjust .gitignore to be in alphabetical order

This is the intent, so correct it.

Signed-off-by: Simon Glass <>
(cherry picked from commit 84a94f6ffcab762f44e44cba3409b7bc5fa46a89)

Change-Id: I4bc2e8c0762df0904529181cfc5264d30d90c9c9

3 years agodtc: Add support for named integer constants 55/19855/4 factory-2268.16.B factory-2305.B factory-2338.B factory-2368.B factory-2394.B factory-2460.B factory-2475.B factory-2569.B firmware-link-2348.B release-R20-2268.B release-R21-2465.B
Stephen Warren [Tue, 30 Aug 2011 21:30:18 +0000 (15:30 -0600)]
dtc: Add support for named integer constants

You may define constants as follows:

/define/ CHROME_OS_BOOT_DEVICES "emmc", "spi";
/define/ GBB_BASE <0x00e08000>;
/define/ UART_BAUD_OPTIONS <115200 57600 19200>;

And properties may use these values as follows:

test-node {
    boot-devices = <CHROME_OS_BOOT_DEVICES>;
    gbb = <GBB_BASE 0x20000>;
    baud-rates = <UART_BAUD_OPTIONS>;

TEST=compile the above code and see with fdtdump that we get correct results.

Change-Id: I891fb9446c76adc90b78c3021cc33acce13d12e7
Signed-off-by: Stephen Warren <>
Signed-off-by: Simon Glass <>
3 years agoupstream: dtc: Remove spurious output on stderr 54/19854/3
Simon Glass [Thu, 5 Apr 2012 17:27:15 +0000 (10:27 -0700)]
upstream: dtc: Remove spurious output on stderr

Outputing to stderr is best avoided unless there is an error or warning to
display. At present dtc always displays the name of the file it is compiling
and the input/output formats. For example:

DTC: dts->dts  on file "-"

This can cause problems in some build systems. For example, U-Boot shows
build errors for any boards which use dtc at present. It is typically the
only message output during such a build. The C compiler does not output
anything in general. The current dtc behaviour makes it difficult to
provide a silent build in the normal case where nothing went wrong.

Remove the message entirely.

TEST=run 'dtc'; see that there is no output

Series-to: dts
Series-cc: david, jon
Series-version: 2
Series-changes: 2
- Drop the announce option; just remove the stderr output completely

Change-Id: I5f273da37396df42a08ed2a959d7ac035ae04126
Signed-off-by: Simon Glass <>
3 years agoupstream: dtc: Basic integer expressions 83/20083/1
Stephen Warren [Wed, 4 Apr 2012 02:56:00 +0000 (20:56 -0600)]
upstream: dtc: Basic integer expressions

Written by David Gibson <>. Additions by me:
* Ported to ToT dtc.
* Renamed cell to integer throughout.
* Implemented value range checks.
* Allow U/L/UL/LL/ULL suffix on literals.
* Enabled the commented test.

TEST=make check
Change-Id: Icbc8251076871cfe34cdf093034e1a44827ecdab
Signed-off-by: Stephen Warren <>
3 years agoAdd pre-submit checks for dtc 12/17512/4 factory-1987.B release-R19-2046.B
Simon Glass [Wed, 7 Mar 2012 19:22:23 +0000 (11:22 -0800)]
Add pre-submit checks for dtc

We don't want to check tabs or the license.

TEST=FEATURES=repo upload, check that tab and license errors are not given

Change-Id: Iebd2c7ce2045ab45f49327e838c561cd28955de1

3 years agodtc: Add -i option to support search paths 09/17509/4
Simon Glass [Wed, 7 Mar 2012 00:10:43 +0000 (16:10 -0800)]
dtc: Add -i option to support search paths

It is often inconvenient to place device tree files in the same directory
as their includes, or to specify the full path to include files.

An example of this is in U-Boot where we have a .dtsi file for each SOC
type, and this is included by the board .dts file. We need to either use
a mechanism like:

/include/ ARCH_CPU_DTS

with sed or cpp to perform the replacement with the correct path, or
we must specify the full path in the file:

/include/ "../../arch/arm/dts/tegra20.dtsi"

The first option is not desirable since it requires anyone compiling the
file to first pre-process it. The second is not desirable since it
introduces a path which is project-specific into a file which is supposed
to be a hardware description. For example Linux and U-Boot are unlikely to
put these include files in the same place.

It is much more convenient to specify the search patch on the command line
as is done with C pre-processors, for example.

Introduce a -i option to add to the list of search paths used to find
source and include files.

We cannot use -I as it is already in use. Other suggestions welcome.

Series-to: dts
Series-cc: david, jon
Series-version: 2
Series-changes: 2
- Move struct search_path to C file
- Fix comment typo

TEST=FEATURES=test sudo -E emerge dtc

Change-Id: Ia90dc5c498bb81d07f7ea74bac53202669ee8e25

3 years agoupstream: fdtget: Add -d to provide a default value 08/17508/3
Simon Glass [Fri, 2 Mar 2012 22:31:26 +0000 (14:31 -0800)]
upstream: fdtget: Add -d to provide a default value

Sometimes the requested node or property is not present in the device
tree. This option provides a way of reporting a default value in this
case, rather than halting with an error.

Series-changes: 2
- Rebased on top of changes to the -l patch

Series-to: dts
Series-cc: david, jon
Series-version: 2
Acked-by: David Gibson <>
(pulled in from mailing list after ack)
TEST=FEATURES=test sudo -E emerge dtc

Change-Id: I7cc1a4d89a1bf6b8224844d217773502a26357f8

3 years agoupstream: fdtget: Add -l to list the subnodes of a node 07/17507/3
Simon Glass [Fri, 2 Mar 2012 19:28:33 +0000 (11:28 -0800)]
upstream: fdtget: Add -l to list the subnodes of a node

This option lists the subnodes of each node given as a parameter, one
subnode per line.

Series-changes: 2
- Change the term 'child' to 'subnode'

Acked-by: David Gibson <>
(pulled in from mailing list after ack)
TEST=FEATURES=test sudo -E emerge dtc

Change-Id: I54acdbfc992dbb38c1fff1d49a3626ca18d39266

3 years agoupstream: fdtget: Add -p to list the properties of a node 06/17506/3
Simon Glass [Thu, 7 Jul 2011 04:13:22 +0000 (21:13 -0700)]
upstream: fdtget: Add -p to list the properties of a node

This option lists the properties of each node given as a parameter, one
property per line.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
(pulled in from mailing list after ack)
TEST=FEATURES=test sudo -E emerge dtc

Change-Id: Ibfe98286707d6d1490964e7601e29b0c464fa934

3 years agoupstream: fdtget: Fix multiple arg bug and add test for it 05/17505/3
Simon Glass [Fri, 2 Mar 2012 19:32:30 +0000 (11:32 -0800)]
upstream: fdtget: Fix multiple arg bug and add test for it

There is a rather unfortunate bug in fdtget in that if multiple argument
sets are provided, it just repeats displaying the first set ones for
each set.

Fix this bug and add a test for it.

Acked-by: David Gibson <>
(pulled in from mailing list after ack)
TEST=FEATURES=test sudo -E emerge dtc

Change-Id: If9f38673776f3e6c3e4e099411fd70426752f6ca

3 years agodtc: Fix zero-length input segfault
Horst Kronstorfer [Tue, 7 Feb 2012 09:02:53 +0000 (10:02 +0100)]
dtc: Fix zero-length input segfault

This patch fixes a segmentation fault caused by dereferencing a NULL
pointer (pos->file aka yylloc.file) in srcpos_string when the input
length is 0 (fe 'dtc </dev/null'.) Reason: yylloc.file is initialized
with 0 and the tokenizer, which updates yylloc.file via srcpos_update
doesn't get a chance to run on zero-length input.

Signed-off-by: Horst Kronstorfer <>
3 years agoFix uninitialized access bug in utilfdt_decode_type
David Gibson [Fri, 3 Feb 2012 06:06:12 +0000 (17:06 +1100)]
Fix uninitialized access bug in utilfdt_decode_type

I just found this little bug with valgrind.  strchr() will return true
if the given character is '\0'.  This meant that utilfdt_decode_type()
could take a path which accesses uninitialized data when given the
(invalid) format string "L".

Signed-off-by: David Gibson <>
3 years agoGenerate test data for fdtput more sensibly
David Gibson [Fri, 3 Feb 2012 05:12:09 +0000 (16:12 +1100)]
Generate test data for fdtput more sensibly

Currently generates several files of text test data.  The
procedure it uses for this is somewhat torturous and has several problems:
 * Since the test data is derived from a dts file, a cursory glance at the
test output suggests something is wrong with the processing of that dts.
This is misleading since in fact it's just being used as an arbirary
 * Since the base input has linefeeds removed, the head and sort commands
used later have no effect.
 * Although an attempt is made to get rid of characters which the shell
will mangle, it's not thorough enough.  Specifically it leaves in \ which
means that some string escapes found in the input data can get expanded
somewhere along the line in some shells.

This patch, therefore, replaces this generation of test data with a
pre-canned "Lorem ipsum" of approximately 2k.  On my system, where /bin/sh
is dash, this fixes a test failure due to the aforementioned string
escapes being evaluated on one but not the other of the two comparison
paths (I haven't tracked down exactly where the expansion is happening).

Signed-off-by: David Gibson <>
3 years agoDon't use diff to check fdt{get,put} results
David Gibson [Fri, 3 Feb 2012 05:12:08 +0000 (16:12 +1100)]
Don't use diff to check fdt{get,put} results

Currently the fdt{get,put} scripts invoke diff to check if
fdt{get,put} did the right thing.  This isn't great though: it's not
obvious from the diff output which is the expected and which is the
actual result; diff's line by line behaviour is useless here, since all
the results are a single line and finally, when there is a difference
it always prints information even when the tests are supposed to be
running in quiet mode.

This patch uses cmp instead, and explicitly prints the expected results,
when running in verbose mode (the invocation of fdtget itself will have
already displayed the actual results in this mode.

Signed-off-by: David Gibson <>
3 years agoClean up invocation of fdt{get,put} tests
David Gibson [Fri, 3 Feb 2012 05:12:07 +0000 (16:12 +1100)]
Clean up invocation of fdt{get,put} tests

This patch cleans up how the fdtget and fdtput tests are invoked.
Specifically we no longer hide the full command lines with a wrapper
function - this makes it possible to distinguish fdtget from similar
fdtput tests and makes it easier to work out how to manually invoke an
individual failing test.

In addition, we remove the testing for errors from the
fdt{get,put} script, instead using an internal wrapper
analagous to run_wrap_test which can test for any program invocation
that's expected to return an error.

For a couple of the fdtput tests this would result in printing out
ludicrously large command lines.  Therefore we introduce a new
mechanism to cut those down to something reasonable.

Signed-off-by: David Gibson <>
3 years agoFactor signal checks out of test scripts
David Gibson [Fri, 3 Feb 2012 05:12:06 +0000 (16:12 +1100)]
Factor signal checks out of test scripts

Several test scripts now have some code to check for a program returning
a signal, and reporting a suitable failure.  This patch moves this
duplicated code into a helper function in  At the same time we
remove a bashism found in the current copies (using the non portablr $[ ]
construct for arithmetic).

Signed-off-by: David Gibson <>
3 years agoRemove bashism from
David Gibson [Fri, 3 Feb 2012 05:12:05 +0000 (16:12 +1100)]
Remove bashism from

The patches introducing fdtget and fdtput inserted a peculiar bashism to using non-portable assignment within an (( )) expression.
This patch fixes it.

Signed-off-by: David Gibson <>
3 years agoUse 'trap' builtin to clean up temporaries in test scripts
David Gibson [Fri, 3 Feb 2012 05:12:04 +0000 (16:12 +1100)]
Use 'trap' builtin to clean up temporaries in test scripts

Some of the test scripts create temporary files, which we remove at the
end.  Except that we usually forgot to remove them on some exit paths. To
avoid this problem in future, this modifies the scripts to use the shell's
trap 0 functionality to automatically remove the temporaries on any exit.

Signed-off-by: David Gibson <>
3 years agoRemove unused variable from test scripts
David Gibson [Fri, 3 Feb 2012 05:12:03 +0000 (16:12 +1100)]
Remove unused variable from test scripts

Several of the test scripts remove $TMPFILE, without ever having set
the TMPFILE variable. This patch fixes it.

Signed-off-by: David Gibson <>
3 years agoTrivial style fixup
David Gibson [Fri, 3 Feb 2012 05:12:02 +0000 (16:12 +1100)]
Trivial style fixup

Having braces on an if branch but not the else branch, or vice
versa is ugly and can trick you when reading the code.

Signed-off-by: David Gibson <>
3 years agoAdd quilt files to .gitignore
David Gibson [Fri, 3 Feb 2012 05:12:01 +0000 (16:12 +1100)]
Add quilt files to .gitignore

For the benefit of quilt users (such as myself, sometimes) have git
ignore the quilt control and patches files.

Signed-off-by: David Gibson <>
3 years agoUpdate .gitignore for tests
David Gibson [Fri, 3 Feb 2012 05:12:00 +0000 (16:12 +1100)]
Update .gitignore for tests

We've add some test (generated) binaries that aren't currently listed in
.gitignore, in addition more scripts now generate various tmp.* files
during operation.  This adds them all to .gitignore.

Signed-off-by: David Gibson <>
3 years agoIntroduce ${TESTS_BIN} in Makefiles to identify tested executables.
Jon Loeliger [Sat, 21 Jan 2012 21:24:51 +0000 (15:24 -0600)]
Introduce ${TESTS_BIN} in Makefiles to identify tested executables.

3 years agoAdd fdtput utility to write property values to a device tree
Simon Glass [Sat, 21 Jan 2012 18:14:48 +0000 (10:14 -0800)]
Add fdtput utility to write property values to a device tree

This simple utility allows writing of values into a device tree from the
command line. It aimes to be the opposite of fdtget.

What is it for:
- Updating fdt values when a binary blob already exists
   (even though source may be available it might be easier to use this
    utility rather than sed, etc.)
- Writing machine-specific fdt values within a build system

To use it, specify the fdt binary file on command line followed by the node
and property to set. Then, provide a list of values to put into that
property. Often there will be just one, but fdtput also supports arrays and
string lists.

fdtput does not try to guess the type of the property based on looking at
the arguments. Instead it always assumes that an integer is provided. To
indicate that you want to write a string, use -ts. You can also provide
hex values with -tx.

The command line arguments are joined together into a single value. For
strings, a nul terminator is placed between each string when it is packed
into the property. To avoid this, pass the string as a single argument.

fdtput <options> <dt file> <<node> <property> [<value>...]
-t <type> Type of data
-v Verbose: display each value decoded from command line
-h Print this help

<type> s=string, i=int, u=unsigned, x=hex
Optional modifier prefix:
hh or b=byte, h=2 byte, l=4 byte (default)

To read from stdin and write to stdout, use - as the file. So you can do:

cat somefile.dtb | fdtput -ts - /node prop "My string value" > newfile.dtb

This commit also adds basic tests to verify the major features.

Signed-off-by: Simon Glass <>
3 years agoAdd fdtget utility to read property values from a device tree
Simon Glass [Sat, 21 Jan 2012 18:14:47 +0000 (10:14 -0800)]
Add fdtget utility to read property values from a device tree

This simply utility makes it easy for scripts to read values from the device
tree. It is written in C and uses the same libfdt as the rest of the dtc

What is it for:
- Reading fdt values from scripts
- Extracting fdt information within build systems
- Looking at particular values without having to dump the entire tree

To use it, specify the fdt binary file on command line followed by a list of
node, property pairs. The utility then looks up each node, finds the property
and displays the value.

Each value is printed on a new line.

fdtget tries to guess the type of each property based on its contents. This
is not always reliable, so you can use the -t option to force fdtget to decode
the value as a string, or byte, etc.

To read from stdin, use - as the file.

fdtget <options> <dt file> [<node> <property>]...
-t <type> Type of data
-h Print this help

<type> s=string, i=int, u=unsigned, x=hex
Optional modifier prefix:
hh or b=byte, h=2 byte, l=4 byte (default)

Signed-off-by: Simon Glass <>
3 years agodtc: Implement -d option to write out a dependency file
Stephen Warren [Thu, 12 Jan 2012 18:31:00 +0000 (11:31 -0700)]
dtc: Implement -d option to write out a dependency file

This will allow callers to rebuild .dtb files when any of the /include/d
.dtsi files are modified, not just the top-level .dts file.

Signed-off-by: Stephen Warren <>
Acked-by: David Gibson <>
3 years agolibfdt: Activate testcase for appending properties
David Gibson [Wed, 11 Jan 2012 12:41:32 +0000 (23:41 +1100)]
libfdt: Activate testcase for appending properties

Commit a31e3ef83bfce62d07695355e5f06cd4d0e44b86 introduced new libfdt
functions to append to existing properties.  It also included a test case
for this, but neglected to update the Makefile and script
to actually build and execute this testcase.

This patch corrects the oversight.

Signed-off-by: David Gibson <>
3 years agolibfdt: Add support for appending the values to a existing property
Minghuan Lian [Mon, 5 Dec 2011 01:22:07 +0000 (12:22 +1100)]
libfdt: Add support for appending the values to a existing property

Some properties may contain multiple values, these values may need
to be added to the property respectively. this patch provides this
functionality. The main purpose of fdt_append_prop() is to append
the values to a existing property, or create a new property if it
dose not exist.

Signed-off-by: Minghuan Lian <>
Signed-off-by: David Gibson <>
3 years agofdtdump: rename from ftdump
Mike Frysinger [Tue, 25 Oct 2011 21:29:24 +0000 (17:29 -0400)]
fdtdump: rename from ftdump

The freetype package already installs a binary named "ftdump", so the dtc
package conflicts with that.  So rename the newer dtc tool to "fdtdump".
This even makes a bit more sense:
ftdump: [F]lat device [T]ree [dump]
fdtdump: [F]lat [D]evice [T]ree [dump]

Signed-off-by: Mike Frysinger <>
Acked-by: David Gibson <>
3 years agodtc: Add support for variable sized elements
Anton Staaf [Tue, 11 Oct 2011 17:22:29 +0000 (10:22 -0700)]
dtc: Add support for variable sized elements

Elements of size 8, 16, 32, and 64 bits are supported.  The new
/bits/ syntax was selected so as to not pollute the reserved
keyword space with uint8/uint16/... type names.

With this patch the following property assignment:

    property = /bits/ 16 <0x1234 0x5678 0x0 0xffff>;

is equivalent to:

    property = <0x12345678 0x0000ffff>;

It is now also possible to directly specify a 64 bit literal in a
cell list, also known as an array using:

    property = /bits/ 64 <0xdeadbeef00000000>;

It is an error to attempt to store a literal into an element that is
too small to hold the literal, and the compiler will generate an
error when it detects this.  For instance:

    property = /bits/ 8 <256>;

Will fail to compile.  It is also an error to attempt to place a
reference in a non 32-bit element.

The documentation has been changed to reflect that the cell list
is now an array of elements that can be of sizes other than the
default 32-bit cell size.

The sized_cells test tests the creation and access of 8, 16, 32,
and 64-bit sized elements.  It also tests that the creation of two
properties, one with 16 bit elements and one with 32 bit elements
result in the same property contents.

Signed-off-by: Anton Staaf <>
Acked-by: David Gibson <>
3 years agodtc: Add data_append_integer function
Anton Staaf [Tue, 11 Oct 2011 17:22:28 +0000 (10:22 -0700)]
dtc: Add data_append_integer function

This function deals with appending integers of various sizes (8, 16
32, and 64 bit currently).  It handles endianess conversions.  If the
integer will not fit in the requested number of bits of storage it
will have it's high bits ignored.

This patch also rewrites data_append_cell and data_append_addr to use

Signed-off-by: Anton Staaf <>
Acked-by: David Gibson <>
3 years agolibfdt: Add fdt16_to_cpu utility function
Anton Staaf [Tue, 11 Oct 2011 17:22:27 +0000 (10:22 -0700)]
libfdt: Add fdt16_to_cpu utility function

This utility routine will be used in the variable size cell literal
append code.  It is a straightforward adaptation of the fdt32_to_cpu

Signed-off-by: Anton Staaf <>
Acked-by: David Gibson <>
3 years agoftdump: use utilfdt to read blob
Simon Glass [Thu, 22 Sep 2011 17:11:04 +0000 (10:11 -0700)]
ftdump: use utilfdt to read blob

Now that we have utilfdt_read(), ftdump should use it too.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
3 years agoMake testutils use utilfdt
Simon Glass [Thu, 22 Sep 2011 17:11:03 +0000 (10:11 -0700)]
Make testutils use utilfdt

The load_blob() and save_blob() functions are very similar to the utilfdt
versions. This removes the duplicated code.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
3 years agoAdd fdt read/write utility functions
Simon Glass [Thu, 22 Sep 2011 17:11:02 +0000 (10:11 -0700)]
Add fdt read/write utility functions

This adds higher-level libfdt operations for reading/writing an fdt
blob from/to a file, as well as a function to decode a data type string
as will be used by fdtget, fdtput.

This also adds a few tests for the simple type argument supported by

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
3 years agoCreate Makefile.utils and move ftdump into it
Simon Glass [Wed, 21 Sep 2011 20:32:44 +0000 (13:32 -0700)]
Create Makefile.utils and move ftdump into it

We want to avoid a separate Makefile include for each utility, so this sets
up a general one for utilities.

Acked-by: David Gibson <>
Signed-off-by: Simon Glass <>
3 years agodtc: Support character literals in cell lists
Anton Staaf [Fri, 9 Sep 2011 19:16:30 +0000 (12:16 -0700)]
dtc: Support character literals in cell lists

With this patch the following property assignment:

    property = <0x12345678 'a' '\r' 100>;

is equivalent to:

    property = <0x12345678 0x00000061 0x0000000D 0x00000064>

Signed-off-by: Anton Staaf <>
Acked-by: David Gibson <>
3 years agodtc: Remove gcc 4.6 "set but not used" warnings
David Gibson [Mon, 12 Sep 2011 01:18:43 +0000 (11:18 +1000)]
dtc: Remove gcc 4.6 "set but not used" warnings

A number of the dtc testcases trigger the new "variable set but not
used" warning from gcc 4.6.  That is they have variables which are
assigned, but then never read after that point.

In a couple of cases this is just because the variables aren't needed,
so this patch removes them.  In subnode_offset.c, it's because one
pair of variables we clearly intended to test we don't actually test.
This patch also adds this missing check.

This patch makes the testsuite compile clean with gcc 4.6.

Signed-off-by: David Gibson <>
3 years agodtc: Refactor character literal parsing code
Anton Staaf [Fri, 9 Sep 2011 19:16:29 +0000 (12:16 -0700)]
dtc: Refactor character literal parsing code

Move the parsing of hex, octal and escaped characters from data.c
to util.c where it can be used for character literal parsing within
strings as well as for stand alone C style character literals.

Signed-off-by: Anton Staaf <>
Acked-by: David Gibson <>
3 years agoAdd missing tests to .gitignore
Simon Glass [Tue, 5 Jul 2011 19:02:52 +0000 (12:02 -0700)]
Add missing tests to .gitignore

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
3 years agoSplit out is_printable_string() into util.c
Simon Glass [Tue, 5 Jul 2011 19:02:49 +0000 (12:02 -0700)]
Split out is_printable_string() into util.c

This useful function is split out so it will be available to programs
other than ftdump.

Signed-off-by: Simon Glass <>
Acked-by: David Gibson <>
3 years agodtc: Remove unused variable in flat_read_mem_reserve
Josh Boyer [Tue, 28 Jun 2011 13:47:11 +0000 (09:47 -0400)]
dtc: Remove unused variable in flat_read_mem_reserve

The *p variable is declared and used to save inb->ptr, however p is
later never used.  This has been the case since commit 6c0f3676 and can
lead to build failures with -Werror=unused-but-set-variable:

flattree.c: In function 'flat_read_mem_reserve':
flattree.c:700:14: error: variable 'p' set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make: *** [flattree.o] Error 1

Remove the variable.

Signed-off-by: Josh Boyer <>
Acked-by: David Gibson <>
3 years agodtc: Remove unused check variable
Josh Boyer [Tue, 28 Jun 2011 12:47:09 +0000 (08:47 -0400)]
dtc: Remove unused check variable

Commit 376ab6f2 removed the old style check functionality from DTC,
however the check option and variable were not removed.  This leads to
build failures when -Werror=unused-but-set-variable is specified:

dtc.c: In function 'main':
dtc.c:102:17: error: variable 'check' set but not used [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make: *** [dtc.o] Error 1
make: *** Waiting for unfinished jobs....

Remove the check variable.

Signed-off-by: Josh Boyer <>
Acked-by: David Gibson <>
4 years agoTag Version 1.3.0
Jon Loeliger [Sun, 8 May 2011 19:45:39 +0000 (14:45 -0500)]
Tag Version 1.3.0

Signed-off-by: Jon Loeliger <>
4 years agolibfdt: include version number in soname
Paolo Bonzini [Tue, 26 Apr 2011 10:45:27 +0000 (20:45 +1000)]
libfdt: include version number in soname

The libfdt shared library is only installed by its unversioned name.
Including it properly in a distribution requires installation of both
the versioned name (used in the binary-only package) and the unversioned
name (used in the development package).  The latter is just a symbolic
link, so you need to change the soname in turn to include the version.

While at it, use Makefile variables to shorten some lines and avoid
cut-and-paste typos; and clean up remnants of when shared libraries were
not supported on Darwin.

Signed-off-by: Paolo Bonzini <>
Signed-off-by: David Gibson <>
4 years agodtc: Add code to make diffing trees easier
David Gibson [Tue, 9 Nov 2010 22:51:09 +0000 (09:51 +1100)]
dtc: Add code to make diffing trees easier

This patch adds a "dtdiff" script to do a useful form diff of two
device trees.  This automatically converts the tree to dts form (if
it's not already) and uses a new "-s" option in dtc to "sort" the
tree.  That is, it sorts the reserve entries, it sorts the properties
within each node by name, and it sorts nodes by name within their

This gives a pretty sensible diff between the trees, which will ignore
semantically null internal rearrangements (directly diffing the dts
files can give a lot of noise due to the order changes).

Signed-off-by: David Gibson <>
4 years agoAllow nodes to be referenced by path at the top level.
John Bonesio [Tue, 2 Nov 2010 22:55:04 +0000 (15:55 -0700)]
Allow nodes to be referenced by path at the top level.

When nodes are modified by merging device trees, nodes to be updated/merged can
be specified by a label. Specifying nodes by full path (instead of label)
doesn't quite work. This patch fixes that.

Signed-off-by: John Bonesio <>
Acked-by: David Gibson <>
4 years agoCreate new and use new print_error that uses printf style formatting.
John Bonesio [Wed, 20 Oct 2010 21:44:58 +0000 (14:44 -0700)]
Create new and use new print_error that uses printf style formatting.

yyerror is meant to be called by the parser internal code, and it's interface
is limited. Instead create and call a new error message routine that allows
formatted strings to be used.

yyerror uses the new routine so error formatting remains consistent.

Signed-of-by: John Bonesio <>
Acked-by: David Gibson <>
Signed-off-by: Grant Likely <>
4 years agoAdd merging of labelled subnodes. This patch allows the following
David Gibson [Mon, 20 Sep 2010 22:33:34 +0000 (16:33 -0600)]
Add merging of labelled subnodes. This patch allows the following


/ {
child {
label: subchild {

&label {
prop = "value";

which will result in the following tree:

/ {
child {
label: subchild {
prop = "value";

Signed-off-by: David Gibson <>
Signed-off-by: Grant Likely <>
4 years agoRemove another bashism from
David Gibson [Mon, 30 Aug 2010 02:53:03 +0000 (12:53 +1000)]
Remove another bashism from

Current we check for various error codes with [ $x == "NN" ].  However
'==' is not actually a correct operator for the [ (test) command.  It
should be either '=' for string comparison or '-eq' for integer
comparison.  It appears that the bash builtin version of test
implements '==' though, so we were getting away with it, as long as
/bin/sh was bash - or the testsuite generated no errors.

This patch fixes the usage of test so that it should work on non-bash

Signed-off-by: David Gibson <>
4 years agoFix a filehandle leak
Martin Ettl [Wed, 14 Jul 2010 06:10:56 +0000 (16:10 +1000)]
Fix a filehandle leak

During a check of the current git head of the linux kernel with the
static code analysis tool cppcheck
the tool discovered a resource leak in linux-2.6/scripts/dtc/fstree.c.

Please refer the attached patch, that fixes the issue.


Signed-off-by: Martin Ettl <>
Signed-off-by: Michal Marek <>
Signed-off-by: David Gibson <>
5 years agodtc: Extend and better test dtbs_equal utility programs (resend)
David Gibson [Fri, 30 Apr 2010 05:30:00 +0000 (15:30 +1000)]
dtc: Extend and better test dtbs_equal utility programs (resend)

The dtbs_equal_ordered test program is used to implement a number of
testcases.  However, the test program itself has never been
particularly well tested.  In addition there are testcases coming in
future for which it would be useful to have a corresponding
"dtbs_equal_unordered" which checks for equality of device trees, not
considering the internal ordering of elements.  Finally, for some
tests we may want it would be useful to check trees for equality with
the PASS case being when they are *not* equal.

This patch addresses all of the above.  A dtbs_equal_unordered is
added, and both it and the existing dtbs_equal_ordered program now
take a -n option to make the PASS case be where the trees are not
equal.  A number of example trees with slight modifications from
test_tree1 are used to verify that both these programs correctly
identify when the tree is altered, and a dtb_reverse program is used
to verify that the unordered version does not depend on internal
ordering.  These new testcases for the equality testing programs are
split out into a new test group in

dtbs_equal_unordered uses the new property iteration functions, and so
this also acts as further testing for those functions.
dtbs_equal_unordered will be useful for further testing the recently
added tree-merging code and its upcoming extensions.

Signed-off-by: David Gibson <>
5 years agodtc: Add -Wredundant-decls (resend)
David Gibson [Fri, 30 Apr 2010 05:27:32 +0000 (15:27 +1000)]
dtc: Add -Wredundant-decls (resend)

We are almost clean already with the -Wredundant-decls warning.  The
only exception is a declaration for isatty() inside the flex-generated
code.  This can be removed by using flex's "never-interactive" option,
which we probably should be using anyway, since we never parse
interactively in the sense that this option implies.

Signed-off-by: David Gibson <>
5 years agolibfdt: Implement property iteration functions
David Gibson [Tue, 9 Mar 2010 06:39:14 +0000 (17:39 +1100)]
libfdt: Implement property iteration functions

For ages, we've been talking about adding functions to libfdt to allow
iteration through properties.  So, finally, here are some.

I got bogged down on this for a long time because I didn't want to
expose offsets directly to properties to the callers.  But without
that, attempting to make reasonable iteration functions just became
horrible.  So eventually, I settled on an interface which does now
expose property offsets.  fdt_first_property_offset() and
fdt_next_property_offset() are used to step through the offsets of the
properties starting from a particularly node offset.  The details of
the property at each offset can then be retrieved with either
fdt_get_property_by_offset() or fdt_getprop_by_offset() which have
interfaces similar to fdt_get_property() and fdt_getprop()

No explicit testcases are included, but we do use the new functions to
reimplement the existing fdt_get_property() function.

Signed-off-by: David Gibson <>
5 years agodtc: Enable more warnings
David Gibson [Mon, 8 Mar 2010 23:49:33 +0000 (10:49 +1100)]
dtc: Enable more warnings

This patch turns on a bunch of extra gcc warnings, most of which are
probably a good idea.  Of the new warnings -Wnested-externs and
-Wstrict-prototypes need no code changes, we're already warning-clean.
The remaining one, -Wmissing-prototypes requires trivial changes in
some of the tests (making functions local).

This patch also rearranges the warnings flags into a separate make
variable for convenience, and turns on -Werror, to really encourage
people to keep the code warning-clean.

Signed-off-by: David Gibson <>
5 years agodtc: Correct headers in util.c
David Gibson [Wed, 3 Mar 2010 05:38:01 +0000 (16:38 +1100)]
dtc: Correct headers in util.c

Since util.c is used in programs other than full dtc, it shouldn't
include the full dtc.h, just util.h which has prototypes directly
relevant to it.  This patch makes the change, and also adds includes
of the necessary system headers which were previously included
indirectly by dtc.h.

Signed-off-by: David Gibson <>
5 years agoUpdate .gitignore files
Grant Likely [Wed, 24 Feb 2010 19:06:23 +0000 (12:06 -0700)]
Update .gitignore files

Filter out all the generated bits from git revision control

Signed-off-by: Grant Likely <>
5 years agoAllow device tree to be modified by additonal device tree sections
Grant Likely [Thu, 25 Feb 2010 16:58:29 +0000 (09:58 -0700)]
Allow device tree to be modified by additonal device tree sections

This patch allows the following construct:

/ {
property-a = "old";
property-b = "does not change";

/ {
property-a = "changed";
property-c = "new";
node-a {

Where the later device tree overrides the properties found in the
earlier tree.  This is useful for laying down a template device tree
in an include file and modifying it for a specific board without having
to clone the entire tree.

Signed-off-by: Grant Likely <>
5 years agodtc: Audit and fix valgrind errors
David Gibson [Wed, 24 Feb 2010 11:29:19 +0000 (22:29 +1100)]
dtc: Audit and fix valgrind errors

The somewhat embarrasing bug in the first version of my previous patch
would have been detected by valgrind.  Thus reminded, I've run the
testsuite under valgrind and fixed any errors I found.  This turned
out to be just some uninitialized buffers in test programs.  The
fragments of uninitialized data aren't particularly important, but we
might as well squash the valgrind warnings, so that future valgrind
errors will stand out.

Signed-off-by: David Gibson <>
5 years agodtc: Allow multiple labels on nodes and properties
David Gibson [Wed, 24 Feb 2010 07:22:17 +0000 (18:22 +1100)]
dtc: Allow multiple labels on nodes and properties

At present, both the grammar and our internal data structures mean
that there can be only one label on a node or property.  This is a
fairly arbitrary constraint, given that any number of value labels can
appear at the same point, and that in C you can have any number of
labels on the same statement.

This is pretty much a non-issue now, but it may become important with
some of the extensions that Grant and I have in mind.  It's not that
hard to change, so this patch does so, allowing an arbitrary number of
labels on any given node or property.  As usual a testcase is added

Signed-off-by: David Gibson <>
Acked-by: Grant Likely <>
5 years agoRemove obsolete references_dts0 test
David Gibson [Tue, 23 Feb 2010 14:23:37 +0000 (01:23 +1100)]
Remove obsolete references_dts0 test

The only purpose of the dtc_references_dts0 testcase was to check
handling of references in the old dts v0 syntax.  Since we no longer
support the old syntax, and the references_dts0.dts has been converted
to the new format, it's entirely redundant.  This patch removes it.

Signed-off-by: David Gibson <>
5 years agoDisallow re-use of the same label within a dts file
David Gibson [Tue, 23 Feb 2010 08:56:41 +0000 (19:56 +1100)]
Disallow re-use of the same label within a dts file

Currently, nothing will stop you from re-using the same label string
multiple times in a dts, e.g.:
/ {
samelabel: prop1 = "foo";
samelabel: prop2 = "bar";

/ {
samelabel: prop1 = "foo";
samelabel: subnode {

When using node references by label, this could lead to confusing
results (with no warning), and in -Oasm mode will result in output
which the assembler will complain about (since it too will have
duplicate labels).

This patch, therefore, adds code to checks.c to give errors if you
attempt to re-use the same label.  It treats all labels (node,
property, and value) as residing in the same namespace, since the
assembler will treat them so for -Oasm mode.

Testcases for the new code are also added.

Signed-off-by: David Gibson <>
5 years agodtc: Automatically pick a sensible boot_cpuid_phys
David Gibson [Fri, 19 Feb 2010 04:50:50 +0000 (15:50 +1100)]
dtc: Automatically pick a sensible boot_cpuid_phys

Currently, when in -Idts -Odtb or -Ifs -Odtb modes, dtc always
defaults to using 0 as the value for the boot_cpuid_phys header field.
That's correct quite often, but there are some systems where there is
no CPU with hardware ID of 0, or where we don't want to use the CPU
with hardware ID 0 at all (e.g. for AMP-style partitioning).  The only
way to override this default currently, is with the -b command line

This patch improves dtc to instead base the default boot_cpuid_phys
value on the reg property of the first listed subnode of /cpus.  This
means that dtc will get boot_cpuid_phys correct by default in a
greater proportion of cases (since the boot cpu is usually listed
first, and this way at least the boot_cpuid_phys default will match
some existing cpu node).  If the node doesn't exist or has an invalid
'reg' property (missing or not 4 bytes in length), then
boot_cpuid_phys is set to 0.

Signed-off-by: David Gibson <>
5 years agoModification of lexer and parser, improving dtc portability.
Lukasz Wojcik [Fri, 29 Jan 2010 16:31:51 +0000 (17:31 +0100)]
Modification of lexer and parser, improving dtc portability.

This mod allows successful build of dtc using both bison/flex and yacc/lex.

Signed-off-by: Lukasz Wojcik <>
Acked-by: David Gibson <>
5 years agodtc: Cleanup YYLTYPE and YYLLOC_DEFAULT declarations
David Gibson [Tue, 8 Dec 2009 03:24:42 +0000 (14:24 +1100)]
dtc: Cleanup YYLTYPE and YYLLOC_DEFAULT declarations

This patch makes some small cleanups to the declaration of YYLTYPE,
YYLLOC_DEFAULT and related things.

- We used to use undocumented magic #defines for bison,
          YYLTYPE_IS_DECLARED and YYLTYPE_IS_TRIVIAL.  This may not be
          portable across bison versions.  Instead define YYLTYPE as a
          macro in terms of struct srcpos, as the info pages suggest.

- Our kernel-derived coding style discourages typedefed
          structures.  So use 'struct srcpos' instead of 'srcpos'

- Indent the YYLLOC_DEFAULT macro according to our coding
          style (it was in GNU indent style, since it was taken from
          the example in the bison info).

Signed-off-by: David Gibson <>
5 years agodtc: Cleanup srcpos_string()
David Gibson [Tue, 8 Dec 2009 03:24:42 +0000 (14:24 +1100)]
dtc: Cleanup srcpos_string()

There are several small problems with the current srcpos_string().

- The code unnecessarily uses a temp buffer and two rounds of
  *printf(); a single asprintf() will suffice.

- With previous changes, pos->file->name can never be NULL,
          and the name field for a srcfile bound to stdin is already
          set to something sensible.

- On allocation failure in asprintf() it returns a bogus
          result, instead of causing a fatal error like every other
          failed allocation.

- The format for representing file/line/column is gratuitously
          different from the file/line format we used to use, and the
          format used by gcc and bison.

This patch addresses all of these.  There remains the problem that
asprintf() is not portable, but that can wait until another patch.

Signed-off-by: David Gibson <>
5 years agodtc: Cleanup line number tracking, add column number tracking
David Gibson [Tue, 8 Dec 2009 03:24:42 +0000 (14:24 +1100)]
dtc: Cleanup line number tracking, add column number tracking

Our YYLTYPE current carries around first and last line and first and
last column information.  However, of these, on the first line
information is actually filled in properly.

Furthermore, filling in the line number information from yylineno is
kind of clunky: we have to copy its value to the srcfile stack and
back to handle include file positioning correctly.

This patch cleans this up.  We turn off flex's yylineno option and
instead track the line and column number ourselves from
YY_USER_ACTION.  The line and column number are stored directly inside
the srcfile_state structure, so it's automatically a per-file
quantity.  We now also fill in all the yylloc from YY_USER_ACTION.

Signed-off-by: David Gibson <>
5 years agodtc: Simpler interface to source file management
David Gibson [Tue, 8 Dec 2009 03:24:42 +0000 (14:24 +1100)]
dtc: Simpler interface to source file management

This patch cleans up our handling of input files, particularly dts
source files, but also (to an extent) other input files such as those
used by /incbin/ and those used in -I dtb and -I fs modes.

We eliminate the current clunky mechanism which combines search paths
(which we don't actually use at present) with the open relative to
current source file behaviour, which we do.

Instead there's a single srcfile_relative_open() entry point for
callers which opens a new input file relative to the current source
file (which the srcpos code tracks internally).  It doesn't currently
do search paths, but we can add that later without messing with the
callers, by drawing the search path from a global (which makes sense
anyway, rather than shuffling it around the rest of the processing

That suffices for non-dts input files.  For the actual dts files,
srcfile_push() and srcfile_pop() wrappers open the file while also
keeping track of it as the current source file for future opens.

Signed-off-by: David Gibson <>
5 years agoSupport ePAPR compliant phandle properties
David Gibson [Thu, 26 Nov 2009 04:37:13 +0000 (15:37 +1100)]
Support ePAPR compliant phandle properties

Currently, the Linux kernel, libfdt and dtc, when using flattened
device trees encode a node's phandle into a property named
"linux,phandle".  The ePAPR specification, however - aiming as it is
to not be a Linux specific spec - requires that phandles be encoded in
a property named simply "phandle".

This patch adds support for this newer approach to dtc and libfdt.

- fdt_get_phandle() will now return the correct phandle if it
          is supplied in either of these properties

- fdt_node_offset_by_phandle() will correctly find a node with
          the given phandle encoded in either property.

- By default, when auto-generating phandles, dtc will encode
          it into both properties for maximum compatibility.  A new -H
          option allows either only old-style or only new-style
          properties to be generated.

- If phandle properties are explicitly supplied in the dts
  file, dtc will not auto-generate ones in the alternate format.

- If both properties are supplied, dtc will check that they
          have the same value.

- Some existing testcases are updated to use a mix of old and
          new-style phandles, partially testing the changes.

- A new phandle_format test further tests the libfdt support,
          and the -H option.

Signed-off-by: David Gibson <>
5 years agoAssorted cleanups and extensions for ftdump
David Gibson [Tue, 17 Nov 2009 06:00:53 +0000 (17:00 +1100)]
Assorted cleanups and extensions for ftdump

This patch makes a number of minor changes to the ftdump debugging

 * There was an endian bug in one place, which this fixes.

 * We now use const qualifiers in a number of places where we can

 * ftdump can now be instructed to read from stdin by giving "-" as
   the filename.

 * The buffer into which the blob is read is increased from 16k to
   64k, and is now dynamically allocated.

 * ftdump now emits source in dts-v1 format

Since ftdump is little used these days, these fixes are arguably of
little use.  On the other hand, I already did the work of making the
changes some time back, so I guess we might as well fold these small
fixes and improvements in.

Signed-off-by: David Gibson <>
5 years agoFix dtc bugs for 64-bit compile
David Gibson [Thu, 12 Nov 2009 02:30:02 +0000 (13:30 +1100)]
Fix dtc bugs for 64-bit compile

I've just tested building dtc as an x86_64 binary on a 32-bit i386
host by using:
make CC="gcc -m64"
This patch fixes a handful of minor bugs thus discovered:

 * There is a printf() type mismatch on 64-bit in value-labels.c

 * For the tests which use libdl, we were using the GNU make feature
where it will find given a dependency in the form '-ldl'.
But this built-in make logic doesn't know we're compiling 64-bit so
finds the 32-bit version of the library.  We avoid using this and
instead explicitly pass -ldl to CC, which being the 64-bit version
does know where to look.

 * To process dtc's asm output into .so files, was
directly invoking the (default instance of) the assembler and linker.
Instead invoke these via the CC driver, and allow that to be overriden
from the make environment.

 * The x86_64 assembler doesn't 0 fill with the .balign directive
(presumably it is NOP filling).  That doesn't produce strictly
incorrect trees, but it is confusing and confounds are testcases which
do byte-by-byte comparison of the trees produced by asm output with
direct dtb output (which does 0 pad where necessary, of course).  This
patch uses the optional second argument to .balign to force gas to
zero-fill instead.

Signed-off-by: David Gibson <>
5 years agoDon't use echo -e in
David Gibson [Thu, 12 Nov 2009 00:56:34 +0000 (11:56 +1100)]
Don't use echo -e in

In one section, the run_tests script attempts to use the -e (interpret
escapes) option to echo.  This option is not portable - for example
the echo built into dash, now the default /bin/sh on several
distributions does not support it and will just echo "-e" literally.

Since we don't actually use any of the escapes that -e enables, this
patch simply removes it.

Signed-off-by: David Gibson <>
5 years agoUse yylloc instead of yyloc
David Gibson [Thu, 12 Nov 2009 00:14:04 +0000 (11:14 +1100)]
Use yylloc instead of yyloc

yylloc is the correct way to get token positioning information.
yyloc is a bison internal variable that only works by accident.

Signed-off-by: David Gibson <>
5 years agoFix bug in -Odts with properties containing multiple terminating nulls
David Gibson [Wed, 9 Sep 2009 04:38:30 +0000 (14:38 +1000)]
Fix bug in -Odts with properties containing multiple terminating nulls

When in -Odts mode, dtc will not produce correct output for
string-like properties which have more than one \0 character at the
end of the property's bytestring.  In fact, it generates output which
is not syntactically correct.  This patch fixes the bug, and adds a
testcase for future regressions here.

Signed-off-by: David Gibson <>
5 years agoadd Mac OS X support
Jean-Christophe PLAGNIOL-VILLARD [Tue, 26 May 2009 18:07:26 +0000 (20:07 +0200)]
add Mac OS X support

use dylib shared lib extention
allow to specifiy os specific shared lib link option
Mac OS use -dynamiclib instead of -shared, -install_name instead of -soname
and does not support --version-script

add HOSTOS macro to detect the current os you are

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <>
6 years agolibfdt: Fix C++ compile-time cast error on gnu 4.2.1
Laurent Gregoire [Tue, 3 Mar 2009 13:23:59 +0000 (14:23 +0100)]
libfdt: Fix C++ compile-time cast error on gnu 4.2.1

Allow the inclusion of libfdt.h in C++ source.

Signed-off-by: Laurent Gregoire <>
Acked-by: David Gibson <>
6 years agoFix a possible overflow case detected by gcc 4.3.2
Emil Medve [Mon, 23 Feb 2009 16:43:36 +0000 (10:43 -0600)]
Fix a possible overflow case detected by gcc 4.3.2

.../dtc/libfdt/fdt_sw.c: In function 'fdt_end_node':
.../dtc/libfdt/fdt_sw.c:81: error: assuming signed overflow does not occur when assuming that (X + c) < X is always false

Signed-off-by: Emil Medve <>
6 years agoFix libraries (static and dynamic) installation
Emil Medve [Tue, 17 Feb 2009 19:43:40 +0000 (13:43 -0600)]
Fix libraries (static and dynamic) installation

Signed-off-by: Emil Medve <>
6 years agolibfdt: Rework/cleanup fdt_next_tag()
David Gibson [Fri, 6 Feb 2009 03:03:24 +0000 (14:03 +1100)]
libfdt: Rework/cleanup fdt_next_tag()

Currently, callers of fdt_next_tag() must usually follow the call with
some sort of call to fdt_offset_ptr() to verify that the blob isn't
truncated in the middle of the tag data they're going to process.
This is a bit silly, since fdt_next_tag() generally has to call
fdt_offset_ptr() on at least some of the data following the tag for
its own operation.

This patch alters fdt_next_tag() to always use fdt_offset_ptr() to
verify the data between its starting offset and the offset it returns
in nextoffset.  This simplifies fdt_get_property() which no longer has
to verify itself that the property data is all present.

At the same time, I neaten and clarify the error handling for
fdt_next_tag().  Previously, fdt_next_tag() could return -1 instead of
a tag value in some circumstances - which almost none of the callers
checked for.  Also, fdt_next_tag() could return FDT_END either because
it encountered an FDT_END tag, or because it reached the end of the
structure block - no way was provided to tell between these cases.

With this patch, fdt_next_tag() always returns FDT_END with a negative
value in nextoffset for an error.  This means the several places which
loop looking for FDT_END will still work correctly - they only need to
check for errors at the end.  The errors which fdt_next_tag() can
report are:
- -FDT_ERR_TRUNCATED if it reached the end of the structure
   block instead of finding a tag.

- -FDT_BADSTRUCTURE if a bad tag was encountered, or if the
           tag data couldn't be verified with fdt_offset_ptr().

This patch also updates the callers of fdt_next_tag(), where
appropriate, to make use of the new error reporting.

Finally, the prototype for the long gone _fdt_next_tag() is removed
from libfdt_internal.h.

Signed-off-by: David Gibson <>
6 years agolibfdt: Rework fdt_next_node()
David Gibson [Fri, 6 Feb 2009 03:01:56 +0000 (14:01 +1100)]
libfdt: Rework fdt_next_node()

Currently fdt_next_node() will find the next node in the blob
regardless of whether it is above, below or at the same level in the
tree as the starting node - the depth parameter is updated to indicate
which is the case.  When a depth parameter is supplied, this patch
makes it instead terminate immediately when it finds the END_NODE tag
for a node at depth 0.  In this case it returns the offset immediately
past the END_NODE tag.

This has a couple of advantages.  First, this slightly simplifies
fdt_subnode_offset(), which no longer needs to explicitly check that
fdt_next_node()'s iteration hasn't left the starting node.  Second,
this allows fdt_next_node() to be used to implement
_fdt_node_end_offset() considerably simplifying the latter function.

The other users of fdt_next_node() either don't need to iterate out of
the starting node, or don't pass a depth parameter at all.  Any
callers that really need to iterate out of the starting node, but keep
tracking depth can do so by biasing the initial depth value.

This is a semantic change, but I think it's very unlikely to break any
existing library users.

Signed-off-by: David Gibson <>
6 years agodtc: Add testcases for labels within values
David Gibson [Thu, 8 Jan 2009 00:48:48 +0000 (11:48 +1100)]
dtc: Add testcases for labels within values

This patch adds a testcase using asm output mode to check that labels
within property values are correctly processed.

Signed-off-by: David Gibson <>
6 years agodtc: Make asm output more portable and add testcases
David Gibson [Thu, 8 Jan 2009 00:47:55 +0000 (11:47 +1100)]
dtc: Make asm output more portable and add testcases

This patch adds some testcases for dtc's -Oasm mode.  Specifically it
checks that building the asm will result in the same device tree blob
in memory as -Odtb mode would produce, for a variety of trees.  This
test uncovered two difficulties with our current -Oasm output, both of
which are addressed in this patch as well.

First, -Oasm output would only be correct if assembled for a
big-endian target.  Usually that would be the case, when building
device trees into a firmware or similar.  However this makes life
inconvenient for testing on a little-endian target, and one can think
up use cases where a program running on a little endian host might
want to embed a device tree for a big-endian target.  This patch
therefore changes -Oasm output to use .byte directives instead of
.long throughout in order to generate byte-for-byte identical trees
regardless of the endianness of the assembler target.

Second, -Oasm output emitted several #define statements which were
then used in the innards of the output - i.e. it assumed the output
would be processed by cpp before being assembled.  That may not be
convenient in all build environments, and in any case doesn't work
well with the above fix.  So, -Oasm output no longer needs to be
preprocessed before assembling.

Signed-off-by: David Gibson <>
6 years agodtc: Move some functions to util.[ch]
David Gibson [Mon, 5 Jan 2009 01:50:23 +0000 (12:50 +1100)]
dtc: Move some functions to util.[ch]

Now that we have a util.[ch] file shared between dtc and
convert-dtsv0, move some functions which are currently duplicated in
the two to util files.  Specifically we move the die(), xmalloc() and
xrealloc() functions.

While we're at it, add standard double-include protection to util.h

Signed-off-by: David Gibson <>
6 years agolibfdt: Fix error in documentation for fdt_get_alias_namelen()
David Gibson [Mon, 5 Jan 2009 01:46:00 +0000 (12:46 +1100)]
libfdt: Fix error in documentation for fdt_get_alias_namelen()

Oops, screwed up the function name in the documenting comment for this
function.  Trivial correction in this patch.

Signed-off-by: David Gibson <>
6 years agolibfdt: Introduce libfdt shared library
Josh Boyer [Fri, 2 Jan 2009 13:20:34 +0000 (08:20 -0500)]
libfdt: Introduce libfdt shared library

Build a libfdt shared library in addition to the existing .a that is
created.  Symbol versioning is used from the libfdt/ script.

Signed-off-by: Josh Boyer <>