blob: 6429ede7a5fb0798e13dfcf31457121417d6745b [file] [log] [blame]
Paul Beesleyd2fcc4e2019-05-29 13:59:40 +01001Arm Juno Development Platform
2=============================
3
4Platform-specific build options
5-------------------------------
6
7- ``JUNO_TZMP1`` : Boolean option to configure Juno to be used for TrustZone
8 Media Protection (TZ-MP1). Default value of this flag is 0.
9
10Running software on Juno
11------------------------
12
13This version of TF-A has been tested on variants r0, r1 and r2 of Juno.
14
15To execute the software stack on Juno, the version of the Juno board recovery
16image indicated in the `Linaro Release Notes`_ must be installed. If you have an
17earlier version installed or are unsure which version is installed, please
18re-install the recovery image by following the
19`Instructions for using Linaro's deliverables on Juno`_.
20
21Preparing TF-A images
22---------------------
23
24After building TF-A, the files ``bl1.bin`` and ``fip.bin`` need copying to the
25``SOFTWARE/`` directory of the Juno SD card.
26
27Creating a Firmware Image Package (FIP)
28---------------------------------------
29
30This section provides Juno and FVP specific instructions to build Trusted
31Firmware, obtain the additional required firmware, and pack it all together in
32a single FIP binary. It assumes that a Linaro release has been installed.
33
34.. note::
35 Pre-built binaries for AArch32 are available from Linaro Release 16.12
36 onwards. Before that release, pre-built binaries are only available for
37 AArch64.
38
39.. warning::
40 Follow the full instructions for one platform before switching to a
41 different one. Mixing instructions for different platforms may result in
42 corrupted binaries.
43
44.. warning::
45 The uboot image downloaded by the Linaro workspace script does not always
46 match the uboot image packaged as BL33 in the corresponding fip file. It is
47 recommended to use the version that is packaged in the fip file using the
48 instructions below.
49
50.. note::
51 For the FVP, the kernel FDT is packaged in FIP during build and loaded
52 by the firmware at runtime.
53
54#. Clean the working directory
55
56 .. code:: shell
57
58 make realclean
59
60#. Obtain SCP_BL2 (Juno) and BL33 (all platforms)
61
62 Use the fiptool to extract the SCP_BL2 and BL33 images from the FIP
63 package included in the Linaro release:
64
65 .. code:: shell
66
67 # Build the fiptool
68 make [DEBUG=1] [V=1] fiptool
69
70 # Unpack firmware images from Linaro FIP
71 ./tools/fiptool/fiptool unpack <path-to-linaro-release>/[SOFTWARE]/fip.bin
72
73 The unpack operation will result in a set of binary images extracted to the
74 current working directory. The SCP_BL2 image corresponds to
75 ``scp-fw.bin`` and BL33 corresponds to ``nt-fw.bin``.
76
77 .. note::
78 The fiptool will complain if the images to be unpacked already
79 exist in the current directory. If that is the case, either delete those
80 files or use the ``--force`` option to overwrite.
81
82 .. note::
83 For AArch32, the instructions below assume that nt-fw.bin is a
84 normal world boot loader that supports AArch32.
85
86#. Build TF-A images and create a new FIP for FVP
87
88 .. code:: shell
89
90 # AArch64
91 make PLAT=fvp BL33=nt-fw.bin all fip
92
93 # AArch32
94 make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=nt-fw.bin all fip
95
96#. Build TF-A images and create a new FIP for Juno
97
98 For AArch64:
99
100 Building for AArch64 on Juno simply requires the addition of ``SCP_BL2``
101 as a build parameter.
102
103 .. code:: shell
104
105 make PLAT=juno BL33=nt-fw.bin SCP_BL2=scp-fw.bin all fip
106
107 For AArch32:
108
109 Hardware restrictions on Juno prevent cold reset into AArch32 execution mode,
110 therefore BL1 and BL2 must be compiled for AArch64, and BL32 is compiled
111 separately for AArch32.
112
113 - Before building BL32, the environment variable ``CROSS_COMPILE`` must point
114 to the AArch32 Linaro cross compiler.
115
116 .. code:: shell
117
118 export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
119
120 - Build BL32 in AArch32.
121
122 .. code:: shell
123
124 make ARCH=aarch32 PLAT=juno AARCH32_SP=sp_min \
125 RESET_TO_SP_MIN=1 JUNO_AARCH32_EL3_RUNTIME=1 bl32
126
127 - Save ``bl32.bin`` to a temporary location and clean the build products.
128
129 ::
130
131 cp <path-to-build>/bl32.bin <path-to-temporary>
132 make realclean
133
134 - Before building BL1 and BL2, the environment variable ``CROSS_COMPILE``
135 must point to the AArch64 Linaro cross compiler.
136
137 .. code:: shell
138
139 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
140
141 - The following parameters should be used to build BL1 and BL2 in AArch64
142 and point to the BL32 file.
143
144 .. code:: shell
145
146 make ARCH=aarch64 PLAT=juno JUNO_AARCH32_EL3_RUNTIME=1 \
147 BL33=nt-fw.bin SCP_BL2=scp-fw.bin \
148 BL32=<path-to-temporary>/bl32.bin all fip
149
150The resulting BL1 and FIP images may be found in:
151
152::
153
154 # Juno
155 ./build/juno/release/bl1.bin
156 ./build/juno/release/fip.bin
157
158 # FVP
159 ./build/fvp/release/bl1.bin
160 ./build/fvp/release/fip.bin
161
162
163Booting Firmware Update images
164------------------------------
165
166The new images must be programmed in flash memory by adding
167an entry in the ``SITE1/HBI0262x/images.txt`` configuration file
168on the Juno SD card (where ``x`` depends on the revision of the Juno board).
169Refer to the `Juno Getting Started Guide`_, section 2.3 "Flash memory
170programming" for more information. User should ensure these do not
171overlap with any other entries in the file.
172
173::
174
175 NOR10UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
176 NOR10ADDRESS: 0x00400000 ;Image Flash Address [ns_bl2u_base_address]
177 NOR10FILE: \SOFTWARE\fwu_fip.bin ;Image File Name
178 NOR10LOAD: 00000000 ;Image Load Address
179 NOR10ENTRY: 00000000 ;Image Entry Point
180
181 NOR11UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
182 NOR11ADDRESS: 0x03EB8000 ;Image Flash Address [ns_bl1u_base_address]
183 NOR11FILE: \SOFTWARE\ns_bl1u.bin ;Image File Name
184 NOR11LOAD: 00000000 ;Image Load Address
185
186The address ns_bl1u_base_address is the value of NS_BL1U_BASE - 0x8000000.
187In the same way, the address ns_bl2u_base_address is the value of
188NS_BL2U_BASE - 0x8000000.
189
190.. _plat_juno_booting_el3_payload:
191
192Booting an EL3 payload
193----------------------
194
195If the EL3 payload is able to execute in place, it may be programmed in flash
196memory by adding an entry in the ``SITE1/HBI0262x/images.txt`` configuration file
197on the Juno SD card (where ``x`` depends on the revision of the Juno board).
198Refer to the `Juno Getting Started Guide`_, section 2.3 "Flash memory
199programming" for more information.
200
201Alternatively, the same DS-5 command mentioned in the FVP section above can
202be used to load the EL3 payload's ELF file over JTAG on Juno.
203
204For more information on EL3 payloads in general, see
205:ref:`alt_boot_flows_el3_payload`.
206
207Booting a preloaded kernel image
208--------------------------------
209
210The Trusted Firmware must be compiled in a similar way as for FVP explained
211above. The process to load binaries to memory is the one explained in
212`plat_juno_booting_el3_payload`_.
213
214Testing System Suspend
215----------------------
216
217The SYSTEM SUSPEND is a PSCI API which can be used to implement system suspend
218to RAM. For more details refer to section 5.16 of `PSCI`_. To test system suspend
219on Juno, at the linux shell prompt, issue the following command:
220
221.. code:: shell
222
223 echo +10 > /sys/class/rtc/rtc0/wakealarm
224 echo -n mem > /sys/power/state
225
226The Juno board should suspend to RAM and then wakeup after 10 seconds due to
227wakeup interrupt from RTC.
228
229Additional Resources
230--------------------
231
232Please visit the `Arm Platforms Portal`_ to get support and obtain any other Juno
233software information. Please also refer to the `Juno Getting Started Guide`_ to
234get more detailed information about the Juno Arm development platform and how to
235configure it.
236
237--------------
238
239*Copyright (c) 2019, Arm Limited. All rights reserved.*
240
241.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes
242.. _Instructions for using Linaro's deliverables on Juno: https://community.arm.com/dev-platforms/w/docs/303/juno
243.. _Arm Platforms Portal: https://community.arm.com/dev-platforms/
244.. _Juno Getting Started Guide: http://infocenter.arm.com/help/topic/com.arm.doc.dui0928e/DUI0928E_juno_arm_development_platform_gsg.pdf
245.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf
246.. _Juno Arm Development Platform: http://www.arm.com/products/tools/development-boards/versatile-express/juno-arm-development-platform.php