]>
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): | |
e8debf39 | 14 | """Represents a physical connection to a U-Boot console, typically via a |
d201506c SW |
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 | |
e8debf39 | 19 | communicate with, and the identity of, serial ports etc.""" |
d201506c SW |
20 | |
21 | def __init__(self, log, config): | |
e8debf39 | 22 | """Initialize a U-Boot console connection. |
d201506c SW |
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. | |
e8debf39 | 30 | """ |
d201506c SW |
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 | ||
83357fd5 SW |
38 | with self.log.section('flash'): |
39 | self.log.action('Flashing U-Boot') | |
40 | cmd = ['u-boot-test-flash', config.board_type, config.board_identity] | |
41 | runner = self.log.get_runner(cmd[0], sys.stdout) | |
42 | runner.run(cmd) | |
43 | runner.close() | |
44 | self.log.status_pass('OK') | |
d201506c SW |
45 | |
46 | def get_spawn(self): | |
e8debf39 | 47 | """Connect to a fresh U-Boot instance. |
d201506c SW |
48 | |
49 | The target board is reset, so that U-Boot begins running from scratch. | |
50 | ||
51 | Args: | |
52 | None. | |
53 | ||
54 | Returns: | |
55 | A u_boot_spawn.Spawn object that is attached to U-Boot. | |
e8debf39 | 56 | """ |
d201506c SW |
57 | |
58 | args = [self.config.board_type, self.config.board_identity] | |
59 | s = Spawn(['u-boot-test-console'] + args) | |
60 | ||
61 | self.log.action('Resetting board') | |
62 | cmd = ['u-boot-test-reset'] + args | |
63 | runner = self.log.get_runner(cmd[0], sys.stdout) | |
64 | runner.run(cmd) | |
65 | runner.close() | |
66 | ||
67 | return s |