1*8b81a39eSGhennadi ProcopciucNXP S32G274A 2*8b81a39eSGhennadi Procopciuc============ 3*8b81a39eSGhennadi Procopciuc 4*8b81a39eSGhennadi ProcopciucS32G2 is an NXP vehicle network processor combining ASIL D safety, hardware 5*8b81a39eSGhennadi Procopciucsecurity, high-performance real-time and application processing and network 6*8b81a39eSGhennadi Procopciucacceleration. S32G2 supports the needs of new vehicle architectures: 7*8b81a39eSGhennadi Procopciucservice-oriented gateways, domain controllers, zonal processors, safety 8*8b81a39eSGhennadi Procopciucprocessors and more. It is equipped with 4 Cortex-A53 cores operating at 9*8b81a39eSGhennadi Procopciuc1.0GHz. 10*8b81a39eSGhennadi Procopciuc 11*8b81a39eSGhennadi ProcopciucThe TF-A includes support for one single S32G2-based board called S32G274ARDB2. 12*8b81a39eSGhennadi ProcopciucThe S32G-VNP-RDB2 is a compact, highly optimized and integrated board 13*8b81a39eSGhennadi Procopciucengineering for vehicle service-oriented gateway (SoG), domain control 14*8b81a39eSGhennadi Procopciucapplications, high-performance processing, safety and security applications. 15*8b81a39eSGhennadi ProcopciucMore details about this board can be found at `s32g274ardb2`_. 16*8b81a39eSGhennadi Procopciuc 17*8b81a39eSGhennadi ProcopciucBoot Flow 18*8b81a39eSGhennadi Procopciuc--------- 19*8b81a39eSGhennadi Procopciuc 20*8b81a39eSGhennadi Procopciuc:: 21*8b81a39eSGhennadi Procopciuc 22*8b81a39eSGhennadi Procopciuc BootROM -> BL2 (SRAM) -> BL31 (SRAM) -> BL33 (DDR - TODO) 23*8b81a39eSGhennadi Procopciuc 24*8b81a39eSGhennadi Procopciuc.. warning:: 25*8b81a39eSGhennadi Procopciuc This boot flow is a preliminary version that will serve as a foundation for 26*8b81a39eSGhennadi Procopciuc upcoming S32G2 contributions. The execution will hang after the BL31 stage 27*8b81a39eSGhennadi Procopciuc due to U-Boot being deployed in SRAM instead of DDR. This issue will be 28*8b81a39eSGhennadi Procopciuc resolved with the addition of the DDR driver. 29*8b81a39eSGhennadi Procopciuc 30*8b81a39eSGhennadi ProcopciucCode Locations 31*8b81a39eSGhennadi Procopciuc-------------- 32*8b81a39eSGhennadi Procopciuc 33*8b81a39eSGhennadi Procopciuc- Downstream TF-A: 34*8b81a39eSGhennadi Procopciuc `link: <https://github.com/nxp-auto-linux/arm-trusted-firmware>`__ 35*8b81a39eSGhennadi Procopciuc 36*8b81a39eSGhennadi Procopciuc- Downstream U-Boot: 37*8b81a39eSGhennadi Procopciuc `link <https://github.com/nxp-auto-linux/u-boot>`__ 38*8b81a39eSGhennadi Procopciuc 39*8b81a39eSGhennadi Procopciuc- Downstream Linux: 40*8b81a39eSGhennadi Procopciuc `link <https://github.com/nxp-auto-linux/linux>`__ 41*8b81a39eSGhennadi Procopciuc 42*8b81a39eSGhennadi ProcopciucHow to build 43*8b81a39eSGhennadi Procopciuc------------ 44*8b81a39eSGhennadi Procopciuc 45*8b81a39eSGhennadi ProcopciucThe port currently available on the S32G274ARDB2 platform is in its initial 46*8b81a39eSGhennadi Procopciucstage. This means that important drivers like DDR and storage are not yet 47*8b81a39eSGhennadi Procopciucavailable. Consequently, the boot process depends on BootROM to load all TF-A 48*8b81a39eSGhennadi Procopciucstages in SRAM. To create a bootable image, the script below should be used. 49*8b81a39eSGhennadi ProcopciucThis script makes use of the ``mkimage`` tool, which is part of the U-Boot drop 50*8b81a39eSGhennadi Procopciucfor S32G274A SoCs. 51*8b81a39eSGhennadi Procopciuc 52*8b81a39eSGhennadi Procopciuc.. code:: bash 53*8b81a39eSGhennadi Procopciuc 54*8b81a39eSGhennadi Procopciuc #!/bin/bash -xe 55*8b81a39eSGhennadi Procopciuc TF_A="${TF_A:-`pwd`}" 56*8b81a39eSGhennadi Procopciuc UBOOT="${UBOOT:-${TF_A}/../u-boot}" 57*8b81a39eSGhennadi Procopciuc DEBUG="${DEBUG:-1}" 58*8b81a39eSGhennadi Procopciuc 59*8b81a39eSGhennadi Procopciuc FIP_BASE="0x34100000" 60*8b81a39eSGhennadi Procopciuc 61*8b81a39eSGhennadi Procopciuc if [ "${DEBUG}" -eq "1" ]; then 62*8b81a39eSGhennadi Procopciuc BUILD="debug" 63*8b81a39eSGhennadi Procopciuc else 64*8b81a39eSGhennadi Procopciuc BUILD="release" 65*8b81a39eSGhennadi Procopciuc fi 66*8b81a39eSGhennadi Procopciuc 67*8b81a39eSGhennadi Procopciuc BOOT_IMAGE="build/s32g274ardb2/${BUILD}/BOOT_IMAGE.bin" 68*8b81a39eSGhennadi Procopciuc BL2_BIN="build/s32g274ardb2/${BUILD}/bl2.bin" 69*8b81a39eSGhennadi Procopciuc FIP_BIN="build/s32g274ardb2/${BUILD}/fip.bin" 70*8b81a39eSGhennadi Procopciuc 71*8b81a39eSGhennadi Procopciuc # Generate bl2, bl31 and fip image 72*8b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 73*8b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" clean 74*8b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 75*8b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" bl2 76*8b81a39eSGhennadi Procopciuc make -C "${TF_A}" -j9 'PLAT=s32g274ardb2' \ 77*8b81a39eSGhennadi Procopciuc BL33="${UBOOT}/u-boot-nodtb.bin" DEBUG="${DEBUG}" fip 78*8b81a39eSGhennadi Procopciuc 79*8b81a39eSGhennadi Procopciuc # Extract BL2 entry 80*8b81a39eSGhennadi Procopciuc BL2_START="0x$(poetry run memory -p s32g274ardb2 -b debug -f | \ 81*8b81a39eSGhennadi Procopciuc grep BL2 | awk -F'|' '{print $3}' | xargs)" 82*8b81a39eSGhennadi Procopciuc # BL2 bin file size in bytes 83*8b81a39eSGhennadi Procopciuc BL2_SIZE="$(stat -c "%s" "${BL2_BIN}")" 84*8b81a39eSGhennadi Procopciuc 85*8b81a39eSGhennadi Procopciuc # Pack bl2.bin and fip.bin by ensuring that the FIP image will start at FIP_BASE 86*8b81a39eSGhennadi Procopciuc cp -vf "${BL2_BIN}" "${BOOT_IMAGE}" 87*8b81a39eSGhennadi Procopciuc dd if="${FIP_BIN}" of="${BOOT_IMAGE}" seek="$((FIP_BASE - BL2_START))" bs=1 88*8b81a39eSGhennadi Procopciuc 89*8b81a39eSGhennadi Procopciuc # Build a bootable image by appending the IVT 90*8b81a39eSGhennadi Procopciuc "${UBOOT}/tools/mkimage" \ 91*8b81a39eSGhennadi Procopciuc -a "${BL2_START}" \ 92*8b81a39eSGhennadi Procopciuc -e "${BL2_START}" \ 93*8b81a39eSGhennadi Procopciuc -T s32ccimage \ 94*8b81a39eSGhennadi Procopciuc -n "${UBOOT}/u-boot-s32.cfgout" \ 95*8b81a39eSGhennadi Procopciuc -d "${BOOT_IMAGE}" \ 96*8b81a39eSGhennadi Procopciuc fip.s32 97*8b81a39eSGhennadi Procopciuc 98*8b81a39eSGhennadi Procopciuc.. _s32g2: https://www.nxp.com/products/processors-and-microcontrollers/s32-automotive-platform/s32g-vehicle-network-processors/s32g2-processors-for-vehicle-networking:S32G2 99*8b81a39eSGhennadi Procopciuc.. _s32g274ardb2: https://www.nxp.com/design/design-center/designs/s32g2-vehicle-networking-reference-design:S32G-VNP-RDB2 100