This is practically the same diff we already landed for arm64.
The kernel already supports booting off 1C and with tech@'s
"installboot: sparc64: fix -r on multi-chunk softraid chunk" diff the
install process will no longer fail when installing bootstraps onto any
softraid volume which requires at least two chunks by design.
Feedback? OK?
Index: boot.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/stand/ofwboot/boot.c,v
retrieving revision 1.39
diff -u -p -r1.39 boot.c
--- boot.c 4 Aug 2022 09:16:53 -0000 1.39
+++ boot.c 1 Sep 2022 20:10:55 -0000
@@ -366,7 +366,8 @@ srbootdev(const char *bootline)
return ENODEV;
}
- 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;
Index: softraid_sparc64.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/stand/ofwboot/softraid_sparc64.c,v
retrieving revision 1.5
diff -u -p -r1.5 softraid_sparc64.c
--- softraid_sparc64.c 9 Dec 2020 18:10:19 -0000 1.5
+++ softraid_sparc64.c 1 Sep 2022 20:08:03 -0000
@@ -290,6 +290,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)
@@ -312,7 +313,8 @@ sr_vol_boot_chunk(struct sr_boot_volume
{
struct sr_boot_chunk *bc = NULL;
- if (bv->sbv_level == 1 || bv->sbv_level == 'C' ) { /* RAID1 or CRYPTO */
+ if (bv->sbv_level == 1 || bv->sbv_level == 'C' ||
+ bv->sbv_level == 0x1C) {
/* Select first online chunk. */
SLIST_FOREACH(bc, &bv->sbv_chunks, sbc_link)
if (bc->sbc_state == BIOC_SDONLINE)
@@ -368,7 +370,7 @@ sr_strategy(struct sr_boot_volume *bv, i
err = strategy(&ofdev, rw, blk, size, buf, rsize);
return err;
- } else if (bv->sbv_level == 'C') {
+ } else if (bv->sbv_level == 'C' || bv->sbv_level == 0x1C) {
/* XXX - select correct key. */
aes_xts_setkey(&ctx, (u_char *)bv->sbv_keys, 64);
Index: vers.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/stand/ofwboot/vers.c,v
retrieving revision 1.24
diff -u -p -r1.24 vers.c
--- vers.c 4 Aug 2022 09:16:53 -0000 1.24
+++ vers.c 20 Aug 2022 03:59:47 -0000
@@ -1 +1 @@
-const char version[] = "1.23";
+const char version[] = "1.24";