aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/setup.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index ec7e56c1b984..3109ca37a67c 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -729,6 +729,29 @@ void start_periodic_check_for_corruption(void)
729} 729}
730#endif 730#endif
731 731
732static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
733{
734 printk(KERN_NOTICE
735 "%s detected: BIOS corrupts 0xc000, working it around.\n",
736 d->ident);
737
738 reserve_early(0xc000, 0xc400, "BIOS quirk");
739
740 return 0;
741}
742
743/* List of systems that have known low memory corruption BIOS problems */
744static struct dmi_system_id __initdata bad_bios_dmi_table[] = {
745 {
746 .callback = dmi_low_memory_corruption,
747 .ident = "AMI BIOS",
748 .matches = {
749 DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."),
750 },
751 },
752 {}
753};
754
732/* 755/*
733 * Determine if we were loaded by an EFI loader. If so, then we have also been 756 * Determine if we were loaded by an EFI loader. If so, then we have also been
734 * passed the efi memmap, systab, etc., so we should use these data structures 757 * passed the efi memmap, systab, etc., so we should use these data structures
@@ -752,6 +775,8 @@ void __init setup_arch(char **cmdline_p)
752 printk(KERN_INFO "Command line: %s\n", boot_command_line); 775 printk(KERN_INFO "Command line: %s\n", boot_command_line);
753#endif 776#endif
754 777
778 dmi_check_system(bad_bios_dmi_table);
779
755 early_cpu_init(); 780 early_cpu_init();
756 early_ioremap_init(); 781 early_ioremap_init();
757 782
@@ -1037,3 +1062,5 @@ void __init setup_arch(char **cmdline_p)
1037#endif 1062#endif
1038#endif 1063#endif
1039} 1064}
1065
1066