]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: test: Add a test for the various migration combinations
authorSimon Glass <sjg@chromium.org>
Mon, 13 Feb 2023 15:56:41 +0000 (08:56 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 14 Feb 2023 16:43:27 +0000 (09:43 -0700)
Test that:

- sandbox shows a warning when an unmigrated DT is used
- sandbox fails to run when migration is turned off
- sandbox_spl fails to build when migration is turned off

Signed-off-by: Simon Glass <sjg@chromium.org>
test/py/tests/test_of_migrate.py [new file with mode: 0644]

diff --git a/test/py/tests/test_of_migrate.py b/test/py/tests/test_of_migrate.py
new file mode 100644 (file)
index 0000000..910f7c0
--- /dev/null
@@ -0,0 +1,108 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright 2023 Google LLC
+# Written by Simon Glass <sjg@chromium.org>
+
+"""Test handling of unmigrated u-boot,dm- tags"""
+
+import os
+import pytest
+
+import u_boot_utils as util
+
+# This is needed for Azure, since the default '..' directory is not writeable
+TMPDIR1 = '/tmp/test_no_migrate'
+TMPDIR2 = '/tmp/test_no_migrate_spl'
+TMPDIR3 = '/tmp/test_migrate'
+
+def build_for_migrate(cons, replace_pair, board, tmpdir, disable_migrate=True):
+    """Build an updated U-Boot with a slightly modified device tree
+
+    Args:
+        cons (ConsoleBase): U-Boot console
+        replace_pair (tuple):
+            String to find
+            String to replace it with
+        board (str): Board to build
+        tmpdir (str): Temporary directory to use
+        disable_migrate (bool): True to disable CONFIG_OF_TAG_MIGRATE in build
+    """
+    srcdir = cons.config.source_dir
+    build_dir = cons.config.build_dir
+
+    # Get the source for the existing dts
+    dt_dir = os.path.join(build_dir, 'arch', 'sandbox', 'dts')
+    orig_fname = os.path.join(dt_dir, 'sandbox.dtb')
+    out_dts = os.path.join(dt_dir, 'sandbox_out.dts')
+    util.run_and_log(cons, ['dtc', orig_fname, '-I', 'dtb', '-O', 'dts',
+                            '-o', out_dts])
+
+    # Update it to use an old tag
+    with open(out_dts) as inf:
+        data = inf.read()
+    data = data.replace(*replace_pair)
+
+    dts_fname = os.path.join(dt_dir, 'sandbox_oldtag.dts')
+    with open(dts_fname, 'w') as outf:
+        print(data, file=outf)
+    dtb_fname = os.path.join(dt_dir, 'sandbox_oldtag.dtb')
+    util.run_and_log(cons, ['dtc', dts_fname, '-o', dtb_fname])
+
+    migrate = ['-a', '~CONFIG_OF_TAG_MIGRATE'] if disable_migrate else []
+
+    # Build sandbox with this new dtb, turning off OF_TAG_MIGRATE
+    env = dict(os.environ)
+    env['EXT_DTB'] = dtb_fname
+    env['DEVICE_TREE'] = 'sandbox_new'
+    env['NO_LTO'] = '1'  # Speed up build
+    out = util.run_and_log(
+        cons, ['./tools/buildman/buildman', '-m', '--board', board,
+               *migrate, '-w', '-o', tmpdir], ignore_errors=True, env=env)
+    return out
+
+@pytest.mark.slow
+@pytest.mark.boardspec('sandbox')
+def test_of_no_migrate(u_boot_console):
+    """Test sandbox with old boot phase tags like u-boot,dm-pre-proper"""
+    cons = u_boot_console
+
+    build_for_migrate(cons, ['bootph-some-ram', 'u-boot,dm-pre-proper'],
+                      'sandbox', TMPDIR1)
+
+    # It should fail to run, since the lcd device will not be bound before
+    # relocation. so won't get its frame-buffer memory
+    out = util.run_and_log(
+        cons, [os.path.join(TMPDIR1, 'u-boot'), '-D', '-c', 'help'],
+        ignore_errors=True)
+    assert "Video device 'lcd' cannot allocate frame buffer memory" in out
+
+
+@pytest.mark.slow
+@pytest.mark.boardspec('sandbox_spl')
+@pytest.mark.boardspec('spl_of_platdata_inst')
+@pytest.mark.boardspec('!sandbox_tpl')
+def test_of_no_migrate_spl(u_boot_console):
+    """Test sandbox with old boot phase tags like u-boot,dm-spl"""
+    cons = u_boot_console
+
+    out = build_for_migrate(cons, ['bootph-pre-ram', 'u-boot,dm-spl'],
+                            'sandbox_spl', TMPDIR2)
+
+    # It should fail to build, since the SPL DT will not include 'spl-test'
+    # node, among others
+    assert "undefined type â€˜struct dtd_sandbox_spl_test’" in out
+
+
+@pytest.mark.slow
+@pytest.mark.boardspec('sandbox')
+def test_of_migrate(u_boot_console):
+    """Test sandbox shows a message when tags were migrated"""
+    cons = u_boot_console
+
+    build_for_migrate(cons, ['bootph-some-ram', 'u-boot,dm-pre-proper'],
+                      'sandbox', TMPDIR3, disable_migrate=False)
+
+    # It should show a migration message
+    out = util.run_and_log(
+        cons, [os.path.join(TMPDIR3, 'u-boot'), '-D', '-c', 'help'],
+        ignore_errors=True)
+    assert "Warning: Device tree includes old 'u-boot,dm-' tags" in out