blob: c6426f1fd02d9089d0c7521afe9e8489413800da [file] [log] [blame]
##
## This file is part of the coreboot project.
##
## Copyright (C) 2016 Marvell, 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.
##
ifeq ($(CONFIG_SOC_MARVELL_MVMAP2315),y)
bootblock-y += a2bus.c
bootblock-y += apmu.c
bootblock-y += bootblock.c
bootblock-y += bdb.c
bootblock-y += clock.c
bootblock-y += digest.c
bootblock-y += fiq.S
bootblock-y += gic.c
bootblock-y += gpio.c
bootblock-y += flash.c
bootblock-y += load_validate.c
bootblock-y += mcu.c
bootblock-y += media.c
bootblock-y += nvm.c
bootblock-y += pinmux.c
bootblock-y += pmic.c
bootblock-y += reset.c
bootblock-y += timer.c
bootblock-y += sdram.c
bootblock-y += uart.c
bootblock-y += wdt.c
ramstage-y += cbmem.c
ramstage-y += media.c
ramstage-y += gpio.c
ramstage-y += ramstage_entry.S
ramstage-y += reset.c
ramstage-y += soc.c
ramstage-y += timer.c
ramstage-y += sdram.c
ramstage-y += uart.c
ramstage-y += wdt.c
romstage-y += cbmem.c
romstage-y += clock.c
romstage-y += gpio.c
romstage-y += media.c
romstage-y += mmu_operations.c
romstage-y += reset.c
romstage-y += romstage_entry.S
romstage-y += romstage.c
romstage-y += sdram.c
romstage-y += timer.c
romstage-y += uart.c
romstage-y += wdt.c
CPPFLAGS_common += -Isrc/soc/marvell/mvmap2315/include/
#
# Common Boot Flow parameters
#
BOOTBLOCK_REGION_SIZE = 131072
BOOTBLOCK_TYPE = 1
BOOTBLOCK_PARTITION = 1
BOOTBLOCK_LOAD_ADDRESS = 0xe000c000
BDB = $(obj)/bdb.bin
BDB_LOAD_ADDRESS = 0xe0000000
DATA_VERSION = 2
#
# Keys used to create BDB
#
KEYDIR = $(VBOOT_SOURCE)/tests/testkeys
BDBKEY_PUB = $(KEYDIR)/bdbkey.keyb
BDBKEY_PRI = $(KEYDIR)/bdbkey.pem
BDBKEY_DIGEST = $(VBOOT_SOURCE)/tests/testdata/bdbkey_digest.bin
# Use bdbkeys because mvmap2315's bootROM doesn't support RSA3072b with
# exponent 3 and the algorithms for BDB key and data key have to match.
DATAKEY_PUB = $(KEYDIR)/bdbkey.keyb
DATAKEY_PRI = $(KEYDIR)/bdbkey.pem
# Calculate bootblock.raw.bin's size and offset
.PHONY: bootblock_offset
bootblock_offset: $(objcbfs)/bootblock.raw.bin
$(eval BOOTBLOCK_SIZE = $(call file-size, $<))
$(eval BOOTBLOCK_OFFSET = $(call int-subtract, \
$(BOOTBLOCK_REGION_SIZE) $(BOOTBLOCK_SIZE)))
#
# Create BDB
#
# TODO: Verify sign algorithms of the BDB key and data key are supported
$(BDB): $(objcbfs)/bootblock.raw.bin $(FUTILITY) bootblock_offset \
$(BDBKEY_PRI) $(BDBKEY_PUB) $(DATAKEY_PRI) $(DATAKEY_PUB) \
$(VBOOT_SOURCE)/tests/testdata/bdbkey_digest.bin
$(FUTILITY) bdb --create $@.tmp \
--bdbkey_pri $(BDBKEY_PRI) --bdbkey_pub $(BDBKEY_PUB) \
--datakey_pri $(DATAKEY_PRI) --datakey_pub $(DATAKEY_PUB) \
--load_address $(BDB_LOAD_ADDRESS)
$(FUTILITY) bdb --add $@.tmp \
--data $< \
--offset $(BOOTBLOCK_OFFSET) \
--partition $(BOOTBLOCK_PARTITION) \
--type $(BOOTBLOCK_TYPE) \
--load_address $(BOOTBLOCK_LOAD_ADDRESS)
$(FUTILITY) bdb --resign $@.tmp \
--datakey_pri $(DATAKEY_PRI) \
--data_version $(DATA_VERSION)
$(FUTILITY) bdb --verify $@.tmp --key_digest $(BDBKEY_DIGEST)
mv $@.tmp $@
#
# Create custom bootblock.bin
#
# This overrides generic pattern rule *.raw.bin -> *.bin for bootblock.bin.
# bootblock.bin is structured as follows:
# +------------------+
# | BDB |
# +------------------+
# | 000............0 |
# +------------------+
# |bootblock.raw.bin |
# +------------------+
# And this will be placed in BOOTBLOCK region.
$(objcbfs)/bootblock.bin: $(objcbfs)/bootblock.raw.bin $(BDB) bootblock_offset
dd if=/dev/zero bs=1 count=$(BOOTBLOCK_REGION_SIZE) of=$@.tmp
dd if=$(BDB) bs=1 count=$(call file-size, $(BDB)) conv=notrunc of=$@.tmp
dd if=$(objcbfs)/bootblock.raw.bin bs=1 count=$(BOOTBLOCK_SIZE) \
seek=$(BOOTBLOCK_OFFSET) conv=notrunc of=$@.tmp
mv $@.tmp $@
endif