aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2008-10-05 22:31:36 -0400
committerLen Brown <len.brown@intel.com>2008-10-11 02:00:02 -0400
commit455c8793d2c49eaecad038c8de83dade9fc3759f (patch)
tree013a0d81561fff4198e15743ad65c26ac34d56ac
parent8463200a00fe2aea938b40173198a0983f2929ef (diff)
ACPI: Enable EC device immediately after ACPI full initialization
when there is no ECDT table and no _INI object for EC device, it will be enabled before scanning ACPI device. But it is too late after the following the commit is merged. >commit 7752d5cfe3d11ca0bb9c673ec38bd78ba6578f8e > Author: Robert Hancock <hancockr@shaw.ca> > Date: Fri Feb 15 01:27:20 2008 -0800 >x86: validate against acpi motherboard resources After the above commit is merged, OS will check whether MCFG area is reserved in ACPI motherboard resources by calling the function of acpi_get_devices when there exists MCFG table. In the acpi_get_devices the _STA object will be evaluated to check the status of the ACPI device. On some broken BIOS the MYEC object of EC device is initialized as one, which indicates that EC operation region is already accessible before enabling EC device.So on these broken BIOS the EC operation region will be accessed in course of evaluating the _STA object before enabling EC device, which causes that OS will print the following warning messages: >ACPI Error (evregion-0315): No handler for Region [EC__] (ffff88007f8145e8) [EmbeddedControl] [20080609] >ACPI Error (exfldio-0290): Region EmbeddedControl(3) has no handler [20080321] >ACPI Error (psparse-0530): Method parse/execution failed [\_SB_.PCI0.SBRG. EC__.BAT1._STA] (Node ffff81013fc17a00), AE_NOT_EXIST >ACPI Error (uteval-0233): Method execution failed [\_SB_.PCI0.SBRG.EC__.BAT1. _STA] (Node ffff81013fc17a00), AE_NOT_EXIST Although the above warning message is harmless, it looks confusing. So it is necessary to enable EC device as early as possible.Maybe it is appropriate to enable it immediately after ACPI full initialization. http://bugzilla.kernel.org/show_bug.cgi?id=11255 http://bugzilla.kernel.org/show_bug.cgi?id=11374 http://bugzilla.kernel.org/show_bug.cgi?id=11660 Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Acked-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/bus.c6
-rw-r--r--drivers/acpi/scan.c4
-rw-r--r--include/acpi/acpi_drivers.h1
3 files changed, 7 insertions, 4 deletions
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index ccae305ee55d..0e0bbc6209e5 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -749,6 +749,12 @@ static int __init acpi_bus_init(void)
749 goto error1; 749 goto error1;
750 } 750 }
751 751
752 /*
753 * Maybe EC region is required at bus_scan/acpi_get_devices. So it
754 * is necessary to enable it as early as possible.
755 */
756 acpi_boot_ec_enable();
757
752 printk(KERN_INFO PREFIX "Interpreter enabled\n"); 758 printk(KERN_INFO PREFIX "Interpreter enabled\n");
753 759
754 /* Initialize sleep structures */ 760 /* Initialize sleep structures */
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index f6f52c1a2aba..2ae218f5ea59 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1545,7 +1545,6 @@ static int acpi_bus_scan_fixed(struct acpi_device *root)
1545 return result; 1545 return result;
1546} 1546}
1547 1547
1548int __init acpi_boot_ec_enable(void);
1549 1548
1550static int __init acpi_scan_init(void) 1549static int __init acpi_scan_init(void)
1551{ 1550{
@@ -1579,9 +1578,6 @@ static int __init acpi_scan_init(void)
1579 */ 1578 */
1580 result = acpi_bus_scan_fixed(acpi_root); 1579 result = acpi_bus_scan_fixed(acpi_root);
1581 1580
1582 /* EC region might be needed at bus_scan, so enable it now */
1583 acpi_boot_ec_enable();
1584
1585 if (!result) 1581 if (!result)
1586 result = acpi_bus_scan(acpi_root, &ops); 1582 result = acpi_bus_scan(acpi_root, &ops);
1587 1583
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index e5f38e5ce86f..ab926a70b39f 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -100,6 +100,7 @@ int acpi_power_transition(struct acpi_device *device, int state);
100 -------------------------------------------------------------------------- */ 100 -------------------------------------------------------------------------- */
101#ifdef CONFIG_ACPI_EC 101#ifdef CONFIG_ACPI_EC
102int acpi_ec_ecdt_probe(void); 102int acpi_ec_ecdt_probe(void);
103int acpi_boot_ec_enable(void);
103#endif 104#endif
104 105
105/* -------------------------------------------------------------------------- 106/* --------------------------------------------------------------------------