]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ACPICA: Cleanup the option of forcing the use of the RSDT.
authorLv Zheng <lv.zheng@intel.com>
Wed, 8 Jan 2014 05:43:40 +0000 (13:43 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 8 Jan 2014 14:31:36 +0000 (15:31 +0100)
This change adds a runtime option that will force ACPICA to use the
RSDT instead of the XSDT. Although the ACPI spec requires that an XSDT
be used instead of the RSDT, the XSDT has been found to be corrupt or
ill-formed on some machines.

This option is already in the Linux kernel.  When it is back ported to
ACPICA, code is re-written to follow ACPICA coding style.  This patch
is the generation of the integration.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
arch/ia64/kernel/acpi.c
arch/x86/kernel/acpi/boot.c
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/tbutils.c
include/acpi/acpixf.h

index 59d52e3aef125b79b67afdaf1fcffd2b892367ff..28dc6ba6690adf3910eec80135f76d44c1c4e98e 100644 (file)
@@ -61,7 +61,6 @@
 
 #define PREFIX                 "ACPI: "
 
-u32 acpi_rsdt_forced;
 unsigned int acpi_cpei_override;
 unsigned int acpi_cpei_phys_cpuid;
 
index 6c0b43bd024bb5890230ca45c61b3de082b611ef..0b0b91b83d515f7331f47e4d6dd3ce8057400402 100644 (file)
@@ -46,7 +46,6 @@
 
 #include "sleep.h" /* To include x86_acpi_suspend_lowlevel */
 static int __initdata acpi_force = 0;
-u32 acpi_rsdt_forced;
 int acpi_disabled;
 EXPORT_SYMBOL(acpi_disabled);
 
@@ -1564,7 +1563,7 @@ static int __init parse_acpi(char *arg)
        }
        /* acpi=rsdt use RSDT instead of XSDT */
        else if (strcmp(arg, "rsdt") == 0) {
-               acpi_rsdt_forced = 1;
+               acpi_gbl_do_not_use_xsdt = TRUE;
        }
        /* "acpi=noirq" disables ACPI interrupt routing */
        else if (strcmp(arg, "noirq") == 0) {
index e9f1fc7f99c708618bb95fda1c64175f34808fdc..cffb45742aa50bb783e5a669813099734a689e1b 100644 (file)
@@ -118,6 +118,14 @@ bool ACPI_INIT_GLOBAL(acpi_gbl_enable_aml_debug_object, FALSE);
  */
 u8 ACPI_INIT_GLOBAL(acpi_gbl_copy_dsdt_locally, FALSE);
 
+/*
+ * Optionally ignore an XSDT if present and use the RSDT instead.
+ * Although the ACPI specification requires that an XSDT be used instead
+ * of the RSDT, the XSDT has been found to be corrupt or ill-formed on
+ * some machines. Default behavior is to use the XSDT if present.
+ */
+u8 ACPI_INIT_GLOBAL(acpi_gbl_do_not_use_xsdt, FALSE);
+
 /*
  * Optionally truncate I/O addresses to 16 bits. Provides compatibility
  * with other ACPI implementations. NOTE: During ACPICA initialization,
index ee6067062cdc3fed8780176c471f3684677d1a58..6412d3c301cb62d480b9c753a0dbbf2b7af612f3 100644 (file)
@@ -478,10 +478,10 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
                                   ACPI_CAST_PTR(struct acpi_table_header,
                                                 rsdp));
 
-       /* Differentiate between RSDT and XSDT root tables */
+       /* Use XSDT if present and not overridden. Otherwise, use RSDT */
 
-       if ((rsdp->revision > 1) && rsdp->xsdt_physical_address
-                       && !acpi_rsdt_forced) {
+       if ((rsdp->revision > 1) &&
+           rsdp->xsdt_physical_address && !acpi_gbl_do_not_use_xsdt) {
                /*
                 * RSDP contains an XSDT (64-bit physical addresses). We must use
                 * the XSDT if the revision is > 1 and the XSDT pointer is present,
@@ -503,8 +503,8 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
        acpi_os_unmap_memory(rsdp, sizeof(struct acpi_table_rsdp));
 
        /*
-        * If it is present, validate the XSDT for access/size and ensure
-        * that all table entries are at least non-NULL
+        * If it is present and used, validate the XSDT for access/size
+        * and ensure that all table entries are at least non-NULL
         */
        if (table_entry_size == ACPI_XSDT_ENTRY_SIZE) {
                status = acpi_tb_validate_xsdt(address);
index 4278aba9650381c932a687ca871a47f874b6aa1e..30b01f8895383a251fddafc301f8fdc0c19d266f 100644 (file)
@@ -54,7 +54,6 @@
 #include <acpi/acbuffer.h>
 
 extern u8 acpi_gbl_permanent_mmap;
-extern u32 acpi_rsdt_forced;
 
 /*
  * Globals that are publically available
@@ -72,17 +71,18 @@ extern u32 acpi_dbg_layer;
 
 /* ACPICA runtime options */
 
-extern u8 acpi_gbl_enable_interpreter_slack;
 extern u8 acpi_gbl_all_methods_serialized;
-extern u8 acpi_gbl_create_osi_method;
-extern u8 acpi_gbl_use_default_register_widths;
-extern acpi_name acpi_gbl_trace_method_name;
-extern u32 acpi_gbl_trace_flags;
-extern bool acpi_gbl_enable_aml_debug_object;
 extern u8 acpi_gbl_copy_dsdt_locally;
-extern u8 acpi_gbl_truncate_io_addresses;
+extern u8 acpi_gbl_create_osi_method;
 extern u8 acpi_gbl_disable_auto_repair;
 extern u8 acpi_gbl_disable_ssdt_table_load;
+extern u8 acpi_gbl_do_not_use_xsdt;
+extern bool acpi_gbl_enable_aml_debug_object;
+extern u8 acpi_gbl_enable_interpreter_slack;
+extern u32 acpi_gbl_trace_flags;
+extern acpi_name acpi_gbl_trace_method_name;
+extern u8 acpi_gbl_truncate_io_addresses;
+extern u8 acpi_gbl_use_default_register_widths;
 
 /*
  * Hardware-reduced prototypes. All interfaces that use these macros will