Index: src/sys/arch/sparc64/sparc64/ofw_patch.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/ofw_patch.c,v
retrieving revision 1.15
diff -u -r1.15 ofw_patch.c
--- src/sys/arch/sparc64/sparc64/ofw_patch.c	8 Jul 2026 09:34:32 -0000	1.15
+++ src/sys/arch/sparc64/sparc64/ofw_patch.c	31 Jul 2026 07:02:30 -0000
@@ -143,7 +143,21 @@
 	prop_array_t pins;
 
 	switch (ia->ia_addr) {
-		case 0x22:	/* Disks present */
+		case 0x12:	/* V215 disk status / LED's */
+			break;
+			pins = prop_array_create();
+			add_gpio_pin(pins,
+			    "INDICATOR HDD 0 present", 4, 1, -1);
+			add_gpio_pin(pins,
+			    "INDICATOR HDD 1 present", 5, 1, -1);
+			add_gpio_pin(pins, "LED hdd0_fault", 0, 0, 0);
+			add_gpio_pin(pins, "LED hdd0_remove", 2, 0, 0);
+			add_gpio_pin(pins, "LED hdd1_fault", 1, 0, 0);
+			add_gpio_pin(pins, "LED hdd1_remove", 3, 0, 0);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+		case 0x22:	/* V245 disk status / LED's */
 			pins = prop_array_create();
 			add_gpio_pin(pins,
 			    "INDICATOR HDD 0 present", 8, 1, -1);
@@ -153,9 +167,31 @@
 			    "INDICATOR HDD 2 present", 10, 1, -1);
 			add_gpio_pin(pins,
 			    "INDICATOR HDD 3 present", 11, 1, -1);
+			add_gpio_pin(pins, "LED hdd0_fault", 0, 0, 0);
+			add_gpio_pin(pins, "LED hdd0_remove", 4, 0, 0);
+			add_gpio_pin(pins, "LED hdd1_fault", 1, 0, 0);
+			add_gpio_pin(pins, "LED hdd1_remove", 5, 0, 0);
+			add_gpio_pin(pins, "LED hdd2_fault", 2, 0, 0);
+			add_gpio_pin(pins, "LED hdd2_remove", 6, 0, 0);
+			add_gpio_pin(pins, "LED hdd3_fault", 3, 0, 0);
+			add_gpio_pin(pins, "LED hdd3_remove", 7, 0, 0);
 			prop_dictionary_set(dict, "pins", pins);
 			prop_object_release(pins);
 			break;
+		case 0x3e:	/* PSU 0 */
+			pins = prop_array_create();
+			prop_dictionary_set(dict, "pins", pins);
+			add_gpio_pin(pins,
+			    "INDICATOR PSU 0 input power", 4, 1, -1);
+			prop_object_release(pins);
+			break;
+		case 0x3f:	/* PSU 1 */
+			pins = prop_array_create();
+			prop_dictionary_set(dict, "pins", pins);
+			add_gpio_pin(pins,
+			    "INDICATOR PSU 1 input power", 4, 1, -1);
+			prop_object_release(pins);
+			break;
 	}
 }
 
@@ -354,15 +390,20 @@
  * Add V245 environmental sensors that are not in the OFW tree.
  */
 static void
-add_env_sensors_v245(device_t busdev)
+add_env_sensors_v245(device_t busdev, int model)
 {
 	prop_array_t cfg;
 
 	DPRINTF(ACDB_PROBE, ("\nAdding sensors for %s ", machine_model));
 	cfg = create_i2c_dict(busdev);
 
-	/* PCA9555 at 0x22 */
-	add_i2c_device(cfg, "temperature-sensor", "i2c-pca9555", 0x22, 0);
+	/* PCA9556 at 0x12 (V215) */
+	if (model == 215)
+		add_i2c_device(cfg, "gpio", "i2c-pca9556", 0x12, 0);
+
+	/* PCA9555 at 0x22 (V245) */
+	if (model == 245)
+		add_i2c_device(cfg, "gpio", "i2c-pca9555", 0x22, 0);
 
 	/* LM95221 at 0x2b */
 	add_i2c_device(cfg, "temperature-sensor", "i2c-lm95221", 0x2b, 0);
@@ -525,7 +566,9 @@
 	if (device_is_a(busdev, "firei2c")) {
 		if (!strcmp(machine_model, "SUNW,Sun-Fire-V245") ||
 		    !strcmp(machine_model, "SUNW,Sun-Fire-V215")) {
-			add_env_sensors_v245(busdev);
+			add_env_sensors_v245(busdev,
+			    strcmp(machine_model, "SUNW,Sun-Fire-V245")
+			    ? 215 : 245);
 			fix_properties_v245(busdev);
 		}
 	}
@@ -552,10 +595,27 @@
 		}
 	}
 
-	if (!strcmp(machine_model, "SUNW,Sun-Fire-V245"))
-		if (device_is_a(dev, "pcagpio"))
+	if (!strcmp(machine_model, "SUNW,Sun-Fire-V245") ||
+	    !strcmp(machine_model, "SUNW,Sun-Fire-V215")) {
+		/* Disk status / LED's */
+		if (device_is_a(dev, "pcagpio") ||
+		     device_is_a(dev, "pcf8574io"))
 			add_gpio_props_v245(dev, aux);
 
+		/* No fans are connected to the ADT7462 */
+		if (device_is_a(dev, "adt7462sm")) {
+			prop_dictionary_t props = device_properties(dev);
+			prop_dictionary_set_uint8(props, "fan_conf", 0x00);
+		}
+
+		/* Tach pulse is set incorrectly */
+		if (device_is_a(dev, "dbcool")) {
+			prop_dictionary_t props = device_properties(dev);
+			prop_dictionary_set_uint16(props,
+			    "fan_div", 0x0022);
+		}
+	}
+
 	/* U45 has 5 measured fans */
 	if (!strcmp(machine_model, "SUNW,A70")) {
 		if (device_is_a(dev, "adt7462sm")){
@@ -571,6 +631,7 @@
 		    device_is_a(busdev, "firei2c"))
 			add_gpio_props_u45(dev, aux);
 
+	/* E250 GPIO's */
 	if (!strcmp(machine_model, "SUNW,Ultra-250"))
 		if (device_is_a(dev, "pcf8574io"))
 			add_gpio_props_e250(dev, aux);
