mirror of
https://github.com/opnsense/src.git
synced 2026-02-25 19:05:20 -05:00
The attach method uses GPIO_GET_BUS() to get a "newbus" device that provides a pin. But on hints-based systems a GPIO controller driver might not be fully initialized yet and it does not know gpiobus hanging off it. Thus, GPIO_GET_BUS() cannot be called yet. The reason is that controller drivers typically create a child gpiobus using gpiobus_attach_bus() and that leads to the following call chain: gpiobus_attach_bus() -> gpiobus_attach() -> bus_generic_attach(gpiobus) -> gpioiic_attach(). So, gpioiic_attach() is called before gpiobus_attach_bus() returns. I observed this bug with nctgpio driver on amd64. I think that the problem was introduced in r355276. The fix is to avoid calling GPIO_GET_BUS() from the attach method. Instead, we know that on hints-based systems only the parent gpiobus can provide the pins. Nothing is changed for FDT-based systems. MFC after: 1 week |
||
|---|---|---|
| .. | ||
| dwgpio | ||
| bytgpio.c | ||
| chvgpio.c | ||
| chvgpio_reg.h | ||
| gpio_if.m | ||
| gpiobacklight.c | ||
| gpiobus.c | ||
| gpiobus_if.m | ||
| gpiobusvar.h | ||
| gpioc.c | ||
| gpioiic.c | ||
| gpiokeys.c | ||
| gpiokeys.h | ||
| gpiokeys_codes.c | ||
| gpioled.c | ||
| gpioled_fdt.c | ||
| gpiomdio.c | ||
| gpiopower.c | ||
| gpiopps.c | ||
| gpioregulator.c | ||
| gpiospi.c | ||
| gpioths.c | ||
| ofw_gpiobus.c | ||