2018-10-08 14:53:09 +01:00
#
2021-01-07 20:52:44 +00:00
# Copyright (C) 2018-2021 Marvell International Ltd.
2018-10-08 14:53:09 +01:00
#
# SPDX-License-Identifier: BSD-3-Clause
# https://spdx.org/licenses
#
2019-11-05 12:14:59 +00:00
MARVELL_PLAT_BASE := plat/marvell/armada
MARVELL_PLAT_INCLUDE_BASE := include/plat/marvell/armada
2020-06-18 18:50:47 +01:00
PLAT_FAMILY := a3k
2018-10-08 14:53:09 +01:00
PLAT_FAMILY_BASE := $( MARVELL_PLAT_BASE) /$( PLAT_FAMILY)
PLAT_INCLUDE_BASE := $( MARVELL_PLAT_INCLUDE_BASE) /$( PLAT_FAMILY)
PLAT_COMMON_BASE := $( PLAT_FAMILY_BASE) /common
MARVELL_DRV_BASE := drivers/marvell
MARVELL_COMMON_BASE := $( MARVELL_PLAT_BASE) /common
2021-08-26 16:29:45 +01:00
ERRATA_A53_1530924 := 1
2018-10-08 14:53:09 +01:00
2020-10-29 15:50:19 +00:00
i n c l u d e p l a t / m a r v e l l / m a r v e l l . m k
2018-10-08 14:53:09 +01:00
#*********** A3700 *************
2020-10-15 12:50:28 +01:00
# GICV3
$( eval $ ( call add_define ,CONFIG_GICV 3) )
# CCI-400
$( eval $ ( call add_define ,USE_CCI ) )
# Include GICv3 driver files
i n c l u d e d r i v e r s / a r m / g i c / v 3 / g i c v 3 . m k
MARVELL_GIC_SOURCES := ${ GICV3_SOURCES } \
plat/common/plat_gicv3.c
PLAT_INCLUDES := -I$( PLAT_FAMILY_BASE) /$( PLAT) \
-I$( PLAT_COMMON_BASE) /include \
-I$( PLAT_INCLUDE_BASE) /common \
-I$( MARVELL_DRV_BASE) \
-I$/drivers/arm/gic/common/
PLAT_BL_COMMON_SOURCES := $( PLAT_COMMON_BASE) /aarch64/a3700_common.c \
2021-05-14 14:52:11 +01:00
$( PLAT_COMMON_BASE) /aarch64/a3700_clock.S \
2020-10-15 12:50:28 +01:00
$( MARVELL_DRV_BASE) /uart/a3700_console.S
BL1_SOURCES += $( PLAT_COMMON_BASE) /aarch64/plat_helpers.S \
lib/cpus/aarch64/cortex_a53.S
MARVELL_DRV := $( MARVELL_DRV_BASE) /comphy/phy-comphy-3700.c
BL31_SOURCES += lib/cpus/aarch64/cortex_a53.S \
$( PLAT_COMMON_BASE) /aarch64/plat_helpers.S \
2021-01-07 20:52:44 +00:00
$( PLAT_COMMON_BASE) /plat_cci.c \
2020-10-15 12:50:28 +01:00
$( PLAT_COMMON_BASE) /plat_pm.c \
$( PLAT_COMMON_BASE) /dram_win.c \
$( PLAT_COMMON_BASE) /io_addr_dec.c \
$( PLAT_COMMON_BASE) /marvell_plat_config.c \
$( PLAT_FAMILY_BASE) /$( PLAT) /plat_bl31_setup.c \
2021-01-07 20:52:44 +00:00
$( MARVELL_COMMON_BASE) /marvell_cci.c \
2020-10-15 12:50:28 +01:00
$( MARVELL_COMMON_BASE) /marvell_ddr_info.c \
$( MARVELL_COMMON_BASE) /marvell_gicv3.c \
$( MARVELL_GIC_SOURCES) \
drivers/arm/cci/cci.c \
$( PLAT_COMMON_BASE) /a3700_sip_svc.c \
$( MARVELL_DRV)
2021-07-09 14:10:27 +01:00
i f e q ( $( HANDLE_EA_EL 3_FIRST ) , 1 )
BL31_SOURCES += $( PLAT_COMMON_BASE) /a3700_ea.c
e n d i f
2021-01-05 13:01:05 +00:00
i f e q ( $( CM 3_SYSTEM_RESET ) , 1 )
BL31_SOURCES += $( PLAT_COMMON_BASE) /cm3_system_reset.c
e n d i f
2021-04-06 18:18:30 +01:00
i f e q ( $( A 3720_DB_PM_WAKEUP_SRC ) , 1 )
BL31_SOURCES += $( PLAT_FAMILY_BASE) /$( PLAT) /board/pm_src.c
e n d i f
2020-12-03 11:00:47 +00:00
i f d e f W T P
2020-10-15 12:50:28 +01:00
2021-10-13 10:37:12 +01:00
# Do not remove! Following checks are required to ensure correct TF-A builds, removing these checks leads to broken TF-A builds
2021-01-26 09:44:07 +00:00
$( if $ ( wildcard $ ( value WTP ) /*) ,,$ ( error "'WTP =$ ( value WTP ) ' was specified , but '$ ( value WTP ) ' directory does not exist ") )
2021-07-07 11:14:20 +01:00
$( if $ ( shell git -C $ ( value WTP ) rev -parse --show -cdup 2>&1) ,$ ( error "'WTP =$ ( value WTP ) ' was specified , but '$ ( value WTP ) ' does not contain valid A 3700-utils -marvell git repository ") )
2021-01-26 09:44:07 +00:00
2021-07-10 14:04:53 +01:00
TBB := $( WTP) /wtptp/src/TBB_Linux/release/TBB_linux
2018-10-08 14:53:09 +01:00
2021-01-26 09:44:07 +00:00
BUILD_UART := uart-images
2021-01-26 09:44:07 +00:00
UART_IMAGE := $( BUILD_UART) .tgz.bin
2021-01-26 09:44:07 +00:00
2018-10-08 14:53:09 +01:00
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
2021-07-11 13:46:49 +01:00
TIM_CFG := $( BUILD_PLAT) /atf-tim.txt
TIM_UART_CFG := $( BUILD_PLAT) /$( BUILD_UART) /atf-tim.txt
2021-07-10 13:54:44 +01:00
IMAGESPATH := $( WTP) /tim/trusted
2021-07-11 13:46:49 +01:00
TIMN_CFG := $( BUILD_PLAT) /atf-timN.txt
TIMN_UART_CFG := $( BUILD_PLAT) /$( BUILD_UART) /atf-timN.txt
TIMN_SIG := $( IMAGESPATH) /timnsign.txt
TIM2IMGARGS := -i $( TIM_CFG) -n $( TIMN_CFG)
2021-07-11 16:33:37 +01:00
TIMN_UART_IMAGE := $$ ( grep "Image Filename:" -m 1 $( TIMN_UART_CFG) | cut -c 17-)
2018-10-08 14:53:09 +01:00
e l s e #MARVELL_SECURE_BOOT
2021-07-11 13:46:49 +01:00
TIM_CFG := $( BUILD_PLAT) /atf-ntim.txt
TIM_UART_CFG := $( BUILD_PLAT) /$( BUILD_UART) /atf-ntim.txt
2021-07-10 13:54:44 +01:00
IMAGESPATH := $( WTP) /tim/untrusted
2021-07-11 13:46:49 +01:00
TIM2IMGARGS := -i $( TIM_CFG)
2018-10-08 14:53:09 +01:00
e n d i f #MARVELL_SECURE_BOOT
2021-07-11 16:33:37 +01:00
TIM_UART_IMAGE := $$ ( grep "Image Filename:" -m 1 $( TIM_UART_CFG) | cut -c 17-)
2021-07-10 13:54:44 +01:00
TIMBUILD := $( WTP) /script/buildtim.sh
TIM2IMG := $( WTP) /script/tim2img.pl
TIMDDRTOOL := $( WTP) /tim/ddr/ddr_tool
2020-11-23 18:49:23 +00:00
$(TIMBUILD) : $( TIMDDRTOOL )
2018-10-08 14:53:09 +01:00
# WTMI_IMG is used to specify the customized RTOS image running over
# Service CPU (CM3 processor). By the default, it points to a
# baremetal binary of fuse programming in A3700_utils.
2021-07-10 13:54:44 +01:00
WTMI_IMG := $( WTP) /wtmi/fuse/build/fuse.bin
2018-10-08 14:53:09 +01:00
# WTMI_MULTI_IMG is composed of CM3 RTOS image (WTMI_IMG)
2021-01-26 10:10:17 +00:00
# and sys-init image.
2021-07-10 13:54:44 +01:00
WTMI_MULTI_IMG := $( WTP) /wtmi/build/wtmi.bin
2018-10-08 14:53:09 +01:00
2021-01-26 09:44:07 +00:00
WTMI_ENC_IMG := wtmi-enc.bin
2018-10-08 14:53:09 +01:00
SRCPATH := $( dir $( BL33) )
CLOCKSPRESET ?= CPU_800_DDR_800
DDR_TOPOLOGY ?= 0
BOOTDEV ?= SPINOR
PARTNUM ?= 0
2021-07-10 13:54:44 +01:00
TIMBLDARGS := $( MARVELL_SECURE_BOOT) $( BOOTDEV) $( IMAGESPATH) $( WTP) $( CLOCKSPRESET) \
2021-07-11 13:46:49 +01:00
$( DDR_TOPOLOGY) $( PARTNUM) $( DEBUG) $( TIM_CFG) $( TIMN_CFG) $( TIMN_SIG) 1
2021-07-10 13:54:44 +01:00
TIMBLDUARTARGS := $( MARVELL_SECURE_BOOT) UART $( IMAGESPATH) $( WTP) $( CLOCKSPRESET) \
2021-07-11 13:46:49 +01:00
$( DDR_TOPOLOGY) 0 0 $( TIM_UART_CFG) $( TIMN_UART_CFG) $( TIMN_SIG) 0
2018-10-08 14:53:09 +01:00
2021-07-11 16:33:37 +01:00
UART_IMAGES := $( BUILD_UART) /$( TIM_UART_IMAGE)
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
UART_IMAGES += $( BUILD_UART) /$( TIMN_UART_IMAGE)
e n d i f
UART_IMAGES += $( BUILD_UART) /wtmi_h.bin $( BUILD_UART) /boot-image_h.bin
2021-01-26 09:44:07 +00:00
CRYPTOPP_LIBDIR ?= $( CRYPTOPP_PATH)
CRYPTOPP_INCDIR ?= $( CRYPTOPP_PATH)
2021-07-10 14:04:53 +01:00
$(TBB) : FORCE
2021-10-19 15:10:29 +01:00
# Do not remove! Following checks are required to ensure correct TF-A builds, removing these checks leads to broken TF-A builds
2021-01-26 09:44:07 +00:00
$( if $( CRYPTOPP_LIBDIR) ,,$( error " Platform ' $( PLAT) ' for WTP image tool requires CRYPTOPP_PATH or CRYPTOPP_LIBDIR. Please set CRYPTOPP_PATH or CRYPTOPP_LIBDIR to point to the right directory " ) )
$( if $( CRYPTOPP_INCDIR) ,,$( error " Platform ' $( PLAT) ' for WTP image tool requires CRYPTOPP_PATH or CRYPTOPP_INCDIR. Please set CRYPTOPP_PATH or CRYPTOPP_INCDIR to point to the right directory " ) )
$( if $( wildcard $( CRYPTOPP_LIBDIR) /*) ,,$( error " Either 'CRYPTOPP_PATH' or 'CRYPTOPP_LIB' was set to ' $( CRYPTOPP_LIBDIR) ', but ' $( CRYPTOPP_LIBDIR) ' does not exist " ) )
$( if $( wildcard $( CRYPTOPP_INCDIR) /*) ,,$( error " Either 'CRYPTOPP_PATH' or 'CRYPTOPP_INCDIR' was set to ' $( CRYPTOPP_INCDIR) ', but ' $( CRYPTOPP_INCDIR) ' does not exist " ) )
i f d e f C R Y P T O P P _ P A T H
2020-10-29 15:44:45 +00:00
$( Q) $( MAKE) --no-print-directory -C $( CRYPTOPP_PATH) -f GNUmakefile
2021-01-26 09:44:07 +00:00
e n d i f
2021-07-10 13:54:44 +01:00
$( Q) $( MAKE) --no-print-directory -C $( WTP) /wtptp/src/TBB_Linux -f TBB_linux.mak LIBDIR = $( CRYPTOPP_LIBDIR) INCDIR = $( CRYPTOPP_INCDIR)
2020-10-29 15:44:45 +00:00
2020-11-23 18:49:23 +00:00
$(WTMI_MULTI_IMG) : FORCE
2021-07-10 13:54:44 +01:00
$( Q) $( MAKE) --no-print-directory -C $( WTP) WTMI_IMG = $( WTMI_IMG) DDR_TOPOLOGY = $( DDR_TOPOLOGY) CLOCKSPRESET = $( CLOCKSPRESET) WTMI
2020-11-23 18:49:23 +00:00
2021-01-26 09:44:07 +00:00
$(BUILD_PLAT)/wtmi.bin : $( WTMI_MULTI_IMG )
$( Q) cp -a $( WTMI_MULTI_IMG) $( BUILD_PLAT) /wtmi.bin
2020-11-23 18:49:23 +00:00
$(TIMDDRTOOL) : FORCE
2021-10-19 15:10:29 +01:00
# Do not remove! Following checks are required to ensure correct TF-A builds, removing these checks leads to broken TF-A builds
2020-11-23 18:49:23 +00:00
$( if $( value MV_DDR_PATH) ,,$( error " Platform ' ${ PLAT } ' for ddr tool requires MV_DDR_PATH. Please set MV_DDR_PATH to point to the right directory " ) )
2021-01-26 09:44:07 +00:00
$( if $( wildcard $( value MV_DDR_PATH) /*) ,,$( error " 'MV_DDR_PATH= $( value MV_DDR_PATH) ' was specified, but ' $( value MV_DDR_PATH) ' directory does not exist " ) )
2021-07-07 11:14:20 +01:00
$( if $( shell git -C $( value MV_DDR_PATH) rev-parse --show-cdup 2>& 1) ,$( error " 'MV_DDR_PATH= $( value MV_DDR_PATH) ' was specified, but ' $( value MV_DDR_PATH) ' does not contain valid mv-ddr-marvell git repository " ) )
2021-07-10 13:54:44 +01:00
$( Q) $( MAKE) --no-print-directory -C $( WTP) MV_DDR_PATH = $( MV_DDR_PATH) DDR_TOPOLOGY = $( DDR_TOPOLOGY) mv_ddr
2020-11-23 18:49:23 +00:00
2021-07-10 14:04:53 +01:00
$(BUILD_PLAT)/$(UART_IMAGE) : $( BUILD_PLAT ) /$( BOOT_IMAGE ) $( BUILD_PLAT ) /wtmi .bin $( TBB ) $( TIMBUILD ) $( TIMDDRTOOL )
2021-01-26 09:44:07 +00:00
@$( ECHO_BLANK_LINE)
2018-10-08 14:53:09 +01:00
@echo "Building uart images"
2021-01-26 09:44:07 +00:00
$( Q) mkdir -p $( BUILD_PLAT) /$( BUILD_UART)
$( Q) cp -a $( BUILD_PLAT) /wtmi.bin $( BUILD_PLAT) /$( BUILD_UART) /wtmi.bin
$( Q) cp -a $( BUILD_PLAT) /$( BOOT_IMAGE) $( BUILD_PLAT) /$( BUILD_UART) /$( BOOT_IMAGE)
$( Q) cd $( BUILD_PLAT) /$( BUILD_UART) && $( TIMBUILD) $( TIMBLDUARTARGS)
2021-07-11 13:46:49 +01:00
$( Q) sed -i 's|WTMI_IMG|wtmi.bin|1' $( TIM_UART_CFG)
$( Q) sed -i 's|BOOT_IMAGE|$(BOOT_IMAGE)|1' $( TIM_UART_CFG)
2021-01-26 09:44:07 +00:00
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
2021-07-11 13:46:49 +01:00
$( Q) sed -i 's|WTMI_IMG|wtmi.bin|1' $( TIMN_UART_CFG)
$( Q) sed -i 's|BOOT_IMAGE|$(BOOT_IMAGE)|1' $( TIMN_UART_CFG)
2021-01-26 09:44:07 +00:00
e n d i f
2021-07-11 13:46:49 +01:00
$( Q) cd $( BUILD_PLAT) /$( BUILD_UART) && $( TBB) -r $( TIM_UART_CFG) -v -D
2018-10-08 14:53:09 +01:00
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
2021-07-11 13:46:49 +01:00
$( Q) cd $( BUILD_PLAT) /$( BUILD_UART) && $( TBB) -r $( TIMN_UART_CFG)
2018-10-08 14:53:09 +01:00
e n d i f
2021-07-11 16:33:37 +01:00
$( Q) tar czf $( BUILD_PLAT) /$( UART_IMAGE) -C $( BUILD_PLAT) $( UART_IMAGES)
2021-01-26 09:44:07 +00:00
@$( ECHO_BLANK_LINE)
@echo " Built $@ successfully "
@$( ECHO_BLANK_LINE)
2021-07-10 14:04:53 +01:00
$(BUILD_PLAT)/$(FLASH_IMAGE) : $( BUILD_PLAT ) /$( BOOT_IMAGE ) $( BUILD_PLAT ) /wtmi .bin $( TBB ) $( TIMBUILD ) $( TIMDDRTOOL ) $( TIM 2IMG )
2021-01-26 09:44:07 +00:00
@$( ECHO_BLANK_LINE)
2018-10-08 14:53:09 +01:00
@echo "Building flash image"
2021-01-26 09:44:07 +00:00
$( Q) cd $( BUILD_PLAT) && $( TIMBUILD) $( TIMBLDARGS)
2021-07-11 13:46:49 +01:00
$( Q) sed -i 's|WTMI_IMG|wtmi.bin|1' $( TIM_CFG)
$( Q) sed -i 's|BOOT_IMAGE|$(BOOT_IMAGE)|1' $( TIM_CFG)
2018-10-08 14:53:09 +01:00
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
2021-07-11 13:46:49 +01:00
$( Q) sed -i 's|WTMI_IMG|wtmi.bin|1' $( TIMN_CFG)
$( Q) sed -i 's|BOOT_IMAGE|$(BOOT_IMAGE)|1' $( TIMN_CFG)
2021-01-29 11:08:21 +00:00
@$( ECHO_BLANK_LINE)
@echo "=======================================================" ;
@echo " Secure boot. Encrypting wtmi and boot-image" ;
@echo "=======================================================" ;
@$( ECHO_BLANK_LINE)
2021-01-26 09:44:07 +00:00
$( Q) cp $( BUILD_PLAT) /wtmi.bin $( BUILD_PLAT) /wtmi-align.bin
$( Q) truncate -s %16 $( BUILD_PLAT) /wtmi-align.bin
$( Q) openssl enc -aes-256-cbc -e -in $( BUILD_PLAT) /wtmi-align.bin \
2021-01-26 09:44:07 +00:00
-out $( BUILD_PLAT) /$( WTMI_ENC_IMG) \
2018-11-06 16:10:33 +00:00
-K ` cat $( IMAGESPATH) /aes-256.txt` -nosalt \
2018-10-08 14:53:09 +01:00
-iv ` cat $( IMAGESPATH) /iv.txt` -p
2021-01-26 09:44:07 +00:00
$( Q) truncate -s %16 $( BUILD_PLAT) /$( BOOT_IMAGE) ;
$( Q) openssl enc -aes-256-cbc -e -in $( BUILD_PLAT) /$( BOOT_IMAGE) \
2018-10-08 14:53:09 +01:00
-out $( BUILD_PLAT) /$( BOOT_ENC_IMAGE) \
2018-11-06 16:10:33 +00:00
-K ` cat $( IMAGESPATH) /aes-256.txt` -nosalt \
2018-10-08 14:53:09 +01:00
-iv ` cat $( IMAGESPATH) /iv.txt` -p
e n d i f
2021-07-11 13:46:49 +01:00
$( Q) cd $( BUILD_PLAT) && $( TBB) -r $( TIM_CFG) -v -D
2020-11-23 18:37:28 +00:00
i f e q ( $( MARVELL_SECURE_BOOT ) , 1 )
2021-07-11 13:46:49 +01:00
$( Q) cd $( BUILD_PLAT) && $( TBB) -r $( TIMN_CFG)
$( Q) sed -i 's|wtmi.bin|$(WTMI_ENC_IMG)|1' $( TIMN_CFG)
$( Q) sed -i 's|$(BOOT_IMAGE)|$(BOOT_ENC_IMAGE)|1' $( TIMN_CFG)
2020-11-23 18:37:28 +00:00
e n d i f
2021-01-26 09:44:07 +00:00
$( Q) cd $( BUILD_PLAT) && $( TIM2IMG) $( TIM2IMGARGS) -o $( BUILD_PLAT) /$( FLASH_IMAGE)
2021-01-26 09:44:07 +00:00
@$( ECHO_BLANK_LINE)
@echo " Built $@ successfully "
@$( ECHO_BLANK_LINE)
2020-10-15 12:50:28 +01:00
2020-11-23 18:45:28 +00:00
clean realclean distclean : mrvl_clean
.PHONY : mrvl_clean
mrvl_clean :
2021-07-10 13:54:44 +01:00
-$( Q) $( MAKE) --no-print-directory -C $( WTP) MV_DDR_PATH = $( MV_DDR_PATH) clean
-$( Q) $( MAKE) --no-print-directory -C $( WTP) /wtptp/src/TBB_Linux -f TBB_linux.mak clean
2020-11-23 18:45:28 +00:00
i f d e f C R Y P T O P P _ P A T H
-$( Q) $( MAKE) --no-print-directory -C $( CRYPTOPP_PATH) -f GNUmakefile clean
e n d i f
2020-12-03 11:00:47 +00:00
e l s e # WTP
2020-10-15 12:50:28 +01:00
2021-01-26 09:44:07 +00:00
$(BUILD_PLAT)/$(UART_IMAGE) $(BUILD_PLAT)/$(FLASH_IMAGE) :
2020-10-15 12:50:28 +01:00
$( error " Platform ' ${ PLAT } ' for target ' $@ ' requires WTP. Please set WTP to point to the right directory " )
2020-12-03 11:00:47 +00:00
e n d i f # WTP
2021-01-26 09:44:07 +00:00
.PHONY : mrvl_uart
mrvl_uart : $( BUILD_PLAT ) /$( UART_IMAGE )