diff --git a/src/python/gem5/components/boards/arm_board.py b/src/python/gem5/components/boards/arm_board.py index d4028e4d71d..0a785c44c73 100644 --- a/src/python/gem5/components/boards/arm_board.py +++ b/src/python/gem5/components/boards/arm_board.py @@ -382,7 +382,7 @@ def get_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) - def _add_disk_to_board(self, disk_image: AbstractResource): + def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool): self._image = CowDiskImage( child=RawDiskImage( read_only=True, image_file=disk_image.get_local_path() diff --git a/src/python/gem5/components/boards/experimental/lupv_board.py b/src/python/gem5/components/boards/experimental/lupv_board.py index 326f944bf45..2ec91b63237 100644 --- a/src/python/gem5/components/boards/experimental/lupv_board.py +++ b/src/python/gem5/components/boards/experimental/lupv_board.py @@ -557,7 +557,7 @@ def get_default_kernel_args(self) -> List[str]: ] @overrides(KernelDiskWorkload) - def _add_disk_to_board(self, disk_image: AbstractResource) -> None: + def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool): # Note: This must be called after set_workload because it looks for an # attribute named "disk" and connects diff --git a/src/python/gem5/components/boards/kernel_disk_workload.py b/src/python/gem5/components/boards/kernel_disk_workload.py index dcf20081faa..0ee872873ae 100644 --- a/src/python/gem5/components/boards/kernel_disk_workload.py +++ b/src/python/gem5/components/boards/kernel_disk_workload.py @@ -110,6 +110,17 @@ def _add_disk_to_board(self, disk_image: DiskImageResource) -> None: """ raise NotImplementedError + @abstractmethod + def _finalize_workload(self) -> None: + """ + Finalizes the board setup dependent on the workload. + This function connects the IO devices to the board, generates the + device tree and expose the location of the dtb to the gem5's workload + object. This function should be called after all IO devices are set up + (e.g. disk images, PIO devices.) + """ + raise NotImplementedError + def get_disk_root_partition( cls, disk_image: DiskImageResource ) -> Optional[str]: @@ -145,6 +156,7 @@ def set_kernel_disk_workload( disk_image: DiskImageResource, bootloader: Optional[BootloaderResource] = None, disk_device: Optional[str] = None, + additional_disks: List[DiskImageResource] = [], readfile: Optional[str] = None, readfile_contents: Optional[str] = None, kernel_args: Optional[List[str]] = None, @@ -223,7 +235,12 @@ def set_kernel_disk_workload( file.write(readfile_contents) file.close() - self._add_disk_to_board(disk_image=disk_image) + self._add_disk_to_board(disk_image=disk_image, is_root=True) + if additional_disks != []: + for disk_image in additional_disks: + self._add_disk_to_board(disk_image=disk_image, is_root=False) + # Finalize the setup after all components of the workload are set. + self._finalize_workload() # Set whether to exit on work items. self.exit_on_work_items = exit_on_work_items diff --git a/src/python/gem5/components/boards/riscv_board.py b/src/python/gem5/components/boards/riscv_board.py index 555f723df1b..a390f971473 100644 --- a/src/python/gem5/components/boards/riscv_board.py +++ b/src/python/gem5/components/boards/riscv_board.py @@ -510,7 +510,7 @@ def _pre_instantiate(self): self._connect_things() @overrides(KernelDiskWorkload) - def _add_disk_to_board(self, disk_image: AbstractResource): + def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool): image = CowDiskImage( child=RawDiskImage(read_only=True), read_only=False ) diff --git a/src/python/gem5/components/boards/x86_board.py b/src/python/gem5/components/boards/x86_board.py index a0ba3254750..b6465c5b8a9 100644 --- a/src/python/gem5/components/boards/x86_board.py +++ b/src/python/gem5/components/boards/x86_board.py @@ -302,7 +302,7 @@ def get_disk_device(self): return "/dev/hda" @overrides(KernelDiskWorkload) - def _add_disk_to_board(self, disk_image: AbstractResource): + def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool): ide_disk = IdeDisk() ide_disk.driveID = "device0" ide_disk.image = CowDiskImage( diff --git a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py index 570effaec70..8969080b7c1 100644 --- a/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py +++ b/src/python/gem5/prebuilt/riscvmatched/riscvmatched_board.py @@ -578,7 +578,7 @@ def get_disk_device(self): return "/dev/vda" @overrides(KernelDiskWorkload) - def _add_disk_to_board(self, disk_image: AbstractResource): + def _add_disk_to_board(self, disk_image: AbstractResource, is_root: bool): image = CowDiskImage( child=RawDiskImage(read_only=True), read_only=False )