blob: 8b253b4451d05493bce1e1a52bfdda04dd18d93f [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001# SPDX-License-Identifier: GPL-2.0
Stephen Warren10e50632016-01-15 11:15:24 -07002# Copyright (c) 2015 Stephen Warren
3# Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved.
Stephen Warren10e50632016-01-15 11:15:24 -07004
Heinrich Schuchardt8ca17c12021-11-23 00:01:49 +01005"""
6Logic to interact with U-Boot running on real hardware, typically via a
7physical serial port.
8"""
Stephen Warren10e50632016-01-15 11:15:24 -07009
10import sys
11from u_boot_spawn import Spawn
12from u_boot_console_base import ConsoleBase
13
14class ConsoleExecAttach(ConsoleBase):
Stephen Warren75e731e2016-01-26 13:41:30 -070015 """Represents a physical connection to a U-Boot console, typically via a
Stephen Warren10e50632016-01-15 11:15:24 -070016 serial port. This implementation executes a sub-process to attach to the
17 console, expecting that the stdin/out of the sub-process will be forwarded
18 to/from the physical hardware. This approach isolates the test infra-
19 structure from the user-/installation-specific details of how to
Stephen Warren75e731e2016-01-26 13:41:30 -070020 communicate with, and the identity of, serial ports etc."""
Stephen Warren10e50632016-01-15 11:15:24 -070021
22 def __init__(self, log, config):
Stephen Warren75e731e2016-01-26 13:41:30 -070023 """Initialize a U-Boot console connection.
Stephen Warren10e50632016-01-15 11:15:24 -070024
25 Args:
26 log: A multiplexed_log.Logfile instance.
27 config: A "configuration" object as defined in conftest.py.
28
29 Returns:
30 Nothing.
Stephen Warren75e731e2016-01-26 13:41:30 -070031 """
Stephen Warren10e50632016-01-15 11:15:24 -070032
33 # The max_fifo_fill value might need tweaking per-board/-SoC?
34 # 1 would be safe anywhere, but is very slow (a pexpect issue?).
35 # 16 is a common FIFO size.
36 # HW flow control would mean this could be infinite.
37 super(ConsoleExecAttach, self).__init__(log, config, max_fifo_fill=16)
38
Stephen Warrene3f2a502016-02-03 16:46:34 -070039 with self.log.section('flash'):
40 self.log.action('Flashing U-Boot')
41 cmd = ['u-boot-test-flash', config.board_type, config.board_identity]
42 runner = self.log.get_runner(cmd[0], sys.stdout)
43 runner.run(cmd)
44 runner.close()
45 self.log.status_pass('OK')
Stephen Warren10e50632016-01-15 11:15:24 -070046
47 def get_spawn(self):
Stephen Warren75e731e2016-01-26 13:41:30 -070048 """Connect to a fresh U-Boot instance.
Stephen Warren10e50632016-01-15 11:15:24 -070049
50 The target board is reset, so that U-Boot begins running from scratch.
51
52 Args:
53 None.
54
55 Returns:
56 A u_boot_spawn.Spawn object that is attached to U-Boot.
Stephen Warren75e731e2016-01-26 13:41:30 -070057 """
Stephen Warren10e50632016-01-15 11:15:24 -070058
59 args = [self.config.board_type, self.config.board_identity]
60 s = Spawn(['u-boot-test-console'] + args)
61
Simon Glassf1b1bb82024-11-12 07:13:17 -070062 if self.config.use_running_system:
63 self.log.action('Connecting to board without reset')
64 else:
65 try:
66 self.log.action('Resetting board')
67 cmd = ['u-boot-test-reset'] + args
68 runner = self.log.get_runner(cmd[0], sys.stdout)
69 runner.run(cmd)
70 runner.close()
71 except:
72 s.close()
73 raise
Stephen Warren10e50632016-01-15 11:15:24 -070074
75 return s
Simon Glassdcb97ed2024-11-12 07:13:16 -070076
77 def close(self):
78 super().close()
79
80 self.log.action('Releasing board')
81 args = [self.config.board_type, self.config.board_identity]
82 cmd = ['u-boot-test-release'] + args
83 runner = self.log.get_runner(cmd[0], sys.stdout)
84 runner.run(cmd)
85 runner.close()