mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 20:18:18 +00:00 
			
		
		
		
	This is useful sometimes when running a specific test. Add support for it in the existing restart_uboot_with_flags() function. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# SPDX-License-Identifier: GPL-2.0
 | 
						|
# Copyright (c) 2015 Stephen Warren
 | 
						|
# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
 | 
						|
 | 
						|
"""
 | 
						|
Logic to interact with the sandbox port of U-Boot, running as a sub-process.
 | 
						|
"""
 | 
						|
 | 
						|
import time
 | 
						|
from u_boot_spawn import Spawn
 | 
						|
from u_boot_console_base import ConsoleBase
 | 
						|
 | 
						|
class ConsoleSandbox(ConsoleBase):
 | 
						|
    """Represents a connection to a sandbox U-Boot console, executed as a sub-
 | 
						|
    process."""
 | 
						|
 | 
						|
    def __init__(self, log, config):
 | 
						|
        """Initialize a U-Boot console connection.
 | 
						|
 | 
						|
        Args:
 | 
						|
            log: A multiplexed_log.Logfile instance.
 | 
						|
            config: A "configuration" object as defined in conftest.py.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            Nothing.
 | 
						|
        """
 | 
						|
 | 
						|
        super(ConsoleSandbox, self).__init__(log, config, max_fifo_fill=1024)
 | 
						|
        self.sandbox_flags = []
 | 
						|
        self.use_dtb = True
 | 
						|
 | 
						|
    def get_spawn(self):
 | 
						|
        """Connect to a fresh U-Boot instance.
 | 
						|
 | 
						|
        A new sandbox process is created, so that U-Boot begins running from
 | 
						|
        scratch.
 | 
						|
 | 
						|
        Args:
 | 
						|
            None.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            A u_boot_spawn.Spawn object that is attached to U-Boot.
 | 
						|
        """
 | 
						|
 | 
						|
        bcfg = self.config.buildconfig
 | 
						|
        config_spl = bcfg.get('config_spl', 'n') == 'y'
 | 
						|
        config_vpl = bcfg.get('config_vpl', 'n') == 'y'
 | 
						|
        if config_vpl:
 | 
						|
            # Run TPL first, which runs VPL
 | 
						|
            fname = '/tpl/u-boot-tpl'
 | 
						|
        else:
 | 
						|
            fname = '/spl/u-boot-spl' if config_spl else '/u-boot'
 | 
						|
        print(fname)
 | 
						|
        cmd = []
 | 
						|
        if self.config.gdbserver:
 | 
						|
            cmd += ['gdbserver', self.config.gdbserver]
 | 
						|
        cmd += [self.config.build_dir + fname, '-v']
 | 
						|
        if self.use_dtb:
 | 
						|
            cmd += ['-d', self.config.dtb]
 | 
						|
        cmd += self.sandbox_flags
 | 
						|
        return Spawn(cmd, cwd=self.config.source_dir)
 | 
						|
 | 
						|
    def restart_uboot_with_flags(self, flags, expect_reset=False, use_dtb=True):
 | 
						|
        """Run U-Boot with the given command-line flags
 | 
						|
 | 
						|
        Args:
 | 
						|
            flags: List of flags to pass, each a string
 | 
						|
            expect_reset: Boolean indication whether this boot is expected
 | 
						|
                to be reset while the 1st boot process after main boot before
 | 
						|
                prompt. False by default.
 | 
						|
            use_dtb: True to use a device tree file, False to run without one
 | 
						|
 | 
						|
        Returns:
 | 
						|
            A u_boot_spawn.Spawn object that is attached to U-Boot.
 | 
						|
        """
 | 
						|
 | 
						|
        try:
 | 
						|
            self.sandbox_flags = flags
 | 
						|
            self.use_dtb = use_dtb
 | 
						|
            return self.restart_uboot(expect_reset)
 | 
						|
        finally:
 | 
						|
            self.sandbox_flags = []
 | 
						|
            self.use_dtb = True
 | 
						|
 | 
						|
    def kill(self, sig):
 | 
						|
        """Send a specific Unix signal to the sandbox process.
 | 
						|
 | 
						|
        Args:
 | 
						|
            sig: The Unix signal to send to the process.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            Nothing.
 | 
						|
        """
 | 
						|
 | 
						|
        self.log.action('kill %d' % sig)
 | 
						|
        self.p.kill(sig)
 | 
						|
 | 
						|
    def validate_exited(self):
 | 
						|
        """Determine whether the sandbox process has exited.
 | 
						|
 | 
						|
        If required, this function waits a reasonable time for the process to
 | 
						|
        exit.
 | 
						|
 | 
						|
        Args:
 | 
						|
            None.
 | 
						|
 | 
						|
        Returns:
 | 
						|
            Boolean indicating whether the process has exited.
 | 
						|
        """
 | 
						|
 | 
						|
        p = self.p
 | 
						|
        self.p = None
 | 
						|
        for i in range(100):
 | 
						|
            ret = not p.isalive()
 | 
						|
            if ret:
 | 
						|
                break
 | 
						|
            time.sleep(0.1)
 | 
						|
        p.close()
 | 
						|
        return ret
 |