prplos/.testbed/labgrid/testbed-02.yaml
Petr Štetiar 78b11d2d5b
ci: testbed: labgrid: flash OSPv2 and Freedom via FEAT-29 update_prpl
Switch the OSPv2 (mxl25641-hdk-6) and Freedom (wnc-freedom) eMMC flash
flow to the FEAT-29 U-Boot update script, replacing the legacy OSPv2
update_fullimage path and the Freedom untar/flash sysupgrade path. This
exercises the image/update tooling introduced in prplos!1964.

The flow tftpboots the per-board update_script.itb, sources it and runs
update_prpl against the FEAT-29 OS artifacts:
- OSPv2: PRPL_OSP_v2-wgrtd159be_b_wav700-ext4.img (4G variant)
- Freedom: prpl_freedom-kernel.itb + prpl_freedom-rootfs.itb

update_rescue_bank is set to yes so both OS banks carry the same image
and a bank failover cannot boot a stale rootfs. U-Boot/RBE/XBL/SMD are
left unset: those are one-time migration inputs and must not be
reflashed on every refresh. Boards are expected to already be on the
prpl flash layout. Hand-off to Linux uses run bootcmd (bootprpl/bootipq)
instead of reset, which avoids a power cycle and the labgrid autoboot
re-interrupt hazard.

init_command_timeout bounds the whole init_commands sequence and is set
deliberately tight, per board, so a network/perf regression (e.g. image
TFTP throughput roughly halving) trips the timeout instead of silently
passing, while still absorbing TFTP first-packet jitter. Validated runs
executed the init_commands in:
- OSPv2:   ~30s (update_script TFTP ~10s + update_prpl ~18s)   -> 60s
- Freedom: ~37s (sleep 5 + update_script TFTP ~3.5s + update_prpl ~24s,
                 two images to both banks)                     -> 75s

The rootfs_data overlay is erased before update_prpl so every refresh
boots from a clean overlay; update_prpl itself leaves rootfs_data
untouched. The block offsets are hardcoded from each board's GPT because
the target U-Boot has no part command to derive them:
- OSPv2:   mmc erase 0x86c00 0x10000   (32 MiB, UPDK 9.2.0)
- Freedom: mmc erase 0x534022 0x40000  (128 MiB)

Because update_prpl needs both the update script and the OS image over
TFTP, generalise the testbed/cdrouter firmware copy to a list via the
new TFTP_IMAGE_FILENAMES variable (falling back to TFTP_IMAGE_FILENAME),
rather than overloading TFTP_IMAGE_UNPACK_COMMAND. The Freedom testbed
job now drives the wnc-freedom-emmc target instead of initramfs, so the
now-unused wnc-freedom-initramfs labgrid target is dropped.

Flip the wnc-freedom and mxl25641-hdk-6 testbed runner tags to the -sfl
variant (dut-wnc-freedom-sfl, dut-mxl25641-hdk-6-b-sfl), to make it
clear, that those devices are converted to the prpl Standard Flash
Layout.

References: FEAT-29
Closes: PCF-2644, PCF-2645
Assisted-by: claude:opus-4-8:1m-context
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-06-23 10:57:09 +02:00

214 lines
6.8 KiB
YAML

targets:
arcadyan-mozart-initramfs:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 7
managed_coils: 8
exclusive_coil_mode: True
write_multiple_coils: True
RawSerialPort:
port: "/dev/arcadyan-mozart"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver:
txdelay: 0.01
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 15
username: kingbanik
UBootDriver:
prompt: 'MT7988> '
interrupt: '0'
init_commands:
- setenv ipaddr 192.168.1.1
- setenv serverip 192.168.1.2
- tftpboot $loadaddr prplos-mediatek-filogic-arcadyan_mozart-initramfs.itb
boot_command: bootm $loadaddr
UBootStrategy: {}
prpl-haze-initramfs:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 4
managed_coils: 8
exclusive_coil_mode: True
write_multiple_coils: True
RawSerialPort:
port: "/dev/prpl-haze"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver: {}
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 16
username: kingbanik
UBootDriver:
prompt: 'IPQ807x# '
init_commands:
- setenv serverip 10.0.0.1
- setenv ipaddr 10.0.0.2
boot_command: tftpboot prplos-qualcommax-ipq807x-prpl_haze-initramfs-uImage.itb && bootm
boot_command_delay: 3
UBootStrategy: {}
prpl-haze-emmc:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 4
managed_coils: 8
exclusive_coil_mode: True
write_multiple_coils: True
RawSerialPort:
port: "/dev/prpl-haze"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver: {}
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 16
username: kingbanik
UBootDriver:
prompt: 'IPQ807x# '
init_commands:
- setenv serverip 10.0.0.1
- setenv ipaddr 10.0.0.2
- sleep 5
- setenv untar_addr_kernel; setenv untar_addr_root; echo
- tftpboot prplos-ipq807x-generic-prpl_haze-squashfs-sysupgrade.bin
- untar 0x$fileaddr 0x$filesize kernel root
- if test -n $untar_addr_kernel; then flash "0:HLOS" 0x$untar_addr_kernel 0x$untar_size_kernel; else echo "kernel is not found"; fi
- if test -n $untar_addr_root; then flash "rootfs" 0x$untar_addr_root 0x$untar_size_root; else echo "rootfs is not found"; fi
- flasherase rootfs_data
UBootStrategy: {}
arcadyan-mozart-emmc:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 7
managed_coils: 8
exclusive_coil_mode: True
write_multiple_coils: True
RawSerialPort:
port: "/dev/arcadyan-mozart"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver:
txdelay: 0.01
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 16
username: kingbanik
UBootDriver:
prompt: 'MT7988> '
interrupt: '0'
init_commands:
- setenv ipaddr 192.168.1.1
- setenv serverip 192.168.1.2
- setenv bootfile_upg prplos-mediatek-filogic-arcadyan_mozart-squashfs-sysupgrade.itb
- setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production
boot_command: run boot_production
UBootStrategy: {}
wnc-freedom-emmc:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 1
managed_coils: 8
exclusive_coil_mode: True
write_multiple_coils: True
RawSerialPort:
port: "/dev/wnc-freedom"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver: {}
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
login_timeout: 120
await_login_timeout: 16
username: kingbanik
UBootDriver:
prompt: 'IPQ9574# '
init_command_timeout: 75
init_commands:
- setenv serverip 10.0.0.1
- setenv ipaddr 10.0.0.2
- setenv loadaddr 0x50000000
- sleep 5
- tftpboot ${loadaddr} prplos-ipq95xx-generic-prpl_freedom-update_script.itb
- source ${loadaddr}:update-script
- setenv tftppath
- setenv img_kernel prplos-ipq95xx-generic-prpl_freedom-kernel.itb
- setenv img_rootfs prplos-ipq95xx-generic-prpl_freedom-rootfs.itb
- setenv img_uboot
- setenv img_xbl
- setenv img_smd
- setenv update_rescue_bank yes
- mmc dev 0
- mmc erase 0x534022 0x40000
- run update_prpl
boot_command: run bootcmd
UBootStrategy: {}
mxl25641-hdk-6-emmc:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 0
managed_coils: 8
write_multiple_coils: True
exclusive_coil_mode: True
RawSerialPort:
port: "/dev/mxl25641-hdk-6"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver:
txdelay: 0.01
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
username: kingbanik
UBootDriver:
prompt: 'Lightning #'
console_decodeerrors: 'backslashreplace'
init_command_timeout: 60
init_commands:
- setenv serverip 192.168.1.2
- setenv ipaddr 192.168.1.1
- setenv loadaddr 0x8200000
- tftpboot ${loadaddr} prplos-intel_x86-lgm-PRPL_OSP_v2-update_script.itb
- source ${loadaddr}:update-script
- setenv tftppath
- setenv img_kernel prplos-intel_x86-lgm-PRPL_OSP_v2-wgrtd159be_b_wav700-ext4.img
- setenv img_uboot
- setenv img_rbe
- setenv img_smd
- setenv update_rescue_bank yes
- mmc dev 0
- mmc erase 0x86c00 0x10000
- run update_prpl
boot_command: run bootcmd
UBootStrategy: {}