| ## |
| ## 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 |