Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 1 | # TC0 specific TFA configuration |
| 2 | |
Patrick Williams | 8dd6848 | 2022-10-04 07:57:18 -0500 | [diff] [blame^] | 3 | # Intermediate SHA with 2.7 baseline version |
| 4 | SRCREV_tfa = "e95abc4c01822ef43e9e874d63d6596dc0b57279" |
| 5 | PV = "2.7+git${SRCPV}" |
| 6 | |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 7 | DEPENDS += "scp-firmware util-linux-native gptfdisk-native" |
| 8 | |
| 9 | FILESEXTRAPATHS:prepend := "${THISDIR}/files/tc:" |
| 10 | SRC_URI:append = " \ |
| 11 | file://0001-plat-tc-Increase-maximum-BL2-size.patch \ |
| 12 | file://0002-Makefile-add-trusty_sp_fw_config-build-option.patch \ |
| 13 | file://0003-fix-plat-arm-increase-sp-max-image-size.patch \ |
| 14 | file://0004-fix-plat-tc-increase-tc_tzc_dram1_size.patch \ |
| 15 | file://0005-feat-plat-tc-add-spmc-manifest-with-trusty-sp.patch \ |
| 16 | file://0006-feat-plat-tc-update-dts-with-trusty-compatible-strin.patch \ |
Patrick Williams | 8dd6848 | 2022-10-04 07:57:18 -0500 | [diff] [blame^] | 17 | file://0007-feat-arm-tc-Update-trusty-load-address-in-dts-files.patch \ |
| 18 | file://0008-feat-plat-tc-add-firmware-update-secure-partition.patch \ |
| 19 | file://0009-feat-plat-tc-reserve-4-MB-for-stmm-communication-use.patch \ |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 20 | file://generate_metadata.py \ |
| 21 | " |
| 22 | |
| 23 | COMPATIBLE_MACHINE = "(tc?)" |
| 24 | |
| 25 | TFA_PLATFORM = "tc" |
| 26 | TFA_BUILD_TARGET = "all fip" |
| 27 | TFA_UBOOT = "1" |
| 28 | TFA_INSTALL_TARGET = "bl1 fip" |
| 29 | TFA_MBEDTLS = "1" |
| 30 | TFA_DEBUG = "1" |
| 31 | |
| 32 | TFA_SPD = "spmd" |
| 33 | TFA_SPMD_SPM_AT_SEL2 = "1" |
| 34 | |
| 35 | TFA_TARGET_PLATFORM:tc0 = "0" |
| 36 | TFA_TARGET_PLATFORM:tc1 = "1" |
| 37 | |
| 38 | EXTRA_OEMAKE += "TARGET_PLATFORM=${TFA_TARGET_PLATFORM}" |
| 39 | |
| 40 | # Set optee as SP. Set spmc manifest and sp layout file to optee |
| 41 | DEPENDS += "optee-os" |
| 42 | |
| 43 | TFA_SP_LAYOUT_FILE = "${RECIPE_SYSROOT}/lib/firmware/sp_layout.json" |
| 44 | TFA_ARM_SPMC_MANIFEST_DTS = "plat/arm/board/tc/fdts/tc_spmc_optee_sp_manifest.dts" |
| 45 | |
| 46 | EXTRA_OEMAKE += "SCP_BL2=${RECIPE_SYSROOT}/firmware/scp_ramfw.bin" |
| 47 | EXTRA_OEMAKE += "TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 ARM_ROTPK_LOCATION=devel_rsa \ |
| 48 | ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem" |
| 49 | EXTRA_OEMAKE += "PSA_FWU_SUPPORT=1 ARM_GPT_SUPPORT=1" |
Patrick Williams | 8dd6848 | 2022-10-04 07:57:18 -0500 | [diff] [blame^] | 50 | EXTRA_OEMAKE += "CTX_INCLUDE_MTE_REGS=1" |
Brad Bishop | bec4ebc | 2022-08-03 09:55:16 -0400 | [diff] [blame] | 51 | |
| 52 | do_generate_gpt() { |
| 53 | gpt_image="${BUILD_DIR}/fip_gpt.bin" |
| 54 | fip_bin="${BUILD_DIR}/fip.bin" |
| 55 | # the FIP partition type is not standardized, so generate one |
| 56 | fip_type_uuid=`uuidgen --sha1 --namespace @dns --name "fip_type_uuid"` |
| 57 | # metadata partition type UUID, specified by the document: |
| 58 | # Platform Security Firmware Update for the A-profile Arm Architecture |
| 59 | # version: 1.0BET0 |
| 60 | metadata_type_uuid="8a7a84a0-8387-40f6-ab41-a8b9a5a60d23" |
| 61 | location_uuid=`uuidgen` |
| 62 | FIP_A_uuid=`uuidgen` |
| 63 | FIP_B_uuid=`uuidgen` |
| 64 | |
| 65 | # maximum FIP size 4MB. This is the current size of the FIP rounded up to an integer number of MB. |
| 66 | fip_max_size=4194304 |
| 67 | fip_bin_size=$(stat -c %s $fip_bin) |
| 68 | if [ $fip_max_size -lt $fip_bin_size ]; then |
| 69 | bberror "FIP binary ($fip_bin_size bytes) is larger than the GPT partition ($fip_max_size bytes)" |
| 70 | fi |
| 71 | |
| 72 | # maximum metadata size 512B. This is the current size of the metadata rounded up to an integer number of sectors. |
| 73 | metadata_max_size=512 |
| 74 | metadata_file="${BUILD_DIR}/metadata.bin" |
| 75 | python3 ${WORKDIR}/generate_metadata.py --metadata_file $metadata_file \ |
| 76 | --img_type_uuids $fip_type_uuid \ |
| 77 | --location_uuids $location_uuid \ |
| 78 | --img_uuids $FIP_A_uuid $FIP_B_uuid |
| 79 | |
| 80 | # create GPT image. The GPT contains 2 FIP partitions: FIP_A and FIP_B, and 2 metadata partitions: FWU-Metadata and Bkup-FWU-Metadata. |
| 81 | # the GPT layout is the following: |
| 82 | # ----------------------- |
| 83 | # Protective MBR |
| 84 | # ----------------------- |
| 85 | # Primary GPT Header |
| 86 | # ----------------------- |
| 87 | # FIP_A |
| 88 | # ----------------------- |
| 89 | # FIP_B |
| 90 | # ----------------------- |
| 91 | # FWU-Metadata |
| 92 | # ----------------------- |
| 93 | # Bkup-FWU-Metadata |
| 94 | # ----------------------- |
| 95 | # Secondary GPT Header |
| 96 | # ----------------------- |
| 97 | |
| 98 | sector_size=512 |
| 99 | gpt_header_size=33 # valid only for 512-byte sectors |
| 100 | num_sectors_fip=`expr $fip_max_size / $sector_size` |
| 101 | num_sectors_metadata=`expr $metadata_max_size / $sector_size` |
| 102 | start_sector_1=`expr 1 + $gpt_header_size` # size of MBR is 1 sector |
| 103 | start_sector_2=`expr $start_sector_1 + $num_sectors_fip` |
| 104 | start_sector_3=`expr $start_sector_2 + $num_sectors_fip` |
| 105 | start_sector_4=`expr $start_sector_3 + $num_sectors_metadata` |
| 106 | num_sectors_gpt=`expr $start_sector_4 + $num_sectors_metadata + $gpt_header_size` |
| 107 | gpt_size=`expr $num_sectors_gpt \* $sector_size` |
| 108 | |
| 109 | # create raw image |
| 110 | dd if=/dev/zero of=$gpt_image bs=$gpt_size count=1 |
| 111 | |
| 112 | # create the GPT layout |
| 113 | sgdisk $gpt_image \ |
| 114 | --set-alignment 1 \ |
| 115 | --disk-guid $location_uuid \ |
| 116 | \ |
| 117 | --new 1:$start_sector_1:+$num_sectors_fip \ |
| 118 | --change-name 1:FIP_A \ |
| 119 | --typecode 1:$fip_type_uuid \ |
| 120 | --partition-guid 1:$FIP_A_uuid \ |
| 121 | \ |
| 122 | --new 2:$start_sector_2:+$num_sectors_fip \ |
| 123 | --change-name 2:FIP_B \ |
| 124 | --typecode 2:$fip_type_uuid \ |
| 125 | --partition-guid 2:$FIP_B_uuid \ |
| 126 | \ |
| 127 | --new 3:$start_sector_3:+$num_sectors_metadata \ |
| 128 | --change-name 3:FWU-Metadata \ |
| 129 | --typecode 3:$metadata_type_uuid \ |
| 130 | \ |
| 131 | --new 4:$start_sector_4:+$num_sectors_metadata \ |
| 132 | --change-name 4:Bkup-FWU-Metadata \ |
| 133 | --typecode 4:$metadata_type_uuid |
| 134 | |
| 135 | # populate the GPT partitions |
| 136 | dd if=$fip_bin of=$gpt_image bs=$sector_size seek=$start_sector_1 count=$num_sectors_fip conv=notrunc |
| 137 | dd if=$fip_bin of=$gpt_image bs=$sector_size seek=$start_sector_2 count=$num_sectors_fip conv=notrunc |
| 138 | dd if=$metadata_file of=$gpt_image bs=$sector_size seek=$start_sector_3 count=$num_sectors_metadata conv=notrunc |
| 139 | dd if=$metadata_file of=$gpt_image bs=$sector_size seek=$start_sector_4 count=$num_sectors_metadata conv=notrunc |
| 140 | } |
| 141 | |
| 142 | addtask do_generate_gpt after do_compile before do_install |
| 143 | |
| 144 | do_install:append() { |
| 145 | install -m 0644 ${BUILD_DIR}/fip_gpt.bin ${D}/firmware/fip_gpt-tc.bin |
| 146 | ln -sf fip_gpt-tc.bin ${D}/firmware/fip_gpt.bin |
| 147 | } |