diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-18 17:05:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-18 17:05:47 -0400 |
commit | 78f28b7c555359c67c2a0d23f7436e915329421e (patch) | |
tree | 7f8197f82f83c0c19fd9bc85b5d10b5a755d0656 /arch/x86/kernel/setup.c | |
parent | 3240a77b515f4a15e24d8a3a2135bc87b02cf1d6 (diff) | |
parent | 7bd867dfb4e0357e06a3211ab2bd0e714110def3 (diff) |
Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (38 commits)
x86: Move get/set_wallclock to x86_platform_ops
x86: platform: Fix section annotations
x86: apic namespace cleanup
x86: Distangle ioapic and i8259
x86: Add Moorestown early detection
x86: Add hardware_subarch ID for Moorestown
x86: Add early platform detection
x86: Move tsc_init to late_time_init
x86: Move tsc_calibration to x86_init_ops
x86: Replace the now identical time_32/64.c by time.c
x86: time_32/64.c unify profile_pc
x86: Move calibrate_cpu to tsc.c
x86: Make timer setup and global variables the same in time_32/64.c
x86: Remove mca bus ifdef from timer interrupt
x86: Simplify timer_ack magic in time_32.c
x86: Prepare unification of time_32/64.c
x86: Remove do_timer hook
x86: Add timer_init to x86_init_ops
x86: Move percpu clockevents setup to x86_init_ops
x86: Move xen_post_allocator_init into xen_pagetable_setup_done
...
Fix up conflicts in arch/x86/include/asm/io_apic.h
Diffstat (limited to 'arch/x86/kernel/setup.c')
-rw-r--r-- | arch/x86/kernel/setup.c | 115 |
1 files changed, 18 insertions, 97 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 19f15c4076fb..a55f6609fe1f 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -109,10 +109,6 @@ | |||
109 | #include <asm/numa_64.h> | 109 | #include <asm/numa_64.h> |
110 | #endif | 110 | #endif |
111 | 111 | ||
112 | #ifndef ARCH_SETUP | ||
113 | #define ARCH_SETUP | ||
114 | #endif | ||
115 | |||
116 | /* | 112 | /* |
117 | * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. | 113 | * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. |
118 | * The direct mapping extends to max_pfn_mapped, so that we can directly access | 114 | * The direct mapping extends to max_pfn_mapped, so that we can directly access |
@@ -134,9 +130,9 @@ int default_cpu_present_to_apicid(int mps_cpu) | |||
134 | return __default_cpu_present_to_apicid(mps_cpu); | 130 | return __default_cpu_present_to_apicid(mps_cpu); |
135 | } | 131 | } |
136 | 132 | ||
137 | int default_check_phys_apicid_present(int boot_cpu_physical_apicid) | 133 | int default_check_phys_apicid_present(int phys_apicid) |
138 | { | 134 | { |
139 | return __default_check_phys_apicid_present(boot_cpu_physical_apicid); | 135 | return __default_check_phys_apicid_present(phys_apicid); |
140 | } | 136 | } |
141 | #endif | 137 | #endif |
142 | 138 | ||
@@ -172,13 +168,6 @@ static struct resource bss_resource = { | |||
172 | 168 | ||
173 | 169 | ||
174 | #ifdef CONFIG_X86_32 | 170 | #ifdef CONFIG_X86_32 |
175 | static struct resource video_ram_resource = { | ||
176 | .name = "Video RAM area", | ||
177 | .start = 0xa0000, | ||
178 | .end = 0xbffff, | ||
179 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | ||
180 | }; | ||
181 | |||
182 | /* cpu data as detected by the assembly code in head.S */ | 171 | /* cpu data as detected by the assembly code in head.S */ |
183 | struct cpuinfo_x86 new_cpu_data __cpuinitdata = {0, 0, 0, 0, -1, 1, 0, 0, -1}; | 172 | struct cpuinfo_x86 new_cpu_data __cpuinitdata = {0, 0, 0, 0, -1, 1, 0, 0, -1}; |
184 | /* common cpu data for all cpus */ | 173 | /* common cpu data for all cpus */ |
@@ -606,7 +595,7 @@ static struct resource standard_io_resources[] = { | |||
606 | .flags = IORESOURCE_BUSY | IORESOURCE_IO } | 595 | .flags = IORESOURCE_BUSY | IORESOURCE_IO } |
607 | }; | 596 | }; |
608 | 597 | ||
609 | static void __init reserve_standard_io_resources(void) | 598 | void __init reserve_standard_io_resources(void) |
610 | { | 599 | { |
611 | int i; | 600 | int i; |
612 | 601 | ||
@@ -638,10 +627,6 @@ static int __init setup_elfcorehdr(char *arg) | |||
638 | early_param("elfcorehdr", setup_elfcorehdr); | 627 | early_param("elfcorehdr", setup_elfcorehdr); |
639 | #endif | 628 | #endif |
640 | 629 | ||
641 | static struct x86_quirks default_x86_quirks __initdata; | ||
642 | |||
643 | struct x86_quirks *x86_quirks __initdata = &default_x86_quirks; | ||
644 | |||
645 | #ifdef CONFIG_X86_RESERVE_LOW_64K | 630 | #ifdef CONFIG_X86_RESERVE_LOW_64K |
646 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) | 631 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) |
647 | { | 632 | { |
@@ -773,7 +758,7 @@ void __init setup_arch(char **cmdline_p) | |||
773 | } | 758 | } |
774 | #endif | 759 | #endif |
775 | 760 | ||
776 | ARCH_SETUP | 761 | x86_init.oem.arch_setup(); |
777 | 762 | ||
778 | setup_memory_map(); | 763 | setup_memory_map(); |
779 | parse_setup_data(); | 764 | parse_setup_data(); |
@@ -844,11 +829,9 @@ void __init setup_arch(char **cmdline_p) | |||
844 | * VMware detection requires dmi to be available, so this | 829 | * VMware detection requires dmi to be available, so this |
845 | * needs to be done after dmi_scan_machine, for the BP. | 830 | * needs to be done after dmi_scan_machine, for the BP. |
846 | */ | 831 | */ |
847 | init_hypervisor(&boot_cpu_data); | 832 | init_hypervisor_platform(); |
848 | 833 | ||
849 | #ifdef CONFIG_X86_32 | 834 | x86_init.resources.probe_roms(); |
850 | probe_roms(); | ||
851 | #endif | ||
852 | 835 | ||
853 | /* after parse_early_param, so could debug it */ | 836 | /* after parse_early_param, so could debug it */ |
854 | insert_resource(&iomem_resource, &code_resource); | 837 | insert_resource(&iomem_resource, &code_resource); |
@@ -983,10 +966,9 @@ void __init setup_arch(char **cmdline_p) | |||
983 | kvmclock_init(); | 966 | kvmclock_init(); |
984 | #endif | 967 | #endif |
985 | 968 | ||
986 | paravirt_pagetable_setup_start(swapper_pg_dir); | 969 | x86_init.paging.pagetable_setup_start(swapper_pg_dir); |
987 | paging_init(); | 970 | paging_init(); |
988 | paravirt_pagetable_setup_done(swapper_pg_dir); | 971 | x86_init.paging.pagetable_setup_done(swapper_pg_dir); |
989 | paravirt_post_allocator_init(); | ||
990 | 972 | ||
991 | tboot_probe(); | 973 | tboot_probe(); |
992 | 974 | ||
@@ -1003,13 +985,11 @@ void __init setup_arch(char **cmdline_p) | |||
1003 | */ | 985 | */ |
1004 | acpi_boot_init(); | 986 | acpi_boot_init(); |
1005 | 987 | ||
1006 | #if defined(CONFIG_X86_MPPARSE) || defined(CONFIG_X86_VISWS) | ||
1007 | /* | 988 | /* |
1008 | * get boot-time SMP configuration: | 989 | * get boot-time SMP configuration: |
1009 | */ | 990 | */ |
1010 | if (smp_found_config) | 991 | if (smp_found_config) |
1011 | get_smp_config(); | 992 | get_smp_config(); |
1012 | #endif | ||
1013 | 993 | ||
1014 | prefill_possible_map(); | 994 | prefill_possible_map(); |
1015 | 995 | ||
@@ -1028,10 +1008,7 @@ void __init setup_arch(char **cmdline_p) | |||
1028 | e820_reserve_resources(); | 1008 | e820_reserve_resources(); |
1029 | e820_mark_nosave_regions(max_low_pfn); | 1009 | e820_mark_nosave_regions(max_low_pfn); |
1030 | 1010 | ||
1031 | #ifdef CONFIG_X86_32 | 1011 | x86_init.resources.reserve_resources(); |
1032 | request_resource(&iomem_resource, &video_ram_resource); | ||
1033 | #endif | ||
1034 | reserve_standard_io_resources(); | ||
1035 | 1012 | ||
1036 | e820_setup_gap(); | 1013 | e820_setup_gap(); |
1037 | 1014 | ||
@@ -1043,78 +1020,22 @@ void __init setup_arch(char **cmdline_p) | |||
1043 | conswitchp = &dummy_con; | 1020 | conswitchp = &dummy_con; |
1044 | #endif | 1021 | #endif |
1045 | #endif | 1022 | #endif |
1023 | x86_init.oem.banner(); | ||
1046 | } | 1024 | } |
1047 | 1025 | ||
1048 | #ifdef CONFIG_X86_32 | 1026 | #ifdef CONFIG_X86_32 |
1049 | 1027 | ||
1050 | /** | 1028 | static struct resource video_ram_resource = { |
1051 | * x86_quirk_intr_init - post gate setup interrupt initialisation | 1029 | .name = "Video RAM area", |
1052 | * | 1030 | .start = 0xa0000, |
1053 | * Description: | 1031 | .end = 0xbffff, |
1054 | * Fill in any interrupts that may have been left out by the general | 1032 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
1055 | * init_IRQ() routine. interrupts having to do with the machine rather | ||
1056 | * than the devices on the I/O bus (like APIC interrupts in intel MP | ||
1057 | * systems) are started here. | ||
1058 | **/ | ||
1059 | void __init x86_quirk_intr_init(void) | ||
1060 | { | ||
1061 | if (x86_quirks->arch_intr_init) { | ||
1062 | if (x86_quirks->arch_intr_init()) | ||
1063 | return; | ||
1064 | } | ||
1065 | } | ||
1066 | |||
1067 | /** | ||
1068 | * x86_quirk_trap_init - initialise system specific traps | ||
1069 | * | ||
1070 | * Description: | ||
1071 | * Called as the final act of trap_init(). Used in VISWS to initialise | ||
1072 | * the various board specific APIC traps. | ||
1073 | **/ | ||
1074 | void __init x86_quirk_trap_init(void) | ||
1075 | { | ||
1076 | if (x86_quirks->arch_trap_init) { | ||
1077 | if (x86_quirks->arch_trap_init()) | ||
1078 | return; | ||
1079 | } | ||
1080 | } | ||
1081 | |||
1082 | static struct irqaction irq0 = { | ||
1083 | .handler = timer_interrupt, | ||
1084 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER, | ||
1085 | .name = "timer" | ||
1086 | }; | 1033 | }; |
1087 | 1034 | ||
1088 | /** | 1035 | void __init i386_reserve_resources(void) |
1089 | * x86_quirk_pre_time_init - do any specific initialisations before. | ||
1090 | * | ||
1091 | **/ | ||
1092 | void __init x86_quirk_pre_time_init(void) | ||
1093 | { | 1036 | { |
1094 | if (x86_quirks->arch_pre_time_init) | 1037 | request_resource(&iomem_resource, &video_ram_resource); |
1095 | x86_quirks->arch_pre_time_init(); | 1038 | reserve_standard_io_resources(); |
1096 | } | 1039 | } |
1097 | 1040 | ||
1098 | /** | ||
1099 | * x86_quirk_time_init - do any specific initialisations for the system timer. | ||
1100 | * | ||
1101 | * Description: | ||
1102 | * Must plug the system timer interrupt source at HZ into the IRQ listed | ||
1103 | * in irq_vectors.h:TIMER_IRQ | ||
1104 | **/ | ||
1105 | void __init x86_quirk_time_init(void) | ||
1106 | { | ||
1107 | if (x86_quirks->arch_time_init) { | ||
1108 | /* | ||
1109 | * A nonzero return code does not mean failure, it means | ||
1110 | * that the architecture quirk does not want any | ||
1111 | * generic (timer) setup to be performed after this: | ||
1112 | */ | ||
1113 | if (x86_quirks->arch_time_init()) | ||
1114 | return; | ||
1115 | } | ||
1116 | |||
1117 | irq0.mask = cpumask_of_cpu(0); | ||
1118 | setup_irq(0, &irq0); | ||
1119 | } | ||
1120 | #endif /* CONFIG_X86_32 */ | 1041 | #endif /* CONFIG_X86_32 */ |