18b81a39eSGhennadi ProcopciucNXP S32G274A 28b81a39eSGhennadi Procopciuc============ 38b81a39eSGhennadi Procopciuc 48b81a39eSGhennadi ProcopciucS32G2 is an NXP vehicle network processor combining ASIL D safety, hardware 58b81a39eSGhennadi Procopciucsecurity, high-performance real-time and application processing and network 68b81a39eSGhennadi Procopciucacceleration. S32G2 supports the needs of new vehicle architectures: 78b81a39eSGhennadi Procopciucservice-oriented gateways, domain controllers, zonal processors, safety 88b81a39eSGhennadi Procopciucprocessors and more. It is equipped with 4 Cortex-A53 cores operating at 98b81a39eSGhennadi Procopciuc1.0GHz. 108b81a39eSGhennadi Procopciuc 118b81a39eSGhennadi ProcopciucThe TF-A includes support for one single S32G2-based board called S32G274ARDB2. 128b81a39eSGhennadi ProcopciucThe S32G-VNP-RDB2 is a compact, highly optimized and integrated board 138b81a39eSGhennadi Procopciucengineering for vehicle service-oriented gateway (SoG), domain control 148b81a39eSGhennadi Procopciucapplications, high-performance processing, safety and security applications. 158b81a39eSGhennadi ProcopciucMore details about this board can be found at `s32g274ardb2`_. 168b81a39eSGhennadi Procopciuc 178b81a39eSGhennadi ProcopciucBoot Flow 188b81a39eSGhennadi Procopciuc--------- 198b81a39eSGhennadi Procopciuc 208b81a39eSGhennadi Procopciuc:: 218b81a39eSGhennadi Procopciuc 228b81a39eSGhennadi Procopciuc BootROM -> BL2 (SRAM) -> BL31 (SRAM) -> BL33 (DDR - TODO) 238b81a39eSGhennadi Procopciuc 248b81a39eSGhennadi Procopciuc.. warning:: 258b81a39eSGhennadi Procopciuc This boot flow is a preliminary version that will serve as a foundation for 268b81a39eSGhennadi Procopciuc upcoming S32G2 contributions. The execution will hang after the BL31 stage 278b81a39eSGhennadi Procopciuc due to U-Boot being deployed in SRAM instead of DDR. This issue will be 288b81a39eSGhennadi Procopciuc resolved with the addition of the DDR driver. 298b81a39eSGhennadi Procopciuc 308b81a39eSGhennadi ProcopciucCode Locations 318b81a39eSGhennadi Procopciuc-------------- 328b81a39eSGhennadi Procopciuc 338b81a39eSGhennadi Procopciuc- Downstream TF-A: 348b81a39eSGhennadi Procopciuc `link: <https://github.com/nxp-auto-linux/arm-trusted-firmware>`__ 358b81a39eSGhennadi Procopciuc 368b81a39eSGhennadi Procopciuc- Downstream U-Boot: 378b81a39eSGhennadi Procopciuc `link <https://github.com/nxp-auto-linux/u-boot>`__ 388b81a39eSGhennadi Procopciuc 398b81a39eSGhennadi Procopciuc- Downstream Linux: 408b81a39eSGhennadi Procopciuc `link <https://github.com/nxp-auto-linux/linux>`__ 418b81a39eSGhennadi Procopciuc 428b81a39eSGhennadi ProcopciucHow to build 438b81a39eSGhennadi Procopciuc------------ 448b81a39eSGhennadi Procopciuc 458b81a39eSGhennadi ProcopciucThe port currently available on the S32G274ARDB2 platform is in its initial 468b81a39eSGhennadi Procopciucstage. This means that important drivers like DDR and storage are not yet 478b81a39eSGhennadi Procopciucavailable. Consequently, the boot process depends on BootROM to load all TF-A 488b81a39eSGhennadi Procopciucstages in SRAM. To create a bootable image, the script below should be used. 498b81a39eSGhennadi ProcopciucThis script makes use of the ``mkimage`` tool, which is part of the U-Boot drop 508b81a39eSGhennadi Procopciucfor S32G274A SoCs. 518b81a39eSGhennadi Procopciuc 528b81a39eSGhennadi Procopciuc.. code:: bash 538b81a39eSGhennadi Procopciuc 548b81a39eSGhennadi Procopciuc #!/bin/bash -xe 558b81a39eSGhennadi Procopciuc TF_A="${TF_A:-`pwd`}" 568b81a39eSGhennadi Procopciuc UBOOT="${UBOOT:-${TF_A}/../u-boot}" 578b81a39eSGhennadi Procopciuc DEBUG="${DEBUG:-1}" 588b81a39eSGhennadi Procopciuc 598b81a39eSGhennadi Procopciuc FIP_BASE="0x34100000" 608b81a39eSGhennadi Procopciuc 618b81a39eSGhennadi Procopciuc if [ "${DEBUG}" -eq "1" ]; then 628b81a39eSGhennadi Procopciuc BUILD="debug" 638b81a39eSGhennadi Procopciuc else 648b81a39eSGhennadi Procopciuc BUILD="release" 658b81a39eSGhennadi Procopciuc fi 668b81a39eSGhennadi Procopciuc 678b81a39eSGhennadi Procopciuc BOOT_IMAGE="build/s32g274ardb2/${BUILD}/BOOT_IMAGE.bin" 688b81a39eSGhennadi Procopciuc BL2_BIN="build/s32g274ardb2/${BUILD}/bl2.bin" 698b81a39eSGhennadi Procopciuc FIP_BIN="build/s32g274ardb2/${BUILD}/fip.bin" 708b81a39eSGhennadi Procopciuc 718b81a39eSGhennadi Procopciuc # Generate bl2, bl31 and fip image 728b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 738b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" clean 748b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 758b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" bl2 768b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 778b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" fip 788b81a39eSGhennadi Procopciuc 798b81a39eSGhennadi Procopciuc # Extract BL2 entry 80*2074600eSKhristine Andreea Barbulescu BL2_START="0x$(poetry run memory -p s32g274ardb2 -b debug footprint | \ 818b81a39eSGhennadi Procopciuc grep BL2 | awk -F'|' '{print $3}' | xargs)" 828b81a39eSGhennadi Procopciuc # BL2 bin file size in bytes 838b81a39eSGhennadi Procopciuc BL2_SIZE="$(stat -c "%s" "${BL2_BIN}")" 848b81a39eSGhennadi Procopciuc 858b81a39eSGhennadi Procopciuc # Pack bl2.bin and fip.bin by ensuring that the FIP image will start at FIP_BASE 868b81a39eSGhennadi Procopciuc cp -vf "${BL2_BIN}" "${BOOT_IMAGE}" 878b81a39eSGhennadi Procopciuc dd if="${FIP_BIN}" of="${BOOT_IMAGE}" seek="$((FIP_BASE - BL2_START))" bs=1 888b81a39eSGhennadi Procopciuc 898b81a39eSGhennadi Procopciuc # Build a bootable image by appending the IVT 908b81a39eSGhennadi Procopciuc "${UBOOT}/tools/mkimage" \ 918b81a39eSGhennadi Procopciuc -a "${BL2_START}" \ 928b81a39eSGhennadi Procopciuc -e "${BL2_START}" \ 938b81a39eSGhennadi Procopciuc -T s32ccimage \ 948b81a39eSGhennadi Procopciuc -n "${UBOOT}/u-boot-s32.cfgout" \ 958b81a39eSGhennadi Procopciuc -d "${BOOT_IMAGE}" \ 968b81a39eSGhennadi Procopciuc fip.s32 978b81a39eSGhennadi Procopciuc 98b47d085aSGhennadi ProcopciucSoC Errata Workarounds 99b47d085aSGhennadi Procopciuc---------------------- 100b47d085aSGhennadi Procopciuc 101b47d085aSGhennadi ProcopciucThe S32G274A port of the TF-A includes compilation flags that can be used to 102b47d085aSGhennadi Procopciuccontrol the workaround for the SoC. These flags are used similarly to how the 103b47d085aSGhennadi Procopciuc:ref:`arm_cpu_macros_errata_workarounds` are used. The list of workarounds 104b47d085aSGhennadi Procopciucincludes the following switches: 105b47d085aSGhennadi Procopciuc 106b47d085aSGhennadi Procopciuc- ``ERRATA_S32_051700``: This applies erratum ERR051700 workaround to 107b47d085aSGhennadi Procopciuc SoCs part of the S32 Common Chassis family, and therefore it needs to 108b47d085aSGhennadi Procopciuc be enabled for the S32G and S32R devices. 109b47d085aSGhennadi Procopciuc 1108b81a39eSGhennadi Procopciuc.. _s32g2: https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32g-vehicle-network-processors/s32g2-processors-for-vehicle-networking:S32G2 1118b81a39eSGhennadi Procopciuc.. _s32g274ardb2: https://www.nxp.com/design/design-center/designs/s32g2-vehicle-networking-reference-design:S32G-VNP-RDB2 112