diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/boot/compressed/eboot.c | 198 | ||||
-rw-r--r-- | arch/x86/boot/compressed/head_32.S | 10 | ||||
-rw-r--r-- | arch/x86/boot/compressed/head_64.S | 10 | ||||
-rw-r--r-- | arch/x86/boot/header.S | 4 | ||||
-rw-r--r-- | arch/x86/include/asm/bootparam.h | 1 | ||||
-rw-r--r-- | arch/x86/mm/pageattr.c | 10 | ||||
-rw-r--r-- | arch/x86/platform/efi/efi.c | 30 |
7 files changed, 154 insertions, 109 deletions
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index 4e85f5f85837..b3e0227df2c9 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c | |||
@@ -729,32 +729,68 @@ fail: | |||
729 | * need to create one ourselves (usually the bootloader would create | 729 | * need to create one ourselves (usually the bootloader would create |
730 | * one for us). | 730 | * one for us). |
731 | */ | 731 | */ |
732 | static efi_status_t make_boot_params(struct boot_params *boot_params, | 732 | struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table) |
733 | efi_loaded_image_t *image, | ||
734 | void *handle) | ||
735 | { | 733 | { |
736 | struct efi_info *efi = &boot_params->efi_info; | 734 | struct boot_params *boot_params; |
737 | struct apm_bios_info *bi = &boot_params->apm_bios_info; | 735 | struct sys_desc_table *sdt; |
738 | struct sys_desc_table *sdt = &boot_params->sys_desc_table; | 736 | struct apm_bios_info *bi; |
739 | struct e820entry *e820_map = &boot_params->e820_map[0]; | 737 | struct setup_header *hdr; |
740 | struct e820entry *prev = NULL; | 738 | struct efi_info *efi; |
741 | struct setup_header *hdr = &boot_params->hdr; | 739 | efi_loaded_image_t *image; |
742 | unsigned long size, key, desc_size, _size; | 740 | void *options; |
743 | efi_memory_desc_t *mem_map; | 741 | u32 load_options_size; |
744 | void *options = image->load_options; | 742 | efi_guid_t proto = LOADED_IMAGE_PROTOCOL_GUID; |
745 | u32 load_options_size = image->load_options_size / 2; /* ASCII */ | ||
746 | int options_size = 0; | 743 | int options_size = 0; |
747 | efi_status_t status; | 744 | efi_status_t status; |
748 | __u32 desc_version; | ||
749 | unsigned long cmdline; | 745 | unsigned long cmdline; |
750 | u8 nr_entries; | ||
751 | u16 *s2; | 746 | u16 *s2; |
752 | u8 *s1; | 747 | u8 *s1; |
753 | int i; | 748 | int i; |
754 | 749 | ||
750 | sys_table = _table; | ||
751 | |||
752 | /* Check if we were booted by the EFI firmware */ | ||
753 | if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) | ||
754 | return NULL; | ||
755 | |||
756 | status = efi_call_phys3(sys_table->boottime->handle_protocol, | ||
757 | handle, &proto, (void *)&image); | ||
758 | if (status != EFI_SUCCESS) { | ||
759 | efi_printk("Failed to get handle for LOADED_IMAGE_PROTOCOL\n"); | ||
760 | return NULL; | ||
761 | } | ||
762 | |||
763 | status = low_alloc(0x4000, 1, (unsigned long *)&boot_params); | ||
764 | if (status != EFI_SUCCESS) { | ||
765 | efi_printk("Failed to alloc lowmem for boot params\n"); | ||
766 | return NULL; | ||
767 | } | ||
768 | |||
769 | memset(boot_params, 0x0, 0x4000); | ||
770 | |||
771 | hdr = &boot_params->hdr; | ||
772 | efi = &boot_params->efi_info; | ||
773 | bi = &boot_params->apm_bios_info; | ||
774 | sdt = &boot_params->sys_desc_table; | ||
775 | |||
776 | /* Copy the second sector to boot_params */ | ||
777 | memcpy(&hdr->jump, image->image_base + 512, 512); | ||
778 | |||
779 | /* | ||
780 | * Fill out some of the header fields ourselves because the | ||
781 | * EFI firmware loader doesn't load the first sector. | ||
782 | */ | ||
783 | hdr->root_flags = 1; | ||
784 | hdr->vid_mode = 0xffff; | ||
785 | hdr->boot_flag = 0xAA55; | ||
786 | |||
787 | hdr->code32_start = (__u64)(unsigned long)image->image_base; | ||
788 | |||
755 | hdr->type_of_loader = 0x21; | 789 | hdr->type_of_loader = 0x21; |
756 | 790 | ||
757 | /* Convert unicode cmdline to ascii */ | 791 | /* Convert unicode cmdline to ascii */ |
792 | options = image->load_options; | ||
793 | load_options_size = image->load_options_size / 2; /* ASCII */ | ||
758 | cmdline = 0; | 794 | cmdline = 0; |
759 | s2 = (u16 *)options; | 795 | s2 = (u16 *)options; |
760 | 796 | ||
@@ -791,18 +827,36 @@ static efi_status_t make_boot_params(struct boot_params *boot_params, | |||
791 | hdr->ramdisk_image = 0; | 827 | hdr->ramdisk_image = 0; |
792 | hdr->ramdisk_size = 0; | 828 | hdr->ramdisk_size = 0; |
793 | 829 | ||
794 | status = handle_ramdisks(image, hdr); | ||
795 | if (status != EFI_SUCCESS) | ||
796 | goto free_cmdline; | ||
797 | |||
798 | setup_graphics(boot_params); | ||
799 | |||
800 | /* Clear APM BIOS info */ | 830 | /* Clear APM BIOS info */ |
801 | memset(bi, 0, sizeof(*bi)); | 831 | memset(bi, 0, sizeof(*bi)); |
802 | 832 | ||
803 | memset(sdt, 0, sizeof(*sdt)); | 833 | memset(sdt, 0, sizeof(*sdt)); |
804 | 834 | ||
805 | memcpy(&efi->efi_loader_signature, EFI_LOADER_SIGNATURE, sizeof(__u32)); | 835 | status = handle_ramdisks(image, hdr); |
836 | if (status != EFI_SUCCESS) | ||
837 | goto fail2; | ||
838 | |||
839 | return boot_params; | ||
840 | fail2: | ||
841 | if (options_size) | ||
842 | low_free(options_size, hdr->cmd_line_ptr); | ||
843 | fail: | ||
844 | low_free(0x4000, (unsigned long)boot_params); | ||
845 | return NULL; | ||
846 | } | ||
847 | |||
848 | static efi_status_t exit_boot(struct boot_params *boot_params, | ||
849 | void *handle) | ||
850 | { | ||
851 | struct efi_info *efi = &boot_params->efi_info; | ||
852 | struct e820entry *e820_map = &boot_params->e820_map[0]; | ||
853 | struct e820entry *prev = NULL; | ||
854 | unsigned long size, key, desc_size, _size; | ||
855 | efi_memory_desc_t *mem_map; | ||
856 | efi_status_t status; | ||
857 | __u32 desc_version; | ||
858 | u8 nr_entries; | ||
859 | int i; | ||
806 | 860 | ||
807 | size = sizeof(*mem_map) * 32; | 861 | size = sizeof(*mem_map) * 32; |
808 | 862 | ||
@@ -811,7 +865,7 @@ again: | |||
811 | _size = size; | 865 | _size = size; |
812 | status = low_alloc(size, 1, (unsigned long *)&mem_map); | 866 | status = low_alloc(size, 1, (unsigned long *)&mem_map); |
813 | if (status != EFI_SUCCESS) | 867 | if (status != EFI_SUCCESS) |
814 | goto free_cmdline; | 868 | return status; |
815 | 869 | ||
816 | status = efi_call_phys5(sys_table->boottime->get_memory_map, &size, | 870 | status = efi_call_phys5(sys_table->boottime->get_memory_map, &size, |
817 | mem_map, &key, &desc_size, &desc_version); | 871 | mem_map, &key, &desc_size, &desc_version); |
@@ -823,6 +877,7 @@ again: | |||
823 | if (status != EFI_SUCCESS) | 877 | if (status != EFI_SUCCESS) |
824 | goto free_mem_map; | 878 | goto free_mem_map; |
825 | 879 | ||
880 | memcpy(&efi->efi_loader_signature, EFI_LOADER_SIGNATURE, sizeof(__u32)); | ||
826 | efi->efi_systab = (unsigned long)sys_table; | 881 | efi->efi_systab = (unsigned long)sys_table; |
827 | efi->efi_memdesc_size = desc_size; | 882 | efi->efi_memdesc_size = desc_size; |
828 | efi->efi_memdesc_version = desc_version; | 883 | efi->efi_memdesc_version = desc_version; |
@@ -906,61 +961,13 @@ again: | |||
906 | 961 | ||
907 | free_mem_map: | 962 | free_mem_map: |
908 | low_free(_size, (unsigned long)mem_map); | 963 | low_free(_size, (unsigned long)mem_map); |
909 | free_cmdline: | ||
910 | if (options_size) | ||
911 | low_free(options_size, hdr->cmd_line_ptr); | ||
912 | fail: | ||
913 | return status; | 964 | return status; |
914 | } | 965 | } |
915 | 966 | ||
916 | /* | 967 | static efi_status_t relocate_kernel(struct setup_header *hdr) |
917 | * On success we return a pointer to a boot_params structure, and NULL | ||
918 | * on failure. | ||
919 | */ | ||
920 | struct boot_params *efi_main(void *handle, efi_system_table_t *_table) | ||
921 | { | 968 | { |
922 | struct boot_params *boot_params; | ||
923 | unsigned long start, nr_pages; | 969 | unsigned long start, nr_pages; |
924 | struct desc_ptr *gdt, *idt; | ||
925 | efi_loaded_image_t *image; | ||
926 | struct setup_header *hdr; | ||
927 | efi_status_t status; | 970 | efi_status_t status; |
928 | efi_guid_t proto = LOADED_IMAGE_PROTOCOL_GUID; | ||
929 | struct desc_struct *desc; | ||
930 | |||
931 | sys_table = _table; | ||
932 | |||
933 | /* Check if we were booted by the EFI firmware */ | ||
934 | if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) | ||
935 | goto fail; | ||
936 | |||
937 | status = efi_call_phys3(sys_table->boottime->handle_protocol, | ||
938 | handle, &proto, (void *)&image); | ||
939 | if (status != EFI_SUCCESS) { | ||
940 | efi_printk("Failed to get handle for LOADED_IMAGE_PROTOCOL\n"); | ||
941 | goto fail; | ||
942 | } | ||
943 | |||
944 | status = low_alloc(0x4000, 1, (unsigned long *)&boot_params); | ||
945 | if (status != EFI_SUCCESS) { | ||
946 | efi_printk("Failed to alloc lowmem for boot params\n"); | ||
947 | goto fail; | ||
948 | } | ||
949 | |||
950 | memset(boot_params, 0x0, 0x4000); | ||
951 | |||
952 | hdr = &boot_params->hdr; | ||
953 | |||
954 | /* Copy the second sector to boot_params */ | ||
955 | memcpy(&hdr->jump, image->image_base + 512, 512); | ||
956 | |||
957 | /* | ||
958 | * Fill out some of the header fields ourselves because the | ||
959 | * EFI firmware loader doesn't load the first sector. | ||
960 | */ | ||
961 | hdr->root_flags = 1; | ||
962 | hdr->vid_mode = 0xffff; | ||
963 | hdr->boot_flag = 0xAA55; | ||
964 | 971 | ||
965 | /* | 972 | /* |
966 | * The EFI firmware loader could have placed the kernel image | 973 | * The EFI firmware loader could have placed the kernel image |
@@ -978,16 +985,40 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table) | |||
978 | if (status != EFI_SUCCESS) { | 985 | if (status != EFI_SUCCESS) { |
979 | status = low_alloc(hdr->init_size, hdr->kernel_alignment, | 986 | status = low_alloc(hdr->init_size, hdr->kernel_alignment, |
980 | &start); | 987 | &start); |
981 | if (status != EFI_SUCCESS) { | 988 | if (status != EFI_SUCCESS) |
982 | efi_printk("Failed to alloc mem for kernel\n"); | 989 | efi_printk("Failed to alloc mem for kernel\n"); |
983 | goto fail; | ||
984 | } | ||
985 | } | 990 | } |
986 | 991 | ||
992 | if (status == EFI_SUCCESS) | ||
993 | memcpy((void *)start, (void *)(unsigned long)hdr->code32_start, | ||
994 | hdr->init_size); | ||
995 | |||
996 | hdr->pref_address = hdr->code32_start; | ||
987 | hdr->code32_start = (__u32)start; | 997 | hdr->code32_start = (__u32)start; |
988 | hdr->pref_address = (__u64)(unsigned long)image->image_base; | ||
989 | 998 | ||
990 | memcpy((void *)start, image->image_base, image->image_size); | 999 | return status; |
1000 | } | ||
1001 | |||
1002 | /* | ||
1003 | * On success we return a pointer to a boot_params structure, and NULL | ||
1004 | * on failure. | ||
1005 | */ | ||
1006 | struct boot_params *efi_main(void *handle, efi_system_table_t *_table, | ||
1007 | struct boot_params *boot_params) | ||
1008 | { | ||
1009 | struct desc_ptr *gdt, *idt; | ||
1010 | efi_loaded_image_t *image; | ||
1011 | struct setup_header *hdr = &boot_params->hdr; | ||
1012 | efi_status_t status; | ||
1013 | struct desc_struct *desc; | ||
1014 | |||
1015 | sys_table = _table; | ||
1016 | |||
1017 | /* Check if we were booted by the EFI firmware */ | ||
1018 | if (sys_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) | ||
1019 | goto fail; | ||
1020 | |||
1021 | setup_graphics(boot_params); | ||
991 | 1022 | ||
992 | status = efi_call_phys3(sys_table->boottime->allocate_pool, | 1023 | status = efi_call_phys3(sys_table->boottime->allocate_pool, |
993 | EFI_LOADER_DATA, sizeof(*gdt), | 1024 | EFI_LOADER_DATA, sizeof(*gdt), |
@@ -1015,7 +1046,18 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table) | |||
1015 | idt->size = 0; | 1046 | idt->size = 0; |
1016 | idt->address = 0; | 1047 | idt->address = 0; |
1017 | 1048 | ||
1018 | status = make_boot_params(boot_params, image, handle); | 1049 | /* |
1050 | * If the kernel isn't already loaded at the preferred load | ||
1051 | * address, relocate it. | ||
1052 | */ | ||
1053 | if (hdr->pref_address != hdr->code32_start) { | ||
1054 | status = relocate_kernel(hdr); | ||
1055 | |||
1056 | if (status != EFI_SUCCESS) | ||
1057 | goto fail; | ||
1058 | } | ||
1059 | |||
1060 | status = exit_boot(boot_params, handle); | ||
1019 | if (status != EFI_SUCCESS) | 1061 | if (status != EFI_SUCCESS) |
1020 | goto fail; | 1062 | goto fail; |
1021 | 1063 | ||
diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S index c85e3ac99bba..aa4aaf1b2380 100644 --- a/arch/x86/boot/compressed/head_32.S +++ b/arch/x86/boot/compressed/head_32.S | |||
@@ -42,6 +42,16 @@ ENTRY(startup_32) | |||
42 | */ | 42 | */ |
43 | add $0x4, %esp | 43 | add $0x4, %esp |
44 | 44 | ||
45 | call make_boot_params | ||
46 | cmpl $0, %eax | ||
47 | je 1f | ||
48 | movl 0x4(%esp), %esi | ||
49 | movl (%esp), %ecx | ||
50 | pushl %eax | ||
51 | pushl %esi | ||
52 | pushl %ecx | ||
53 | |||
54 | .org 0x30,0x90 | ||
45 | call efi_main | 55 | call efi_main |
46 | cmpl $0, %eax | 56 | cmpl $0, %eax |
47 | movl %eax, %esi | 57 | movl %eax, %esi |
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index 87e03a13d8e3..2c4b171eec33 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S | |||
@@ -209,6 +209,16 @@ ENTRY(startup_64) | |||
209 | .org 0x210 | 209 | .org 0x210 |
210 | mov %rcx, %rdi | 210 | mov %rcx, %rdi |
211 | mov %rdx, %rsi | 211 | mov %rdx, %rsi |
212 | pushq %rdi | ||
213 | pushq %rsi | ||
214 | call make_boot_params | ||
215 | cmpq $0,%rax | ||
216 | je 1f | ||
217 | mov %rax, %rdx | ||
218 | popq %rsi | ||
219 | popq %rdi | ||
220 | |||
221 | .org 0x230,0x90 | ||
212 | call efi_main | 222 | call efi_main |
213 | movq %rax,%rsi | 223 | movq %rax,%rsi |
214 | cmpq $0,%rax | 224 | cmpq $0,%rax |
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S index 9b9c6475b361..b4e15dd6786a 100644 --- a/arch/x86/boot/header.S +++ b/arch/x86/boot/header.S | |||
@@ -283,7 +283,7 @@ _start: | |||
283 | # Part 2 of the header, from the old setup.S | 283 | # Part 2 of the header, from the old setup.S |
284 | 284 | ||
285 | .ascii "HdrS" # header signature | 285 | .ascii "HdrS" # header signature |
286 | .word 0x020a # header version number (>= 0x0105) | 286 | .word 0x020b # header version number (>= 0x0105) |
287 | # or else old loadlin-1.5 will fail) | 287 | # or else old loadlin-1.5 will fail) |
288 | .globl realmode_swtch | 288 | .globl realmode_swtch |
289 | realmode_swtch: .word 0, 0 # default_switch, SETUPSEG | 289 | realmode_swtch: .word 0, 0 # default_switch, SETUPSEG |
@@ -401,6 +401,8 @@ pref_address: .quad LOAD_PHYSICAL_ADDR # preferred load addr | |||
401 | #define INIT_SIZE VO_INIT_SIZE | 401 | #define INIT_SIZE VO_INIT_SIZE |
402 | #endif | 402 | #endif |
403 | init_size: .long INIT_SIZE # kernel initialization size | 403 | init_size: .long INIT_SIZE # kernel initialization size |
404 | handover_offset: .long 0x30 # offset to the handover | ||
405 | # protocol entry point | ||
404 | 406 | ||
405 | # End of setup header ##################################################### | 407 | # End of setup header ##################################################### |
406 | 408 | ||
diff --git a/arch/x86/include/asm/bootparam.h b/arch/x86/include/asm/bootparam.h index eb45aa6b1f27..2ad874cb661c 100644 --- a/arch/x86/include/asm/bootparam.h +++ b/arch/x86/include/asm/bootparam.h | |||
@@ -66,6 +66,7 @@ struct setup_header { | |||
66 | __u64 setup_data; | 66 | __u64 setup_data; |
67 | __u64 pref_address; | 67 | __u64 pref_address; |
68 | __u32 init_size; | 68 | __u32 init_size; |
69 | __u32 handover_offset; | ||
69 | } __attribute__((packed)); | 70 | } __attribute__((packed)); |
70 | 71 | ||
71 | struct sys_desc_table { | 72 | struct sys_desc_table { |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index a718e0d23503..931930a96160 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -919,11 +919,13 @@ static int change_page_attr_set_clr(unsigned long *addr, int numpages, | |||
919 | 919 | ||
920 | /* | 920 | /* |
921 | * On success we use clflush, when the CPU supports it to | 921 | * On success we use clflush, when the CPU supports it to |
922 | * avoid the wbindv. If the CPU does not support it and in the | 922 | * avoid the wbindv. If the CPU does not support it, in the |
923 | * error case we fall back to cpa_flush_all (which uses | 923 | * error case, and during early boot (for EFI) we fall back |
924 | * wbindv): | 924 | * to cpa_flush_all (which uses wbinvd): |
925 | */ | 925 | */ |
926 | if (!ret && cpu_has_clflush) { | 926 | if (early_boot_irqs_disabled) |
927 | __cpa_flush_all((void *)(long)cache); | ||
928 | else if (!ret && cpu_has_clflush) { | ||
927 | if (cpa.flags & (CPA_PAGES_ARRAY | CPA_ARRAY)) { | 929 | if (cpa.flags & (CPA_PAGES_ARRAY | CPA_ARRAY)) { |
928 | cpa_flush_array(addr, numpages, cache, | 930 | cpa_flush_array(addr, numpages, cache, |
929 | cpa.flags, pages); | 931 | cpa.flags, pages); |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 92660edaa1e7..2dc29f51e75a 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
@@ -234,22 +234,7 @@ static efi_status_t __init phys_efi_set_virtual_address_map( | |||
234 | return status; | 234 | return status; |
235 | } | 235 | } |
236 | 236 | ||
237 | static efi_status_t __init phys_efi_get_time(efi_time_t *tm, | 237 | static int efi_set_rtc_mmss(unsigned long nowtime) |
238 | efi_time_cap_t *tc) | ||
239 | { | ||
240 | unsigned long flags; | ||
241 | efi_status_t status; | ||
242 | |||
243 | spin_lock_irqsave(&rtc_lock, flags); | ||
244 | efi_call_phys_prelog(); | ||
245 | status = efi_call_phys2(efi_phys.get_time, virt_to_phys(tm), | ||
246 | virt_to_phys(tc)); | ||
247 | efi_call_phys_epilog(); | ||
248 | spin_unlock_irqrestore(&rtc_lock, flags); | ||
249 | return status; | ||
250 | } | ||
251 | |||
252 | int efi_set_rtc_mmss(unsigned long nowtime) | ||
253 | { | 238 | { |
254 | int real_seconds, real_minutes; | 239 | int real_seconds, real_minutes; |
255 | efi_status_t status; | 240 | efi_status_t status; |
@@ -278,7 +263,7 @@ int efi_set_rtc_mmss(unsigned long nowtime) | |||
278 | return 0; | 263 | return 0; |
279 | } | 264 | } |
280 | 265 | ||
281 | unsigned long efi_get_time(void) | 266 | static unsigned long efi_get_time(void) |
282 | { | 267 | { |
283 | efi_status_t status; | 268 | efi_status_t status; |
284 | efi_time_t eft; | 269 | efi_time_t eft; |
@@ -621,18 +606,13 @@ static int __init efi_runtime_init(void) | |||
621 | } | 606 | } |
622 | /* | 607 | /* |
623 | * We will only need *early* access to the following | 608 | * We will only need *early* access to the following |
624 | * two EFI runtime services before set_virtual_address_map | 609 | * EFI runtime service before set_virtual_address_map |
625 | * is invoked. | 610 | * is invoked. |
626 | */ | 611 | */ |
627 | efi_phys.get_time = (efi_get_time_t *)runtime->get_time; | ||
628 | efi_phys.set_virtual_address_map = | 612 | efi_phys.set_virtual_address_map = |
629 | (efi_set_virtual_address_map_t *) | 613 | (efi_set_virtual_address_map_t *) |
630 | runtime->set_virtual_address_map; | 614 | runtime->set_virtual_address_map; |
631 | /* | 615 | |
632 | * Make efi_get_time can be called before entering | ||
633 | * virtual mode. | ||
634 | */ | ||
635 | efi.get_time = phys_efi_get_time; | ||
636 | early_iounmap(runtime, sizeof(efi_runtime_services_t)); | 616 | early_iounmap(runtime, sizeof(efi_runtime_services_t)); |
637 | 617 | ||
638 | return 0; | 618 | return 0; |
@@ -720,12 +700,10 @@ void __init efi_init(void) | |||
720 | efi_enabled = 0; | 700 | efi_enabled = 0; |
721 | return; | 701 | return; |
722 | } | 702 | } |
723 | #ifdef CONFIG_X86_32 | ||
724 | if (efi_native) { | 703 | if (efi_native) { |
725 | x86_platform.get_wallclock = efi_get_time; | 704 | x86_platform.get_wallclock = efi_get_time; |
726 | x86_platform.set_wallclock = efi_set_rtc_mmss; | 705 | x86_platform.set_wallclock = efi_set_rtc_mmss; |
727 | } | 706 | } |
728 | #endif | ||
729 | 707 | ||
730 | #if EFI_DEBUG | 708 | #if EFI_DEBUG |
731 | print_efi_memmap(); | 709 | print_efi_memmap(); |