mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-30 11:38:15 +00:00 
			
		
		
		
	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>
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.8 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(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
 |