]>
Commit | Line | Data |
---|---|---|
d201506c SW |
1 | # Copyright (c) 2015 Stephen Warren |
2 | # Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved. | |
3 | # | |
4 | # SPDX-License-Identifier: GPL-2.0 | |
5 | ||
6 | # Logic to interact with U-Boot running on real hardware, typically via a | |
7 | # physical serial port. | |
8 | ||
9 | import sys | |
10 | from u_boot_spawn import Spawn | |
11 | from u_boot_console_base import ConsoleBase | |
12 | ||
13 | class ConsoleExecAttach(ConsoleBase): | |
14 | '''Represents a physical connection to a U-Boot console, typically via a | |
15 | serial port. This implementation executes a sub-process to attach to the | |
16 | console, expecting that the stdin/out of the sub-process will be forwarded | |
17 | to/from the physical hardware. This approach isolates the test infra- | |
18 | structure from the user-/installation-specific details of how to | |
19 | communicate with, and the identity of, serial ports etc.''' | |
20 | ||
21 | def __init__(self, log, config): | |
22 | '''Initialize a U-Boot console connection. | |
23 | ||
24 | Args: | |
25 | log: A multiplexed_log.Logfile instance. | |
26 | config: A "configuration" object as defined in conftest.py. | |
27 | ||
28 | Returns: | |
29 | Nothing. | |
30 | ''' | |
31 | ||
32 | # The max_fifo_fill value might need tweaking per-board/-SoC? | |
33 | # 1 would be safe anywhere, but is very slow (a pexpect issue?). | |
34 | # 16 is a common FIFO size. | |
35 | # HW flow control would mean this could be infinite. | |
36 | super(ConsoleExecAttach, self).__init__(log, config, max_fifo_fill=16) | |
37 | ||
38 | self.log.action('Flashing U-Boot') | |
39 | cmd = ['u-boot-test-flash', config.board_type, config.board_identity] | |
40 | runner = self.log.get_runner(cmd[0], sys.stdout) | |
41 | runner.run(cmd) | |
42 | runner.close() | |
43 | ||
44 | def get_spawn(self): | |
45 | '''Connect to a fresh U-Boot instance. | |
46 | ||
47 | The target board is reset, so that U-Boot begins running from scratch. | |
48 | ||
49 | Args: | |
50 | None. | |
51 | ||
52 | Returns: | |
53 | A u_boot_spawn.Spawn object that is attached to U-Boot. | |
54 | ''' | |
55 | ||
56 | args = [self.config.board_type, self.config.board_identity] | |
57 | s = Spawn(['u-boot-test-console'] + args) | |
58 | ||
59 | self.log.action('Resetting board') | |
60 | cmd = ['u-boot-test-reset'] + args | |
61 | runner = self.log.get_runner(cmd[0], sys.stdout) | |
62 | runner.run(cmd) | |
63 | runner.close() | |
64 | ||
65 | return s |