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 */