xref: /rk3399_ARM-atf/docs/components/firmware-update.rst (revision 83993177d9d34a3e6032b71147bde86d75704f4a)
1Firmware Update (FWU)
2=====================
3
4.. contents::
5
6--------------
7
8Introduction
9------------
10
11This document describes the design of the Firmware Update (FWU) feature, which
12enables authenticated firmware to update firmware images from external
13interfaces such as USB, UART, SD-eMMC, NAND, NOR or Ethernet to SoC Non-Volatile
14memories such as NAND Flash, LPPDR2-NVM or any memory determined by the
15platform. This feature functions even when the current firmware in the system
16is corrupt or missing; it therefore may be used as a recovery mode. It may also
17be complemented by other, higher level firmware update software.
18
19FWU implements a specific part of the Trusted Board Boot Requirements (TBBR)
20specification, Arm DEN0006C-1. It should be used in conjunction with the
21`Trusted Board Boot`_ design document, which describes the image authentication
22parts of the Trusted Firmware-A (TF-A) TBBR implementation.
23
24Scope
25~~~~~
26
27This document describes the secure world FWU design. It is beyond its scope to
28describe how normal world FWU images should operate. To implement normal world
29FWU images, please refer to the "Non-Trusted Firmware Updater" requirements in
30the TBBR.
31
32FWU Overview
33------------
34
35The FWU boot flow is primarily mediated by BL1. Since BL1 executes in ROM, and
36it is usually desirable to minimize the amount of ROM code, the design allows
37some parts of FWU to be implemented in other secure and normal world images.
38Platform code may choose which parts are implemented in which images but the
39general expectation is:
40
41-  BL1 handles:
42
43   -  Detection and initiation of the FWU boot flow.
44   -  Copying images from non-secure to secure memory
45   -  FWU image authentication
46   -  Context switching between the normal and secure world during the FWU
47      process.
48
49-  Other secure world FWU images handle platform initialization required by
50   the FWU process.
51-  Normal world FWU images handle loading of firmware images from external
52   interfaces to non-secure memory.
53
54The primary requirements of the FWU feature are:
55
56#. Export a BL1 SMC interface to interoperate with other FWU images executing
57   at other Exception Levels.
58#. Export a platform interface to provide FWU common code with the information
59   it needs, and to enable platform specific FWU functionality. See the
60   `Porting Guide`_ for details of this interface.
61
62TF-A uses abbreviated image terminology for FWU images like for other TF-A
63images. An overview of this terminology can be found `here`_.
64
65The following diagram shows the FWU boot flow for Arm development platforms.
66Arm CSS platforms like Juno have a System Control Processor (SCP), and these
67use all defined FWU images. Other platforms may use a subset of these.
68
69|Flow Diagram|
70
71Image Identification
72--------------------
73
74Each FWU image and certificate is identified by a unique ID, defined by the
75platform, which BL1 uses to fetch an image descriptor (``image_desc_t``) via a
76call to ``bl1_plat_get_image_desc()``. The same ID is also used to prepare the
77Chain of Trust (Refer to the `Authentication Framework Design`_
78for more information).
79
80The image descriptor includes the following information:
81
82-  Executable or non-executable image. This indicates whether the normal world
83   is permitted to request execution of a secure world FWU image (after
84   authentication). Secure world certificates and non-AP images are examples
85   of non-executable images.
86-  Secure or non-secure image. This indicates whether the image is
87   authenticated/executed in secure or non-secure memory.
88-  Image base address and size.
89-  Image entry point configuration (an ``entry_point_info_t``).
90-  FWU image state.
91
92BL1 uses the FWU image descriptors to:
93
94-  Validate the arguments of FWU SMCs
95-  Manage the state of the FWU process
96-  Initialize the execution state of the next FWU image.
97
98FWU State Machine
99-----------------
100
101BL1 maintains state for each FWU image during FWU execution. FWU images at lower
102Exception Levels raise SMCs to invoke FWU functionality in BL1, which causes
103BL1 to update its FWU image state. The BL1 image states and valid state
104transitions are shown in the diagram below. Note that secure images have a more
105complex state machine than non-secure images.
106
107|FWU state machine|
108
109The following is a brief description of the supported states:
110
111-  RESET: This is the initial state of every image at the start of FWU.
112   Authentication failure also leads to this state. A secure
113   image may yield to this state if it has completed execution.
114   It can also be reached by using ``FWU_SMC_IMAGE_RESET``.
115
116-  COPYING: This is the state of a secure image while BL1 is copying it
117   in blocks from non-secure to secure memory.
118
119-  COPIED: This is the state of a secure image when BL1 has completed
120   copying it to secure memory.
121
122-  AUTHENTICATED: This is the state of an image when BL1 has successfully
123   authenticated it.
124
125-  EXECUTED: This is the state of a secure, executable image when BL1 has
126   passed execution control to it.
127
128-  INTERRUPTED: This is the state of a secure, executable image after it has
129   requested BL1 to resume normal world execution.
130
131BL1 SMC Interface
132-----------------
133
134BL1_SMC_CALL_COUNT
135~~~~~~~~~~~~~~~~~~
136
137::
138
139    Arguments:
140        uint32_t function ID : 0x0
141
142    Return:
143        uint32_t
144
145This SMC returns the number of SMCs supported by BL1.
146
147BL1_SMC_UID
148~~~~~~~~~~~
149
150::
151
152    Arguments:
153        uint32_t function ID : 0x1
154
155    Return:
156        UUID : 32 bits in each of w0-w3 (or r0-r3 for AArch32 callers)
157
158This SMC returns the 128-bit `Universally Unique Identifier`_ for the
159BL1 SMC service.
160
161BL1_SMC_VERSION
162~~~~~~~~~~~~~~~
163
164::
165
166    Argument:
167        uint32_t function ID : 0x3
168
169    Return:
170        uint32_t : Bits [31:16] Major Version
171                   Bits [15:0] Minor Version
172
173This SMC returns the current version of the BL1 SMC service.
174
175BL1_SMC_RUN_IMAGE
176~~~~~~~~~~~~~~~~~
177
178::
179
180    Arguments:
181        uint32_t           function ID : 0x4
182        entry_point_info_t *ep_info
183
184    Return:
185        void
186
187    Pre-conditions:
188        if (normal world caller) synchronous exception
189        if (ep_info not EL3) synchronous exception
190
191This SMC passes execution control to an EL3 image described by the provided
192``entry_point_info_t`` structure. In the normal TF-A boot flow, BL2 invokes
193this SMC for BL1 to pass execution control to BL31.
194
195FWU_SMC_IMAGE_COPY
196~~~~~~~~~~~~~~~~~~
197
198::
199
200    Arguments:
201        uint32_t     function ID : 0x10
202        unsigned int image_id
203        uintptr_t    image_addr
204        unsigned int block_size
205        unsigned int image_size
206
207    Return:
208        int : 0 (Success)
209            : -ENOMEM
210            : -EPERM
211
212    Pre-conditions:
213        if (image_id is invalid) return -EPERM
214        if (image_id is non-secure image) return -EPERM
215        if (image_id state is not (RESET or COPYING)) return -EPERM
216        if (secure world caller) return -EPERM
217        if (image_addr + block_size overflows) return -ENOMEM
218        if (image destination address + image_size overflows) return -ENOMEM
219        if (source block is in secure memory) return -ENOMEM
220        if (source block is not mapped into BL1) return -ENOMEM
221        if (image_size > free secure memory) return -ENOMEM
222        if (image overlaps another image) return -EPERM
223
224This SMC copies the secure image indicated by ``image_id`` from non-secure memory
225to secure memory for later authentication. The image may be copied in a single
226block or multiple blocks. In either case, the total size of the image must be
227provided in ``image_size`` when invoking this SMC for the first time for each
228image; it is ignored in subsequent calls (if any) for the same image.
229
230The ``image_addr`` and ``block_size`` specify the source memory block to copy from.
231The destination address is provided by the platform code.
232
233If ``block_size`` is greater than the amount of remaining bytes to copy for this
234image then the former is truncated to the latter. The copy operation is then
235considered as complete and the FWU state machine transitions to the "COPIED"
236state. If there is still more to copy, the FWU state machine stays in or
237transitions to the COPYING state (depending on the previous state).
238
239When using multiple blocks, the source blocks do not necessarily need to be in
240contiguous memory.
241
242Once the SMC is handled, BL1 returns from exception to the normal world caller.
243
244FWU_SMC_IMAGE_AUTH
245~~~~~~~~~~~~~~~~~~
246
247::
248
249    Arguments:
250        uint32_t     function ID : 0x11
251        unsigned int image_id
252        uintptr_t    image_addr
253        unsigned int image_size
254
255    Return:
256        int : 0 (Success)
257            : -ENOMEM
258            : -EPERM
259            : -EAUTH
260
261    Pre-conditions:
262        if (image_id is invalid) return -EPERM
263        if (secure world caller)
264            if (image_id state is not RESET) return -EPERM
265            if (image_addr/image_size is not mapped into BL1) return -ENOMEM
266        else // normal world caller
267            if (image_id is secure image)
268                if (image_id state is not COPIED) return -EPERM
269            else // image_id is non-secure image
270                if (image_id state is not RESET) return -EPERM
271                if (image_addr/image_size is in secure memory) return -ENOMEM
272                if (image_addr/image_size not mapped into BL1) return -ENOMEM
273
274This SMC authenticates the image specified by ``image_id``. If the image is in the
275RESET state, BL1 authenticates the image in place using the provided
276``image_addr`` and ``image_size``. If the image is a secure image in the COPIED
277state, BL1 authenticates the image from the secure memory that BL1 previously
278copied the image into.
279
280BL1 returns from exception to the caller. If authentication succeeds then BL1
281sets the image state to AUTHENTICATED. If authentication fails then BL1 returns
282the -EAUTH error and sets the image state back to RESET.
283
284FWU_SMC_IMAGE_EXECUTE
285~~~~~~~~~~~~~~~~~~~~~
286
287::
288
289    Arguments:
290        uint32_t     function ID : 0x12
291        unsigned int image_id
292
293    Return:
294        int : 0 (Success)
295            : -EPERM
296
297    Pre-conditions:
298        if (image_id is invalid) return -EPERM
299        if (secure world caller) return -EPERM
300        if (image_id is non-secure image) return -EPERM
301        if (image_id is non-executable image) return -EPERM
302        if (image_id state is not AUTHENTICATED) return -EPERM
303
304This SMC initiates execution of a previously authenticated image specified by
305``image_id``, in the other security world to the caller. The current
306implementation only supports normal world callers initiating execution of a
307secure world image.
308
309BL1 saves the normal world caller's context, sets the secure image state to
310EXECUTED, and returns from exception to the secure image.
311
312FWU_SMC_IMAGE_RESUME
313~~~~~~~~~~~~~~~~~~~~
314
315::
316
317    Arguments:
318        uint32_t   function ID : 0x13
319        register_t image_param
320
321    Return:
322        register_t : image_param (Success)
323                   : -EPERM
324
325    Pre-conditions:
326        if (normal world caller and no INTERRUPTED secure image) return -EPERM
327
328This SMC resumes execution in the other security world while there is a secure
329image in the EXECUTED/INTERRUPTED state.
330
331For normal world callers, BL1 sets the previously interrupted secure image state
332to EXECUTED. For secure world callers, BL1 sets the previously executing secure
333image state to INTERRUPTED. In either case, BL1 saves the calling world's
334context, restores the resuming world's context and returns from exception into
335the resuming world. If the call is successful then the caller provided
336``image_param`` is returned to the resumed world, otherwise an error code is
337returned to the caller.
338
339FWU_SMC_SEC_IMAGE_DONE
340~~~~~~~~~~~~~~~~~~~~~~
341
342::
343
344    Arguments:
345        uint32_t function ID : 0x14
346
347    Return:
348        int : 0 (Success)
349            : -EPERM
350
351    Pre-conditions:
352        if (normal world caller) return -EPERM
353
354This SMC indicates completion of a previously executing secure image.
355
356BL1 sets the previously executing secure image state to the RESET state,
357restores the normal world context and returns from exception into the normal
358world.
359
360FWU_SMC_UPDATE_DONE
361~~~~~~~~~~~~~~~~~~~
362
363::
364
365    Arguments:
366        uint32_t   function ID : 0x15
367        register_t client_cookie
368
369    Return:
370        N/A
371
372This SMC completes the firmware update process. BL1 calls the platform specific
373function ``bl1_plat_fwu_done``, passing the optional argument ``client_cookie`` as
374a ``void *``. The SMC does not return.
375
376FWU_SMC_IMAGE_RESET
377~~~~~~~~~~~~~~~~~~~
378
379::
380
381    Arguments:
382        uint32_t     function ID : 0x16
383        unsigned int image_id
384
385    Return:
386        int : 0 (Success)
387            : -EPERM
388
389    Pre-conditions:
390        if (secure world caller) return -EPERM
391        if (image in EXECUTED) return -EPERM
392
393This SMC sets the state of an image to RESET and zeroes the memory used by it.
394
395This is only allowed if the image is not being executed.
396
397--------------
398
399*Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.*
400
401.. _Trusted Board Boot: ./trusted-board-boot.rst
402.. _Porting Guide: ../getting_started/porting-guide.rst
403.. _here: https://github.com/ARM-software/arm-trusted-firmware/wiki/ARM-Trusted-Firmware-Image-Terminology
404.. _Authentication Framework Design: ./auth-framework.rst
405.. _Universally Unique Identifier: https://tools.ietf.org/rfc/rfc4122.txt
406
407.. |Flow Diagram| image:: diagrams/fwu_flow.png?raw=true
408.. |FWU state machine| image:: diagrams/fwu_states.png?raw=true
409