Stefan Reinauer (stefan.reinauer(a)coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2147
-gerrit
commit 2d7f0ce3c5a9d718104c77619a1d9fb3ec9eae7d
Author: Stefan Reinauer <stefan.reinauer(a)coreboot.org>
Date: Mon Jan 14 16:08:10 2013 -0800
make crossgcc: compile all required toolchains
The ARMv7 toolchain is now also needed for abuild (at least
if you want to be able to compile ARM images)
Change-Id: If1253203a2198f7dea632ba45540222ba3361932
Signed-off-by: Stefan Reinauer <reinauer(a)google.com>
---
util/crossgcc/Makefile | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/util/crossgcc/Makefile b/util/crossgcc/Makefile
index b63cc06..da3b36b 100644
--- a/util/crossgcc/Makefile
+++ b/util/crossgcc/Makefile
@@ -1,11 +1,13 @@
all: build
build:
- bash ./buildgcc -G
+ bash ./buildgcc -G -p i386-elf
+ bash ./buildgcc -G -p armv7a-eabi
.PHONY: build-without-gdb
build-without-gdb:
- bash ./buildgcc
+ bash ./buildgcc -p i386-elf
+ bash ./buildgcc -p armv7a-eabi
clean:
rm -rf xgcc
David Hendricks (dhendrix(a)chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2138
-gerrit
commit 4d6f5a90f836c83ea58c035c6f8ce81c75672c03
Author: David Hendricks <dhendrix(a)chromium.org>
Date: Fri Jan 11 11:34:06 2013 -0800
bootblock_cpu_init() stub for exynos5250
This adds a stub for bootblock_cpu_init() for exynos5250. It will
eventually contain code to copy ROM content from SPI to SRAM.
Change-Id: I26ee62a1e701013f38f76f200579faa680530860
Signed-off-by: David Hendricks <dhendrix(a)chromium.org>
---
src/cpu/samsung/exynos5250/Kconfig | 6 +++---
src/cpu/samsung/exynos5250/bootblock.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/src/cpu/samsung/exynos5250/Kconfig b/src/cpu/samsung/exynos5250/Kconfig
index a334b63..cd20153 100644
--- a/src/cpu/samsung/exynos5250/Kconfig
+++ b/src/cpu/samsung/exynos5250/Kconfig
@@ -8,10 +8,10 @@ config BOOTBLOCK_OFFSET
this value is pre-determined by the vendor-provided BL1.
config BOOTBLOCK_CPU_INIT
- bool
- default n
+ string
+ default "cpu/samsung/exynos5250/bootblock.c"
help
- Run CPU/SoC-specific bootblock code. This is useful if the
+ CPU/SoC-specific bootblock code. This is useful if the
bootblock must load microcode or copy data from ROM before
searching for the bootblock.
diff --git a/src/cpu/samsung/exynos5250/bootblock.c b/src/cpu/samsung/exynos5250/bootblock.c
new file mode 100644
index 0000000..58d0919
--- /dev/null
+++ b/src/cpu/samsung/exynos5250/bootblock.c
@@ -0,0 +1,32 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 The Chromium OS Authors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+void bootblock_cpu_init(void);
+void bootblock_cpu_init(void)
+{
+ /*
+ * FIXME: this is a stub for now. It should eventually copy
+ * romstage data (and maybe more) from SPI to SRAM.
+ */
+#if 0
+ volatile unsigned long *addr = (unsigned long *)0x1004330c;
+ *addr |= 0x100;
+ while (1) ;
+#endif
+}
David Hendricks (dhendrix(a)chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2118
-gerrit
commit 290f7bdbc425cf648574ecbcc35589c75cd4108d
Author: David Hendricks <dhendrix(a)chromium.org>
Date: Tue Jan 8 21:05:06 2013 -0800
ARM bootblock approach (incomplete)
Do not attempt to commit, just making this available so it doesn't get lost
Change-Id: I9cc2a8191d2db38b27b6363ba673e5a360de9684
Signed-off-by: Stefan Reinauer <reinauer(a)google.com>
Signed-off-by: David Hendricks <dhendrix(a)chromium.org>
---
src/arch/armv7/Makefile.inc | 26 +++++------
src/arch/armv7/bootblock.inc | 7 +--
src/arch/armv7/bootblock.lds | 49 +++++++++++++++++++++
src/arch/armv7/bootblock_simple.c | 34 +++++++--------
src/arch/armv7/include/arch/cbfs.h | 68 +++++++++++++++++++++++++++++
src/arch/armv7/include/bootblock_common.h | 71 ++++---------------------------
src/arch/armv7/lib/id.lds | 2 +-
src/cpu/samsung/exynos5250/Kconfig | 12 +++++-
8 files changed, 164 insertions(+), 105 deletions(-)
diff --git a/src/arch/armv7/Makefile.inc b/src/arch/armv7/Makefile.inc
index 4cb97a6..b783ac6 100644
--- a/src/arch/armv7/Makefile.inc
+++ b/src/arch/armv7/Makefile.inc
@@ -49,7 +49,7 @@ prebuilt-files = $(foreach file,$(cbfs-files), $(call extract_nth,1,$(file)))
$(obj)/coreboot.pre1: $(objcbfs)/bootblock.bin $$(prebuilt-files) $(CBFSTOOL)
$(CBFSTOOL) $@.tmp create -m armv7 -s $(CONFIG_COREBOOT_ROMSIZE_KB)K \
-B $(objcbfs)/bootblock.bin -a 64 \
- -o $$(( $(CONFIG_ROM_SIZE) - $(CONFIG_CBFS_SIZE) ))
+ -o $(CONFIG_BOOTBLOCK_OFFSET)
$(prebuild-files) true
mv $@.tmp $@
else
@@ -149,7 +149,6 @@ CFLAGS += \
# For various headers imported from Linux
CFLAGS += -D__LINUX_ARM_ARCH__=7
-crt0s = $(src)/arch/armv7/bootblock.inc
ldscripts =
ldscripts += $(src)/arch/armv7/romstage.ld
@@ -223,19 +222,14 @@ $(obj)/coreboot.pre: $(objcbfs)/romstage_xip.elf $(obj)/coreboot.pre1 $(CBFSTOOL
################################################################################
# Build the bootblock
-#bootblock_lds = $(src)/arch/armv7/ldscript_fallback_cbfs.lb
-bootblock_lds = $(src)/arch/armv7/lib/id.lds
-#bootblock_lds = $(src)/arch/armv7/romstage.ld
+bootblock_lds = $(src)/arch/armv7/bootblock.lds
+bootblock_lds += $(src)/arch/armv7/lib/id.lds
bootblock_lds += $(chipset_bootblock_lds)
+bootblock_inc += $(src)/arch/armv7/bootblock.inc
bootblock_inc += $(src)/arch/armv7/lib/id.inc
bootblock_inc += $(chipset_bootblock_inc)
-
-# FIXME: CONFIG_NEON or something similar for ARM?
-#ifeq ($(CONFIG_SSE),y)
-#bootblock_inc += $(src)/cpu/x86/sse_enable.inc
-#endif
-#bootblock_inc += $(objgenerated)/bootblock.inc
+bootblock_inc += $(objgenerated)/bootblock.inc
$(objgenerated)/bootblock.ld: $$(bootblock_lds) $(obj)/ldoptions
@printf " GEN $(subst $(obj)/,,$(@))\n"
@@ -253,11 +247,11 @@ $(objgenerated)/bootblock.s: $(objgenerated)/bootblock_inc.S $(obj)/config.h $(o
@printf " CC $(subst $(obj)/,,$(@))\n"
$(CC) -MMD -x assembler-with-cpp -E -I$(src)/include -I$(src)/arch/armv7/include -I$(obj) -include $(obj)/build.h -include $(obj)/config.h -I. -I$(src) $< -o $@
-#$(objgenerated)/bootblock.inc: $(src)/arch/armv7/init/$(subst ",,$(CONFIG_BOOTBLOCK_SOURCE)) $(objutil)/romcc/romcc $(OPTION_TABLE_H)
-# @printf " ROMCC $(subst $(obj)/,,$(@))\n"
-# $(CC) $(INCLUDES) -MM -MT$(objgenerated)/bootblock.inc \
-# $< > $(objgenerated)/bootblock.inc.d
-# $(ROMCC) -c -S $(bootblock_romccflags) $(ROMCCFLAGS) -I. $(INCLUDES) $< -o $@
+$(objgenerated)/bootblock.inc: $(src)/arch/armv7/$(subst ",,$(CONFIG_BOOTBLOCK_SOURCE)) $(OPTION_TABLE_H)
+ @printf " CC $(subst $(obj)/,,$(@))\n"
+ $(CC) $(INCLUDES) -MM -MT$(objgenerated)/bootblock.inc \
+ $< > $(objgenerated)/bootblock.inc.d
+ $(CC) -c -S $(CFLAGS) -I. $(INCLUDES) $< -o $@
$(objcbfs)/bootblock.debug: $(objgenerated)/bootblock.o $(objgenerated)/bootblock.ld
@printf " LINK $(subst $(obj)/,,$(@))\n"
diff --git a/src/arch/armv7/bootblock.inc b/src/arch/armv7/bootblock.inc
index f76391b..90850d6 100644
--- a/src/arch/armv7/bootblock.inc
+++ b/src/arch/armv7/bootblock.inc
@@ -36,8 +36,7 @@ _bl1:
* on ARM, which is 8KB in size and it is prepended to the
* reset vector
*/
- /* this comes a bit later. */
-// .skip 8192
+ .skip 8192
.globl _start
_start: b reset
@@ -81,10 +80,6 @@ call_bootblock:
* Thumb. However, "b" will not and GCC may attempt to create a
* wrapper which is currently broken.
*/
- /* for now call board_init_f; change later. We're trying to get as much into ToT as
- * we can
- */
- bl board_init_f
bl main
wait_for_interrupt:
diff --git a/src/arch/armv7/bootblock.lds b/src/arch/armv7/bootblock.lds
new file mode 100644
index 0000000..90e37a0
--- /dev/null
+++ b/src/arch/armv7/bootblock.lds
@@ -0,0 +1,49 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008-2010 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* We use ELF as output format. So that we can debug the code in some form. */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+
+TARGET(binary)
+SECTIONS
+{
+ ROMLOC = 0x2023400 - 8192;
+
+ /* This section might be better named .setup */
+ .rom ROMLOC : {
+ _rom = .;
+ *(.text);
+ *(.text.*);
+ *(.rom.text);
+ *(.rom.data);
+ *(.rom.data.*);
+ *(.rodata.*);
+ _erom = .;
+ } = 0xff
+
+ /DISCARD/ : {
+ *(.comment)
+ *(.note)
+ *(.comment.*)
+ *(.note.*)
+ *(.ARM.*)
+ }
+}
diff --git a/src/arch/armv7/bootblock_simple.c b/src/arch/armv7/bootblock_simple.c
index f447a29..c10ee1f 100644
--- a/src/arch/armv7/bootblock_simple.c
+++ b/src/arch/armv7/bootblock_simple.c
@@ -19,33 +19,31 @@
* MA 02110-1301 USA
*/
-
-
#include <bootblock_common.h>
+#include <arch/cbfs.h>
+#include <arch/hlt.h>
-
-#include "../../lib/uart8250.c"
-#include "lib/div.c"
-
-struct uart8250 uart = {
- 115200
-};
+static int boot_cpu(void)
+{
+ /*
+ * FIXME: This is a stub for now. All non-boot CPUs should be
+ * waiting for an interrupt. We could move the chunk of assembly
+ * which puts them to sleep in here...
+ */
+ return 1;
+}
void main(unsigned long bist)
{
- init_uart8250(CONFIG_TTYS0_BASE, &uart);
- uart8250_tx_byte(CONFIG_TTYS0_BASE, '@');
+ const char *target1 = "fallback/romstage";
+ unsigned long entry;
if (boot_cpu()) {
- bootblock_cpu_init();
- bootblock_northbridge_init();
- bootblock_southbridge_init();
+ bootblock_mainboard_init();
}
- const char* target1 = "fallback/romstage";
- unsigned long entry;
+
entry = findstage(target1);
- if (entry) call(entry, bist);
+ if (entry) call(entry);
hlt();
}
-
diff --git a/src/arch/armv7/include/arch/cbfs.h b/src/arch/armv7/include/arch/cbfs.h
new file mode 100644
index 0000000..afcfa6a
--- /dev/null
+++ b/src/arch/armv7/include/arch/cbfs.h
@@ -0,0 +1,68 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2012 The ChromiumOS Authors. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __INCLUDE_ARCH_CBFS__
+#define __INCLUDE_ARCH_CBFS__
+
+#include <string.h>
+#include <types.h>
+#include <cbfs_core.h>
+#include <arch/byteorder.h>
+#include <arch/cbfs.h>
+
+static int cbfs_check_magic(struct cbfs_file *file)
+{
+ return !strcmp(file->magic, CBFS_FILE_MAGIC) ? 1 : 0;
+}
+
+static unsigned long findstage(const char* target)
+{
+ unsigned long offset;
+ void *ptr = (void *)*((unsigned long *) CBFS_HEADPTR_ADDR);
+ struct cbfs_header *header = (struct cbfs_header *) ptr;
+ // if (ntohl(header->magic) != CBFS_HEADER_MAGIC)
+ // printk(BIOS_ERR, "ERROR: No valid CBFS header found!\n");
+
+ /* FIXME(dhendrix,reinauer): should this be ntohl(header->offset)? */
+ offset = 0 - ntohl(header->romsize) + ntohl(header->offset);
+ int align = ntohl(header->align);
+ while(1) {
+ struct cbfs_file *file = (struct cbfs_file *) offset;
+ if (!cbfs_check_magic(file))
+ return 0;
+ if (!strcmp(CBFS_NAME(file), target))
+ return (unsigned long)CBFS_SUBHEADER(file);
+ int flen = ntohl(file->len);
+ int foffset = ntohl(file->offset);
+ unsigned long oldoffset = offset;
+ offset = ALIGN(offset + foffset + flen, align);
+ if (offset <= oldoffset)
+ return 0;
+ /* FIXME(dhendrix,reinauer): calculate the limit correctly */
+ if (offset < 0xFFFFFFFF - ntohl(header->romsize))
+ return 0;
+ }
+}
+
+static inline void call(unsigned long addr)
+{
+ void (*doit)(void) = (void *)addr;
+ doit();
+}
+#endif
diff --git a/src/arch/armv7/include/bootblock_common.h b/src/arch/armv7/include/bootblock_common.h
index f5c7129..39af453 100644
--- a/src/arch/armv7/include/bootblock_common.h
+++ b/src/arch/armv7/include/bootblock_common.h
@@ -1,69 +1,14 @@
-#include <types.h>
-#include <cbfs.h>
-#include <string.h>
-#include <arch/byteorder.h>
-
-
-#define boot_cpu(x) 1
-
#ifdef CONFIG_BOOTBLOCK_CPU_INIT
#include CONFIG_BOOTBLOCK_CPU_INIT
-#else
-static void bootblock_cpu_init(void) { }
-#endif
-#ifdef CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT
-#include CONFIG_BOOTBLOCK_NORTHBRIDGE_INIT
-#else
-static void bootblock_northbridge_init(void) { }
#endif
-#ifdef CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT
-#include CONFIG_BOOTBLOCK_SOUTHBRIDGE_INIT
-#else
-static void bootblock_southbridge_init(void) { }
-#endif
-
-static int cbfs_check_magic(struct cbfs_file *file)
-{
- return !strcmp(file->magic, CBFS_FILE_MAGIC) ? 1 : 0;
-}
-
-static unsigned long findstage(const char* target)
-{
- unsigned long offset;
-
- void *ptr = (void *)*((unsigned long *) CBFS_HEADPTR_ADDR);
- struct cbfs_header *header = (struct cbfs_header *) ptr;
- // if (ntohl(header->magic) != CBFS_HEADER_MAGIC)
- // printk(BIOS_ERR, "ERROR: No valid CBFS header found!\n");
-
- offset = 0 - ntohl(header->romsize) + ntohl(header->offset);
- int align = ntohl(header->align);
- while(1) {
- struct cbfs_file *file = (struct cbfs_file *) offset;
- if (!cbfs_check_magic(file))
- return 0;
- if (!strcmp(CBFS_NAME(file), target))
- return (unsigned long)CBFS_SUBHEADER(file);
- int flen = ntohl(file->len);
- int foffset = ntohl(file->offset);
- unsigned long oldoffset = offset;
- offset = ALIGN(offset + foffset + flen, align);
- if (offset <= oldoffset)
- return 0;
- if (offset < 0xFFFFFFFF - ntohl(header->romsize))
- return 0;
- }
-}
-
-
-static void call(unsigned long addr, unsigned long bist)
-{
- asm volatile ("mov r0, %1\nbx %0\n" : : "r" (addr), "r" (bist));
-}
-static void hlt(void)
+#ifdef CONFIG_BOOTBLOCK_MAINBOARD_INIT
+#include CONFIG_BOOTBLOCK_MAINBOARD_INIT
+#else
+static void bootblock_mainboard_init(void)
{
- /* is there such a thing as hlt on ARM? */
- // asm volatile ("1:\n\thlt\n\tjmp 1b\n\t");
- asm volatile ("1:\nb 1b\n\t");
+#ifdef CONFIG_BOOTBLOCK_CPU_INIT
+ bootblock_cpu_init();
+#endif
}
+#endif
diff --git a/src/arch/armv7/lib/id.lds b/src/arch/armv7/lib/id.lds
index 9e31ee6..22b4a02 100644
--- a/src/arch/armv7/lib/id.lds
+++ b/src/arch/armv7/lib/id.lds
@@ -1,5 +1,5 @@
SECTIONS {
- . = (0x100000000 - CONFIG_ID_SECTION_OFFSET) - (__id_end - __id_start);
+ . = (0x2024000) - (__id_end - __id_start);
.id (.): {
*(.id)
}
diff --git a/src/cpu/samsung/exynos5250/Kconfig b/src/cpu/samsung/exynos5250/Kconfig
index 360c57f..a334b63 100644
--- a/src/cpu/samsung/exynos5250/Kconfig
+++ b/src/cpu/samsung/exynos5250/Kconfig
@@ -1,10 +1,20 @@
+# FIXME: shouldn't this be 0x3400? Or maybe the bootblock in ROM needs
+# to follow the BL1 image, but in SRAM it needs to be at 0x3400? Hm...
config BOOTBLOCK_OFFSET
hex "Bootblock offset"
- default 0x3400
+ default 0x2000
help
This is where the Coreboot bootblock resides. For Exynos5250,
this value is pre-determined by the vendor-provided BL1.
+config BOOTBLOCK_CPU_INIT
+ bool
+ default n
+ help
+ Run CPU/SoC-specific bootblock code. This is useful if the
+ bootblock must load microcode or copy data from ROM before
+ searching for the bootblock.
+
config EXYNOS_ACE_SHA
bool
default n
the following patch was just integrated into master:
commit 816e9d1f0e1d317e360e26a43dfb6b7d36c2a514
Author: Stefan Reinauer <reinauer(a)chromium.org>
Date: Mon Jan 14 10:25:43 2013 -0800
Support for Celeron 1007U
Change-Id: I6b96b0e387dc3e6985eb1476fea612772a2288bc
Signed-off-by: Stefan Reinauer <reinauer(a)google.com>
Reviewed-on: http://review.coreboot.org/2145
Reviewed-by: Ronald G. Minnich <rminnich(a)gmail.com>
Tested-by: build bot (Jenkins)
Reviewed-by: Martin Roth <martin(a)se-eng.com>
Build-Tested: build bot (Jenkins) at Mon Jan 14 19:34:02 2013, giving +1
See http://review.coreboot.org/2145 for details.
-gerrit
Stefan Reinauer (stefan.reinauer(a)coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2095
-gerrit
commit 5304a2d953756f085165046105c909cc0d298cff
Author: David Hendricks <dhendrix(a)chromium.org>
Date: Wed Jan 2 17:48:49 2013 -0800
armv7: invoke intermediate build rules
This adds $$(INTERMEDIATE) as a pre-requisite for coreboot.rom on
armv7. It is modeled after the $(obj)/coreboot.rom rule for x86.
Change-Id: I483a88035fa2288829b6e042e51ef932c8c4f23c
Signed-off-by: David Hendricks <dhendrix(a)chromium.org>
---
src/arch/armv7/Makefile.inc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/arch/armv7/Makefile.inc b/src/arch/armv7/Makefile.inc
index 4cb97a6..caa6375 100644
--- a/src/arch/armv7/Makefile.inc
+++ b/src/arch/armv7/Makefile.inc
@@ -58,7 +58,7 @@ $(obj)/coreboot.pre1: $(CBFSTOOL)
mv $(obj)/coreboot.rom $@
endif
-$(obj)/coreboot.rom: $(obj)/coreboot.pre $(objcbfs)/coreboot_ram.elf $(CBFSTOOL) $(call strip_quotes,$(COREBOOT_ROM_DEPENDENCIES))
+$(obj)/coreboot.rom: $(obj)/coreboot.pre $(objcbfs)/coreboot_ram.elf $(CBFSTOOL) $(call strip_quotes,$(COREBOOT_ROM_DEPENDENCIES)) $$(INTERMEDIATE)
@printf " CBFS $(subst $(obj)/,,$(@))\n"
cp $(obj)/coreboot.pre $@.tmp
if [ -f $(objcbfs)/coreboot_ap.elf ]; \