xref: /aosp_15_r20/external/arm-trusted-firmware/docs/plat/nxp/nxp-layerscape.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong ParkNXP SoCs - Overview
2*54fd6939SJiyong Park=====================
3*54fd6939SJiyong Park.. section-numbering::
4*54fd6939SJiyong Park    :suffix: .
5*54fd6939SJiyong Park
6*54fd6939SJiyong ParkThe QorIQ family of ARM based SoCs that are supported on TF-A are:
7*54fd6939SJiyong Park
8*54fd6939SJiyong Park1. LX2160A
9*54fd6939SJiyong Park
10*54fd6939SJiyong Park- SoC Overview:
11*54fd6939SJiyong Park
12*54fd6939SJiyong ParkThe LX2160A multicore processor, the highest-performance member of the
13*54fd6939SJiyong ParkLayerscape family, combines FinFET process technology's low power and
14*54fd6939SJiyong Parksixteen Arm® Cortex®-A72 cores with datapath acceleration optimized for
15*54fd6939SJiyong ParkL2/3 packet processing, together with security offload, robust traffic
16*54fd6939SJiyong Parkmanagement and quality of service.
17*54fd6939SJiyong Park
18*54fd6939SJiyong ParkDetails about LX2160A can be found at `lx2160a`_.
19*54fd6939SJiyong Park
20*54fd6939SJiyong Park- LX2160ARDB Board:
21*54fd6939SJiyong Park
22*54fd6939SJiyong ParkThe LX2160A reference design board provides a comprehensive platform
23*54fd6939SJiyong Parkthat enables design and evaluation of the LX2160A or LX2162A processors. It
24*54fd6939SJiyong Parkcomes preloaded with a board support package (BSP) based on a standard Linux
25*54fd6939SJiyong Parkkernel.
26*54fd6939SJiyong Park
27*54fd6939SJiyong ParkBoard details can be fetched from the link: `lx2160ardb`_.
28*54fd6939SJiyong Park
29*54fd6939SJiyong Park2. LS1028A
30*54fd6939SJiyong Park
31*54fd6939SJiyong Park- SoC Overview:
32*54fd6939SJiyong Park
33*54fd6939SJiyong ParkThe Layerscape LS1028A applications processor for industrial and
34*54fd6939SJiyong Parkautomotive includes a time-sensitive networking (TSN) -enabled Ethernet
35*54fd6939SJiyong Parkswitch and Ethernet controllers to support converged IT and OT networks.
36*54fd6939SJiyong ParkTwo powerful 64-bit Arm®v8 cores support real-time processing for
37*54fd6939SJiyong Parkindustrial control and virtual machines for edge computing in the IoT.
38*54fd6939SJiyong ParkThe integrated GPU and LCD controller enable Human-Machine Interface
39*54fd6939SJiyong Park(HMI) systems with next-generation interfaces.
40*54fd6939SJiyong Park
41*54fd6939SJiyong ParkDetails about LS1028A can be found at `ls1028a`_.
42*54fd6939SJiyong Park
43*54fd6939SJiyong Park- LS1028ARDB Boards:
44*54fd6939SJiyong Park
45*54fd6939SJiyong ParkThe LS1028A reference design board (RDB) is a computing, evaluation,
46*54fd6939SJiyong Parkand development platform that supports industrial IoT applications, human
47*54fd6939SJiyong Parkmachine interface solutions, and industrial networking.
48*54fd6939SJiyong Park
49*54fd6939SJiyong ParkDetails about LS1028A RDB board can be found at `ls1028ardb`_.
50*54fd6939SJiyong Park
51*54fd6939SJiyong ParkTable of supported boot-modes by each platform & platform that needs FIP-DDR:
52*54fd6939SJiyong Park-----------------------------------------------------------------------------
53*54fd6939SJiyong Park
54*54fd6939SJiyong Park+---------------------+---------------------------------------------------------------------+-----------------+
55*54fd6939SJiyong Park|                     |                            BOOT_MODE                                |                 |
56*54fd6939SJiyong Park|       PLAT          +-------+--------+-------+-------+-------+-------------+--------------+ fip_ddr_needed  |
57*54fd6939SJiyong Park|                     |  sd   |  qspi  |  nor  | nand  | emmc  | flexspi_nor | flexspi_nand |                 |
58*54fd6939SJiyong Park+=====================+=======+========+=======+=======+=======+=============+==============+=================+
59*54fd6939SJiyong Park|     lx2160ardb      |  yes  |        |       |       |  yes  |   yes       |              |       yes       |
60*54fd6939SJiyong Park+---------------------+-------+--------+-------+-------+-------+-------------+--------------+-----------------+
61*54fd6939SJiyong Park|     ls1028ardb      |  yes  |        |       |       |  yes  |   yes       |              |       no        |
62*54fd6939SJiyong Park+---------------------+-------+--------+-------+-------+-------+-------------+--------------+-----------------+
63*54fd6939SJiyong Park
64*54fd6939SJiyong Park
65*54fd6939SJiyong ParkBoot Sequence
66*54fd6939SJiyong Park-------------
67*54fd6939SJiyong Park::
68*54fd6939SJiyong Park
69*54fd6939SJiyong Park+                           Secure World        |     Normal World
70*54fd6939SJiyong Park+ EL0                                           |
71*54fd6939SJiyong Park+                                               |
72*54fd6939SJiyong Park+ EL1                           BL32(Tee OS)    |     kernel
73*54fd6939SJiyong Park+                                ^ |            |       ^
74*54fd6939SJiyong Park+                                | |            |       |
75*54fd6939SJiyong Park+ EL2                            | |            |     BL33(u-boot)
76*54fd6939SJiyong Park+                                | |            |      ^
77*54fd6939SJiyong Park+                                | v            |     /
78*54fd6939SJiyong Park+ EL3        BootROM --> BL2 --> BL31 ---------------/
79*54fd6939SJiyong Park+
80*54fd6939SJiyong Park
81*54fd6939SJiyong ParkBoot Sequence with FIP-DDR
82*54fd6939SJiyong Park--------------------------
83*54fd6939SJiyong Park::
84*54fd6939SJiyong Park
85*54fd6939SJiyong Park+                           Secure World        |     Normal World
86*54fd6939SJiyong Park+ EL0                                           |
87*54fd6939SJiyong Park+                                               |
88*54fd6939SJiyong Park+ EL1               fip-ddr     BL32(Tee OS)    |     kernel
89*54fd6939SJiyong Park+                     ^ |         ^ |           |       ^
90*54fd6939SJiyong Park+                     | |         | |           |       |
91*54fd6939SJiyong Park+ EL2                 | |         | |           |     BL33(u-boot)
92*54fd6939SJiyong Park+                     | |         | |           |      ^
93*54fd6939SJiyong Park+                     | v         | v           |     /
94*54fd6939SJiyong Park+ EL3     BootROM --> BL2 -----> BL31 ---------------/
95*54fd6939SJiyong Park+
96*54fd6939SJiyong Park
97*54fd6939SJiyong ParkDDR Memory Layout
98*54fd6939SJiyong Park--------------------------
99*54fd6939SJiyong Park
100*54fd6939SJiyong ParkNXP Platforms divide DRAM into banks:
101*54fd6939SJiyong Park
102*54fd6939SJiyong Park- DRAM0 Bank:  Maximum size of this bank is fixed to 2GB, DRAM0 size is defined in platform_def.h if it is less than 2GB.
103*54fd6939SJiyong Park
104*54fd6939SJiyong Park- DRAM1 ~ DRAMn Bank:  Greater than 2GB belongs to DRAM1 and following banks, and size of DRAMn Bank varies for one platform to others.
105*54fd6939SJiyong Park
106*54fd6939SJiyong ParkThe following diagram is default DRAM0 memory layout in which secure memory is at top of DRAM0.
107*54fd6939SJiyong Park
108*54fd6939SJiyong Park::
109*54fd6939SJiyong Park
110*54fd6939SJiyong Park  high  +---------------------------------------------+
111*54fd6939SJiyong Park        |                                             |
112*54fd6939SJiyong Park        |   Secure EL1 Payload Shared Memory (2 MB)   |
113*54fd6939SJiyong Park        |                                             |
114*54fd6939SJiyong Park        +---------------------------------------------+
115*54fd6939SJiyong Park        |                                             |
116*54fd6939SJiyong Park        |            Secure Memory (64 MB)            |
117*54fd6939SJiyong Park        |                                             |
118*54fd6939SJiyong Park        +---------------------------------------------+
119*54fd6939SJiyong Park        |                                             |
120*54fd6939SJiyong Park        |             Non Secure Memory               |
121*54fd6939SJiyong Park        |                                             |
122*54fd6939SJiyong Park  low   +---------------------------------------------+
123*54fd6939SJiyong Park
124*54fd6939SJiyong ParkHow to build
125*54fd6939SJiyong Park=============
126*54fd6939SJiyong Park
127*54fd6939SJiyong ParkCode Locations
128*54fd6939SJiyong Park--------------
129*54fd6939SJiyong Park
130*54fd6939SJiyong Park-  OP-TEE:
131*54fd6939SJiyong Park   `link <https://source.codeaurora.org/external/qoriq/qoriq-components/optee_os>`__
132*54fd6939SJiyong Park
133*54fd6939SJiyong Park-  U-Boot:
134*54fd6939SJiyong Park   `link <https://source.codeaurora.org/external/qoriq/qoriq-components/u-boot>`__
135*54fd6939SJiyong Park
136*54fd6939SJiyong Park-  RCW:
137*54fd6939SJiyong Park   `link <https://source.codeaurora.org/external/qoriq/qoriq-components/rcw>`__
138*54fd6939SJiyong Park
139*54fd6939SJiyong Park-  ddr-phy-binary: Required by platforms that need fip-ddr.
140*54fd6939SJiyong Park   `link <https:://github.com/NXP/ddr-phy-binary>`__
141*54fd6939SJiyong Park
142*54fd6939SJiyong Park-  cst: Required for TBBR.
143*54fd6939SJiyong Park   `link <https:://source.codeaurora.org/external/qoriq/qoriq-components/cst>`__
144*54fd6939SJiyong Park
145*54fd6939SJiyong ParkBuild Procedure
146*54fd6939SJiyong Park---------------
147*54fd6939SJiyong Park
148*54fd6939SJiyong Park-  Fetch all the above repositories into local host.
149*54fd6939SJiyong Park
150*54fd6939SJiyong Park-  Prepare AARCH64 toolchain and set the environment variable "CROSS_COMPILE".
151*54fd6939SJiyong Park
152*54fd6939SJiyong Park   .. code:: shell
153*54fd6939SJiyong Park
154*54fd6939SJiyong Park       export CROSS_COMPILE=.../bin/aarch64-linux-gnu-
155*54fd6939SJiyong Park
156*54fd6939SJiyong Park-  Build RCW. Refer README from the respective cloned folder for more details.
157*54fd6939SJiyong Park
158*54fd6939SJiyong Park-  Build u-boot and OPTee firstly, and get binary images: u-boot.bin and tee.bin.
159*54fd6939SJiyong Park   For u-boot you can use the <platform>_tfa_defconfig for build.
160*54fd6939SJiyong Park
161*54fd6939SJiyong Park-  Copy/clone the repo "ddr-phy-binary" to the tfa directory for platform needing ddr-fip.
162*54fd6939SJiyong Park
163*54fd6939SJiyong Park-  Below are the steps to build TF-A images for the supported platforms.
164*54fd6939SJiyong Park
165*54fd6939SJiyong ParkCompilation steps without BL32
166*54fd6939SJiyong Park~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
167*54fd6939SJiyong Park
168*54fd6939SJiyong ParkBUILD BL2:
169*54fd6939SJiyong Park
170*54fd6939SJiyong Park-To compile
171*54fd6939SJiyong Park   .. code:: shell
172*54fd6939SJiyong Park
173*54fd6939SJiyong Park       make PLAT=$PLAT \
174*54fd6939SJiyong Park       BOOT_MODE=<platform_supported_boot_mode> \
175*54fd6939SJiyong Park       RCW=$RCW_BIN \
176*54fd6939SJiyong Park       pbl
177*54fd6939SJiyong Park
178*54fd6939SJiyong ParkBUILD FIP:
179*54fd6939SJiyong Park
180*54fd6939SJiyong Park   .. code:: shell
181*54fd6939SJiyong Park
182*54fd6939SJiyong Park       make PLAT=$PLAT \
183*54fd6939SJiyong Park       BOOT_MODE=<platform_supported_boot_mode> \
184*54fd6939SJiyong Park       RCW=$RCW_BIN \
185*54fd6939SJiyong Park       BL33=$UBOOT_SECURE_BIN \
186*54fd6939SJiyong Park       pbl \
187*54fd6939SJiyong Park       fip
188*54fd6939SJiyong Park
189*54fd6939SJiyong ParkCompilation steps with BL32
190*54fd6939SJiyong Park~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191*54fd6939SJiyong Park
192*54fd6939SJiyong ParkBUILD BL2:
193*54fd6939SJiyong Park
194*54fd6939SJiyong Park-To compile
195*54fd6939SJiyong Park   .. code:: shell
196*54fd6939SJiyong Park
197*54fd6939SJiyong Park       make PLAT=$PLAT \
198*54fd6939SJiyong Park       BOOT_MODE=<platform_supported_boot_mode> \
199*54fd6939SJiyong Park       RCW=$RCW_BIN \
200*54fd6939SJiyong Park       BL32=$TEE_BIN SPD=opteed\
201*54fd6939SJiyong Park       pbl
202*54fd6939SJiyong Park
203*54fd6939SJiyong ParkBUILD FIP:
204*54fd6939SJiyong Park
205*54fd6939SJiyong Park   .. code:: shell
206*54fd6939SJiyong Park
207*54fd6939SJiyong Park       make PLAT=$PLAT \
208*54fd6939SJiyong Park       BOOT_MODE=<platform_supported_boot_mode> \
209*54fd6939SJiyong Park       RCW=$RCW_BIN \
210*54fd6939SJiyong Park       BL32=$TEE_BIN SPD=opteed\
211*54fd6939SJiyong Park       BL33=$UBOOT_SECURE_BIN \
212*54fd6939SJiyong Park       pbl \
213*54fd6939SJiyong Park       fip
214*54fd6939SJiyong Park
215*54fd6939SJiyong Park
216*54fd6939SJiyong ParkBUILD fip-ddr (Mandatory for certain platforms, refer table above):
217*54fd6939SJiyong Park~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
218*54fd6939SJiyong Park
219*54fd6939SJiyong Park-To compile additional fip-ddr for selected platforms(Refer above table if the platform needs fip-ddr).
220*54fd6939SJiyong Park   .. code:: shell
221*54fd6939SJiyong Park
222*54fd6939SJiyong Park	make PLAT=<platform_name> fip-ddr
223*54fd6939SJiyong Park
224*54fd6939SJiyong Park
225*54fd6939SJiyong ParkDeploy ATF Images
226*54fd6939SJiyong Park=================
227*54fd6939SJiyong Park
228*54fd6939SJiyong ParkNote: The size in the standard uboot commands for copy to nor, qspi, nand or sd
229*54fd6939SJiyong Parkshould be modified based on the binary size of the image to be copied.
230*54fd6939SJiyong Park
231*54fd6939SJiyong Park-  Deploy ATF images on flexspi-Nor flash Alt Bank from U-Boot prompt.
232*54fd6939SJiyong Park   --  Commands to flash images for bl2_xxx.pbl and fip.bin.
233*54fd6939SJiyong Park
234*54fd6939SJiyong Park   .. code:: shell
235*54fd6939SJiyong Park
236*54fd6939SJiyong Park        tftp 82000000  $path/bl2_flexspi_nor.pbl;
237*54fd6939SJiyong Park        i2c mw 66 50 20;sf probe 0:0; sf erase 0 +$filesize; sf write 0x82000000 0x0 $filesize;
238*54fd6939SJiyong Park
239*54fd6939SJiyong Park        tftp 82000000  $path/fip.bin;
240*54fd6939SJiyong Park        i2c mw 66 50 20;sf probe 0:0; sf erase 0x100000 +$filesize; sf write 0x82000000 0x100000 $filesize;
241*54fd6939SJiyong Park
242*54fd6939SJiyong Park   --  Next step is valid for platform where FIP-DDR is needed.
243*54fd6939SJiyong Park
244*54fd6939SJiyong Park   .. code:: shell
245*54fd6939SJiyong Park
246*54fd6939SJiyong Park        tftp 82000000  $path/ddr_fip.bin;
247*54fd6939SJiyong Park        i2c mw 66 50 20;sf probe 0:0; sf erase 0x800000 +$filesize; sf write 0x82000000 0x800000 $filesize;
248*54fd6939SJiyong Park
249*54fd6939SJiyong Park   --  Then reset to alternate bank to boot up ATF.
250*54fd6939SJiyong Park
251*54fd6939SJiyong Park   .. code:: shell
252*54fd6939SJiyong Park
253*54fd6939SJiyong Park        qixisreset altbank;
254*54fd6939SJiyong Park
255*54fd6939SJiyong Park-  Deploy ATF images on SD/eMMC from U-Boot prompt.
256*54fd6939SJiyong Park   -- file_size_in_block_sizeof_512 = (Size_of_bytes_tftp / 512)
257*54fd6939SJiyong Park
258*54fd6939SJiyong Park   .. code:: shell
259*54fd6939SJiyong Park
260*54fd6939SJiyong Park        mmc dev <idx>; (idx = 1 for eMMC; idx = 0 for SD)
261*54fd6939SJiyong Park
262*54fd6939SJiyong Park        tftp 82000000  $path/bl2_<sd>_or_<emmc>.pbl;
263*54fd6939SJiyong Park        mmc write 82000000 8 <file_size_in_block_sizeof_512>;
264*54fd6939SJiyong Park
265*54fd6939SJiyong Park        tftp 82000000  $path/fip.bin;
266*54fd6939SJiyong Park        mmc write 82000000 0x800 <file_size_in_block_sizeof_512>;
267*54fd6939SJiyong Park
268*54fd6939SJiyong Park    --  Next step is valid for platform that needs FIP-DDR.
269*54fd6939SJiyong Park
270*54fd6939SJiyong Park   .. code:: shell
271*54fd6939SJiyong Park
272*54fd6939SJiyong Park        tftp 82000000  $path/ddr_fip.bin;
273*54fd6939SJiyong Park        mmc write 82000000 0x4000 <file_size_in_block_sizeof_512>;
274*54fd6939SJiyong Park
275*54fd6939SJiyong Park   --  Then reset to sd/emmc to boot up ATF from sd/emmc as boot-source.
276*54fd6939SJiyong Park
277*54fd6939SJiyong Park   .. code:: shell
278*54fd6939SJiyong Park
279*54fd6939SJiyong Park        qixisreset <sd or emmc>;
280*54fd6939SJiyong Park
281*54fd6939SJiyong ParkTrusted Board Boot:
282*54fd6939SJiyong Park===================
283*54fd6939SJiyong Park
284*54fd6939SJiyong ParkFor TBBR, the binary name changes:
285*54fd6939SJiyong Park
286*54fd6939SJiyong Park+-------------+--------------------------+---------+-------------------+
287*54fd6939SJiyong Park|  Boot Type  |           BL2            |   FIP   |      FIP-DDR      |
288*54fd6939SJiyong Park+=============+==========================+=========+===================+
289*54fd6939SJiyong Park| Normal Boot |  bl2_<boot_mode>.pbl     | fip.bin | ddr_fip.bin       |
290*54fd6939SJiyong Park+-------------+--------------------------+---------+-------------------+
291*54fd6939SJiyong Park| TBBR Boot   |  bl2_<boot_mode>_sec.pbl | fip.bin | ddr_fip_sec.bin   |
292*54fd6939SJiyong Park+-------------+--------------------------+---------+-------------------+
293*54fd6939SJiyong Park
294*54fd6939SJiyong ParkRefer `nxp-ls-tbbr.rst`_ for detailed user steps.
295*54fd6939SJiyong Park
296*54fd6939SJiyong Park
297*54fd6939SJiyong Park.. _lx2160a: https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/layerscape-processors/layerscape-lx2160a-lx2120a-lx2080a-processors:LX2160A
298*54fd6939SJiyong Park.. _lx2160ardb: https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/layerscape-communication-process/layerscape-lx2160a-multicore-communications-processor:LX2160A
299*54fd6939SJiyong Park.. _ls1028a: https://www.nxp.com/products/processors-and-microcontrollers/arm-processors/layerscape-processors/layerscape-1028a-applications-processor:LS1028A
300*54fd6939SJiyong Park.. _ls1028ardb: https://www.nxp.com/design/qoriq-developer-resources/layerscape-ls1028a-reference-design-board:LS1028ARDB
301*54fd6939SJiyong Park.. _nxp-ls-tbbr.rst: ./nxp-ls-tbbr.rst
302