From be3163a07208fecdd7791f26ed6de2dec11b62e1 Mon Sep 17 00:00:00 2001 From: Hoa Nguyen Date: Fri, 1 Dec 2023 01:16:24 +0000 Subject: [PATCH] stdlib: Integrate BootloaderKernelWorkload Change-Id: Ifeaa98059d5667c3335eaccd57a5295f44f88e43 Signed-off-by: Hoa Nguyen --- .../components/boards/kernel_disk_workload.py | 3 ++- src/python/gem5/components/boards/riscv_board.py | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index 16c196208b..db86133fd8 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -201,8 +201,9 @@ class KernelDiskWorkload: # implementation of the ArmBoard class expects a boot loader file to be # provided along with the kernel and the disk image. + self._bootloader = [] if bootloader is not None: - self._bootloader = [bootloader.get_local_path()] + self._bootloader.append(bootloader.get_local_path()) # Set the readfile. if readfile: diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index 0ce9d0192b..3675708879 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -42,7 +42,7 @@ from m5.objects import ( PMAChecker, Port, RawDiskImage, - RiscvLinux, + RiscvBootloaderKernelWorkload, RiscvMmioVirtIO, RiscvRTC, VirtIOBlock, @@ -97,7 +97,7 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): @overrides(AbstractSystemBoard) def _setup_board(self) -> None: - self.workload = RiscvLinux() + self.workload = RiscvBootloaderKernelWorkload() # Contains a CLINT, PLIC, UART, and some functions for the dtb, etc. self.platform = HiFive() @@ -488,6 +488,18 @@ class RiscvBoard(AbstractSystemBoard, KernelDiskWorkload): def get_disk_device(self): return "/dev/vda" + @overrides(AbstractSystemBoard) + def _pre_instantiate(self): + if len(self._bootloader) > 0: + self.workload.bootloader_addr = 0x0 + self.workload.bootloader_filename = self._bootloader[0] + self.workload.kernel_addr = 0x80200000 + self.workload.entry_point = 0x80000000 # Bootloader starting point + else: + self.workload.kernel_addr = 0x0 + self.workload.entry_point = 0x80000000 + self._connect_things() + @overrides(KernelDiskWorkload) def _add_disk_to_board(self, disk_image: AbstractResource): image = CowDiskImage(