From df21e16d16b51cf8e1828be094b4866e5d0a1bc8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Imre=20Vad=C3=A1sz?= Date: Sun, 28 Jan 2018 22:04:55 +0100 Subject: [PATCH] acpi - Use KOBJ_GPRI_ACPI driver priorities for ig4 and gpio_intel. * Since we currently don't handle the ACPI _DEP methods appropriately, use the "global priority hack" from 5025fc65cd2448de8a5b7295c9936b473a7b0194 to enforce that ig4 and gpio_intel attach before various ACPI namespace devices. * This uses the KOBJ_GPRI_ACPI+1 and KOBJ_GPRI_ACPI+2 driver global priority levels for important ACPI drivers, which may have to attach before other ACPI devices can be used. * This also adds the KOBJ_GPRI_ACPI global priority level to the sdhci_acpi driver declaration. --- sys/bus/gpio/gpio_intel/gpio_intel.c | 3 ++- sys/bus/smbus/ichiic/ig4_acpi.c | 3 ++- sys/dev/acpica/acpi.c | 12 ++++++++---- sys/dev/acpica/acpi_cpu.c | 2 +- sys/dev/acpica/acpi_cpu_cstate.c | 2 +- sys/dev/acpica/acpi_cpu_pstate.c | 2 +- sys/dev/acpica/acpi_hpet.c | 2 +- sys/dev/acpica/acpi_isab.c | 2 +- sys/dev/acpica/acpi_resource.c | 2 +- sys/dev/acpica/acpi_timer.c | 2 +- sys/dev/disk/sdhci/sdhci_acpi.c | 1 + 11 files changed, 20 insertions(+), 13 deletions(-) diff --git a/sys/bus/gpio/gpio_intel/gpio_intel.c b/sys/bus/gpio/gpio_intel/gpio_intel.c index db42a64679..05840e106e 100644 --- a/sys/bus/gpio/gpio_intel/gpio_intel.c +++ b/sys/bus/gpio/gpio_intel/gpio_intel.c @@ -428,7 +428,8 @@ static device_method_t gpio_intel_methods[] = { static driver_t gpio_intel_driver = { "gpio_intel", gpio_intel_methods, - sizeof(struct gpio_intel_softc) + sizeof(struct gpio_intel_softc), + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t gpio_intel_devclass; diff --git a/sys/bus/smbus/ichiic/ig4_acpi.c b/sys/bus/smbus/ichiic/ig4_acpi.c index 36730da271..8a71c3b450 100644 --- a/sys/bus/smbus/ichiic/ig4_acpi.c +++ b/sys/bus/smbus/ichiic/ig4_acpi.c @@ -196,7 +196,8 @@ static device_method_t ig4iic_acpi_methods[] = { static driver_t ig4iic_acpi_driver = { "ig4iic", ig4iic_acpi_methods, - sizeof(struct ig4iic_softc) + sizeof(struct ig4iic_softc), + .gpri = KOBJ_GPRI_ACPI+1 }; static devclass_t ig4iic_acpi_devclass; diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 123f259758..b71cc226c6 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -214,7 +214,7 @@ static driver_t acpi_driver = { "acpi", acpi_methods, sizeof(struct acpi_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_devclass; @@ -1667,18 +1667,22 @@ acpi_probe_children(device_t bus) /* Probe/attach all children, created staticly and from the namespace. */ ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "first bus_generic_attach\n")); - bus_generic_attach_gpri(bus, KOBJ_GPRI_ACPI); + bus_generic_attach_gpri(bus, KOBJ_GPRI_ACPI+2); ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "second bus_generic_attach\n")); + bus_generic_attach_gpri(bus, KOBJ_GPRI_ACPI+1); + ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "third bus_generic_attach\n")); + bus_generic_attach_gpri(bus, KOBJ_GPRI_ACPI); + ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "fourth bus_generic_attach\n")); bus_generic_attach_gpri(bus, KOBJ_GPRI_ACPI); /* * Some of these children may have attached others as part of their attach * process (eg. the root PCI bus driver), so rescan. */ - ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "third bus_generic_attach\n")); + ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "fifth bus_generic_attach\n")); bus_generic_attach(bus); - ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "fourth bus_generic_attach\n")); + ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "sixth bus_generic_attach\n")); bus_generic_attach(bus); /* Attach wake sysctls. */ diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c index eaa5a4a8b9..aa4136d4d2 100644 --- a/sys/dev/acpica/acpi_cpu.c +++ b/sys/dev/acpica/acpi_cpu.c @@ -95,7 +95,7 @@ static driver_t acpi_cpu_driver = { "cpu", acpi_cpu_methods, sizeof(struct acpi_cpu_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_cpu_devclass; diff --git a/sys/dev/acpica/acpi_cpu_cstate.c b/sys/dev/acpica/acpi_cpu_cstate.c index d643b2eb31..01efd97ad8 100644 --- a/sys/dev/acpica/acpi_cpu_cstate.c +++ b/sys/dev/acpica/acpi_cpu_cstate.c @@ -198,7 +198,7 @@ static driver_t acpi_cst_driver = { "cpu_cst", acpi_cst_methods, sizeof(struct acpi_cst_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_cst_devclass; diff --git a/sys/dev/acpica/acpi_cpu_pstate.c b/sys/dev/acpica/acpi_cpu_pstate.c index 4c391f378c..12b2e0e7c6 100644 --- a/sys/dev/acpica/acpi_cpu_pstate.c +++ b/sys/dev/acpica/acpi_cpu_pstate.c @@ -225,7 +225,7 @@ static driver_t acpi_pst_driver = { "cpu_pst", acpi_pst_methods, sizeof(struct acpi_pst_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_pst_devclass; diff --git a/sys/dev/acpica/acpi_hpet.c b/sys/dev/acpica/acpi_hpet.c index 3a9641f740..388ae8298e 100644 --- a/sys/dev/acpica/acpi_hpet.c +++ b/sys/dev/acpica/acpi_hpet.c @@ -98,7 +98,7 @@ static driver_t acpi_hpet_driver = { "acpi_hpet", acpi_hpet_methods, sizeof(struct acpi_hpet_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_hpet_devclass; diff --git a/sys/dev/acpica/acpi_isab.c b/sys/dev/acpica/acpi_isab.c index b6d56b9de3..e69cc0bc90 100644 --- a/sys/dev/acpica/acpi_isab.c +++ b/sys/dev/acpica/acpi_isab.c @@ -83,7 +83,7 @@ static driver_t acpi_isab_driver = { "isab", acpi_isab_methods, sizeof(struct acpi_isab_softc), - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; DRIVER_MODULE(acpi_isab, acpi, acpi_isab_driver, isab_devclass, NULL, NULL); diff --git a/sys/dev/acpica/acpi_resource.c b/sys/dev/acpica/acpi_resource.c index 75eed314b6..e689932448 100644 --- a/sys/dev/acpica/acpi_resource.c +++ b/sys/dev/acpica/acpi_resource.c @@ -661,7 +661,7 @@ static driver_t acpi_sysres_driver = { "acpi_sysresource", acpi_sysres_methods, 0, - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_sysres_devclass; diff --git a/sys/dev/acpica/acpi_timer.c b/sys/dev/acpica/acpi_timer.c index 45df3f0126..3198672090 100644 --- a/sys/dev/acpica/acpi_timer.c +++ b/sys/dev/acpica/acpi_timer.c @@ -93,7 +93,7 @@ static driver_t acpi_timer_driver = { "acpi_timer", acpi_timer_methods, 0, - .gpri = KOBJ_GPRI_ACPI + .gpri = KOBJ_GPRI_ACPI+2 }; static devclass_t acpi_timer_devclass; diff --git a/sys/dev/disk/sdhci/sdhci_acpi.c b/sys/dev/disk/sdhci/sdhci_acpi.c index ce838168d0..9f50290565 100644 --- a/sys/dev/disk/sdhci/sdhci_acpi.c +++ b/sys/dev/disk/sdhci/sdhci_acpi.c @@ -353,6 +353,7 @@ static driver_t sdhci_acpi_driver = { "sdhci_acpi", sdhci_methods, sizeof(struct sdhci_acpi_softc), + .gpri = KOBJ_GPRI_ACPI }; static devclass_t sdhci_acpi_devclass; -- 2.11.4.GIT