diff --git a/src/arch/arm/armv7/bootblock.S b/src/arch/arm/armv7/bootblock.S index f18a3556ba..bac49fea02 100644 --- a/src/arch/arm/armv7/bootblock.S +++ b/src/arch/arm/armv7/bootblock.S @@ -31,17 +31,7 @@ .section ".start", "a", %progbits .globl _start -_start: b reset - .balignl 16,0xdeadbeef - -_cbfs_master_header: - /* The CBFS master header is inserted by cbfstool at the first - * aligned offset after the above anchor string is found. - * Hence, we leave some space for it. - */ - .skip 128 @ Assumes 64-byte alignment - -reset: +_start: /* * Set the cpu to System mode with IRQ and FIQ disabled. Prefetch/Data * aborts may happen early and crash before the abort handlers are diff --git a/src/soc/samsung/exynos5250/Kconfig b/src/soc/samsung/exynos5250/Kconfig index f61da9354c..00d9e81122 100644 --- a/src/soc/samsung/exynos5250/Kconfig +++ b/src/soc/samsung/exynos5250/Kconfig @@ -17,21 +17,22 @@ if CPU_SAMSUNG_EXYNOS5250 # # 0x0000: vendor-provided BL1 (8k). # 0x2000: bootblock -# 0x2010-0x2090: reserved for CBFS master header. -# 0xA000: Free for CBFS data. +# 0x9FFC-0xA000: BL2 checksum +# 0xA000-0xA080: reserved for CBFS master header. +# 0xA080: Free for CBFS data. config BOOTBLOCK_ROM_OFFSET hex - default 0x2000 + default 0 config CBFS_HEADER_ROM_OFFSET hex "offset of master CBFS header in ROM" - default 0x2010 + default 0x9F80 config CBFS_ROM_OFFSET # Calculated by BOOTBLOCK_ROM_OFFSET + max bootblock size. hex "offset of CBFS data in ROM" - default 0x0A000 + default 0x0A080 config SYS_SDRAM_BASE hex diff --git a/src/soc/samsung/exynos5250/Makefile.inc b/src/soc/samsung/exynos5250/Makefile.inc index 22bfa66b44..01a075c8e9 100644 --- a/src/soc/samsung/exynos5250/Makefile.inc +++ b/src/soc/samsung/exynos5250/Makefile.inc @@ -50,13 +50,10 @@ ramstage-y += fb.c ramstage-y += usb.c ramstage-y += cbmem.c -# Run an intermediate step when producing coreboot.rom -# that adds additional components to the final firmware -# image outside of CBFS -.PHONY: exynos5250_add_bl1 -$(obj)/coreboot.rom: exynos5250_add_bl1 -exynos5250_add_bl1: $(obj)/coreboot.pre - printf " DD Adding Samsung Exynos5250 BL1\n" - # TODO(hungte) Change this 'cpu' to soc when build scripts are changed. - dd if=3rdparty/cpu/samsung/exynos5250/bl1.bin \ - of=$(obj)/coreboot.pre conv=notrunc >/dev/null 2>&1 +$(objcbfs)/bootblock.raw.elf: $(objcbfs)/bootblock.elf + cp $< $@ + +$(objcbfs)/bootblock.bin: $(objcbfs)/bootblock.raw.bin + @printf " BL1, CKSUM $(subst $(obj)/,,$(@))\n" + util/exynos/fixed_cksum.py $< $<.cksum 32768 + cat 3rdparty/cpu/samsung/exynos5250/bl1.bin $<.cksum > $@ diff --git a/src/soc/samsung/exynos5420/Kconfig b/src/soc/samsung/exynos5420/Kconfig index 19e19f9871..b74849d99f 100644 --- a/src/soc/samsung/exynos5420/Kconfig +++ b/src/soc/samsung/exynos5420/Kconfig @@ -19,16 +19,16 @@ if CPU_SAMSUNG_EXYNOS5420 # 0x0000: vendor-provided BL1 (8k). # 0x2000: variable length bootblock checksum header # 0x2010: bootblock -# 0x2020-0x20A0: reserved for CBFS master header. +# 0x9F80-0xA000: reserved for CBFS master header. # 0xA000: Free for CBFS data. config BOOTBLOCK_ROM_OFFSET hex - default 0x2010 + default 0 config CBFS_HEADER_ROM_OFFSET hex "offset of master CBFS header in ROM" - default 0x2020 + default 0x9F80 config CBFS_ROM_OFFSET # Calculated by BOOTBLOCK_ROM_OFFSET + max bootblock size. diff --git a/src/soc/samsung/exynos5420/Makefile.inc b/src/soc/samsung/exynos5420/Makefile.inc index 55868eb008..caacc21b54 100644 --- a/src/soc/samsung/exynos5420/Makefile.inc +++ b/src/soc/samsung/exynos5420/Makefile.inc @@ -56,13 +56,10 @@ rmodules-y += mct.c VBOOT_STUB_DEPS += $(obj)/soc/samsung/exynos5420/monotonic_timer.rmodules.o VBOOT_STUB_DEPS += $(obj)/soc/samsung/exynos5420/mct.rmodules.o -# Run an intermediate step when producing coreboot.rom -# that adds additional components to the final firmware -# image outside of CBFS -.PHONY: exynos5420_add_bl1 -$(obj)/coreboot.rom: exynos5420_add_bl1 -exynos5420_add_bl1: $(obj)/coreboot.pre - printf " DD Adding Samsung Exynos5420 BL1\n" - # TODO(hungte) Change this 'cpu' to soc when build scripts are changed. - dd if=3rdparty/cpu/samsung/exynos5420/bl1.bin \ - of=$(obj)/coreboot.pre conv=notrunc >/dev/null 2>&1 +$(objcbfs)/bootblock.raw.elf: $(objcbfs)/bootblock.elf + cp $< $@ + +$(objcbfs)/bootblock.bin: $(objcbfs)/bootblock.raw.bin + @printf " BL1, CKSUM $(subst $(obj)/,,$(@))\n" + util/exynos/variable_cksum.py $< $<.cksum + cat 3rdparty/cpu/samsung/exynos5420/bl1.bin $<.cksum > $@ diff --git a/util/exynos/fixed_cksum.py b/util/exynos/fixed_cksum.py new file mode 100755 index 0000000000..79a206a5c1 --- /dev/null +++ b/util/exynos/fixed_cksum.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +This utility computes and fills Exynos ROM checksum (for BL1 or BL2). +(Algorithm from U-Boot: tools/mkexynosspl.c) + +Input: IN OUT DATA_SIZE + +Output: + + IN padded out to DATA_SIZE, checksum at the end, written to OUT. +""" + +import struct +import sys + +def main(argv): + if len(argv) != 4: + exit('usage: %s IN OUT DATA_SIZE' % argv[0]) + + in_name, out_name = argv[1:3] + size = int(argv[3], 0) + checksum_format = "