Index: src/sys/arch/sparc64/sparc64/ofw_patch.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/ofw_patch.c,v
retrieving revision 1.18
diff -u -r1.18 ofw_patch.c
--- src/sys/arch/sparc64/sparc64/ofw_patch.c	25 Sep 2026 18:59:54 -0000	1.18
+++ src/sys/arch/sparc64/sparc64/ofw_patch.c	29 Sep 2026 09:40:17 -0000
@@ -154,7 +154,6 @@
 
 	switch (ia->ia_addr) {
 		case 0x12:	/* V215 disk status / LED's */
-			break;
 			pins = prop_array_create();
 			add_gpio_pin(pins, "ALERT HDD 0 present",
 			    6, 1, -1, -1);
@@ -297,6 +296,70 @@
 	}
 }
 
+static void
+add_gpio_props_v445(device_t dev, void *aux)
+{
+	struct i2c_attach_args *ia = aux;
+	prop_dictionary_t dict = device_properties(dev);
+	prop_array_t pins;
+
+	switch (ia->ia_addr) {
+		case 0x1d:	/* Front panel LED's */
+			pins = prop_array_create();
+			add_gpio_pin(pins, "LED locator", 0, 1, -1, -1);
+			add_gpio_pin(pins, "LED service", 1, 1, -1, -1);
+			/* Pin 2 is power LED */
+			add_gpio_pin(pins, "LED overtemp", 3, 1, -1, -1);
+			add_gpio_pin(pins, "LED top_fan_fault", 4, 1, -1, -1);
+			add_gpio_pin(pins, "LED psu_fault", 5, 1, -1, -1);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+		case 0x1c:	/* HDD 0-3 LED's */
+			pins = prop_array_create();
+			add_gpio_pin(pins, "ALERT HDD 0 present",
+			    10, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 1 present",
+			    14, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 2 present",
+			    2, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 3 present",
+			    5, 1, -1, -1);
+			add_gpio_pin(pins, "LED hdd0_fault", 9, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd0_remove", 8, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd1_fault", 13, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd1_remove", 12, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd2_fault", 1, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd2_remove", 0, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd3_fault", 4, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd3_remove", 3, 0, 0, -1);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+		case 0x1e:	/* HDD 4-7 LED's */
+			pins = prop_array_create();
+			add_gpio_pin(pins, "ALERT HDD 4 present",
+			    10, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 5 present",
+			    13, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 6 present",
+			    0, 1, -1, -1);
+			add_gpio_pin(pins, "ALERT HDD 7 present",
+			    3, 1, -1, -1);
+			add_gpio_pin(pins, "LED hdd4_fault", 9, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd4_remove", 8, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd5_fault", 12, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd5_remove", 11, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd6_fault", 15, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd6_remove", 14, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd7_fault", 2, 0, 0, -1);
+			add_gpio_pin(pins, "LED hdd7_remove", 1, 0, 0, -1);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+	}
+}
+
 void
 add_drivebay_props(device_t dev, int ofnode, void *aux)
 {
@@ -705,6 +768,9 @@
 			prop_dictionary_set_uint16(props,
 			    "temp_off", 0x1d00);
 		}
+		/* Disk status / LED's */
+		if (device_is_a(dev, "pcagpio"))
+			add_gpio_props_v445(dev, aux);
 	}
 
 	/* Sun use offsets from 2000 but range 1970 to 2069 */
