mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-30 08:07:59 +00:00

This fixture name is quite long and results in lots of verbose code. We know this is U-Boot so the 'u_boot_' part is not necessary. But it is also a bit of a misnomer, since it provides access to all the information available to tests. It is not just the console. It would be too confusing to use con as it would be confused with config and it is probably too short. So shorten it to 'ubman'. Signed-off-by: Simon Glass <sjg@chromium.org> Link: https://lore.kernel.org/u-boot/CAFLszTgPa4aT_J9h9pqeTtLCVn4x2JvLWRcWRD8NaN3uoSAtyA@mail.gmail.com/
108 lines
3.7 KiB
Python
108 lines
3.7 KiB
Python
# 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(ubman):
|
||
"""Test sandbox with old boot phase tags like u-boot,dm-pre-proper"""
|
||
cons = ubman
|
||
|
||
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(ubman):
|
||
"""Test sandbox with old boot phase tags like u-boot,dm-spl"""
|
||
cons = ubman
|
||
|
||
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(ubman):
|
||
"""Test sandbox shows a message when tags were migrated"""
|
||
cons = ubman
|
||
|
||
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
|