Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe6cbea0 authored by Lv Zheng's avatar Lv Zheng Committed by Rafael J. Wysocki
Browse files

ACPI 2.0 / ECDT: Enable correct ECDT initialization order

With wrong ECDT fixes reverted, it is possible to put ECDT probing before
acpi_enable_subsystem().

But the ultimate purpose of ECDT re-enabling is to put the ECDT probing
before the namespace initialization (acpi_load_tables()). This patch
achieves this with protections so that we can enable it later when all
necessary corrections are upstreamed.

Link 4: https://bugzilla.kernel.org/show_bug.cgi?id=112911


Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Tested-by: default avatarChris Bainbridge <chris.bainbridge@gmail.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 59f0aa94
Loading
Loading
Loading
Loading
+25 −14
Original line number Diff line number Diff line
@@ -925,12 +925,14 @@ void __init acpi_early_init(void)
		goto error0;
	}

	if (acpi_gbl_group_module_level_code) {
		status = acpi_load_tables();
		if (ACPI_FAILURE(status)) {
			printk(KERN_ERR PREFIX
			       "Unable to load the System Description Tables\n");
			goto error0;
		}
	}

#ifdef CONFIG_X86
	if (!acpi_ioapic) {
@@ -995,17 +997,10 @@ static int __init acpi_bus_init(void)

	acpi_os_initialize1();

	status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE);
	if (ACPI_FAILURE(status)) {
		printk(KERN_ERR PREFIX
		       "Unable to start the ACPI Interpreter\n");
		goto error1;
	}

	/*
	 * ACPI 2.0 requires the EC driver to be loaded and work before
	 * the EC device is found in the namespace (i.e. before acpi_initialize_objects()
	 * is called).
	 * the EC device is found in the namespace (i.e. before
	 * acpi_load_tables() is called).
	 *
	 * This is accomplished by looking for the ECDT table, and getting
	 * the EC parameters out of that.
@@ -1013,6 +1008,22 @@ static int __init acpi_bus_init(void)
	status = acpi_ec_ecdt_probe();
	/* Ignore result. Not having an ECDT is not fatal. */

	if (!acpi_gbl_group_module_level_code) {
		status = acpi_load_tables();
		if (ACPI_FAILURE(status)) {
			printk(KERN_ERR PREFIX
			       "Unable to load the System Description Tables\n");
			goto error1;
		}
	}

	status = acpi_enable_subsystem(ACPI_NO_ACPI_ENABLE);
	if (ACPI_FAILURE(status)) {
		printk(KERN_ERR PREFIX
		       "Unable to start the ACPI Interpreter\n");
		goto error1;
	}

	status = acpi_initialize_objects(ACPI_FULL_INITIALIZATION);
	if (ACPI_FAILURE(status)) {
		printk(KERN_ERR PREFIX "Unable to initialize ACPI objects\n");