Merge git://git.denx.de/u-boot-x86

This commit is contained in:
Tom Rini
2018-10-22 13:56:10 -04:00
13 changed files with 111 additions and 45 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -20,6 +20,7 @@ _start:
call board_init_f_init_reserve
xor %rdi, %rdi
call board_init_f
call board_init_f_r

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;