diff options
author | Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com> | 2018-11-28 22:44:38 -0800 |
---|---|---|
committer | Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com> | 2019-06-28 14:58:31 -0700 |
commit | 725f0b0ffb49ba8f07f6ca5a6bcc36c83eb4162c (patch) | |
tree | 3d6c89d9d1e9bf78a8636c5000b48941d98fa53a | |
parent | 22d9e2a8e00a029be125178ddddd1bbf653eb002 (diff) | |
download | meta-xilinx-725f0b0ffb49ba8f07f6ca5a6bcc36c83eb4162c.tar.gz |
qemu-system-aarch64-multiarch: Enable plm argument in runqemu
Adding plm args to enable plm in runqemu for Versal devices
The PLM (Platform Loader/Manager) is responsible for:
• System Initialization
• Boot and Configuration of various devices in system
• Secure boot
• Platform Management
• Error Management
• Partial Reconfiguration
• Subsystem restart
• Health monitoring
With the addition of plm args in the machine configurations (and
appending -multiarch to QB_SYSTEM_NAME), runqemu will support multiarch
emulation and will spin up one instance for the APU and one instance
for the PLM.
Signed-off-by: Jaewon Lee <jaewon.lee@xilinx.com>
Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com>
-rw-r--r-- | meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch b/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch index 2c92c686..ba0e2743 100644 --- a/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch +++ b/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch | |||
@@ -13,15 +13,27 @@ mach_path = tempfile.mkdtemp() | |||
13 | 13 | ||
14 | # Separate PMU and APU arguments | 14 | # Separate PMU and APU arguments |
15 | APU_args = sys.argv[1:] | 15 | APU_args = sys.argv[1:] |
16 | PMU_args = APU_args[APU_args.index('-pmu-args')+1] | 16 | mbtype='' |
17 | APU_args.remove('-pmu-args') | ||
18 | APU_args.remove(PMU_args) | ||
19 | PMU_args = PMU_args.split() | ||
20 | 17 | ||
21 | PMU_rom = PMU_args[PMU_args.index('-kernel')+1] | 18 | if '-pmu-args' in APU_args: |
22 | error_msg = None | 19 | MB_args = APU_args[APU_args.index('-pmu-args')+1] |
20 | APU_args.remove('-pmu-args') | ||
21 | APU_args.remove(MB_args) | ||
22 | MB_args = MB_args.split() | ||
23 | PMU_rom = MB_args[MB_args.index('-kernel')+1] | ||
24 | mbtype='PMU' | ||
25 | elif '-plm-args' in APU_args: | ||
26 | MB_args = APU_args[APU_args.index('-plm-args')+1] | ||
27 | APU_args.remove('-plm-args') | ||
28 | APU_args.remove(MB_args) | ||
29 | MB_args = MB_args.split() | ||
30 | mbtype='PLM' | ||
31 | else: | ||
32 | error_msg = '\nMultiarch not setup properly.' | ||
33 | sys.exit(error_msg) | ||
23 | 34 | ||
24 | if os.path.exists(PMU_rom): | 35 | error_msg = None |
36 | if (mbtype == 'PMU' and os.path.exists(PMU_rom)) or mbtype == 'PLM': | ||
25 | 37 | ||
26 | # We need to switch tcp serial arguments (if they exist, e.g. qemurunner) to get the output correctly | 38 | # We need to switch tcp serial arguments (if they exist, e.g. qemurunner) to get the output correctly |
27 | tcp_serial_ports = [i for i, s in enumerate(APU_args) if 'tcp:127.0.0.1:' in s] | 39 | tcp_serial_ports = [i for i, s in enumerate(APU_args) if 'tcp:127.0.0.1:' in s] |
@@ -30,16 +42,16 @@ if os.path.exists(PMU_rom): | |||
30 | if len(tcp_serial_ports) == 2: | 42 | if len(tcp_serial_ports) == 2: |
31 | APU_args[tcp_serial_ports[0]],APU_args[tcp_serial_ports[1]] = APU_args[tcp_serial_ports[1]],APU_args[tcp_serial_ports[0]] | 43 | APU_args[tcp_serial_ports[0]],APU_args[tcp_serial_ports[1]] = APU_args[tcp_serial_ports[1]],APU_args[tcp_serial_ports[0]] |
32 | 44 | ||
33 | pmu_cmd = binpath + '/qemu-system-microblazeel ' + ' '.join(PMU_args) + ' -machine-path ' + mach_path | 45 | mb_cmd = binpath + '/qemu-system-microblazeel ' + ' '.join(MB_args) + ' -machine-path ' + mach_path |
34 | apu_cmd = binpath + '/qemu-system-aarch64 ' + ' '.join(APU_args) + ' -machine-path ' + mach_path | 46 | apu_cmd = binpath + '/qemu-system-aarch64 ' + ' '.join(APU_args) + ' -machine-path ' + mach_path |
35 | 47 | ||
36 | # Debug prints | 48 | # Debug prints |
37 | print('\nPMU instance cmd: %s\n' % pmu_cmd) | 49 | print('\n%s instance cmd: %s\n' % (mbtype, mb_cmd)) |
38 | print('APU instance cmd: %s\n' % apu_cmd) | 50 | print('APU instance cmd: %s\n' % apu_cmd) |
39 | 51 | ||
40 | 52 | ||
41 | # Invoke QEMU pmu instance | 53 | # Invoke QEMU pmu instance |
42 | process_pmu = subprocess.Popen(pmu_cmd, shell=True, stderr=subprocess.PIPE) | 54 | process_pmu = subprocess.Popen(mb_cmd, shell=True, stderr=subprocess.PIPE) |
43 | 55 | ||
44 | # Invoke QEMU APU instance | 56 | # Invoke QEMU APU instance |
45 | process_apu = subprocess.Popen(apu_cmd, shell=True, stderr=subprocess.PIPE) | 57 | process_apu = subprocess.Popen(apu_cmd, shell=True, stderr=subprocess.PIPE) |
@@ -47,8 +59,9 @@ if os.path.exists(PMU_rom): | |||
47 | error_msg = '\nQEMU APU instance failed:\n%s' % process_apu.stderr.read().decode() | 59 | error_msg = '\nQEMU APU instance failed:\n%s' % process_apu.stderr.read().decode() |
48 | 60 | ||
49 | else: | 61 | else: |
50 | error_msg = '\nError: Missing PMU ROM: %s' % PMU_rom | 62 | if mbtype == 'PMU': |
51 | error_msg += '\nSee "meta-xilinx/README.qemu.md" for more information on accquiring the PMU ROM.\n' | 63 | error_msg = '\nError: Missing PMU ROM: %s' % PMU_rom |
64 | error_msg += '\nSee "meta-xilinx/README.qemu.md" for more information on accquiring the PMU ROM.\n' | ||
52 | 65 | ||
53 | shutil.rmtree(mach_path) | 66 | shutil.rmtree(mach_path) |
54 | sys.exit(error_msg) | 67 | sys.exit(error_msg) |