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