On Fri, Aug 12, 2022 at 09:41:59AM +0000, Klemens Nanni wrote:
> Here's the adapted diff for arm64 minus manual bits to avoid churn for
> now.
>
> installboot(8) needs softraid(4) support (see my diff on tech@), but
> besides that, root on passphrase 1C softraid on arm64 works as expected:
>
> # df /
> Filesystem 512-blocks Used Avail Capacity Mounted on
> /dev/sd4a 2331356 161952 2052840 7% /
> # bioctl sd4
> Volume Status Size Device
> softraid0 0 Online 10741585920 sd4 RAID1C
> 0 Online 10741585920 0:0.0 noencl <sd1a>
> 1 Online 10741585920 0:1.0 noencl <sd3a>
Great! Thank you for covering additional platforms.
ok stsp@
> Index: conf.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/conf.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 conf.c
> --- conf.c 30 Jul 2022 21:06:54 -0000 1.39
> +++ conf.c 11 Aug 2022 14:42:01 -0000
> @@ -46,7 +46,7 @@
> #include "efipxe.h"
> #include "softraid_arm64.h"
>
> -const char version[] = "1.11";
> +const char version[] = "1.12";
> int debug = 0;
>
> struct fs_ops file_system[] = {
> Index: softraid_arm64.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/arm64/stand/efiboot/softraid_arm64.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 softraid_arm64.c
> --- softraid_arm64.c 2 Jun 2021 22:44:27 -0000 1.3
> +++ softraid_arm64.c 11 Aug 2022 14:43:52 -0000
> @@ -285,6 +285,7 @@ srprobe(void)
> break;
>
> case 1:
> + case 0x1C:
> if (bv->sbv_chunk_no == bv->sbv_chunks_found)
> bv->sbv_state = BIOC_SVONLINE;
> else if (bv->sbv_chunks_found > 0)
> @@ -341,7 +342,7 @@ sr_strategy(struct sr_boot_volume *bv, i
> /* XXX - If I/O failed we should try another chunk... */
> return dip->strategy(dip, rw, blk, size, buf, rsize);
>
> - } else if (bv->sbv_level == 'C') {
> + } else if (bv->sbv_level == 'C' || bv->sbv_level == 0x1C) {
>
> /* Select first online chunk. */
> SLIST_FOREACH(bc, &bv->sbv_chunks, sbc_link)
> @@ -604,7 +605,8 @@ sropen(struct open_file *f, ...)
> return EADAPT;
> }
>
> - if (bv->sbv_level == 'C' && bv->sbv_keys == NULL)
> + if ((bv->sbv_level == 'C' || bv->sbv_level == 0x1C)
> + && bv->sbv_keys == NULL)
> if (sr_crypto_unlock_volume(bv) != 0)
> return EPERM;
>
>
>