summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm/armv7/bootblock.S12
-rw-r--r--src/soc/samsung/exynos5250/Kconfig11
-rw-r--r--src/soc/samsung/exynos5250/Makefile.inc17
-rw-r--r--src/soc/samsung/exynos5420/Kconfig6
-rw-r--r--src/soc/samsung/exynos5420/Makefile.inc17
-rwxr-xr-xutil/exynos/fixed_cksum.py59
-rwxr-xr-xutil/exynos/variable_cksum.py59
7 files changed, 142 insertions, 39 deletions
diff --git a/src/arch/arm/armv7/bootblock.S b/src/arch/arm/armv7/bootblock.S
index b28a787839..82bd79e19a 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 2b4ad3995b..8d7c867fe0 100644
--- a/src/soc/samsung/exynos5250/Kconfig
+++ b/src/soc/samsung/exynos5250/Kconfig
@@ -15,21 +15,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 a15bc9c6a3..cc89f2d7b5 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 a0d6c9882c..904091e5ba 100644
--- a/src/soc/samsung/exynos5420/Kconfig
+++ b/src/soc/samsung/exynos5420/Kconfig
@@ -17,16 +17,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 ef77b1b728..5f37e7eba5 100644
--- a/src/soc/samsung/exynos5420/Makefile.inc
+++ b/src/soc/samsung/exynos5420/Makefile.inc
@@ -50,13 +50,10 @@ ramstage-y += dp.c dp_lowlevel.c fimd.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: 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..66da06025d
--- /dev/null
+++ b/util/exynos/fixed_cksum.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 Google Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+"""
+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 = "<I"
+ with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
+ data = in_file.read()
+ checksum_size = struct.calcsize(checksum_format)
+ data_size = size - checksum_size
+ assert len(data) <= data_size
+ checksum = struct.pack(checksum_format, sum(map(ord, data)))
+ out_file.write(data + bytearray(data_size - len(data)) + checksum)
+
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/util/exynos/variable_cksum.py b/util/exynos/variable_cksum.py
new file mode 100755
index 0000000000..75cdc74f87
--- /dev/null
+++ b/util/exynos/variable_cksum.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# Copyright (C) 2013 Google Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+"""
+This utility computes and fills Exynos ROM checksum (for BL1 or BL2).
+(Algorithm from U-Boot: tools/mkexynosspl.c)
+
+Input: IN OUT
+
+Output:
+
+ Checksum header added to IN and written to OUT.
+ Header: uint32_t size, checksum, reserved[2].
+"""
+
+import struct
+import sys
+
+def main(argv):
+ if len(argv) != 3:
+ exit('usage: %s IN OUT' % argv[0])
+
+ in_name, out_name = argv[1:3]
+ header_format = "<IIII"
+ with open(in_name, "rb") as in_file, open(out_name, "wb") as out_file:
+ data = in_file.read()
+ header = struct.pack(header_format,
+ struct.calcsize(header_format) + len(data),
+ sum(map(ord, data)),
+ 0, 0)
+ out_file.write(header + data)
+
+
+if __name__ == '__main__':
+ main(sys.argv)