Merge git://git.denx.de/u-boot-x86
This commit is contained in:
@@ -23,7 +23,8 @@ endif
|
||||
ifeq ($(IS_32BIT),y)
|
||||
PLATFORM_CPPFLAGS += -march=i386 -m32
|
||||
else
|
||||
PLATFORM_CPPFLAGS += $(if $(CONFIG_SPL_BUILD),,-fpic) -fno-common -m64
|
||||
PLATFORM_CPPFLAGS += $(if $(CONFIG_SPL_BUILD),,-fpic) -fno-common -march=core2 -m64
|
||||
PLATFORM_CPPFLAGS += -mno-mmx -mno-sse
|
||||
endif
|
||||
|
||||
PLATFORM_RELFLAGS += -fdata-sections -ffunction-sections -fvisibility=hidden
|
||||
|
||||
@@ -130,4 +130,8 @@ config SYS_CAR_SIZE
|
||||
Space in bytes in eSRAM used as Cache-As-ARM (CAR).
|
||||
Note this size must not exceed eSRAM's total size.
|
||||
|
||||
config X86_TSC_TIMER_EARLY_FREQ
|
||||
int
|
||||
default 400
|
||||
|
||||
endif
|
||||
|
||||
@@ -20,6 +20,7 @@ _start:
|
||||
|
||||
call board_init_f_init_reserve
|
||||
|
||||
xor %rdi, %rdi
|
||||
call board_init_f
|
||||
call board_init_f_r
|
||||
|
||||
|
||||
@@ -7,30 +7,18 @@
|
||||
#include <common.h>
|
||||
#include <debug_uart.h>
|
||||
|
||||
/* Global declaration of gd */
|
||||
struct global_data *global_data_ptr;
|
||||
/*
|
||||
* Global declaration of gd.
|
||||
*
|
||||
* As we write to it before relocation we have to make sure it is not put into
|
||||
* a .bss section which may overlap a .rela section. Initialization forces it
|
||||
* into a .data section which cannot overlap any .rela section.
|
||||
*/
|
||||
struct global_data *global_data_ptr = (struct global_data *)~0;
|
||||
|
||||
void arch_setup_gd(gd_t *new_gd)
|
||||
{
|
||||
global_data_ptr = new_gd;
|
||||
|
||||
/*
|
||||
* TODO(sjg@chromium.org): For some reason U-Boot does not boot
|
||||
* without this line. It fails to start up U-Boot proper and instead
|
||||
* restarts SPL. Need to figure out why:
|
||||
*
|
||||
* U-Boot SPL 2017.01
|
||||
*
|
||||
* U-Boot SPL 2017.01
|
||||
* CPU: Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz
|
||||
* Trying to boot from SPIJumping to 64-bit U-Boot: Note many
|
||||
* features are missing
|
||||
*
|
||||
* U-Boot SPL 2017.01
|
||||
*/
|
||||
#ifdef CONFIG_DEBUG_UART
|
||||
printch(' ');
|
||||
#endif
|
||||
}
|
||||
|
||||
int cpu_has_64bit(void)
|
||||
|
||||
@@ -116,6 +116,10 @@ static int boot_prep_linux(bootm_headers_t *images)
|
||||
char *base_ptr;
|
||||
|
||||
base_ptr = (char *)load_zimage(data, len, &load_address);
|
||||
if (!base_ptr) {
|
||||
puts("## Kernel loading failed ...\n");
|
||||
goto error;
|
||||
}
|
||||
images->os.load = load_address;
|
||||
cmd_line_dest = base_ptr + COMMAND_LINE_OFFSET;
|
||||
images->ep = (ulong)base_ptr;
|
||||
|
||||
@@ -53,6 +53,15 @@ static void do_elf_reloc_fixups64(unsigned int text_base, uintptr_t size,
|
||||
Elf64_Addr *offset_ptr_ram;
|
||||
|
||||
do {
|
||||
unsigned long long type = ELF64_R_TYPE(re_src->r_info);
|
||||
|
||||
if (type != R_X86_64_RELATIVE) {
|
||||
printf("%s: unsupported relocation type 0x%llx "
|
||||
"at %p, ", __func__, type, re_src);
|
||||
printf("offset = 0x%llx\n", re_src->r_offset);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get the location from the relocation entry */
|
||||
offset_ptr_rom = (Elf64_Addr *)(uintptr_t)re_src->r_offset;
|
||||
|
||||
@@ -91,6 +100,15 @@ static void do_elf_reloc_fixups32(unsigned int text_base, uintptr_t size,
|
||||
Elf32_Addr *offset_ptr_ram;
|
||||
|
||||
do {
|
||||
unsigned int type = ELF32_R_TYPE(re_src->r_info);
|
||||
|
||||
if (type != R_386_RELATIVE) {
|
||||
printf("%s: unsupported relocation type 0x%x "
|
||||
"at %p, ", __func__, type, re_src);
|
||||
printf("offset = 0x%x\n", re_src->r_offset);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Get the location from the relocation entry */
|
||||
offset_ptr_rom = (Elf32_Addr *)(uintptr_t)re_src->r_offset;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user