xref: /rk3399_ARM-atf/docs/plat/s32g274a.rst (revision 978a316b1b05c5c0147fe714a422cdf157a3cf12)
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