diff options
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/allwinner/a10/Kconfig | 36 | ||||
-rw-r--r-- | src/cpu/allwinner/a10/cpu.c | 3 | ||||
-rw-r--r-- | src/cpu/allwinner/a10/ram_segs.h | 3 | ||||
-rw-r--r-- | src/cpu/ti/am335x/Kconfig | 32 | ||||
-rw-r--r-- | src/cpu/ti/am335x/Makefile.inc | 10 | ||||
-rw-r--r-- | src/cpu/ti/am335x/bootblock_media.c | 6 | ||||
-rw-r--r-- | src/cpu/ti/am335x/cbmem.c | 3 | ||||
-rw-r--r-- | src/cpu/ti/am335x/header.c | 3 | ||||
-rw-r--r-- | src/cpu/ti/am335x/header.ld | 13 | ||||
-rw-r--r-- | src/cpu/ti/am335x/memlayout.ld | 42 | ||||
-rw-r--r-- | src/cpu/x86/lapic/lapic_cpu_init.c | 1 | ||||
-rw-r--r-- | src/cpu/x86/mp_init.c | 1 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm.ld | 4 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_tseg.ld | 2 |
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/ : { |