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