summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/allwinner/a10/Kconfig36
-rw-r--r--src/cpu/allwinner/a10/cpu.c3
-rw-r--r--src/cpu/allwinner/a10/ram_segs.h3
-rw-r--r--src/cpu/ti/am335x/Kconfig32
-rw-r--r--src/cpu/ti/am335x/Makefile.inc10
-rw-r--r--src/cpu/ti/am335x/bootblock_media.c6
-rw-r--r--src/cpu/ti/am335x/cbmem.c3
-rw-r--r--src/cpu/ti/am335x/header.c3
-rw-r--r--src/cpu/ti/am335x/header.ld13
-rw-r--r--src/cpu/ti/am335x/memlayout.ld42
-rw-r--r--src/cpu/x86/lapic/lapic_cpu_init.c1
-rw-r--r--src/cpu/x86/mp_init.c1
-rw-r--r--src/cpu/x86/smm/smm.ld4
-rw-r--r--src/cpu/x86/smm/smm_tseg.ld2
14 files changed, 70 insertions, 89 deletions
diff --git a/src/cpu/allwinner/a10/Kconfig b/src/cpu/allwinner/a10/Kconfig
index e38227b755..191e45d54c 100644
--- a/src/cpu/allwinner/a10/Kconfig
+++ b/src/cpu/allwinner/a10/Kconfig
@@ -15,11 +15,6 @@ config CPU_SPECIFIC_OPTIONS
select BOOTBLOCK_CONSOLE
select CPU_HAS_BOOTBLOCK_INIT
-# The "eGON.BT0" header takes 32 bytes
-config BOOTBLOCK_BASE
- hex
- default 0x20
-
config BOOTBLOCK_ROM_OFFSET
hex
default 0x00
@@ -36,41 +31,10 @@ config CBFS_HEADER_ROM_OFFSET
config CBFS_ROM_OFFSET
default 0x5fc0
-# Arbitrarily chosen to be at the base of SDRAM
-config RAMSTAGE_BASE
- hex
- default SYS_SDRAM_BASE
-
-# 16 MiB above ramstage, so there is no overlap
-config ROMSTAGE_BASE
- hex
- default 0x41000000
-
-# Keep the stack in SRAM block A2.
-# SRAM blocks A1 (0-16KiB) and A2 (16KiB-32KiB) are always accessible to the
-# CPU. This gives us 32KiB of SRAM to boot with. The BROM bootloader will use up
-# to 24KiB to load our bootblock, which leaves us the area from 24KiB to 32KiB
-# to use however we see fit.
-config STACK_TOP
- hex
- default 0x00008000
-
-config STACK_BOTTOM
- hex
- default 0x00006000
-
-config STACK_SIZE
- hex
- default 0x00002000
-
## TODO Change this to some better address not overlapping bootblock when
## cbfstool supports creating header in arbitrary location.
config CBFS_HEADER_ROM_OFFSET
hex "offset of master CBFS header in ROM"
default 0x40
-config SYS_SDRAM_BASE
- hex
- default 0x40000000
-
endif # if CPU_ALLWINNER_A10
diff --git a/src/cpu/allwinner/a10/cpu.c b/src/cpu/allwinner/a10/cpu.c
index 3159f20422..c2cbc2fadd 100644
--- a/src/cpu/allwinner/a10/cpu.c
+++ b/src/cpu/allwinner/a10/cpu.c
@@ -9,11 +9,12 @@
#include <device/device.h>
#include <cpu/cpu.h>
#include <cbmem.h>
+#include <symbols.h>
static void cpu_enable_resources(struct device *dev)
{
- ram_resource(dev, 0, CONFIG_SYS_SDRAM_BASE >> 10,
+ ram_resource(dev, 0, (uintptr_t)_dram/KiB,
CONFIG_DRAM_SIZE_MB << 10);
/* TODO: Declare CBFS cache as reserved? There's no guarantee we won't
* overwrite it. It seems to stay intact, being so high in RAM
diff --git a/src/cpu/allwinner/a10/ram_segs.h b/src/cpu/allwinner/a10/ram_segs.h
index 45141fe5c0..26944e4a22 100644
--- a/src/cpu/allwinner/a10/ram_segs.h
+++ b/src/cpu/allwinner/a10/ram_segs.h
@@ -6,13 +6,14 @@
*/
#include <config.h>
+#include <symbols.h>
/*
* Put CBMEM at top of RAM
*/
static inline void *a1x_get_cbmem_top(void)
{
- return (void *)CONFIG_SYS_SDRAM_BASE + (CONFIG_DRAM_SIZE_MB << 20);
+ return _dram + (CONFIG_DRAM_SIZE_MB << 20);
}
/*
diff --git a/src/cpu/ti/am335x/Kconfig b/src/cpu/ti/am335x/Kconfig
index b2c692b9e9..c0554b8df1 100644
--- a/src/cpu/ti/am335x/Kconfig
+++ b/src/cpu/ti/am335x/Kconfig
@@ -12,46 +12,14 @@ config CPU_TI_AM335X
if CPU_TI_AM335X
-config BOOTBLOCK_BASE
- hex
- default 0x402f0400
-
config CBFS_ROM_OFFSET
# Calculated by BL1 + max bootblock size.
default 0x4c00
-# We need to leave a gap between the bootblock and the ROM stage so that when
-# it is "loaded" to a slightly different place in on chip memory, it doesn't
-# clobber the metadata needed to actually enter it.
-config ROMSTAGE_BASE
- hex
- default 0x402f5400
-
-# Stack may reside in either IRAM or DRAM. We will define it to live
-# at the top of IRAM for now.
-#
-# Stack grows downward, push operation stores register contents in
-# consecutive memory locations ending just below SP
-config STACK_TOP
- hex
- default 0x4030ce00
-
-config STACK_BOTTOM
- hex
- default 0x4030be00
-
-config STACK_SIZE
- hex
- default 0x1000
-
## TODO Change this to some better address not overlapping bootblock when
## cbfstool supports creating header in arbitrary location.
config CBFS_HEADER_ROM_OFFSET
hex "offset of master CBFS header in ROM"
default 0x40
-config SYS_SDRAM_BASE
- hex
- default 0x40000000
-
endif
diff --git a/src/cpu/ti/am335x/Makefile.inc b/src/cpu/ti/am335x/Makefile.inc
index 45188ce4a6..1dbadae924 100644
--- a/src/cpu/ti/am335x/Makefile.inc
+++ b/src/cpu/ti/am335x/Makefile.inc
@@ -23,14 +23,14 @@ $(eval $(call create_class_compiler,omap-header,arm))
real-target: $(obj)/MLO
-header_ld = $(src)/cpu/ti/am335x/header.ld
+header_ld = $(obj)/cpu/ti/am335x/header.omap-header.ld
get_header_size= \
$(eval omap_header_info=$(shell $(CBFSTOOL) $(1) print | grep $(2))) \
$(shell echo $$(($(word 2,$(omap_header_info)) + \
$(word 4,$(omap_header_info)))))
-$(obj)/omap-header.bin: $$(omap-header-objs) $$(header_ld) $(obj)/coreboot.rom
+$(obj)/omap-header.bin: $$(omap-header-objs) $(obj)/coreboot.rom
@printf " CC $(subst $(obj)/,,$(@))\n"
$(CC_omap-header) -nostdlib -nostartfiles -static -include $(obj)/config.h \
-Wl,--defsym,header_load_size=$(strip \
@@ -46,3 +46,9 @@ $(obj)/MLO: $(obj)/coreboot.rom $(obj)/omap-header.bin
$(Q)cat $(obj)/omap-header.bin $(obj)/coreboot.rom > $@
omap-header-y += header.c
+
+bootblock-y += memlayout.ld
+romstage-y += memlayout.ld
+ramstage-y += memlayout.ld
+omap-header-y += memlayout.ld
+omap-header-y += header.ld
diff --git a/src/cpu/ti/am335x/bootblock_media.c b/src/cpu/ti/am335x/bootblock_media.c
index 553fe42e4d..93a2d185e8 100644
--- a/src/cpu/ti/am335x/bootblock_media.c
+++ b/src/cpu/ti/am335x/bootblock_media.c
@@ -20,6 +20,7 @@
#include <cbfs.h>
#include <console/console.h>
#include <string.h>
+#include <symbols.h>
static int dummy_open(struct cbfs_media *media)
{
@@ -34,7 +35,7 @@ static int dummy_close(struct cbfs_media *media)
static void * on_chip_memory_map(struct cbfs_media *media, size_t offset,
size_t count)
{
- return (void *)((uintptr_t)CONFIG_BOOTBLOCK_BASE + offset);
+ return _dram + offset;
}
static void * dummy_unmap(struct cbfs_media *media, const void *address)
@@ -54,8 +55,7 @@ static size_t on_chip_memory_read(struct cbfs_media *media, void *dest,
int init_default_cbfs_media(struct cbfs_media *media)
{
struct cbfs_header *header =
- (struct cbfs_header *)((uintptr_t)CONFIG_BOOTBLOCK_BASE +
- CONFIG_CBFS_HEADER_ROM_OFFSET);
+ (struct cbfs_header *)(_dram + CONFIG_CBFS_HEADER_ROM_OFFSET);
if (CBFS_HEADER_MAGIC != ntohl(header->magic)) {
printk(BIOS_ERR, "Invalid CBFS master header at %p\n", header);
diff --git a/src/cpu/ti/am335x/cbmem.c b/src/cpu/ti/am335x/cbmem.c
index 84f88cfa83..af662c039c 100644
--- a/src/cpu/ti/am335x/cbmem.c
+++ b/src/cpu/ti/am335x/cbmem.c
@@ -17,8 +17,9 @@
#include <stddef.h>
#include <cbmem.h>
+#include <symbols.h>
void *cbmem_top(void)
{
- return (void *)CONFIG_SYS_SDRAM_BASE + (CONFIG_DRAM_SIZE_MB << 20);
+ return _dram + (CONFIG_DRAM_SIZE_MB << 20);
}
diff --git a/src/cpu/ti/am335x/header.c b/src/cpu/ti/am335x/header.c
index 5ed943edeb..9fa8d68df0 100644
--- a/src/cpu/ti/am335x/header.c
+++ b/src/cpu/ti/am335x/header.c
@@ -20,6 +20,7 @@
#include <config.h>
#include <stddef.h>
#include <stdint.h>
+#include <symbols.h>
#include "header.h"
@@ -70,6 +71,6 @@ struct omap_image_headers headers __attribute__((section(".header"))) = {
},
.image_header = {
.size = (uintptr_t)&header_load_size,
- .destination = CONFIG_BOOTBLOCK_BASE
+ .destination = (uintptr_t)_dram
}
};
diff --git a/src/cpu/ti/am335x/header.ld b/src/cpu/ti/am335x/header.ld
index 33c10e198c..559c497238 100644
--- a/src/cpu/ti/am335x/header.ld
+++ b/src/cpu/ti/am335x/header.ld
@@ -21,14 +21,5 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
-TARGET(binary)
-SECTIONS
-{
- .header : {
- *(.header);
- }
-
- /DISCARD/ : {
- *(*)
- }
-}
+#define OMAP_HEADER 1
+#include "memlayout.ld"
diff --git a/src/cpu/ti/am335x/memlayout.ld b/src/cpu/ti/am335x/memlayout.ld
new file mode 100644
index 0000000000..f87f000524
--- /dev/null
+++ b/src/cpu/ti/am335x/memlayout.ld
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * 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
+ */
+
+#include <memlayout.h>
+
+#include <arch/header.ld>
+
+SECTIONS
+{
+ DRAM_START(0x40000000)
+ BOOTBLOCK(0x402f0400, 20K)
+ ROMSTAGE(0x402f5400, 90K)
+ STACK(0x4030be00, 4K)
+ RAMSTAGE(0x80200000, 192K)
+
+#ifdef OMAP_HEADER
+ .header : {
+ *(.header);
+ } : to_load
+
+ /DISCARD/ : {
+ *(*)
+ }
+#endif
+}
+
diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c
index 472d6edf60..d4a9884fad 100644
--- a/src/cpu/x86/lapic/lapic_cpu_init.c
+++ b/src/cpu/x86/lapic/lapic_cpu_init.c
@@ -27,6 +27,7 @@
#include <halt.h>
#include <lib.h>
#include <string.h>
+#include <symbols.h>
#include <console/console.h>
#include <device/device.h>
#include <device/path.h>
diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c
index 3e293f60c4..a5bbb98520 100644
--- a/src/cpu/x86/mp_init.c
+++ b/src/cpu/x86/mp_init.c
@@ -39,6 +39,7 @@
#include <lib.h>
#include <smp/atomic.h>
#include <smp/spinlock.h>
+#include <symbols.h>
#include <thread.h>
#define MAX_APIC_IDS 256
diff --git a/src/cpu/x86/smm/smm.ld b/src/cpu/x86/smm/smm.ld
index c1981610b8..6d33fbe984 100644
--- a/src/cpu/x86/smm/smm.ld
+++ b/src/cpu/x86/smm/smm.ld
@@ -11,6 +11,7 @@ SECTIONS
*/
. = 0xa0000;
.handler (.): {
+ _program = .;
/* Assembler stub */
*(.handler)
@@ -35,9 +36,10 @@ SECTIONS
*(.sbss)
*(.sbss.*)
- /* What is this? */
+ /* What is this? (Something we don't need with -fno-common.) */
*(COMMON)
. = ALIGN(4);
+ _eprogram = .;
}
/* We are using the ASEG interleaved to stuff the SMM handlers
diff --git a/src/cpu/x86/smm/smm_tseg.ld b/src/cpu/x86/smm/smm_tseg.ld
index b57461caa0..4dedd2c436 100644
--- a/src/cpu/x86/smm/smm_tseg.ld
+++ b/src/cpu/x86/smm/smm_tseg.ld
@@ -31,6 +31,7 @@ SECTIONS
/* 16KB for the heap at 64KB */
. = 0x10000;
.heap : {
+ _program = .;
_heap = .;
. = 0x4000;
_eheap = .;
@@ -65,6 +66,7 @@ SECTIONS
. = ALIGN(4);
_smm_c_handler_end = .;
+ _eprogram = .;
}
/DISCARD/ : {