summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Compostella <jeremy.compostella@intel.com>2014-08-14 13:17:40 +0200
committerPatrick Tjin <pattjin@google.com>2014-08-18 21:46:19 -0700
commit36612706911843b4b900f8760003a8cc728d39d3 (patch)
treea931998cf2b0e2d80cc2da5ef1f5454dd77bedda
parentb3e251696962a9d1581c6975914eb6c33a61f641 (diff)
downloadbootstub-36612706911843b4b900f8760003a8cc728d39d3.tar.gz
fix cpuid asm instruction call
This patch cfixes some compilation warning and clean the Android.mk a little bit. Bug: 16928801 Change-Id: Icc277c0871cce83e183a109cfe24daf6e5ad8fab Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
-rw-r--r--Android.mk35
-rw-r--r--Makefile47
-rw-r--r--bootstub.c34
3 files changed, 26 insertions, 90 deletions
diff --git a/Android.mk b/Android.mk
index e90bb6c..8a70a83 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,16 +1,18 @@
LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_BOARD_PLATFORM),moorefield)
-
-include $(CLEAR_VARS)
-# First compile bootstub.bin
+ifeq ($(TARGET_BOARD_PLATFORM),moorefield)
CMDLINE_SIZE ?= 0x400
BOOTSTUB_SIZE ?= 8192
-LOCAL_CC := gcc
-LOCAL_SRC_FILES := bootstub.c head.S e820_bios.S sfi.c ssp-uart.c imr_toc.c spi-uart.c
+BOOTSTUB_SRC_FILES := bootstub.c sfi.c ssp-uart.c imr_toc.c spi-uart.c
+BOOTSTUB_SRC_FILES_x86 := head.S e820_bios.S
+
+include $(CLEAR_VARS)
+
+# bootstub.bin
+LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES)
+LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86)
ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding
LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE}
LOCAL_MODULE := bootstub.bin
@@ -20,15 +22,13 @@ LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_FORCE_STATIC_EXECUTABLE := true
-head.o : PRIVATE_CFLAGS := -D__ASSEMBLY__
-
include $(BUILD_SYSTEM)/binary.mk
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS)
$(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf
$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/bootstub.lds
$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES))
-$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.S, %.o , $(BOOTSTUB_OBJS))
+$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86))
$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS))
$(LOCAL_BUILT_MODULE): $(all_objects)
@@ -42,7 +42,6 @@ $(LOCAL_BUILT_MODULE): $(all_objects)
$(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@
# Then assemble the final bootstub file
-
bootstub_bin := $(PRODUCT_OUT)/bootstub.bin
bootstub_full := $(PRODUCT_OUT)/bootstub
@@ -60,10 +59,9 @@ $(bootstub_full) : CHECK_BOOTSTUB_SIZE
# build specific bootstub for GPT/AOSP image support
include $(CLEAR_VARS)
-# First compile 2ndbootloader.bin
-
-LOCAL_CC := gcc
-LOCAL_SRC_FILES := bootstub.c head.S e820_bios.S sfi.c ssp-uart.c imr_toc.c spi-uart.c
+# 2ndbootloader.bin
+LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES)
+LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86)
ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding
LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE} -DBUILD_RAMDUMP
LOCAL_MODULE := 2ndbootloader.bin
@@ -72,15 +70,13 @@ LOCAL_MODULE_PATH := $(PRODUCT_OUT)
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_FORCE_STATIC_EXECUTABLE := true
-head.o : PRIVATE_CFLAGS := -D__ASSEMBLY__
-
include $(BUILD_SYSTEM)/binary.mk
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS)
$(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf
$(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/2ndbootloader.lds
$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES))
-$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.S, %.o , $(BOOTSTUB_OBJS))
+$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86))
$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS))
$(LOCAL_BUILT_MODULE): $(all_objects)
@@ -93,8 +89,7 @@ $(LOCAL_BUILT_MODULE): $(all_objects)
-o $(PRIVATE_ELF_FILE)
$(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@
-# Then assemble the final bootstub file
-
+# Then assemble the final 2ndbootloader file
bootstub_aosp_bin := $(PRODUCT_OUT)/2ndbootloader.bin
bootstub_aosp_full := $(PRODUCT_OUT)/2ndbootloader
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 72bb817..0000000
--- a/Makefile
+++ /dev/null
@@ -1,47 +0,0 @@
-OBJ=bootstub.o spi-uart.o head.o sfi.o e820_bios.o ssp-uart.o
-CMDLINE_SIZE ?= 0x400
-CFLAGS=-m32 -ffreestanding -Wall -DCMDLINE_SIZE=${CMDLINE_SIZE}
-CC ?= gcc
-
-all: bootstub
-
-bootstub:bootstub.bin
- cat bootstub.bin /dev/zero | dd bs=4096 count=1 > $@
-
-bootstub.bin:bootstub.elf
- objcopy -O binary -R .note -R .comment -S $< $@
-
-bootstub.elf:bootstub.lds $(OBJ)
- ld -m elf_i386 -T bootstub.lds $(OBJ) -o $@
-
-bootstub.o:bootstub.c bootstub.h
- ${CC} $(CFLAGS) -c bootstub.c
-
-spi-uart.o:spi-uart.c spi-uart.h
- ${CC} $(CFLAGS) -c spi-uart.c
-
-ssp-uart.o:ssp-uart.c ssp-uart.h
- ${CC} $(CFLAGS) -c ssp-uart.c
-
-sfi.o:sfi.c
- ${CC} $(CFLAGS) -c sfi.c
-
-head.o:head.S bootstub.h
- ${CC} $(CFLAGS) -D__ASSEMBLY__ -c head.S
-
-e820_bios.o:e820_bios.S bootstub.h
- ${CC} $(CFLAGS) -D__ASSEMBLY__ -c e820_bios.S
-
-clean:
- rm -rf *.o *.bin *.elf *.bz2 *.rpm
- -rm bootstub
-
-source:bootstub.c head.S VERSION
- git archive --prefix=bootstub-`head -n 1 VERSION | awk '{print $$1}'`/ --format=tar HEAD | bzip2 -c > bootstub-`head -n 1 VERSION | awk '{print $$1}'`.tar.bz2
-
-rpm:source
- cp bootstub.spec /usr/src/redhat/SPECS/
- cp *.tar.bz2 /usr/src/redhat/SOURCES/
- rpmbuild -ba /usr/src/redhat/SPECS/bootstub.spec
- cp /usr/src/redhat/RPMS/i386/bootstub*.rpm ./
-.PHONY: all clean source rpm
diff --git a/bootstub.c b/bootstub.c
index 74b87f9..c968d04 100644
--- a/bootstub.c
+++ b/bootstub.c
@@ -202,27 +202,15 @@ static u32 bzImage_setup(struct boot_params *bp, struct setup_header *sh)
return (((unsigned int)ptr+511)/512)*512;
}
-static int get_32bit_entry(unsigned char *ptr)
+static inline void cpuid(u32 op, u32 regs[4])
{
- while (1){
- if (*(u32 *)ptr == SETUP_SIGNATURE && *(u32 *)(ptr+4) == 0)
- break;
- ptr++;
- }
- ptr+=4;
- return (((unsigned int)ptr+511)/512)*512;
-}
-
-static inline void cpuid(u32 op, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx)
-{
- *eax = op;
- *ecx = 0;
- asm volatile("cpuid"
- : "=a" (*eax),
- "=b" (*ebx),
- "=c" (*ecx),
- "=d" (*edx)
- : "0" (*eax), "2" (*ecx));
+ __asm__ volatile (
+ "mov %%ebx, %%edi\n"
+ "cpuid\n"
+ "xchg %%edi, %%ebx\n"
+ : "=a"(regs[0]), "=D"(regs[1]), "=c"(regs[2]), "=d"(regs[3])
+ : "a"(op)
+ );
}
enum cpuid_regs {
@@ -236,7 +224,7 @@ int mid_identify_cpu(void)
{
u32 regs[4];
- cpuid(1, &regs[CR_EAX], &regs[CR_EBX], &regs[CR_ECX], &regs[CR_EDX]);
+ cpuid(1, regs);
switch ( regs[CR_EAX] & CPUID_MASK ) {
@@ -386,10 +374,10 @@ static u32 xen_multiboot_setup(void)
}
mb.cmdline = (u32)strnchr((char *)CMDLINE_OFFSET, '$', CMDLINE_SIZE) + 1;
- dst = mb.cmdline + strnlen(mb.cmdline, CMDLINE_SIZE) - 1;
+ dst = (char *)mb.cmdline + strnlen((const char *)mb.cmdline, CMDLINE_SIZE) - 1;
*dst = ' ';
dst++;
- src = (const char *)CMDLINE_OFFSET;
+ src = (char *)CMDLINE_OFFSET;
for (i = 0 ;i < strnlen((const char *)CMDLINE_OFFSET, CMDLINE_SIZE);i++) {
if (!strncmp(src, "capfreq=", 8)) {
while (*src != ' ' && *src != 0) {