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";

Reply via email to