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