blob: 0cabd13dd498fb991d54cbe993f2f477ac6a5a12 [file] [log] [blame]
David Gibsoncdcb4152008-06-26 11:03:49 +10001#! /bin/sh
David Gibson3da0f9a2006-11-27 16:21:28 +11002
Marc-André Lureauaa522da2019-10-09 14:20:17 +04003SRCDIR=`dirname "$0"`
4. "$SRCDIR/testutils.sh"
David Gibson68fe10b2008-03-05 16:01:55 +11005
David Gibsonb31b2712009-11-12 13:30:02 +11006if [ -z "$CC" ]; then
Ed Maste74300092019-11-15 15:51:08 +00007 CC=cc
David Gibsonb31b2712009-11-12 13:30:02 +11008fi
9
David Gibson2b5f62d2020-03-04 15:32:47 +110010if [ -z "$PYTHON" ]; then
11 PYTHON=python3
12fi
13
David Gibson9b752922020-03-04 15:45:47 +110014if [ -n "$NO_PYTHON" ]; then
15 if [ "$NO_PYTHON" != "0" ]; then
16 no_python=true
17 else
18 no_python=false
19 fi
20else
21 if [ -f ../pylibfdt/_libfdt.so ] || [ -f ../pylibfdt/_libfdt.cpython-3*.so ]; then
22 no_python=false
23 else
24 no_python=true
25 fi
26fi
27
David Gibsonc5995dd2020-03-04 16:10:06 +110028if [ -n "$NO_YAML" ]; then
29 if [ "$NO_YAML" != "0" ]; then
30 no_yaml=true
31 else
32 no_yaml=false
33 fi
34else
35 if pkg-config --exists yaml-0.1; then
36 no_yaml=false
37 else
38 no_yaml=true
39 fi
40fi
41
kevans@FreeBSD.orgc8d54722018-01-02 20:55:32 -060042# stat differs between platforms
43if [ -z "$STATSZ" ]; then
kevans@FreeBSD.org333d5332018-01-03 10:34:44 -060044 stat --version 2>/dev/null | grep -q 'GNU'
45 GNUSTAT=$?
46 if [ "$GNUSTAT" -ne 0 ]; then
47 # Assume BSD stat if we can't detect as GNU stat
48 STATSZ="stat -f %Uz"
49 else
50 STATSZ="stat -c %s"
51 fi
kevans@FreeBSD.orgc8d54722018-01-02 20:55:32 -060052fi
53
David Gibson5c3513f2019-03-29 17:20:16 +110054# Help things find the libfdt shared object
David Gibson1f9a4172020-03-04 16:26:33 +110055if [ -z "$TEST_LIBDIR" ]; then
56 TEST_LIBDIR=../libfdt
57fi
58export LD_LIBRARY_PATH="$TEST_LIBDIR"
David Gibson5c3513f2019-03-29 17:20:16 +110059
David Gibson3da0f9a2006-11-27 16:21:28 +110060export QUIET_TEST=1
David Gibsonedb10bc2013-12-30 22:42:41 +110061STOP_ON_FAIL=0
David Gibson3da0f9a2006-11-27 16:21:28 +110062
David Gibson67b6b332007-11-21 11:56:14 +110063export VALGRIND=
64VGCODE=126
65
David Gibson0c7cd1a2007-06-26 11:33:10 +100066tot_tests=0
67tot_pass=0
68tot_fail=0
69tot_config=0
David Gibson67b6b332007-11-21 11:56:14 +110070tot_vg=0
David Gibson0c7cd1a2007-06-26 11:33:10 +100071tot_strange=0
72
David Gibson68fe10b2008-03-05 16:01:55 +110073base_run_test() {
David Gibsoncdcb4152008-06-26 11:03:49 +100074 tot_tests=$((tot_tests + 1))
David Gibson68fe10b2008-03-05 16:01:55 +110075 if VALGRIND="$VALGRIND" "$@"; then
David Gibsoncdcb4152008-06-26 11:03:49 +100076 tot_pass=$((tot_pass + 1))
David Gibson0c7cd1a2007-06-26 11:33:10 +100077 else
David Gibson7ca33082007-08-29 12:18:51 +100078 ret="$?"
David Gibsonedb10bc2013-12-30 22:42:41 +110079 if [ "$STOP_ON_FAIL" -eq 1 ]; then
80 exit 1
81 fi
David Gibson39063572010-08-30 12:53:03 +100082 if [ "$ret" -eq 1 ]; then
David Gibsoncdcb4152008-06-26 11:03:49 +100083 tot_config=$((tot_config + 1))
David Gibson39063572010-08-30 12:53:03 +100084 elif [ "$ret" -eq 2 ]; then
David Gibsoncdcb4152008-06-26 11:03:49 +100085 tot_fail=$((tot_fail + 1))
David Gibson39063572010-08-30 12:53:03 +100086 elif [ "$ret" -eq $VGCODE ]; then
David Gibsoncdcb4152008-06-26 11:03:49 +100087 tot_vg=$((tot_vg + 1))
David Gibson7ca33082007-08-29 12:18:51 +100088 else
David Gibsoncdcb4152008-06-26 11:03:49 +100089 tot_strange=$((tot_strange + 1))
David Gibson7ca33082007-08-29 12:18:51 +100090 fi
David Gibson0c7cd1a2007-06-26 11:33:10 +100091 fi
David Gibson3da0f9a2006-11-27 16:21:28 +110092}
93
David Gibson15b23d22012-02-03 16:12:07 +110094shorten_echo () {
95 limit=32
Mike Frysinger8b927bf2015-05-24 21:57:32 -040096 printf "$1"
David Gibson15b23d22012-02-03 16:12:07 +110097 shift
98 for x; do
99 if [ ${#x} -le $limit ]; then
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400100 printf " $x"
David Gibson15b23d22012-02-03 16:12:07 +1100101 else
102 short=$(echo "$x" | head -c$limit)
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400103 printf " \"$short\"...<${#x} bytes>"
David Gibson15b23d22012-02-03 16:12:07 +1100104 fi
105 done
106}
107
David Gibson68fe10b2008-03-05 16:01:55 +1100108run_test () {
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400109 printf "$*: "
David Gibson68fe10b2008-03-05 16:01:55 +1100110 if [ -n "$VALGRIND" -a -f $1.supp ]; then
111 VGSUPP="--suppressions=$1.supp"
112 fi
113 base_run_test $VALGRIND $VGSUPP "./$@"
114}
115
116run_sh_test () {
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400117 printf "$*: "
David Gibson68fe10b2008-03-05 16:01:55 +1100118 base_run_test sh "$@"
119}
120
121wrap_test () {
122 (
123 if verbose_run "$@"; then
124 PASS
125 else
126 ret="$?"
127 if [ "$ret" -gt 127 ]; then
David Gibsoncdcb4152008-06-26 11:03:49 +1000128 signame=$(kill -l $((ret - 128)))
David Gibson68fe10b2008-03-05 16:01:55 +1100129 FAIL "Killed by SIG$signame"
David Gibson43366bb2018-11-14 16:13:30 +1100130 elif [ "$ret" -eq $VGCODE ]; then
131 echo "VALGRIND ERROR"
132 exit $VGCODE
David Gibson68fe10b2008-03-05 16:01:55 +1100133 else
134 FAIL "Returned error code $ret"
135 fi
136 fi
137 )
138}
139
140run_wrap_test () {
David Gibson1c76ec32013-05-29 12:39:47 +1000141 shorten_echo "$@: "
David Gibson68fe10b2008-03-05 16:01:55 +1100142 base_run_test wrap_test "$@"
143}
144
David Gibson15b23d22012-02-03 16:12:07 +1100145wrap_error () {
146 (
147 if verbose_run "$@"; then
148 FAIL "Expected non-zero return code"
149 else
150 ret="$?"
151 if [ "$ret" -gt 127 ]; then
152 signame=$(kill -l $((ret - 128)))
153 FAIL "Killed by SIG$signame"
154 else
155 PASS
156 fi
157 fi
158 )
159}
160
161run_wrap_error_test () {
162 shorten_echo "$@"
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400163 printf " {!= 0}: "
David Gibson15b23d22012-02-03 16:12:07 +1100164 base_run_test wrap_error "$@"
165}
166
Tim Wang874f4052016-07-18 15:56:53 +0800167# $1: dtb file
168# $2: align base
David Gibsona34bb722016-09-22 14:42:42 +1000169check_align () {
170 shorten_echo "check_align $@: "
kevans@FreeBSD.orgc8d54722018-01-02 20:55:32 -0600171 local size=$($STATSZ "$1")
David Gibsona34bb722016-09-22 14:42:42 +1000172 local align="$2"
Tim Wang874f4052016-07-18 15:56:53 +0800173 (
David Gibsona34bb722016-09-22 14:42:42 +1000174 if [ $(($size % $align)) -eq 0 ] ;then
Tim Wang874f4052016-07-18 15:56:53 +0800175 PASS
176 else
David Gibsona34bb722016-09-22 14:42:42 +1000177 FAIL "Output size $size is not $align-byte aligned"
Tim Wang874f4052016-07-18 15:56:53 +0800178 fi
179 )
180}
181
David Gibson68fe10b2008-03-05 16:01:55 +1100182run_dtc_test () {
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400183 printf "dtc $*: "
David Gibson68fe10b2008-03-05 16:01:55 +1100184 base_run_test wrap_test $VALGRIND $DTC "$@"
185}
186
David Gibson26d93f62009-01-08 11:47:55 +1100187asm_to_so () {
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400188 $CC -shared -o $1.test.so "$SRCDIR/data.S" $1.test.s
David Gibson26d93f62009-01-08 11:47:55 +1100189}
190
191asm_to_so_test () {
192 run_wrap_test asm_to_so "$@"
193}
194
Simon Glass68d057f2012-01-21 10:14:47 -0800195run_fdtget_test () {
David Gibson15b23d22012-02-03 16:12:07 +1100196 expect="$1"
Simon Glass68d057f2012-01-21 10:14:47 -0800197 shift
Tero Tervalac7c7f172022-07-04 10:37:22 +0300198 printf "fdtget-runtest.sh \"%s\" $*: " "$expect"
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400199 base_run_test sh "$SRCDIR/fdtget-runtest.sh" "$expect" "$@"
Simon Glass68d057f2012-01-21 10:14:47 -0800200}
201
Simon Glass1ede50c2012-01-21 10:14:48 -0800202run_fdtput_test () {
David Gibson15b23d22012-02-03 16:12:07 +1100203 expect="$1"
Simon Glass1ede50c2012-01-21 10:14:48 -0800204 shift
David Gibson15b23d22012-02-03 16:12:07 +1100205 shorten_echo fdtput-runtest.sh "$expect" "$@"
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400206 printf ": "
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400207 base_run_test sh "$SRCDIR/fdtput-runtest.sh" "$expect" "$@"
Simon Glass1ede50c2012-01-21 10:14:48 -0800208}
209
Simon Glass76a65b12014-06-18 21:24:32 +1000210run_fdtdump_test() {
211 file="$1"
212 shorten_echo fdtdump-runtest.sh "$file"
Mike Frysinger8b927bf2015-05-24 21:57:32 -0400213 printf ": "
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400214 base_run_test sh "$SRCDIR/fdtdump-runtest.sh" "$file" 2>/dev/null
Simon Glass76a65b12014-06-18 21:24:32 +1000215}
216
Pantelis Antonioue3b9a952017-06-14 17:51:12 +0300217run_fdtoverlay_test() {
218 expect="$1"
219 shift
220 shorten_echo fdtoverlay-runtest.sh "$expect" "$@"
221 printf ": "
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400222 base_run_test sh "$SRCDIR/fdtoverlay-runtest.sh" "$expect" "$@"
Pantelis Antonioue3b9a952017-06-14 17:51:12 +0300223}
224
Maxime Ripardaea88602016-09-30 15:57:17 +0200225BAD_FIXUP_TREES="bad_index \
226 empty \
227 empty_index \
228 index_trailing \
229 path_empty_prop \
230 path_only \
231 path_only_sep \
232 path_prop"
233
David Gibson3ea879d2016-12-09 14:19:21 +1100234# Test to exercise libfdt overlay application without dtc's overlay support
235libfdt_overlay_tests () {
David Gibson6ea8cd92016-12-09 15:56:44 +1100236 # First test a doctored overlay which requires only local fixups
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400237 run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb "$SRCDIR/overlay_base.dts"
David Gibson6ea8cd92016-12-09 15:56:44 +1100238 run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__symbols__"
239 run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__fixups__"
240 run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__local_fixups__"
241
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400242 run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb "$SRCDIR/overlay_overlay_no_fixups.dts"
David Gibson6ea8cd92016-12-09 15:56:44 +1100243 run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__symbols__"
244 run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__fixups__"
245 run_test check_path overlay_overlay_no_fixups.test.dtb exists "/__local_fixups__"
246
247 run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_fixups.test.dtb
248
249 # Then test with manually constructed fixups
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400250 run_dtc_test -I dts -O dtb -o overlay_base_manual_symbols.test.dtb "$SRCDIR/overlay_base_manual_symbols.dts"
David Gibson6ea8cd92016-12-09 15:56:44 +1100251 run_test check_path overlay_base_manual_symbols.test.dtb exists "/__symbols__"
252 run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__fixups__"
253 run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__local_fixups__"
254
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400255 run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb "$SRCDIR/overlay_overlay_manual_fixups.dts"
David Gibson6ea8cd92016-12-09 15:56:44 +1100256 run_test check_path overlay_overlay_manual_fixups.test.dtb not-exists "/__symbols__"
257 run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__fixups__"
258 run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__local_fixups__"
259
260 run_test overlay overlay_base_manual_symbols.test.dtb overlay_overlay_manual_fixups.test.dtb
Maxime Ripardaea88602016-09-30 15:57:17 +0200261
Pantelis Antonioub1a60032017-06-14 17:53:06 +0300262 # test simplified plugin syntax
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400263 run_dtc_test -@ -I dts -O dtb -o overlay_overlay_simple.dtb "$SRCDIR/overlay_overlay_simple.dts"
Pantelis Antonioub1a60032017-06-14 17:53:06 +0300264
265 # verify non-generation of local fixups
266 run_test check_path overlay_overlay_simple.dtb not-exists "/__local_fixups__"
267
David Gibson3ea879d2016-12-09 14:19:21 +1100268 # Bad fixup tests
269 for test in $BAD_FIXUP_TREES; do
270 tree="overlay_bad_fixup_$test"
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400271 run_dtc_test -I dts -O dtb -o $tree.test.dtb "$SRCDIR/$tree.dts"
David Gibson3ea879d2016-12-09 14:19:21 +1100272 run_test overlay_bad_fixup overlay_base_no_symbols.test.dtb $tree.test.dtb
273 done
274}
275
276# Tests to exercise dtc's overlay generation support
277dtc_overlay_tests () {
David Gibson72e1ad82016-12-09 13:35:34 +1100278 # Overlay tests for dtc
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400279 run_dtc_test -@ -I dts -O dtb -o overlay_base.test.dtb "$SRCDIR/overlay_base.dts"
David Gibsonba765b22016-12-09 16:02:46 +1100280 run_test check_path overlay_base.test.dtb exists "/__symbols__"
281 run_test check_path overlay_base.test.dtb not-exists "/__fixups__"
282 run_test check_path overlay_base.test.dtb not-exists "/__local_fixups__"
Pantelis Antonioue7b3c3b2016-12-07 14:48:20 +0200283
David Gibson119e2732018-03-06 13:45:23 +1100284 # With syntactic sugar
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400285 run_dtc_test -I dts -O dtb -o overlay_overlay.test.dtb "$SRCDIR/overlay_overlay.dts"
David Gibsone3c769a2016-12-09 16:12:30 +1100286 run_test check_path overlay_overlay.test.dtb not-exists "/__symbols__"
David Gibsonba765b22016-12-09 16:02:46 +1100287 run_test check_path overlay_overlay.test.dtb exists "/__fixups__"
288 run_test check_path overlay_overlay.test.dtb exists "/__local_fixups__"
289
David Gibson119e2732018-03-06 13:45:23 +1100290 # Without syntactic sugar
Paul Barkerf7e57372020-12-19 14:35:21 +0000291 run_dtc_test -I dts -O dtb -o overlay_overlay_nosugar.test.dtb "$SRCDIR/overlay_overlay_nosugar.dts"
David Gibson119e2732018-03-06 13:45:23 +1100292 run_test check_path overlay_overlay_nosugar.test.dtb not-exists "/__symbols__"
293 run_test check_path overlay_overlay_nosugar.test.dtb exists "/__fixups__"
294 run_test check_path overlay_overlay_nosugar.test.dtb exists "/__local_fixups__"
295
David Gibson8f1b35f2018-03-06 13:27:53 +1100296 # Using target-path
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400297 run_dtc_test -I dts -O dtb -o overlay_overlay_bypath.test.dtb "$SRCDIR/overlay_overlay_bypath.dts"
David Gibson8f1b35f2018-03-06 13:27:53 +1100298 run_test check_path overlay_overlay_bypath.test.dtb not-exists "/__symbols__"
299 run_test check_path overlay_overlay_bypath.test.dtb not-exists "/__fixups__"
300 run_test check_path overlay_overlay_bypath.test.dtb exists "/__local_fixups__"
301
Fredrik Markstrome45198c2018-09-25 21:32:37 +0200302 # Make sure local target references are resolved and nodes are merged and that path references are not
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400303 run_dtc_test -I dts -O dtb -o overlay_overlay_local_merge.test.dtb "$SRCDIR/overlay_overlay_local_merge.dts"
Fredrik Markstrome45198c2018-09-25 21:32:37 +0200304 run_test check_path overlay_overlay_local_merge.test.dtb exists "/fragment@0/__overlay__/new-node/new-merged-node"
305 run_test check_path overlay_overlay_local_merge.test.dtb exists "/fragment@1/__overlay__/new-root-node"
306
David Gibson119e2732018-03-06 13:45:23 +1100307 # Check building works the same as manual constructions
308 run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_nosugar.test.dtb
309
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400310 run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb "$SRCDIR/overlay_overlay_manual_fixups.dts"
David Gibson119e2732018-03-06 13:45:23 +1100311 run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_manual_fixups.test.dtb
312
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400313 run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb "$SRCDIR/overlay_overlay_no_fixups.dts"
David Gibson8f1b35f2018-03-06 13:27:53 +1100314 run_test dtbs_equal_ordered overlay_overlay_bypath.test.dtb overlay_overlay_no_fixups.test.dtb
315
316 # Check we can actually apply the result
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400317 run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb "$SRCDIR/overlay_base.dts"
David Gibsonba765b22016-12-09 16:02:46 +1100318 run_test overlay overlay_base.test.dtb overlay_overlay.test.dtb
David Gibson8f1b35f2018-03-06 13:27:53 +1100319 run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_bypath.test.dtb
Pantelis Antonioue7b3c3b2016-12-07 14:48:20 +0200320
David Gibson72e1ad82016-12-09 13:35:34 +1100321 # test plugin source to dtb and back
David Gibsonc96cb3c2016-12-09 16:07:39 +1100322 run_dtc_test -I dtb -O dts -o overlay_overlay_decompile.test.dts overlay_overlay.test.dtb
323 run_dtc_test -I dts -O dtb -o overlay_overlay_decompile.test.dtb overlay_overlay_decompile.test.dts
David Gibsonba765b22016-12-09 16:02:46 +1100324 run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_decompile.test.dtb
Pantelis Antonioue7b3c3b2016-12-07 14:48:20 +0200325
Thomas Huth825146d2019-05-20 10:12:09 +0200326 # Test generation of aliases instead of symbols
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400327 run_dtc_test -A -I dts -O dtb -o overlay_base_with_aliases.dtb "$SRCDIR/overlay_base.dts"
David Gibson47b4d662016-12-09 13:46:02 +1100328 run_test check_path overlay_base_with_aliases.dtb exists "/aliases"
329 run_test check_path overlay_base_with_aliases.dtb not-exists "/__symbols__"
330 run_test check_path overlay_base_with_aliases.dtb not-exists "/__fixups__"
331 run_test check_path overlay_base_with_aliases.dtb not-exists "/__local_fixups__"
Maxime Ripardaea88602016-09-30 15:57:17 +0200332}
333
David Gibson4e6221c2006-11-28 17:20:01 +1100334tree1_tests () {
335 TREE=$1
336
David Gibson3da0f9a2006-11-27 16:21:28 +1100337 # Read-only tests
David Gibsonfd1bf3a2007-10-10 17:12:12 +1000338 run_test get_mem_rsv $TREE
David Gibson4e6221c2006-11-28 17:20:01 +1100339 run_test root_node $TREE
David Gibson94993f42006-12-11 16:15:34 +1100340 run_test find_property $TREE
David Gibson4e6221c2006-11-28 17:20:01 +1100341 run_test subnode_offset $TREE
342 run_test path_offset $TREE
David Gibson9d26eab2007-08-30 14:54:04 +1000343 run_test get_name $TREE
David Gibson4e6221c2006-11-28 17:20:01 +1100344 run_test getprop $TREE
Simon Glass82a52ce2018-11-22 13:15:06 -0700345 run_test get_prop_offset $TREE
David Gibson73468582007-11-13 09:59:38 +1100346 run_test get_phandle $TREE
David Gibson037db262007-08-30 14:54:04 +1000347 run_test get_path $TREE
David Gibson12482372007-08-30 14:54:04 +1000348 run_test supernode_atdepth_offset $TREE
349 run_test parent_offset $TREE
David Gibsonae1454b2007-09-17 14:28:34 +1000350 run_test node_offset_by_prop_value $TREE
David Gibson73468582007-11-13 09:59:38 +1100351 run_test node_offset_by_phandle $TREE
David Gibson333542f2007-10-16 13:58:25 +1000352 run_test node_check_compatible $TREE
353 run_test node_offset_by_compatible $TREE
David Gibson4e6221c2006-11-28 17:20:01 +1100354 run_test notfound $TREE
David Gibson3da0f9a2006-11-27 16:21:28 +1100355
356 # Write-in-place tests
David Gibson4e6221c2006-11-28 17:20:01 +1100357 run_test setprop_inplace $TREE
358 run_test nop_property $TREE
359 run_test nop_node $TREE
360}
361
David Gibson02a55562007-09-28 14:57:01 +1000362tree1_tests_rw () {
363 TREE=$1
364
365 # Read-write tests
David Gibson82b327d2008-01-11 14:55:05 +1100366 run_test set_name $TREE
David Gibson02a55562007-09-28 14:57:01 +1000367 run_test setprop $TREE
368 run_test del_property $TREE
369 run_test del_node $TREE
370}
371
David Gibson4d7bea72008-07-07 11:19:13 +1000372check_tests () {
373 tree="$1"
374 shift
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400375 run_sh_test "$SRCDIR/dtc-checkfails.sh" "$@" -- -I dts -O dtb $tree
David Gibson4d7bea72008-07-07 11:19:13 +1000376 run_dtc_test -I dts -O dtb -o $tree.test.dtb -f $tree
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400377 run_sh_test "$SRCDIR/dtc-checkfails.sh" "$@" -- -I dtb -O dtb $tree.test.dtb
David Gibson4d7bea72008-07-07 11:19:13 +1000378}
379
David Gibsona041dcd2007-11-01 11:37:31 +1100380ALL_LAYOUTS="mts mst tms tsm smt stm"
381
David Gibsonef90baa2007-09-17 14:39:24 +1000382libfdt_tests () {
David Gibson4e6221c2006-11-28 17:20:01 +1100383 tree1_tests test_tree1.dtb
David Gibson063693a2006-11-29 16:45:46 +1100384
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400385 run_dtc_test -I dts -O dtb -o addresses.test.dtb "$SRCDIR/addresses.dts"
David Gibson40f7f572014-05-11 13:13:46 +1000386 run_test addr_size_cells addresses.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400387 run_dtc_test -I dts -O dtb -o addresses2.test.dtb "$SRCDIR/empty.dts"
Sebastian Huberc12b2b02018-07-19 08:19:43 +0200388 run_test addr_size_cells2 addresses2.test.dtb
David Gibson40f7f572014-05-11 13:13:46 +1000389
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400390 run_dtc_test -I dts -O dtb -o stringlist.test.dtb "$SRCDIR/stringlist.dts"
Thierry Reding22183872015-09-30 13:16:12 +1000391 run_test stringlist stringlist.test.dtb
392
Nicholas Piggince01b212019-05-09 19:41:22 +1000393 for flags in default no_name_dedup; do
394 # Sequential write tests
395 run_test sw_tree1 fixed $flags
396 tree1_tests sw_tree1.test.dtb
397 tree1_tests unfinished_tree1.test.dtb
398 run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
399 run_test sw_states
David Gibson42369762006-12-01 15:07:19 +1100400
Nicholas Piggince01b212019-05-09 19:41:22 +1000401 # Resizing tests
402 for mode in resize realloc newalloc; do
403 run_test sw_tree1 $mode $flags
404 tree1_tests sw_tree1.test.dtb
405 tree1_tests unfinished_tree1.test.dtb
406 run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
407 done
David Gibson79eebb22013-10-26 00:17:37 +1100408 done
409
David Gibson42369762006-12-01 15:07:19 +1100410 # fdt_move tests
411 for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do
412 rm -f moved.$tree shunted.$tree deshunted.$tree
413 run_test move_and_save $tree
David Gibson3ce53632007-11-21 11:29:18 +1100414 run_test dtbs_equal_ordered $tree moved.$tree
415 run_test dtbs_equal_ordered $tree shunted.$tree
416 run_test dtbs_equal_ordered $tree deshunted.$tree
David Gibson42369762006-12-01 15:07:19 +1100417 done
David Gibson7ba551f2006-12-01 16:59:43 +1100418
David Gibson3bef7962007-10-25 15:05:58 +1000419 # v16 and alternate layout tests
David Gibson3ce53632007-11-21 11:29:18 +1100420 for tree in test_tree1.dtb; do
David Gibson3bef7962007-10-25 15:05:58 +1000421 for version in 17 16; do
David Gibsona041dcd2007-11-01 11:37:31 +1100422 for layout in $ALL_LAYOUTS; do
David Gibson3bef7962007-10-25 15:05:58 +1000423 run_test mangle-layout $tree $version $layout
424 tree1_tests v$version.$layout.$tree
425 run_test dtbs_equal_ordered $tree v$version.$layout.$tree
426 done
427 done
428 done
429
David Gibson7ba551f2006-12-01 16:59:43 +1100430 # Read-write tests
David Gibson3ce53632007-11-21 11:29:18 +1100431 for basetree in test_tree1.dtb; do
David Gibsona041dcd2007-11-01 11:37:31 +1100432 for version in 17 16; do
433 for layout in $ALL_LAYOUTS; do
434 tree=v$version.$layout.$basetree
435 rm -f opened.$tree repacked.$tree
436 run_test open_pack $tree
David Gibsona041dcd2007-11-01 11:37:31 +1100437 tree1_tests opened.$tree
438 tree1_tests repacked.$tree
David Gibson02a55562007-09-28 14:57:01 +1000439
David Gibsona041dcd2007-11-01 11:37:31 +1100440 tree1_tests_rw $tree
441 tree1_tests_rw opened.$tree
442 tree1_tests_rw repacked.$tree
443 done
444 done
David Gibson02a55562007-09-28 14:57:01 +1000445 done
David Gibson7ba551f2006-12-01 16:59:43 +1100446 run_test rw_tree1
447 tree1_tests rw_tree1.test.dtb
David Gibson02a55562007-09-28 14:57:01 +1000448 tree1_tests_rw rw_tree1.test.dtb
David Gibson97b909f2012-01-11 23:41:32 +1100449 run_test appendprop1
450 run_test appendprop2 appendprop1.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400451 run_dtc_test -I dts -O dtb -o appendprop.test.dtb "$SRCDIR/appendprop.dts"
David Gibson97b909f2012-01-11 23:41:32 +1100452 run_test dtbs_equal_ordered appendprop2.test.dtb appendprop.test.dtb
David Gibson3ea879d2016-12-09 14:19:21 +1100453 libfdt_overlay_tests
David Gibson9825f822006-12-14 15:29:25 +1100454
David Gibsona90b5902008-02-18 16:09:25 +1100455 for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do
456 run_test nopulate $basetree
457 run_test dtbs_equal_ordered $basetree noppy.$basetree
458 tree1_tests noppy.$basetree
459 tree1_tests_rw noppy.$basetree
460 done
461
Nicholas Piggin228a44c2019-05-09 19:41:20 +1000462 run_test rw_oom
463
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400464 run_dtc_test -I dts -O dtb -o subnode_iterate.dtb "$SRCDIR/subnode_iterate.dts"
Simon Glass4e76ec72013-04-26 05:43:31 -0700465 run_test subnode_iterate subnode_iterate.dtb
466
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400467 run_dtc_test -I dts -O dtb -o property_iterate.dtb "$SRCDIR/property_iterate.dts"
Maxime Ripardd29126c2016-07-27 14:55:54 +0200468 run_test property_iterate property_iterate.dtb
469
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400470 run_dtc_test -I dts -O dtb -o unit-addr-without-reg.dtb "$SRCDIR/unit-addr-without-reg.dts"
AKASHI Takahiro7fcf8202019-03-27 15:15:52 +0900471 run_test appendprop_addrrange unit-addr-without-reg.dtb 1 1 1
472 run_test appendprop_addrrange unit-addr-without-reg.dtb 2 2 2
473 run_test appendprop_addrrange unit-addr-without-reg.dtb 2 1 3
474
David Gibson9825f822006-12-14 15:29:25 +1100475 # Tests for behaviour on various sorts of corrupted trees
476 run_test truncated_property
David Gibson70166d62017-11-14 22:45:56 +1100477 run_test truncated_string
David Gibsond5db5382018-03-09 23:28:56 +1100478 run_test truncated_memrsv
David Gibson089adb92008-02-14 16:50:34 +1100479
David Gibson897a4292015-07-09 13:29:42 +1000480 # Check aliases support in fdt_path_offset
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400481 run_dtc_test -I dts -O dtb -o aliases.dtb "$SRCDIR/aliases.dts"
David Gibson897a4292015-07-09 13:29:42 +1000482 run_test get_alias aliases.dtb
483 run_test path_offset_aliases aliases.dtb
484
David Gibson089adb92008-02-14 16:50:34 +1100485 # Specific bug tests
486 run_test add_subnode_with_nops
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400487 run_dtc_test -I dts -O dts -o sourceoutput.test.dts "$SRCDIR/sourceoutput.dts"
488 run_dtc_test -I dts -O dtb -o sourceoutput.test.dtb "$SRCDIR/sourceoutput.dts"
David Gibsonfa928fb2014-06-18 22:49:43 +1000489 run_dtc_test -I dts -O dtb -o sourceoutput.test.dts.test.dtb sourceoutput.test.dts
490 run_test dtbs_equal_ordered sourceoutput.test.dtb sourceoutput.test.dts.test.dtb
Jack Miller5d4a8b92014-08-06 15:52:03 -0500491
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400492 run_dtc_test -I dts -O dtb -o embedded_nul.test.dtb "$SRCDIR/embedded_nul.dts"
493 run_dtc_test -I dts -O dtb -o embedded_nul_equiv.test.dtb "$SRCDIR/embedded_nul_equiv.dts"
Jack Miller5d4a8b92014-08-06 15:52:03 -0500494 run_test dtbs_equal_ordered embedded_nul.test.dtb embedded_nul_equiv.test.dtb
Jack Miller64c46b02015-04-29 14:02:24 -0500495
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400496 run_dtc_test -I dts -O dtb "$SRCDIR/bad-size-cells.dts"
David Gibson19370952016-01-03 22:27:32 +1100497
498 run_wrap_error_test $DTC division-by-zero.dts
David Gibson1ab22052016-01-03 22:54:37 +1100499 run_wrap_error_test $DTC bad-octal-literal.dts
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400500 run_dtc_test -I dts -O dtb "$SRCDIR/nul-in-escape.dts"
David Gibsonb4334502016-01-04 22:56:39 +1100501 run_wrap_error_test $DTC nul-in-line-info1.dts
502 run_wrap_error_test $DTC nul-in-line-info2.dts
Anton Blanchard2e53f9d2016-01-03 08:43:35 +1100503
504 run_wrap_error_test $DTC -I dtb -O dts -o /dev/null ovf_size_strings.dtb
David Gibsoneb890c02017-10-23 06:45:56 +0300505
506 run_test check_header test_tree1.dtb
David Gibson4b8fcc32018-03-18 00:12:12 +1100507
David Gibsonfd06c542018-09-10 12:59:53 +1000508 FSBASE=fs
509 rm -rf $FSBASE
510 mkdir -p $FSBASE
511 run_test fs_tree1 $FSBASE/test_tree1
512 run_dtc_test -I fs -O dts -o fs.test_tree1.test.dts $FSBASE/test_tree1
513 run_dtc_test -I fs -O dtb -o fs.test_tree1.test.dtb $FSBASE/test_tree1
514 run_test dtbs_equal_unordered -m fs.test_tree1.test.dtb test_tree1.dtb
Greg Kurz0ac9fde2018-09-03 10:50:36 +0200515
David Gibsonff5afb92021-12-29 15:08:28 +1100516 ## https://github.com/dgibson/dtc/issues/64
517 check_tests "$SRCDIR/phandle-args-overflow.dts" clocks_property
518
David Gibson4b8fcc32018-03-18 00:12:12 +1100519 # check full tests
520 for good in test_tree1.dtb; do
521 run_test check_full $good
522 done
523 for bad in truncated_property.dtb truncated_string.dtb \
Simon Glassa2def542021-03-23 14:04:10 +1300524 truncated_memrsv.dtb two_roots.dtb named_root.dtb; do
David Gibson4b8fcc32018-03-18 00:12:12 +1100525 run_test check_full -n $bad
526 done
David Gibson3da0f9a2006-11-27 16:21:28 +1100527}
528
David Gibson8d59bd32007-09-18 10:33:40 +1000529dtc_tests () {
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400530 run_dtc_test -I dts -O dtb -o dtc_tree1.test.dtb "$SRCDIR/test_tree1.dts"
David Gibson8d59bd32007-09-18 10:33:40 +1000531 tree1_tests dtc_tree1.test.dtb
David Gibson02a55562007-09-28 14:57:01 +1000532 tree1_tests_rw dtc_tree1.test.dtb
David Gibson3c44c872007-10-24 11:06:09 +1000533 run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb
David Gibsona756c122007-10-16 16:42:02 +1000534
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400535 run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb "$SRCDIR/propname_escapes.dts"
Stephen Warren1ff3d3f2012-09-27 17:11:04 -0600536 run_test propname_escapes dtc_escapes.test.dtb
537
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400538 run_dtc_test -I dts -O dtb -o line_directives.test.dtb "$SRCDIR/line_directives.dts"
Stephen Warren1b6d1942012-09-27 17:11:05 -0600539
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400540 run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb "$SRCDIR/escapes.dts"
David Gibsona756c122007-10-16 16:42:02 +1000541 run_test string_escapes dtc_escapes.test.dtb
David Gibsonb433db02007-11-07 10:34:06 +1100542
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400543 run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb "$SRCDIR/char_literal.dts"
Anton Staafa4ea2fa2011-09-09 12:16:30 -0700544 run_test char_literal dtc_char_literal.test.dtb
545
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400546 run_dtc_test -I dts -O dtb -o dtc_sized_cells.test.dtb "$SRCDIR/sized_cells.dts"
Anton Staaf033089f2011-10-11 10:22:29 -0700547 run_test sized_cells dtc_sized_cells.test.dtb
548
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400549 run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb "$SRCDIR/extra-terminating-null.dts"
David Gibsonc623fe52009-09-09 14:38:30 +1000550 run_test extra-terminating-null dtc_extra-terminating-null.test.dtb
551
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400552 run_dtc_test -I dts -O dtb -o dtc_references.test.dtb "$SRCDIR/references.dts"
David Gibson73468582007-11-13 09:59:38 +1100553 run_test references dtc_references.test.dtb
554
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400555 run_dtc_test -I dts -O dtb -o dtc_path-references.test.dtb "$SRCDIR/path-references.dts"
David Gibsonefbbef82007-12-05 10:43:50 +1100556 run_test path-references dtc_path-references.test.dtb
557
Rob Herring0016f8c2017-07-12 17:20:30 -0500558 run_test phandle_format dtc_references.test.dtb epapr
David Gibsond75b33a2009-11-26 15:37:13 +1100559 for f in legacy epapr both; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400560 run_dtc_test -I dts -O dtb -H $f -o dtc_references.test.$f.dtb "$SRCDIR/references.dts"
David Gibsond75b33a2009-11-26 15:37:13 +1100561 run_test phandle_format dtc_references.test.$f.dtb $f
562 done
563
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400564 run_dtc_test -I dts -O dtb -o multilabel.test.dtb "$SRCDIR/multilabel.dts"
David Gibson05898c62010-02-24 18:22:17 +1100565 run_test references multilabel.test.dtb
566
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400567 run_dtc_test -I dts -O dtb -o label_repeated.test.dtb "$SRCDIR/label_repeated.dts"
Stephen Warrenf67dfe82012-07-03 14:09:30 -0600568
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400569 run_dtc_test -I dts -O dtb -o dtc_comments.test.dtb "$SRCDIR/comments.dts"
570 run_dtc_test -I dts -O dtb -o dtc_comments-cmp.test.dtb "$SRCDIR/comments-cmp.dts"
David Gibsond8b69422008-02-15 15:14:16 +1100571 run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb
572
David Gibsonf8e52fe2008-06-24 11:21:44 +1000573 # Check /include/ directive
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400574 run_dtc_test -I dts -O dtb -o includes.test.dtb "$SRCDIR/include0.dts"
David Gibsonf8e52fe2008-06-24 11:21:44 +1000575 run_test dtbs_equal_ordered includes.test.dtb test_tree1.dtb
576
David Gibsone37ec7d2008-06-11 11:58:39 +1000577 # Check /incbin/ directive
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400578 run_dtc_test -I dts -O dtb -o incbin.test.dtb "$SRCDIR/incbin.dts"
579 run_test incbin "$SRCDIR/incbin.bin" incbin.test.dtb
David Gibsone37ec7d2008-06-11 11:58:39 +1000580
David Gibson548767f2008-05-16 13:22:57 +1000581 # Check boot_cpuid_phys handling
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400582 run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb "$SRCDIR/boot-cpuid.dts"
David Gibson15ad6d82010-02-19 15:50:50 +1100583 run_test boot-cpuid boot_cpuid.test.dtb 16
584
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400585 run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb "$SRCDIR/boot-cpuid.dts"
David Gibson15ad6d82010-02-19 15:50:50 +1100586 run_test boot-cpuid boot_cpuid_17.test.dtb 17
587
588 run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
589 run_test boot-cpuid preserve_boot_cpuid.test.dtb 16
590 run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
591
592 run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
593 run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17
594 run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
595
596 run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb
597 run_test boot-cpuid override17_boot_cpuid.test.dtb 17
598
599 run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
600 run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0
601
David Gibson548767f2008-05-16 13:22:57 +1000602
David Gibson26d93f62009-01-08 11:47:55 +1100603 # Check -Oasm mode
604 for tree in test_tree1.dts escapes.dts references.dts path-references.dts \
David Gibsonbae93e82009-01-08 11:48:48 +1100605 comments.dts aliases.dts include0.dts incbin.dts \
606 value-labels.dts ; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400607 run_dtc_test -I dts -O asm -o oasm_$tree.test.s "$SRCDIR/$tree"
David Gibson26d93f62009-01-08 11:47:55 +1100608 asm_to_so_test oasm_$tree
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400609 run_dtc_test -I dts -O dtb -o $tree.test.dtb "$SRCDIR/$tree"
Tero Tervalafd9b8c92022-06-29 19:35:31 +0300610 if [ -x ./asm_tree_dump ]; then
611 run_test asm_tree_dump ./oasm_$tree.test.so oasm_$tree.test.dtb
612 run_wrap_test cmp oasm_$tree.test.dtb $tree.test.dtb
613 fi
David Gibson26d93f62009-01-08 11:47:55 +1100614 done
615
Tero Tervalafd9b8c92022-06-29 19:35:31 +0300616 if [ -x ./value-labels ]; then
617 run_test value-labels ./oasm_value-labels.dts.test.so
618 fi
David Gibsonbae93e82009-01-08 11:48:48 +1100619
David Gibsonb433db02007-11-07 10:34:06 +1100620 # Check -Odts mode preserve all dtb information
David Gibson9878f302008-11-07 12:49:44 +1100621 for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb \
David Gibsonc623fe52009-09-09 14:38:30 +1000622 dtc_extra-terminating-null.test.dtb dtc_references.test.dtb; do
David Gibson68fe10b2008-03-05 16:01:55 +1100623 run_dtc_test -I dtb -O dts -o odts_$tree.test.dts $tree
624 run_dtc_test -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts
David Gibsonb433db02007-11-07 10:34:06 +1100625 run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
626 done
David Gibson73468582007-11-13 09:59:38 +1100627
Grant Likely32b9c612018-06-28 15:37:01 -0600628 # Check -Odts preserving type information
629 for tree in type-preservation.dts; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400630 run_dtc_test -I dts -O dts -o $tree.test.dts "$SRCDIR/$tree"
Grant Likely32b9c612018-06-28 15:37:01 -0600631 run_dtc_test -I dts -O dts $tree.test.dts
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400632 run_wrap_test cmp "$SRCDIR/$tree" $tree.test.dts
Grant Likely32b9c612018-06-28 15:37:01 -0600633 done
Rob Herring522d81d2018-09-26 14:27:08 -0500634 for tree in path-references; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400635 run_dtc_test -I dts -O dtb -o $tree.test.dtb "$SRCDIR/$tree.dts"
636 run_dtc_test -I dts -O dts -o $tree.test.dts "$SRCDIR/$tree.dts"
Rob Herring522d81d2018-09-26 14:27:08 -0500637 run_dtc_test -I dts -O dtb -o $tree.test.dts.test.dtb $tree.test.dts
638 run_test dtbs_equal_ordered $tree.test.dtb $tree.test.dts.test.dtb
639 done
Grant Likely32b9c612018-06-28 15:37:01 -0600640
Grant Likelyc86da842018-09-11 15:41:31 -0500641 # Check -Oyaml output
David Gibsonc5995dd2020-03-04 16:10:06 +1100642 if ! $no_yaml; then
Grant Likelyc86da842018-09-11 15:41:31 -0500643 for tree in type-preservation; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400644 run_dtc_test -I dts -O yaml -o $tree.test.dt.yaml "$SRCDIR/$tree.dts"
645 run_wrap_test cmp "$SRCDIR/$tree.dt.yaml" $tree.test.dt.yaml
Grant Likelyc86da842018-09-11 15:41:31 -0500646 done
647 fi
648
David Gibsona266e5c2008-02-28 20:55:37 +1100649 # Check version conversions
650 for tree in test_tree1.dtb ; do
651 for aver in 1 2 3 16 17; do
652 atree="ov${aver}_$tree.test.dtb"
David Gibson68fe10b2008-03-05 16:01:55 +1100653 run_dtc_test -I dtb -O dtb -V$aver -o $atree $tree
David Gibsona266e5c2008-02-28 20:55:37 +1100654 for bver in 16 17; do
655 btree="ov${bver}_$atree"
David Gibson68fe10b2008-03-05 16:01:55 +1100656 run_dtc_test -I dtb -O dtb -V$bver -o $btree $atree
David Gibsona266e5c2008-02-28 20:55:37 +1100657 run_test dtbs_equal_ordered $btree $tree
658 done
659 done
660 done
661
Grant Likely83da1b22010-02-25 09:58:29 -0700662 # Check merge/overlay functionality
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400663 run_dtc_test -I dts -O dtb -o dtc_tree1_merge.test.dtb "$SRCDIR/test_tree1_merge.dts"
Grant Likely83da1b22010-02-25 09:58:29 -0700664 tree1_tests dtc_tree1_merge.test.dtb test_tree1.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400665 run_dtc_test -I dts -O dtb -o dtc_tree1_merge_labelled.test.dtb "$SRCDIR/test_tree1_merge_labelled.dts"
David Gibson8773e122010-09-20 16:33:34 -0600666 tree1_tests dtc_tree1_merge_labelled.test.dtb test_tree1.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400667 run_dtc_test -I dts -O dtb -o dtc_tree1_label_noderef.test.dtb "$SRCDIR/test_tree1_label_noderef.dts"
Nikhil Devshatwar3346e062015-02-23 12:29:19 +1100668 run_test dtbs_equal_unordered dtc_tree1_label_noderef.test.dtb test_tree1.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400669 run_dtc_test -I dts -O dtb -o multilabel_merge.test.dtb "$SRCDIR/multilabel_merge.dts"
Grant Likely83da1b22010-02-25 09:58:29 -0700670 run_test references multilabel.test.dtb
671 run_test dtbs_equal_ordered multilabel.test.dtb multilabel_merge.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400672 run_dtc_test -I dts -O dtb -o dtc_tree1_merge_path.test.dtb "$SRCDIR/test_tree1_merge_path.dts"
John Bonesio73ae43e2010-11-02 15:55:04 -0700673 tree1_tests dtc_tree1_merge_path.test.dtb test_tree1.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400674 run_wrap_error_test $DTC -I dts -O dtb -o /dev/null "$SRCDIR/test_label_ref.dts"
Grant Likely83da1b22010-02-25 09:58:29 -0700675
Ahmad Fatoum26c54f82020-10-25 10:41:41 +0100676 run_dtc_test -I dts -O dtb -o dtc_relref_merge.test.dtb "$SRCDIR/relref_merge.dts"
677 run_test relref_merge dtc_relref_merge.test.dtb
678
Stephen Warren45013d82012-08-07 22:50:15 -0600679 # Check prop/node delete functionality
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400680 run_dtc_test -I dts -O dtb -o dtc_tree1_delete.test.dtb "$SRCDIR/test_tree1_delete.dts"
Stephen Warren45013d82012-08-07 22:50:15 -0600681 tree1_tests dtc_tree1_delete.test.dtb
682
Maxime Ripard84e414b2018-05-03 22:27:27 +0200683 # Check omit-if-no-ref functionality
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400684 run_dtc_test -I dts -O dtb -o omit-no-ref.test.dtb "$SRCDIR/omit-no-ref.dts"
Maxime Ripard84e414b2018-05-03 22:27:27 +0200685 run_test check_path omit-no-ref.test.dtb not-exists "/node1"
686 run_test check_path omit-no-ref.test.dtb not-exists "/node2"
687 run_test check_path omit-no-ref.test.dtb exists "/node3"
688 run_test check_path omit-no-ref.test.dtb exists "/node4"
689
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400690 run_dtc_test -I dts -O dts -o delete_reinstate_multilabel.dts.test.dts "$SRCDIR/delete_reinstate_multilabel.dts"
691 run_wrap_test cmp delete_reinstate_multilabel.dts.test.dts "$SRCDIR/delete_reinstate_multilabel_ref.dts"
Stephen Warren1762ab42012-10-05 09:57:41 -0600692
David Gibson0d6ade22007-11-20 16:24:23 +1100693 # Check some checks
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400694 check_tests "$SRCDIR/dup-nodename.dts" duplicate_node_names
695 check_tests "$SRCDIR/dup-propname.dts" duplicate_property_names
696 check_tests "$SRCDIR/dup-phandle.dts" explicit_phandles
697 check_tests "$SRCDIR/zero-phandle.dts" explicit_phandles
698 check_tests "$SRCDIR/minusone-phandle.dts" explicit_phandles
699 run_sh_test "$SRCDIR/dtc-checkfails.sh" phandle_references -- -I dts -O dtb "$SRCDIR/nonexist-node-ref.dts"
700 run_sh_test "$SRCDIR/dtc-checkfails.sh" phandle_references -- -I dts -O dtb "$SRCDIR/nonexist-label-ref.dts"
701 run_sh_test "$SRCDIR/dtc-fatal.sh" -I dts -O dtb "$SRCDIR/nonexist-node-ref2.dts"
702 check_tests "$SRCDIR/bad-name-property.dts" name_properties
David Gibsonc21acab2007-12-06 16:59:45 +1100703
Rob Herring0c3fd9b2021-05-25 20:03:33 -0500704 check_tests "$SRCDIR/bad-ncells.dts" address_cells_is_cell size_cells_is_cell interrupts_extended_is_cell
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400705 check_tests "$SRCDIR/bad-string-props.dts" device_type_is_string model_is_string status_is_string label_is_string compatible_is_string_list names_is_string_list
706 check_tests "$SRCDIR/bad-chosen.dts" chosen_node_is_root
707 check_tests "$SRCDIR/bad-chosen.dts" chosen_node_bootargs
708 check_tests "$SRCDIR/bad-chosen.dts" chosen_node_stdout_path
709 check_tests "$SRCDIR/bad-reg-ranges.dts" reg_format ranges_format
710 check_tests "$SRCDIR/bad-empty-ranges.dts" ranges_format
711 check_tests "$SRCDIR/reg-ranges-root.dts" reg_format ranges_format
Rob Herring76b43dc2020-03-03 13:39:31 -0600712 check_tests "$SRCDIR/bad-dma-ranges.dts" dma_ranges_format
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400713 check_tests "$SRCDIR/default-addr-size.dts" avoid_default_addr_size
714 check_tests "$SRCDIR/obsolete-chosen-interrupt-controller.dts" obsolete_chosen_interrupt_controller
715 check_tests "$SRCDIR/reg-without-unit-addr.dts" unit_address_vs_reg
716 check_tests "$SRCDIR/unit-addr-without-reg.dts" unit_address_vs_reg
717 check_tests "$SRCDIR/unit-addr-leading-0x.dts" unit_address_format
718 check_tests "$SRCDIR/unit-addr-leading-0s.dts" unit_address_format
719 check_tests "$SRCDIR/unit-addr-unique.dts" unique_unit_address
720 check_tests "$SRCDIR/bad-phandle-cells.dts" interrupts_extended_property
721 check_tests "$SRCDIR/bad-gpio.dts" gpios_property
Ilya Lipnitskiyc8bddd12021-05-03 20:59:44 -0700722 check_tests "$SRCDIR/good-gpio.dts" -n gpios_property
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400723 check_tests "$SRCDIR/bad-graph.dts" graph_child_address
724 check_tests "$SRCDIR/bad-graph.dts" graph_port
725 check_tests "$SRCDIR/bad-graph.dts" graph_endpoint
726 run_sh_test "$SRCDIR/dtc-checkfails.sh" deprecated_gpio_property -- -Wdeprecated_gpio_property -I dts -O dtb "$SRCDIR/bad-gpio.dts"
Ilya Lipnitskiyc8bddd12021-05-03 20:59:44 -0700727 run_sh_test "$SRCDIR/dtc-checkfails.sh" -n deprecated_gpio_property -- -Wdeprecated_gpio_property -I dts -O dtb "$SRCDIR/good-gpio.dts"
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400728 check_tests "$SRCDIR/bad-interrupt-cells.dts" interrupts_property
Andre Przywara81e09192020-05-15 15:18:25 +0100729 check_tests "$SRCDIR/bad-interrupt-controller.dts" interrupt_provider
Rob Herring0a3a9d32021-10-15 16:35:26 -0500730 check_tests "$SRCDIR/bad-interrupt-map.dts" interrupt_map
731 check_tests "$SRCDIR/bad-interrupt-map-parent.dts" interrupt_map
732 check_tests "$SRCDIR/bad-interrupt-map-mask.dts" interrupt_map
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400733 run_sh_test "$SRCDIR/dtc-checkfails.sh" node_name_chars -- -I dtb -O dtb bad_node_char.dtb
734 run_sh_test "$SRCDIR/dtc-checkfails.sh" node_name_format -- -I dtb -O dtb bad_node_format.dtb
735 run_sh_test "$SRCDIR/dtc-checkfails.sh" property_name_chars -- -I dtb -O dtb bad_prop_char.dtb
David Gibson6c2e4d62008-03-05 16:22:41 +1100736
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400737 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label1.dts"
738 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label2.dts"
739 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label3.dts"
740 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label4.dts"
741 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label5.dts"
742 run_sh_test "$SRCDIR/dtc-checkfails.sh" duplicate_label -- -I dts -O dtb "$SRCDIR/reuse-label6.dts"
David Gibson329055d2010-02-23 19:56:41 +1100743
Pantelis Antoniou9637e3f2016-12-07 14:48:19 +0200744 run_test check_path test_tree1.dtb exists "/subnode@1"
745 run_test check_path test_tree1.dtb not-exists "/subnode@10"
746
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400747 check_tests "$SRCDIR/pci-bridge-ok.dts" -n pci_bridge
748 check_tests "$SRCDIR/pci-bridge-bad1.dts" pci_bridge
749 check_tests "$SRCDIR/pci-bridge-bad2.dts" pci_bridge
David Gibsonfe667e32017-11-11 17:52:50 +1100750
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400751 check_tests "$SRCDIR/unit-addr-simple-bus-reg-mismatch.dts" simple_bus_reg
752 check_tests "$SRCDIR/unit-addr-simple-bus-compatible.dts" simple_bus_reg
Rob Herringe84742a2018-09-20 14:30:03 -0700753
754
David Gibsond5399192012-07-08 23:25:22 +1000755 # Check warning options
Rob Herring0c3fd9b2021-05-25 20:03:33 -0500756 run_sh_test "$SRCDIR/dtc-checkfails.sh" address_cells_is_cell interrupts_extended_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb "$SRCDIR/bad-ncells.dts"
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400757 run_sh_test "$SRCDIR/dtc-fails.sh" -n test-warn-output.test.dtb -I dts -O dtb "$SRCDIR/bad-ncells.dts"
758 run_sh_test "$SRCDIR/dtc-fails.sh" test-error-output.test.dtb -I dts -O dtb bad-ncells.dts -Esize_cells_is_cell
759 run_sh_test "$SRCDIR/dtc-checkfails.sh" always_fail -- -Walways_fail -I dts -O dtb "$SRCDIR/test_tree1.dts"
760 run_sh_test "$SRCDIR/dtc-checkfails.sh" -n always_fail -- -Walways_fail -Wno_always_fail -I dts -O dtb "$SRCDIR/test_tree1.dts"
761 run_sh_test "$SRCDIR/dtc-fails.sh" test-negation-1.test.dtb -Ealways_fail -I dts -O dtb "$SRCDIR/test_tree1.dts"
762 run_sh_test "$SRCDIR/dtc-fails.sh" -n test-negation-2.test.dtb -Ealways_fail -Eno_always_fail -I dts -O dtb "$SRCDIR/test_tree1.dts"
763 run_sh_test "$SRCDIR/dtc-fails.sh" test-negation-3.test.dtb -Ealways_fail -Wno_always_fail -I dts -O dtb "$SRCDIR/test_tree1.dts"
764 run_sh_test "$SRCDIR/dtc-fails.sh" -n test-negation-4.test.dtb -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb "$SRCDIR/bad-ncells.dts"
765 run_sh_test "$SRCDIR/dtc-checkfails.sh" size_cells_is_cell -- -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb "$SRCDIR/bad-ncells.dts"
David Gibsond5399192012-07-08 23:25:22 +1000766
David Gibson6c2e4d62008-03-05 16:22:41 +1100767 # Check for proper behaviour reading from stdin
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400768 run_dtc_test -I dts -O dtb -o stdin_dtc_tree1.test.dtb - < "$SRCDIR/test_tree1.dts"
David Gibson6c2e4d62008-03-05 16:22:41 +1100769 run_wrap_test cmp stdin_dtc_tree1.test.dtb dtc_tree1.test.dtb
770 run_dtc_test -I dtb -O dts -o stdin_odts_test_tree1.dtb.test.dts - < test_tree1.dtb
771 run_wrap_test cmp stdin_odts_test_tree1.dtb.test.dts odts_test_tree1.dtb.test.dts
772
Stephen Warren5f0c3b22012-04-03 20:56:00 -0600773 # Check integer expresisons
774 run_test integer-expressions -g integer-expressions.test.dts
775 run_dtc_test -I dts -O dtb -o integer-expressions.test.dtb integer-expressions.test.dts
776 run_test integer-expressions integer-expressions.test.dtb
777
David Gibson6c2e4d62008-03-05 16:22:41 +1100778 # Check for graceful failure in some error conditions
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400779 run_sh_test "$SRCDIR/dtc-fatal.sh" -I dts -O dtb nosuchfile.dts
780 run_sh_test "$SRCDIR/dtc-fatal.sh" -I dtb -O dtb nosuchfile.dtb
781 run_sh_test "$SRCDIR/dtc-fatal.sh" -I fs -O dtb nosuchfile
Stephen Warren69df9f02012-01-12 11:31:00 -0700782
783 # Dependencies
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400784 run_dtc_test -I dts -O dtb -o dependencies.test.dtb -d dependencies.test.d "$SRCDIR/dependencies.dts"
Ed Mastedbe80d52019-11-14 20:36:15 +0000785 sed -i.bak "s,$SRCDIR/,,g" dependencies.test.d
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400786 run_wrap_test cmp dependencies.test.d "$SRCDIR/dependencies.cmp"
Simon Glassde6b7622012-03-14 20:04:13 -0700787
788 # Search paths
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400789 run_wrap_error_test $DTC -I dts -O dtb -o search_paths.dtb "$SRCDIR/search_paths.dts"
790 run_dtc_test -i "$SRCDIR/search_dir" -I dts -O dtb -o search_paths.dtb \
791 "$SRCDIR/search_paths.dts"
792 run_wrap_error_test $DTC -i "$SRCDIR/search_dir_b" -I dts -O dtb \
793 -o search_paths_b.dtb "$SRCDIR/search_paths_b.dts"
794 run_dtc_test -i "$SRCDIR/search_dir_b" -i "$SRCDIR/search_dir" -I dts -O dtb \
795 -o search_paths_b.dtb "$SRCDIR/search_paths_b.dts"
Simon Glassde6b7622012-03-14 20:04:13 -0700796 run_dtc_test -I dts -O dtb -o search_paths_subdir.dtb \
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400797 "$SRCDIR/search_dir_b/search_paths_subdir.dts"
Tim Wang874f4052016-07-18 15:56:53 +0800798
799 # Check -a option
David Gibsona34bb722016-09-22 14:42:42 +1000800 for align in 2 4 8 16 32 64; do
801 # -p -a
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400802 run_dtc_test -O dtb -p 1000 -a $align -o align0.dtb "$SRCDIR/subnode_iterate.dts"
Lubomir Rintel8f8b77a2018-10-03 15:12:11 +0200803 base_run_test check_align align0.dtb $align
David Gibsona34bb722016-09-22 14:42:42 +1000804 # -S -a
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400805 run_dtc_test -O dtb -S 1999 -a $align -o align1.dtb "$SRCDIR/subnode_iterate.dts"
Lubomir Rintel8f8b77a2018-10-03 15:12:11 +0200806 base_run_test check_align align1.dtb $align
David Gibsona34bb722016-09-22 14:42:42 +1000807 done
David Gibson3ea879d2016-12-09 14:19:21 +1100808
809 # Tests for overlay/plugin generation
810 dtc_overlay_tests
David Gibson8d59bd32007-09-18 10:33:40 +1000811}
812
David Gibsone3b32b72010-04-30 15:30:00 +1000813cmp_tests () {
814 basetree="$1"
815 shift
816 wrongtrees="$@"
817
818 run_test dtb_reverse $basetree
819
820 # First dtbs_equal_ordered
821 run_test dtbs_equal_ordered $basetree $basetree
822 run_test dtbs_equal_ordered -n $basetree $basetree.reversed.test.dtb
823 for tree in $wrongtrees; do
824 run_test dtbs_equal_ordered -n $basetree $tree
825 done
826
827 # now unordered
828 run_test dtbs_equal_unordered $basetree $basetree
829 run_test dtbs_equal_unordered $basetree $basetree.reversed.test.dtb
830 run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree
831 for tree in $wrongtrees; do
832 run_test dtbs_equal_unordered -n $basetree $tree
833 done
David Gibson37c0b6a2010-11-10 09:51:09 +1100834
835 # now dtc --sort
836 run_dtc_test -I dtb -O dtb -s -o $basetree.sorted.test.dtb $basetree
837 run_test dtbs_equal_unordered $basetree $basetree.sorted.test.dtb
838 run_dtc_test -I dtb -O dtb -s -o $basetree.reversed.sorted.test.dtb $basetree.reversed.test.dtb
839 run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree.reversed.sorted.test.dtb
840 run_test dtbs_equal_ordered $basetree.sorted.test.dtb $basetree.reversed.sorted.test.dtb
David Gibsone3b32b72010-04-30 15:30:00 +1000841}
842
843dtbs_equal_tests () {
844 WRONG_TREE1=""
845 for x in 1 2 3 4 5 6 7 8 9; do
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400846 run_dtc_test -I dts -O dtb -o test_tree1_wrong$x.test.dtb "$SRCDIR/test_tree1_wrong$x.dts"
David Gibsone3b32b72010-04-30 15:30:00 +1000847 WRONG_TREE1="$WRONG_TREE1 test_tree1_wrong$x.test.dtb"
848 done
849 cmp_tests test_tree1.dtb $WRONG_TREE1
850}
851
Simon Glass68d057f2012-01-21 10:14:47 -0800852fdtget_tests () {
David Gibson15b23d22012-02-03 16:12:07 +1100853 dts=label01.dts
854 dtb=$dts.fdtget.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400855 run_dtc_test -O dtb -o $dtb "$SRCDIR/$dts"
Simon Glass68d057f2012-01-21 10:14:47 -0800856
David Gibson15b23d22012-02-03 16:12:07 +1100857 # run_fdtget_test <expected-result> [<flags>] <file> <node> <property>
858 run_fdtget_test "MyBoardName" $dtb / model
Simon Glass8055d772013-01-27 11:13:11 -0800859 run_fdtget_test "MyBoardName MyBoardFamilyName" $dtb / compatible
David Gibson15b23d22012-02-03 16:12:07 +1100860 run_fdtget_test "77 121 66 111 \
Simon Glass68d057f2012-01-21 10:14:47 -080086197 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \
Simon Glass8055d772013-01-27 11:13:11 -0800862108 121 78 97 109 101 0" -t bu $dtb / compatible
David Gibson15b23d22012-02-03 16:12:07 +1100863 run_fdtget_test "MyBoardName MyBoardFamilyName" -t s $dtb / compatible
864 run_fdtget_test 32768 $dtb /cpus/PowerPC,970@1 d-cache-size
865 run_fdtget_test 8000 -tx $dtb /cpus/PowerPC,970@1 d-cache-size
866 run_fdtget_test "61 62 63 0" -tbx $dtb /randomnode tricky1
867 run_fdtget_test "a b c d de ea ad be ef" -tbx $dtb /randomnode blob
Rafał Miłecki17739b72021-12-09 07:14:20 +0100868 run_fdtget_test "MyBoardName\0MyBoardFamilyName\0" -tr $dtb / compatible
Tero Tervalac7c7f172022-07-04 10:37:22 +0300869 run_fdtget_test "\012\013\014\015\336\352\255\276\357" -tr $dtb /randomnode blob
Simon Glass68d057f2012-01-21 10:14:47 -0800870
871 # Here the property size is not a multiple of 4 bytes, so it should fail
David Gibson15b23d22012-02-03 16:12:07 +1100872 run_wrap_error_test $DTGET -tlx $dtb /randomnode mixed
873 run_fdtget_test "6162 6300 1234 0 a 0 b 0 c" -thx $dtb /randomnode mixed
874 run_fdtget_test "61 62 63 0 12 34 0 0 0 a 0 0 0 b 0 0 0 c" \
875 -thhx $dtb /randomnode mixed
876 run_wrap_error_test $DTGET -ts $dtb /randomnode doctor-who
Simon Glass097ec972012-03-02 17:12:07 -0800877
878 # Test multiple arguments
879 run_fdtget_test "MyBoardName\nmemory" -ts $dtb / model /memory device_type
Simon Glass7fcbef22012-03-06 16:41:47 -0800880
881 # Test defaults
882 run_wrap_error_test $DTGET -tx $dtb /randomnode doctor-who
883 run_fdtget_test "<the dead silence>" -tx \
884 -d "<the dead silence>" $dtb /randomnode doctor-who
885 run_fdtget_test "<blink>" -tx -d "<blink>" $dtb /memory doctor-who
Simon Glass68d057f2012-01-21 10:14:47 -0800886}
887
Simon Glass1ede50c2012-01-21 10:14:48 -0800888fdtput_tests () {
David Gibson15b23d22012-02-03 16:12:07 +1100889 dts=label01.dts
890 dtb=$dts.fdtput.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400891 text="$SRCDIR/lorem.txt"
Simon Glass1ede50c2012-01-21 10:14:48 -0800892
David Gibson0b3b46e2012-02-03 16:12:09 +1100893 # Allow just enough space for $text
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400894 run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb "$SRCDIR/$dts"
Simon Glass1ede50c2012-01-21 10:14:48 -0800895
David Gibson15b23d22012-02-03 16:12:07 +1100896 # run_fdtput_test <expected-result> <file> <node> <property> <flags> <value>
897 run_fdtput_test "a_model" $dtb / model -ts "a_model"
898 run_fdtput_test "board1 board2" $dtb / compatible -ts board1 board2
899 run_fdtput_test "board1 board2" $dtb / compatible -ts "board1 board2"
900 run_fdtput_test "32768" $dtb /cpus/PowerPC,970@1 d-cache-size "" "32768"
901 run_fdtput_test "8001" $dtb /cpus/PowerPC,970@1 d-cache-size -tx 0x8001
902 run_fdtput_test "2 3 12" $dtb /randomnode tricky1 -tbi "02 003 12"
903 run_fdtput_test "a b c ea ad be ef" $dtb /randomnode blob \
904 -tbx "a b c ea ad be ef"
905 run_fdtput_test "a0b0c0d deeaae ef000000" $dtb /randomnode blob \
906 -tx "a0b0c0d deeaae ef000000"
David Gibson0b3b46e2012-02-03 16:12:09 +1100907 run_fdtput_test "$(cat $text)" $dtb /randomnode blob -ts "$(cat $text)"
Simon Glass1ede50c2012-01-21 10:14:48 -0800908
Srinivas Kandagatlad2146552013-05-29 12:47:38 +1000909 # Test expansion of the blob when insufficient room for property
910 run_fdtput_test "$(cat $text $text)" $dtb /randomnode blob -ts "$(cat $text $text)"
911
Simon Glassd46c2de2012-07-12 08:52:49 -0700912 # Start again with a fresh dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400913 run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb "$SRCDIR/$dts"
Simon Glassd46c2de2012-07-12 08:52:49 -0700914
915 # Node creation
916 run_wrap_error_test $DTPUT $dtb -c /baldrick sod
917 run_wrap_test $DTPUT $dtb -c /chosen/son /chosen/daughter
918 run_fdtput_test "eva" $dtb /chosen/daughter name "" -ts "eva"
919 run_fdtput_test "adam" $dtb /chosen/son name "" -ts "adam"
920
921 # Not allowed to create an existing node
922 run_wrap_error_test $DTPUT $dtb -c /chosen
923 run_wrap_error_test $DTPUT $dtb -c /chosen/son
924
Simon Glassf807af12012-07-12 08:52:51 -0700925 # Automatic node creation
926 run_wrap_test $DTPUT $dtb -cp /blackadder/the-second/turnip \
927 /blackadder/the-second/potato
928 run_fdtput_test 1000 $dtb /blackadder/the-second/turnip cost "" 1000
929 run_fdtput_test "fine wine" $dtb /blackadder/the-second/potato drink \
930 "-ts" "fine wine"
931 run_wrap_test $DTPUT $dtb -p /you/are/drunk/sir/winston slurp -ts twice
Simon Glassf807af12012-07-12 08:52:51 -0700932
Thomas Huth825146d2019-05-20 10:12:09 +0200933 # Test expansion of the blob when insufficient room for a new node
Srinivas Kandagatlad2146552013-05-29 12:47:38 +1000934 run_wrap_test $DTPUT $dtb -cp "$(cat $text $text)/longish"
935
Simon Glassf807af12012-07-12 08:52:51 -0700936 # Allowed to create an existing node with -p
937 run_wrap_test $DTPUT $dtb -cp /chosen
938 run_wrap_test $DTPUT $dtb -cp /chosen/son
939
Wang Longaa719612015-01-23 01:25:20 +0000940 # Start again with a fresh dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400941 run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb "$SRCDIR/$dts"
Wang Longaa719612015-01-23 01:25:20 +0000942
943 # Node delete
944 run_wrap_test $DTPUT $dtb -c /chosen/node1 /chosen/node2 /chosen/node3
945 run_fdtget_test "node3\nnode2\nnode1" $dtb -l /chosen
946 run_wrap_test $DTPUT $dtb -r /chosen/node1 /chosen/node2
947 run_fdtget_test "node3" $dtb -l /chosen
948
949 # Delete the non-existent node
950 run_wrap_error_test $DTPUT $dtb -r /non-existent/node
951
952 # Property delete
953 run_fdtput_test "eva" $dtb /chosen/ name "" -ts "eva"
954 run_fdtput_test "016" $dtb /chosen/ age "" -ts "016"
955 run_fdtget_test "age\nname\nbootargs\nlinux,platform" $dtb -p /chosen
956 run_wrap_test $DTPUT $dtb -d /chosen/ name age
957 run_fdtget_test "bootargs\nlinux,platform" $dtb -p /chosen
958
959 # Delete the non-existent property
960 run_wrap_error_test $DTPUT $dtb -d /chosen non-existent-prop
961
Simon Glass1ede50c2012-01-21 10:14:48 -0800962 # TODO: Add tests for verbose mode?
963}
964
Simon Glass36204fd2011-09-22 10:11:02 -0700965utilfdt_tests () {
966 run_test utilfdt_test
967}
968
Simon Glass76a65b12014-06-18 21:24:32 +1000969fdtdump_tests () {
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400970 run_fdtdump_test "$SRCDIR/fdtdump.dts"
Simon Glass76a65b12014-06-18 21:24:32 +1000971}
972
Pantelis Antonioue3b9a952017-06-14 17:51:12 +0300973fdtoverlay_tests() {
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400974 base="$SRCDIR/overlay_base.dts"
Pantelis Antonioue3b9a952017-06-14 17:51:12 +0300975 basedtb=overlay_base.fdoverlay.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400976 overlay="$SRCDIR/overlay_overlay_manual_fixups.dts"
Pantelis Antonioue3b9a952017-06-14 17:51:12 +0300977 overlaydtb=overlay_overlay_manual_fixups.fdoverlay.test.dtb
978 targetdtb=target.fdoverlay.test.dtb
979
980 run_dtc_test -@ -I dts -O dtb -o $basedtb $base
981 run_dtc_test -@ -I dts -O dtb -o $overlaydtb $overlay
982
983 # test that the new property is installed
984 run_fdtoverlay_test foobar "/test-node" "test-str-property" "-ts" ${basedtb} ${targetdtb} ${overlaydtb}
Pantelis Antoniou36f511f2017-07-31 20:10:08 +0300985
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400986 stacked_base="$SRCDIR/stacked_overlay_base.dts"
Pantelis Antoniou36f511f2017-07-31 20:10:08 +0300987 stacked_basedtb=stacked_overlay_base.fdtoverlay.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400988 stacked_bar="$SRCDIR/stacked_overlay_bar.dts"
Pantelis Antoniou36f511f2017-07-31 20:10:08 +0300989 stacked_bardtb=stacked_overlay_bar.fdtoverlay.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +0400990 stacked_baz="$SRCDIR/stacked_overlay_baz.dts"
Pantelis Antoniou36f511f2017-07-31 20:10:08 +0300991 stacked_bazdtb=stacked_overlay_baz.fdtoverlay.test.dtb
992 stacked_targetdtb=stacked_overlay_target.fdtoverlay.test.dtb
993
994 run_dtc_test -@ -I dts -O dtb -o $stacked_basedtb $stacked_base
995 run_dtc_test -@ -I dts -O dtb -o $stacked_bardtb $stacked_bar
996 run_dtc_test -@ -I dts -O dtb -o $stacked_bazdtb $stacked_baz
997
998 # test that baz correctly inserted the property
999 run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb} ${stacked_bazdtb}
Fabrice Gasnierad57e452018-10-03 09:55:02 +02001000
Stefan Mavrodievadcd6762019-11-11 10:04:44 +02001001 # test that bar and baz are correctly appended to __symbols__
1002 run_fdtoverlay_test "/foonode/barnode" "/__symbols__" "bar" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb}
1003 run_fdtoverlay_test "/foonode/barnode/baznode" "/__symbols__" "baz" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb} ${stacked_bazdtb}
1004
Marc-André Lureauaa522da2019-10-09 14:20:17 +04001005 overlay_long_path="$SRCDIR/overlay_overlay_long_path.dts"
Fabrice Gasnierad57e452018-10-03 09:55:02 +02001006 overlay_long_pathdtb=overlay_overlay_long_path.fdoverlay.test.dtb
1007 target_long_pathdtb=overlay_overlay_long_path_target.fdoverlay.test.dtb
1008 run_dtc_test -@ -I dts -O dtb -o $overlay_long_pathdtb $overlay_long_path
1009
1010 # test that fdtoverlay manages to apply overlays with long target path
1011 run_fdtoverlay_test lpath "/test-node/sub-test-node/sub-test-node-with-very-long-target-path/test-0" "prop" "-ts" ${basedtb} ${target_long_pathdtb} ${overlay_long_pathdtb}
David Gibsonb9935342019-07-04 14:39:02 +10001012
1013 # test adding a label to the root of a fragment
Marc-André Lureauaa522da2019-10-09 14:20:17 +04001014 stacked_base_nolabel="$SRCDIR/stacked_overlay_base_nolabel.dts"
David Gibsonb9935342019-07-04 14:39:02 +10001015 stacked_base_nolabeldtb=stacked_overlay_base_nolabel.test.dtb
Marc-André Lureauaa522da2019-10-09 14:20:17 +04001016 stacked_addlabel="$SRCDIR/stacked_overlay_addlabel.dts"
David Gibsonb9935342019-07-04 14:39:02 +10001017 stacked_addlabeldtb=stacked_overlay_addlabel.test.dtb
1018 stacked_addlabel_targetdtb=stacked_overlay_target_nolabel.fdtoverlay.test.dtb
1019
1020 run_dtc_test -@ -I dts -O dtb -o $stacked_base_nolabeldtb $stacked_base_nolabel
1021 run_dtc_test -@ -I dts -O dtb -o $stacked_addlabeldtb $stacked_addlabel
1022
1023 run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_base_nolabeldtb} ${stacked_addlabel_targetdtb} ${stacked_addlabeldtb} ${stacked_bardtb} ${stacked_bazdtb}
Pantelis Antonioue3b9a952017-06-14 17:51:12 +03001024}
1025
Simon Glass756ffc42017-03-17 16:14:34 -06001026pylibfdt_tests () {
Marc-André Lureauaa522da2019-10-09 14:20:17 +04001027 run_dtc_test -I dts -O dtb -o test_props.dtb "$SRCDIR/test_props.dts"
Simon Glass756ffc42017-03-17 16:14:34 -06001028 TMP=/tmp/tests.stderr.$$
Marc-André Lureauaa522da2019-10-09 14:20:17 +04001029 $PYTHON "$SRCDIR/pylibfdt_tests.py" -v 2> $TMP
Simon Glass756ffc42017-03-17 16:14:34 -06001030
1031 # Use the 'ok' message meaning the test passed, 'ERROR' meaning it failed
1032 # and the summary line for total tests (e.g. 'Ran 17 tests in 0.002s').
1033 # We could add pass + fail to get total tests, but this provides a useful
1034 # sanity check.
Lumir Balhar625dd8a2019-02-18 17:48:55 +01001035 pass_count=$(grep "ok$" $TMP | wc -l)
Simon Glass756ffc42017-03-17 16:14:34 -06001036 fail_count=$(grep "^ERROR: " $TMP | wc -l)
1037 total_tests=$(sed -n 's/^Ran \([0-9]*\) tests.*$/\1/p' $TMP)
1038 cat $TMP
1039 rm $TMP
1040
1041 # Extract the test results and add them to our totals
1042 tot_fail=$((tot_fail + $fail_count))
1043 tot_pass=$((tot_pass + $pass_count))
1044 tot_tests=$((tot_tests + $total_tests))
1045}
1046
David Gibsonedb10bc2013-12-30 22:42:41 +11001047while getopts "vt:me" ARG ; do
David Gibson3da0f9a2006-11-27 16:21:28 +11001048 case $ARG in
1049 "v")
1050 unset QUIET_TEST
1051 ;;
1052 "t")
1053 TESTSETS=$OPTARG
1054 ;;
David Gibson67b6b332007-11-21 11:56:14 +11001055 "m")
1056 VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
1057 ;;
David Gibsonedb10bc2013-12-30 22:42:41 +11001058 "e")
1059 STOP_ON_FAIL=1
1060 ;;
David Gibson3da0f9a2006-11-27 16:21:28 +11001061 esac
1062done
1063
1064if [ -z "$TESTSETS" ]; then
Pantelis Antonioue3b9a952017-06-14 17:51:12 +03001065 TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget fdtput fdtdump fdtoverlay"
Simon Glass756ffc42017-03-17 16:14:34 -06001066
1067 # Test pylibfdt if the libfdt Python module is available.
David Gibson9b752922020-03-04 15:45:47 +11001068 if ! $no_python; then
Simon Glass756ffc42017-03-17 16:14:34 -06001069 TESTSETS="$TESTSETS pylibfdt"
1070 fi
David Gibson3da0f9a2006-11-27 16:21:28 +11001071fi
1072
David Gibson121acde2007-10-16 13:53:20 +10001073# Make sure we don't have stale blobs lying around
David Gibsonb433db02007-11-07 10:34:06 +11001074rm -f *.test.dtb *.test.dts
David Gibson121acde2007-10-16 13:53:20 +10001075
David Gibson3da0f9a2006-11-27 16:21:28 +11001076for set in $TESTSETS; do
1077 case $set in
David Gibsonef90baa2007-09-17 14:39:24 +10001078 "libfdt")
1079 libfdt_tests
David Gibson3da0f9a2006-11-27 16:21:28 +11001080 ;;
Simon Glass36204fd2011-09-22 10:11:02 -07001081 "utilfdt")
1082 utilfdt_tests
1083 ;;
David Gibson8d59bd32007-09-18 10:33:40 +10001084 "dtc")
1085 dtc_tests
1086 ;;
David Gibsone3b32b72010-04-30 15:30:00 +10001087 "dtbs_equal")
1088 dtbs_equal_tests
1089 ;;
Simon Glass68d057f2012-01-21 10:14:47 -08001090 "fdtget")
1091 fdtget_tests
1092 ;;
Simon Glass1ede50c2012-01-21 10:14:48 -08001093 "fdtput")
1094 fdtput_tests
1095 ;;
Simon Glass76a65b12014-06-18 21:24:32 +10001096 "fdtdump")
1097 fdtdump_tests
1098 ;;
Simon Glass756ffc42017-03-17 16:14:34 -06001099 "pylibfdt")
1100 pylibfdt_tests
1101 ;;
Pantelis Antonioue3b9a952017-06-14 17:51:12 +03001102 "fdtoverlay")
1103 fdtoverlay_tests
1104 ;;
David Gibson3da0f9a2006-11-27 16:21:28 +11001105 esac
1106done
David Gibson0c7cd1a2007-06-26 11:33:10 +10001107
David Gibsonf2f6d0f2009-11-12 11:56:34 +11001108echo "********** TEST SUMMARY"
1109echo "* Total testcases: $tot_tests"
1110echo "* PASS: $tot_pass"
1111echo "* FAIL: $tot_fail"
1112echo "* Bad configuration: $tot_config"
David Gibson67b6b332007-11-21 11:56:14 +11001113if [ -n "$VALGRIND" ]; then
David Gibsonf2f6d0f2009-11-12 11:56:34 +11001114 echo "* valgrind errors: $tot_vg"
David Gibson67b6b332007-11-21 11:56:14 +11001115fi
David Gibsonf2f6d0f2009-11-12 11:56:34 +11001116echo "* Strange test result: $tot_strange"
1117echo "**********"
David Gibson0c7cd1a2007-06-26 11:33:10 +10001118
Simon Glassb9eba922017-08-19 11:17:56 -06001119[ "$tot_tests" -eq "$tot_pass" ] || exit 1