]>
Commit | Line | Data |
---|---|---|
9a8a27a7 SG |
1 | # SPDX-License-Identifier: GPL-2.0 |
2 | # Copyright 2023 Google LLC | |
3 | # Written by Simon Glass <sjg@chromium.org> | |
4 | ||
5 | """Test handling of unmigrated u-boot,dm- tags""" | |
6 | ||
7 | import os | |
8 | import pytest | |
9 | ||
10 | import u_boot_utils as util | |
11 | ||
12 | # This is needed for Azure, since the default '..' directory is not writeable | |
13 | TMPDIR1 = '/tmp/test_no_migrate' | |
14 | TMPDIR2 = '/tmp/test_no_migrate_spl' | |
15 | TMPDIR3 = '/tmp/test_migrate' | |
16 | ||
17 | def build_for_migrate(cons, replace_pair, board, tmpdir, disable_migrate=True): | |
18 | """Build an updated U-Boot with a slightly modified device tree | |
19 | ||
20 | Args: | |
21 | cons (ConsoleBase): U-Boot console | |
22 | replace_pair (tuple): | |
23 | String to find | |
24 | String to replace it with | |
25 | board (str): Board to build | |
26 | tmpdir (str): Temporary directory to use | |
27 | disable_migrate (bool): True to disable CONFIG_OF_TAG_MIGRATE in build | |
28 | """ | |
29 | srcdir = cons.config.source_dir | |
30 | build_dir = cons.config.build_dir | |
31 | ||
32 | # Get the source for the existing dts | |
33 | dt_dir = os.path.join(build_dir, 'arch', 'sandbox', 'dts') | |
34 | orig_fname = os.path.join(dt_dir, 'sandbox.dtb') | |
35 | out_dts = os.path.join(dt_dir, 'sandbox_out.dts') | |
36 | util.run_and_log(cons, ['dtc', orig_fname, '-I', 'dtb', '-O', 'dts', | |
37 | '-o', out_dts]) | |
38 | ||
39 | # Update it to use an old tag | |
40 | with open(out_dts) as inf: | |
41 | data = inf.read() | |
42 | data = data.replace(*replace_pair) | |
43 | ||
44 | dts_fname = os.path.join(dt_dir, 'sandbox_oldtag.dts') | |
45 | with open(dts_fname, 'w') as outf: | |
46 | print(data, file=outf) | |
47 | dtb_fname = os.path.join(dt_dir, 'sandbox_oldtag.dtb') | |
48 | util.run_and_log(cons, ['dtc', dts_fname, '-o', dtb_fname]) | |
49 | ||
50 | migrate = ['-a', '~CONFIG_OF_TAG_MIGRATE'] if disable_migrate else [] | |
51 | ||
52 | # Build sandbox with this new dtb, turning off OF_TAG_MIGRATE | |
53 | env = dict(os.environ) | |
54 | env['EXT_DTB'] = dtb_fname | |
55 | env['DEVICE_TREE'] = 'sandbox_new' | |
56 | env['NO_LTO'] = '1' # Speed up build | |
57 | out = util.run_and_log( | |
58 | cons, ['./tools/buildman/buildman', '-m', '--board', board, | |
59 | *migrate, '-w', '-o', tmpdir], ignore_errors=True, env=env) | |
60 | return out | |
61 | ||
62 | @pytest.mark.slow | |
63 | @pytest.mark.boardspec('sandbox') | |
64 | def test_of_no_migrate(u_boot_console): | |
65 | """Test sandbox with old boot phase tags like u-boot,dm-pre-proper""" | |
66 | cons = u_boot_console | |
67 | ||
68 | build_for_migrate(cons, ['bootph-some-ram', 'u-boot,dm-pre-proper'], | |
69 | 'sandbox', TMPDIR1) | |
70 | ||
71 | # It should fail to run, since the lcd device will not be bound before | |
72 | # relocation. so won't get its frame-buffer memory | |
73 | out = util.run_and_log( | |
74 | cons, [os.path.join(TMPDIR1, 'u-boot'), '-D', '-c', 'help'], | |
75 | ignore_errors=True) | |
76 | assert "Video device 'lcd' cannot allocate frame buffer memory" in out | |
77 | ||
78 | ||
79 | @pytest.mark.slow | |
80 | @pytest.mark.boardspec('sandbox_spl') | |
81 | @pytest.mark.boardspec('spl_of_platdata_inst') | |
82 | @pytest.mark.boardspec('!sandbox_tpl') | |
83 | def test_of_no_migrate_spl(u_boot_console): | |
84 | """Test sandbox with old boot phase tags like u-boot,dm-spl""" | |
85 | cons = u_boot_console | |
86 | ||
87 | out = build_for_migrate(cons, ['bootph-pre-ram', 'u-boot,dm-spl'], | |
88 | 'sandbox_spl', TMPDIR2) | |
89 | ||
90 | # It should fail to build, since the SPL DT will not include 'spl-test' | |
91 | # node, among others | |
92 | assert "undefined type ‘struct dtd_sandbox_spl_test’" in out | |
93 | ||
94 | ||
95 | @pytest.mark.slow | |
96 | @pytest.mark.boardspec('sandbox') | |
97 | def test_of_migrate(u_boot_console): | |
98 | """Test sandbox shows a message when tags were migrated""" | |
99 | cons = u_boot_console | |
100 | ||
101 | build_for_migrate(cons, ['bootph-some-ram', 'u-boot,dm-pre-proper'], | |
102 | 'sandbox', TMPDIR3, disable_migrate=False) | |
103 | ||
104 | # It should show a migration message | |
105 | out = util.run_and_log( | |
106 | cons, [os.path.join(TMPDIR3, 'u-boot'), '-D', '-c', 'help'], | |
107 | ignore_errors=True) | |
108 | assert "Warning: Device tree includes old 'u-boot,dm-' tags" in out |