From e38da69d8c9317e0564bb159f5e0e145453f91d9 Mon Sep 17 00:00:00 2001 From: Mateusz Bloch Date: Thu, 20 Jul 2023 18:11:44 +0200 Subject: [PATCH] trunner: mutualisation of jjfs2 JIRA CI-301 --- trunner/harness/__init__.py | 2 ++ trunner/harness/plo.py | 12 ++++++++++++ trunner/target/armv7a7.py | 32 ++++++++++++++---------------- trunner/target/armv7a9.py | 39 ++++++++++++++----------------------- 4 files changed, 44 insertions(+), 41 deletions(-) diff --git a/trunner/harness/__init__.py b/trunner/harness/__init__.py index 31327ccfa..2409228ed 100644 --- a/trunner/harness/__init__.py +++ b/trunner/harness/__init__.py @@ -17,6 +17,7 @@ PloHarness, PloImageLoader, PloImageProperty, + PloJffsImageProperty, ) from .psh import ShellHarness from .pyharness import PyHarness @@ -41,5 +42,6 @@ "PloInterface", "PloJffs2CleanmarkerSpec", "PloImageProperty", + "PloJffsImageProperty", "unity_harness", ] diff --git a/trunner/harness/plo.py b/trunner/harness/plo.py index efead65fd..5d17b8ce0 100644 --- a/trunner/harness/plo.py +++ b/trunner/harness/plo.py @@ -214,6 +214,15 @@ class PloImageProperty: memory_bank: str +@dataclass(frozen=True) +class PloJffsImageProperty(PloImageProperty): + """Class that represents the OS image for jffs2 file system, which needs erase before flashing.""" + + flash_device_id: str + cleanmarkers_args: PloJffs2CleanmarkerSpec + timeout: int + + class PloImageLoader(TerminalHarness, PloInterface): """Harness to load the image to the memory using plo bootloader and phoenixd program. @@ -248,6 +257,9 @@ def __call__(self): self.rebooter(flash=True, hard=True) self.plo_loader() + if isinstance(self.image, PloJffsImageProperty): + self.jffs2(self.image.flash_device_id, True, self.image.cleanmarkers_args, self.image.timeout) + with self.phoenixd.run(): self.copy_file2mem( src=self.image.source, diff --git a/trunner/target/armv7a7.py b/trunner/target/armv7a7.py index ee576ddde..251f0d1a9 100644 --- a/trunner/target/armv7a7.py +++ b/trunner/target/armv7a7.py @@ -5,7 +5,7 @@ HarnessBuilder, PloInterface, PloImageLoader, - PloImageProperty, + PloJffsImageProperty, ShellHarness, Rebooter, RebooterHarness, @@ -25,21 +25,16 @@ def _set_flash_mode(self, flash): class PsuPloLoader(TerminalHarness, PloInterface): - def __init__(self, dut: Dut, psu: Psu, flash_device_id: str, cleanmarkers_args: PloJffs2CleanmarkerSpec): + def __init__(self, dut: Dut, psu: Psu): TerminalHarness.__init__(self) PloInterface.__init__(self, dut) self.psu = psu - self.flash_device_id = flash_device_id - self.cleanmarkers_args = cleanmarkers_args def __call__(self): """Loads plo image to RAM using psu tool and erases an area intended for rootfs.""" self.psu.run() self.wait_prompt() - # Device id and cleanmarkers arguments are set based on target configuration in _targets/_projects. - self.jffs2(self.flash_device_id, True, self.cleanmarkers_args, 90) - class ARMv7A7Target(TargetBase, PloInterface, Rebooter): plo_psu_script = "plo-ram.sdp" @@ -58,8 +53,6 @@ def flash_dut(self): plo_loader = PsuPloLoader( dut=self.dut, psu=Psu(self.plo_psu_script, self.boot_dir()), - flash_device_id=self.flash_device_id, - cleanmarkers_args=self.cleanmarkers_spec, ) loader = PloImageLoader( @@ -89,15 +82,20 @@ def build_test(self, test: TestOptions) -> Callable[[], Optional[TestResult]]: class IMX6ULLEvkTarget(ARMv7A7Target): # IMX6ULL with system jffs2 use nor0 as space to hold data - image = PloImageProperty(file="phoenix.disk", source="usb0", memory_bank="nor0") - name = "armv7a7-imx6ull-evk" - cleanmarkers_spec = PloJffs2CleanmarkerSpec( - start_block=0x10, - number_of_blocks=0x1F0, - block_size=0x10000, - cleanmarker_size=0x10, + image = PloJffsImageProperty( + file="phoenix.disk", + source="usb0", + memory_bank="nor0", + flash_device_id="2.0", + cleanmarkers_args=PloJffs2CleanmarkerSpec( + start_block=0x10, + number_of_blocks=0x1F0, + block_size=0x10000, + cleanmarker_size=0x10, + ), + timeout=90, ) - flash_device_id = "2.0" + name = "armv7a7-imx6ull-evk" def __init__(self, host: Host, port: Optional[str] = None, baudrate: int = 115200): if not port: diff --git a/trunner/target/armv7a9.py b/trunner/target/armv7a9.py index 5156afa32..9cd272103 100644 --- a/trunner/target/armv7a9.py +++ b/trunner/target/armv7a9.py @@ -7,8 +7,8 @@ from trunner.harness import ( HarnessBuilder, PloInterface, + PloJffsImageProperty, PloImageLoader, - PloImageProperty, ShellHarness, Rebooter, RebooterHarness, @@ -41,21 +41,12 @@ def _set_flash_mode(self, flash): class ZynqGdbPloLoader(TerminalHarness, PloInterface): - def __init__( - self, - dut: Dut, - script: str, - flash_device_id: str, - cleanmarkers_args: PloJffs2CleanmarkerSpec, - cwd: Optional[str] = None, - ): + def __init__(self, dut: Dut, script: str, cwd: Optional[str] = None): TerminalHarness.__init__(self) PloInterface.__init__(self, dut) self.script = script self.cwd = cwd self.gdbserver = JLinkGdbServer("Zynq 7020") - self.flash_device_id = flash_device_id - self.cleanmarkers_args = cleanmarkers_args def __call__(self): """Loads plo image to RAM using gdb.""" @@ -81,9 +72,6 @@ def __call__(self): self.enter_bootloader() self.wait_prompt() - # Erase using jjfs2 command with cleanmarkers - self.jffs2(self.flash_device_id, True, self.cleanmarkers_args, 140) # ?Huge erase time? - class ARMv7A9Target(TargetBase): def __init__(self, host: Host, port: str, baudrate: int = 115200): @@ -99,8 +87,6 @@ def flash_dut(self): plo_loader = ZynqGdbPloLoader( dut=self.dut, script=f"{self._project_dir()}/phoenix-rtos-build/scripts/upload-zynq7000.gdb", - flash_device_id=self.flash_device_id, - cleanmarkers_args=self.cleanmarkers_spec, cwd=self.boot_dir(), ) @@ -130,15 +116,20 @@ def build_test(self, test: TestOptions) -> Callable[[], Optional[TestResult]]: class Zynq7000ZedboardTarget(ARMv7A9Target): # Zynq7000Zedboard with system jffs2 use flash0 as space to hold data - image = PloImageProperty(file="phoenix.disk", source="usb0", memory_bank="flash0") - name = "armv7a9-zynq7000-zedboard" - cleanmarkers_spec = PloJffs2CleanmarkerSpec( - start_block=0x80, - number_of_blocks=0x100, - block_size=0x10000, - cleanmarker_size=0x10, + image = PloJffsImageProperty( + file="phoenix.disk", + source="usb0", + memory_bank="flash0", + flash_device_id="2.0", + cleanmarkers_args=PloJffs2CleanmarkerSpec( + start_block=0x80, + number_of_blocks=0x100, + block_size=0x10000, + cleanmarker_size=0x10, + ), + timeout=140, ) - flash_device_id = "2.0" + name = "armv7a9-zynq7000-zedboard" def __init__(self, host: Host, port: Optional[str] = None, baudrate: int = 115200): if port is None: