diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:45:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-20 12:45:38 -0400 |
commit | 04afb40593f9a3007e5ea817d009529ef10fb685 (patch) | |
tree | de5a16c2b1e5f2d97a7c2eccea4677719817f282 /drivers/acpi/bus.c | |
parent | 7f06a8b26aba1dc03b42272dc0089a800372c575 (diff) | |
parent | cce4f632db200aef147c59084437168174b23f11 (diff) |
Merge branch 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (22 commits)
ACPI: fix early DSDT dmi check warnings on ia64
ACPICA: Update version to 20100428.
ACPICA: Update/clarify some parameter names associated with acpi_handle
ACPICA: Rename acpi_ex_system_do_suspend->acpi_ex_system_do_sleep
ACPICA: Prevent possible allocation overrun during object copy
ACPICA: Split large file, evgpeblk
ACPICA: Add GPE support for dynamically loaded ACPI tables
ACPICA: Clarify/rename some root table descriptor fields
ACPICA: Update version to 20100331.
ACPICA: Minimize the differences between linux GPE code and ACPICA code base
ACPI: add boot option acpi=copy_dsdt to fix corrupt DSDT
ACPICA: Update DSDT copy/detection.
ACPICA: Add subsystem option to force copy of DSDT to local memory
ACPICA: Add detection of corrupted/replaced DSDT
ACPICA: Add write support for DataTable operation regions
ACPICA: Fix for acpi_reallocate_root_table for incorrect root table copy
ACPICA: Update comments/headers, no functional change
ACPICA: Update version to 20100304
ACPICA: Fix for possible fault in acpi_ex_release_mutex
ACPICA: Standardize integer output for ACPICA warnings/errors
...
Diffstat (limited to 'drivers/acpi/bus.c')
-rw-r--r-- | drivers/acpi/bus.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 743576bf1bd7..9042a8579668 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -69,6 +69,44 @@ static struct dmi_system_id __cpuinitdata power_nocheck_dmi_table[] = { | |||
69 | }; | 69 | }; |
70 | 70 | ||
71 | 71 | ||
72 | #ifdef CONFIG_X86 | ||
73 | static int set_copy_dsdt(const struct dmi_system_id *id) | ||
74 | { | ||
75 | printk(KERN_NOTICE "%s detected - " | ||
76 | "force copy of DSDT to local memory\n", id->ident); | ||
77 | acpi_gbl_copy_dsdt_locally = 1; | ||
78 | return 0; | ||
79 | } | ||
80 | |||
81 | static struct dmi_system_id dsdt_dmi_table[] __initdata = { | ||
82 | /* | ||
83 | * Insyde BIOS on some TOSHIBA machines corrupt the DSDT. | ||
84 | * https://bugzilla.kernel.org/show_bug.cgi?id=14679 | ||
85 | */ | ||
86 | { | ||
87 | .callback = set_copy_dsdt, | ||
88 | .ident = "TOSHIBA Satellite A505", | ||
89 | .matches = { | ||
90 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | ||
91 | DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A505"), | ||
92 | }, | ||
93 | }, | ||
94 | { | ||
95 | .callback = set_copy_dsdt, | ||
96 | .ident = "TOSHIBA Satellite L505D", | ||
97 | .matches = { | ||
98 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | ||
99 | DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L505D"), | ||
100 | }, | ||
101 | }, | ||
102 | {} | ||
103 | }; | ||
104 | #else | ||
105 | static struct dmi_system_id dsdt_dmi_table[] __initdata = { | ||
106 | {} | ||
107 | }; | ||
108 | #endif | ||
109 | |||
72 | /* -------------------------------------------------------------------------- | 110 | /* -------------------------------------------------------------------------- |
73 | Device Management | 111 | Device Management |
74 | -------------------------------------------------------------------------- */ | 112 | -------------------------------------------------------------------------- */ |
@@ -813,6 +851,12 @@ void __init acpi_early_init(void) | |||
813 | 851 | ||
814 | acpi_gbl_permanent_mmap = 1; | 852 | acpi_gbl_permanent_mmap = 1; |
815 | 853 | ||
854 | /* | ||
855 | * If the machine falls into the DMI check table, | ||
856 | * DSDT will be copied to memory | ||
857 | */ | ||
858 | dmi_check_system(dsdt_dmi_table); | ||
859 | |||
816 | status = acpi_reallocate_root_table(); | 860 | status = acpi_reallocate_root_table(); |
817 | if (ACPI_FAILURE(status)) { | 861 | if (ACPI_FAILURE(status)) { |
818 | printk(KERN_ERR PREFIX | 862 | printk(KERN_ERR PREFIX |