[Bug 280290] hms(4): Broken fresh after boot, fixed by resume

From: <bugzilla-noreply_at_freebsd.org>
Date: Mon, 28 Oct 2024 14:10:04 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=280290

--- Comment #31 from Edward Tomasz Napierala <trasz@FreeBSD.org> ---
Okay, after talking to jhb@ it appears the child devices are attaching too
early, and the easiest way to solve it is to move the call to
bus_generic_attach() further down, after power off.  Here's the proposed patch:

diff --git a/sys/dev/iicbus/iichid.c b/sys/dev/iicbus/iichid.c
index fc9f5c2a68b3..a2c0878697f6 100644
--- a/sys/dev/iicbus/iichid.c
+++ b/sys/dev/iicbus/iichid.c
@@ -1124,7 +1124,7 @@ iichid_attach(device_t dev)
        if (error) {
                device_printf(dev, "failed to reset hardware: %d\n", error);
                error = ENXIO;
-               goto done;
+               goto fail;
        }

        sc->power_on = true;
@@ -1162,7 +1162,7 @@ iichid_attach(device_t dev)
                        bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid,
                            sc->irq_res);
                error = ENXIO;
-               goto done;
+               goto fail;
 #endif
        }

@@ -1195,16 +1195,21 @@ iichid_attach(device_t dev)
                device_printf(sc->dev, "Could not add I2C device\n");
                iichid_detach(dev);
                error = ENOMEM;
-               goto done;
+               goto fail;
        }

+       (void)iichid_set_power(sc, I2C_HID_POWER_OFF);
+       sc->power_on = false;
+
        device_set_ivars(child, &sc->hw);
        error = bus_generic_attach(dev);
        if (error) {
                device_printf(dev, "failed to attach child: error %d\n",
error);
                iichid_detach(dev);
        }
-done:
+       return (error);
+
+fail:
        (void)iichid_set_power(sc, I2C_HID_POWER_OFF);
        sc->power_on = false;
        return (error);

-- 
You are receiving this mail because:
You are the assignee for the bug.