dm: test: Add a test for the various migration combinations
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>
This commit is contained in:
parent
7e91bf892f
commit
9a8a27a76a
1 changed files with 108 additions and 0 deletions
108
test/py/tests/test_of_migrate.py
Normal file
108
test/py/tests/test_of_migrate.py
Normal file
|
@ -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
|
Loading…
Reference in a new issue