sphinx.addnodesdocument)}( rawsourcechildren](docutils.nodessubstitution_definition)}(h&.. |AArch32| replace:: :term:`AArch32`h]h pending_xref)}(h:term:`AArch32`h]h inline)}(hhh]h TextAArch32}(hhparenthuba attributes}(ids]classes](xrefstdstd-termenames]dupnames]backrefs]utagnamehh!hubah"}(h$]h&]h+]h-]h/]refdoccomponents/firmware-update refdomainh)reftypeterm refexplicitrefwarn reftargetAArch32uh1hsource lineKh!h ubah"}(h$]h&]h+]AArch32ah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AArch64| replace:: :term:`AArch64`h]h)}(h:term:`AArch64`h]h)}(hhQh]hAArch64}(hhh!hSubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hOubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainh]reftypeterm refexplicitrefwarnh?AArch64uh1hhAhBhCKh!hKubah"}(h$]h&]h+]AArch64ah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |AMU| replace:: :term:`AMU`h]h)}(h :term:`AMU`h]h)}(hh|h]hAMU}(hhh!h~ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hzubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hvubah"}(h$]h&]h+]AMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h&.. |AMUs| replace:: :term:`AMUs `h]h)}(h:term:`AMUs `h]h)}(hhh]hAMUs}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhreftypeterm refexplicitrefwarnh?AMUuh1hhAhBhCKh!hubah"}(h$]h&]h+]AMUsah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |API| replace:: :term:`API`h]h)}(h :term:`API`h]h)}(hhh]hAPI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainhތreftypeterm refexplicitrefwarnh?APIuh1hhAhBhCKh!hubah"}(h$]h&]h+]APIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |BTI| replace:: :term:`BTI`h]h)}(h :term:`BTI`h]h)}(hhh]hBTI}(hhh!hubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!hubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?BTIuh1hhAhBhCKh!hubah"}(h$]h&]h+]BTIah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CoT| replace:: :term:`CoT`h]h)}(h :term:`CoT`h]h)}(hj(h]hCoT}(hhh!j*ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j&ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj4reftypeterm refexplicitrefwarnh?CoTuh1hhAhBhCKh!j"ubah"}(h$]h&]h+]CoTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |COT| replace:: :term:`COT`h]h)}(h :term:`COT`h]h)}(hjSh]hCOT}(hhh!jUubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jQubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj_reftypeterm refexplicitrefwarnh?COTuh1hhAhBhCKh!jMubah"}(h$]h&]h+]COTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |CSS| replace:: :term:`CSS`h]h)}(h :term:`CSS`h]h)}(hj~h]hCSS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j|ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CSSuh1hhAhBhCK h!jxubah"}(h$]h&]h+]CSSah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |CVE| replace:: :term:`CVE`h]h)}(h :term:`CVE`h]h)}(hjh]hCVE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?CVEuh1hhAhBhCK h!jubah"}(h$]h&]h+]CVEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DTB| replace:: :term:`DTB`h]h)}(h :term:`DTB`h]h)}(hjh]hDTB}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?DTBuh1hhAhBhCK h!jubah"}(h$]h&]h+]DTBah-]h/]uh1h hAhBhCK h!hhhubh )}(h .. |DS-5| replace:: :term:`DS-5`h]h)}(h :term:`DS-5`h]h)}(hjh]hDS-5}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?DS-5uh1hhAhBhCK h!jubah"}(h$]h&]h+]DS-5ah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DSU| replace:: :term:`DSU`h]h)}(h :term:`DSU`h]h)}(hj*h]hDSU}(hhh!j,ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j(ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj6reftypeterm refexplicitrefwarnh?DSUuh1hhAhBhCK h!j$ubah"}(h$]h&]h+]DSUah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |DT| replace:: :term:`DT`h]h)}(h :term:`DT`h]h)}(hjUh]hDT}(hhh!jWubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jSubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjareftypeterm refexplicitrefwarnh?DTuh1hhAhBhCKh!jOubah"}(h$]h&]h+]DTah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EL| replace:: :term:`EL`h]h)}(h :term:`EL`h]h)}(hjh]hEL}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j~ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ELuh1hhAhBhCKh!jzubah"}(h$]h&]h+]ELah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |EHF| replace:: :term:`EHF`h]h)}(h :term:`EHF`h]h)}(hjh]hEHF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?EHFuh1hhAhBhCKh!jubah"}(h$]h&]h+]EHFah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |FCONF| replace:: :term:`FCONF`h]h)}(h :term:`FCONF`h]h)}(hjh]hFCONF}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FCONFuh1hhAhBhCKh!jubah"}(h$]h&]h+]FCONFah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FDT| replace:: :term:`FDT`h]h)}(h :term:`FDT`h]h)}(hjh]hFDT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?FDTuh1hhAhBhCKh!jubah"}(h$]h&]h+]FDTah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |FF-A| replace:: :term:`FF-A`h]h)}(h :term:`FF-A`h]h)}(hj,h]hFF-A}(hhh!j.ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j*ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj8reftypeterm refexplicitrefwarnh?FF-Auh1hhAhBhCKh!j&ubah"}(h$]h&]h+]FF-Aah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FIP| replace:: :term:`FIP`h]h)}(h :term:`FIP`h]h)}(hjWh]hFIP}(hhh!jYubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jUubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjcreftypeterm refexplicitrefwarnh?FIPuh1hhAhBhCKh!jQubah"}(h$]h&]h+]FIPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FVP| replace:: :term:`FVP`h]h)}(h :term:`FVP`h]h)}(hjh]hFVP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FVPuh1hhAhBhCKh!j|ubah"}(h$]h&]h+]FVPah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |FWU| replace:: :term:`FWU`h]h)}(h :term:`FWU`h]h)}(hjh]hFWU}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?FWUuh1hhAhBhCKh!jubah"}(h$]h&]h+]FWUah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |GIC| replace:: :term:`GIC`h]h)}(h :term:`GIC`h]h)}(hjh]hGIC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?GICuh1hhAhBhCKh!jubah"}(h$]h&]h+]GICah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |ISA| replace:: :term:`ISA`h]h)}(h :term:`ISA`h]h)}(hjh]hISA}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ISAuh1hhAhBhCKh!jubah"}(h$]h&]h+]ISAah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |Linaro| replace:: :term:`Linaro`h]h)}(h:term:`Linaro`h]h)}(hj.h]hLinaro}(hhh!j0ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j,ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj:reftypeterm refexplicitrefwarnh?Linarouh1hhAhBhCKh!j(ubah"}(h$]h&]h+]Linaroah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MMU| replace:: :term:`MMU`h]h)}(h :term:`MMU`h]h)}(hjYh]hMMU}(hhh!j[ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jWubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjereftypeterm refexplicitrefwarnh?MMUuh1hhAhBhCKh!jSubah"}(h$]h&]h+]MMUah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPAM| replace:: :term:`MPAM`h]h)}(h :term:`MPAM`h]h)}(hjh]hMPAM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPAMuh1hhAhBhCKh!j~ubah"}(h$]h&]h+]MPAMah-]h/]uh1h hAhBhCKh!hhhubh )}(h .. |MPMM| replace:: :term:`MPMM`h]h)}(h :term:`MPMM`h]h)}(hjh]hMPMM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPMMuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPMMah-]h/]uh1h hAhBhCKh!hhhubh )}(h".. |MPIDR| replace:: :term:`MPIDR`h]h)}(h :term:`MPIDR`h]h)}(hjh]hMPIDR}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MPIDRuh1hhAhBhCKh!jubah"}(h$]h&]h+]MPIDRah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |MTE| replace:: :term:`MTE`h]h)}(h :term:`MTE`h]h)}(hjh]hMTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?MTEuh1hhAhBhCKh!jubah"}(h$]h&]h+]MTEah-]h/]uh1h hAhBhCKh!hhhubh )}(h.. |OEN| replace:: :term:`OEN`h]h)}(h :term:`OEN`h]h)}(hj0h]hOEN}(hhh!j2ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j.ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj<reftypeterm refexplicitrefwarnh?OENuh1hhAhBhCKh!j*ubah"}(h$]h&]h+]OENah-]h/]uh1h hAhBhCKh!hhhubh )}(h$.. |OP-TEE| replace:: :term:`OP-TEE`h]h)}(h:term:`OP-TEE`h]h)}(hj[h]hOP-TEE}(hhh!j]ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jYubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjgreftypeterm refexplicitrefwarnh?OP-TEEuh1hhAhBhCK h!jUubah"}(h$]h&]h+]OP-TEEah-]h/]uh1h hAhBhCK h!hhhubh )}(h.. |OTE| replace:: :term:`OTE`h]h)}(h :term:`OTE`h]h)}(hjh]hOTE}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?OTEuh1hhAhBhCK!h!jubah"}(h$]h&]h+]OTEah-]h/]uh1h hAhBhCK!h!hhhubh )}(h.. |PDD| replace:: :term:`PDD`h]h)}(h :term:`PDD`h]h)}(hjh]hPDD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PDDuh1hhAhBhCK"h!jubah"}(h$]h&]h+]PDDah-]h/]uh1h hAhBhCK"h!hhhubh )}(h".. |PAUTH| replace:: :term:`PAUTH`h]h)}(h :term:`PAUTH`h]h)}(hjh]hPAUTH}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PAUTHuh1hhAhBhCK#h!jubah"}(h$]h&]h+]PAUTHah-]h/]uh1h hAhBhCK#h!hhhubh )}(h.. |PMF| replace:: :term:`PMF`h]h)}(h :term:`PMF`h]h)}(hjh]hPMF}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?PMFuh1hhAhBhCK$h!jubah"}(h$]h&]h+]PMFah-]h/]uh1h hAhBhCK$h!hhhubh )}(h .. |PSCI| replace:: :term:`PSCI`h]h)}(h :term:`PSCI`h]h)}(hj2h]hPSCI}(hhh!j4ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j0ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj>reftypeterm refexplicitrefwarnh?PSCIuh1hhAhBhCK%h!j,ubah"}(h$]h&]h+]PSCIah-]h/]uh1h hAhBhCK%h!hhhubh )}(h.. |RAS| replace:: :term:`RAS`h]h)}(h :term:`RAS`h]h)}(hj]h]hRAS}(hhh!j_ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j[ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjireftypeterm refexplicitrefwarnh?RASuh1hhAhBhCK&h!jWubah"}(h$]h&]h+]RASah-]h/]uh1h hAhBhCK&h!hhhubh )}(h.. |ROT| replace:: :term:`ROT`h]h)}(h :term:`ROT`h]h)}(hjh]hROT}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?ROTuh1hhAhBhCK'h!jubah"}(h$]h&]h+]ROTah-]h/]uh1h hAhBhCK'h!hhhubh )}(h .. |SCMI| replace:: :term:`SCMI`h]h)}(h :term:`SCMI`h]h)}(hjh]hSCMI}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCMIuh1hhAhBhCK(h!jubah"}(h$]h&]h+]SCMIah-]h/]uh1h hAhBhCK(h!hhhubh )}(h.. |SCP| replace:: :term:`SCP`h]h)}(h :term:`SCP`h]h)}(hjh]hSCP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SCPuh1hhAhBhCK)h!jubah"}(h$]h&]h+]SCPah-]h/]uh1h hAhBhCK)h!hhhubh )}(h .. |SDEI| replace:: :term:`SDEI`h]h)}(h :term:`SDEI`h]h)}(hj h]hSDEI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SDEIuh1hhAhBhCK*h!jubah"}(h$]h&]h+]SDEIah-]h/]uh1h hAhBhCK*h!hhhubh )}(h.. |SDS| replace:: :term:`SDS`h]h)}(h :term:`SDS`h]h)}(hj4h]hSDS}(hhh!j6ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j2ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj@reftypeterm refexplicitrefwarnh?SDSuh1hhAhBhCK+h!j.ubah"}(h$]h&]h+]SDSah-]h/]uh1h hAhBhCK+h!hhhubh )}(h.. |SEA| replace:: :term:`SEA`h]h)}(h :term:`SEA`h]h)}(hj_h]hSEA}(hhh!jaubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j]ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjkreftypeterm refexplicitrefwarnh?SEAuh1hhAhBhCK,h!jYubah"}(h$]h&]h+]SEAah-]h/]uh1h hAhBhCK,h!hhhubh )}(h.. |SiP| replace:: :term:`SiP`h]h)}(h :term:`SiP`h]h)}(hjh]hSiP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SiPuh1hhAhBhCK-h!jubah"}(h$]h&]h+]SiPah-]h/]uh1h hAhBhCK-h!hhhubh )}(h.. |SIP| replace:: :term:`SIP`h]h)}(h :term:`SIP`h]h)}(hjh]hSIP}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SIPuh1hhAhBhCK.h!jubah"}(h$]h&]h+]SIPah-]h/]uh1h hAhBhCK.h!hhhubh )}(h.. |SMC| replace:: :term:`SMC`h]h)}(h :term:`SMC`h]h)}(hjh]hSMC}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCuh1hhAhBhCK/h!jubah"}(h$]h&]h+]SMCah-]h/]uh1h hAhBhCK/h!hhhubh )}(h".. |SMCCC| replace:: :term:`SMCCC`h]h)}(h :term:`SMCCC`h]h)}(hj h]hSMCCC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SMCCCuh1hhAhBhCK0h!jubah"}(h$]h&]h+]SMCCCah-]h/]uh1h hAhBhCK0h!hhhubh )}(h.. |SoC| replace:: :term:`SoC`h]h)}(h :term:`SoC`h]h)}(hj6h]hSoC}(hhh!j8ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j4ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjBreftypeterm refexplicitrefwarnh?SoCuh1hhAhBhCK1h!j0ubah"}(h$]h&]h+]SoCah-]h/]uh1h hAhBhCK1h!hhhubh )}(h.. |SP| replace:: :term:`SP`h]h)}(h :term:`SP`h]h)}(hjah]hSP}(hhh!jcubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j_ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjmreftypeterm refexplicitrefwarnh?SPuh1hhAhBhCK2h!j[ubah"}(h$]h&]h+]SPah-]h/]uh1h hAhBhCK2h!hhhubh )}(h.. |SPD| replace:: :term:`SPD`h]h)}(h :term:`SPD`h]h)}(hjh]hSPD}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPDuh1hhAhBhCK3h!jubah"}(h$]h&]h+]SPDah-]h/]uh1h hAhBhCK3h!hhhubh )}(h.. |SPM| replace:: :term:`SPM`h]h)}(h :term:`SPM`h]h)}(hjh]hSPM}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SPMuh1hhAhBhCK4h!jubah"}(h$]h&]h+]SPMah-]h/]uh1h hAhBhCK4h!hhhubh )}(h .. |SSBS| replace:: :term:`SSBS`h]h)}(h :term:`SSBS`h]h)}(hjh]hSSBS}(hhh!jubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypeterm refexplicitrefwarnh?SSBSuh1hhAhBhCK5h!jubah"}(h$]h&]h+]SSBSah-]h/]uh1h hAhBhCK5h!hhhubh )}(h.. |SVE| replace:: :term:`SVE`h]h)}(h :term:`SVE`h]h)}(hj h]hSVE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?SVEuh1hhAhBhCK6h!j ubah"}(h$]h&]h+]SVEah-]h/]uh1h hAhBhCK6h!hhhubh )}(h.. |TBB| replace:: :term:`TBB`h]h)}(h :term:`TBB`h]h)}(hj8 h]hTBB}(hhh!j: ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j6 ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjD reftypeterm refexplicitrefwarnh?TBBuh1hhAhBhCK7h!j2 ubah"}(h$]h&]h+]TBBah-]h/]uh1h hAhBhCK7h!hhhubh )}(h .. |TBBR| replace:: :term:`TBBR`h]h)}(h :term:`TBBR`h]h)}(hjc h]hTBBR}(hhh!je ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!ja ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjo reftypeterm refexplicitrefwarnh?TBBRuh1hhAhBhCK8h!j] ubah"}(h$]h&]h+]TBBRah-]h/]uh1h hAhBhCK8h!hhhubh )}(h.. |TEE| replace:: :term:`TEE`h]h)}(h :term:`TEE`h]h)}(hj h]hTEE}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TEEuh1hhAhBhCK9h!j ubah"}(h$]h&]h+]TEEah-]h/]uh1h hAhBhCK9h!hhhubh )}(h .. |TF-A| replace:: :term:`TF-A`h]h)}(h :term:`TF-A`h]h)}(hj h]hTF-A}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Auh1hhAhBhCK:h!j ubah"}(h$]h&]h+]TF-Aah-]h/]uh1h hAhBhCK:h!hhhubh )}(h .. |TF-M| replace:: :term:`TF-M`h]h)}(h :term:`TF-M`h]h)}(hj h]hTF-M}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TF-Muh1hhAhBhCK;h!j ubah"}(h$]h&]h+]TF-Mah-]h/]uh1h hAhBhCK;h!hhhubh )}(h.. |TLB| replace:: :term:`TLB`h]h)}(h :term:`TLB`h]h)}(hj h]hTLB}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TLBuh1hhAhBhCKh!j_ ubah"}(h$]h&]h+]TRNGah-]h/]uh1h hAhBhCK>h!hhhubh )}(h.. |TSP| replace:: :term:`TSP`h]h)}(h :term:`TSP`h]h)}(hj h]hTSP}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TSPuh1hhAhBhCK?h!j ubah"}(h$]h&]h+]TSPah-]h/]uh1h hAhBhCK?h!hhhubh )}(h.. |TZC| replace:: :term:`TZC`h]h)}(h :term:`TZC`h]h)}(hj h]hTZC}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?TZCuh1hhAhBhCK@h!j ubah"}(h$]h&]h+]TZCah-]h/]uh1h hAhBhCK@h!hhhubh )}(h".. |UBSAN| replace:: :term:`UBSAN`h]h)}(h :term:`UBSAN`h]h)}(hj h]hUBSAN}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UBSANuh1hhAhBhCKAh!j ubah"}(h$]h&]h+]UBSANah-]h/]uh1h hAhBhCKAh!hhhubh )}(h .. |UEFI| replace:: :term:`UEFI`h]h)}(h :term:`UEFI`h]h)}(hj h]hUEFI}(hhh!j ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypeterm refexplicitrefwarnh?UEFIuh1hhAhBhCKBh!j ubah"}(h$]h&]h+]UEFIah-]h/]uh1h hAhBhCKBh!hhhubh )}(h .. |WDOG| replace:: :term:`WDOG`h]h)}(h :term:`WDOG`h]h)}(hj< h]hWDOG}(hhh!j> ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!j: ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjH reftypeterm refexplicitrefwarnh?WDOGuh1hhAhBhCKCh!j6 ubah"}(h$]h&]h+]WDOGah-]h/]uh1h hAhBhCKCh!hhhubh )}(h!.. |XLAT| replace:: :term:`XLAT` h]h)}(h :term:`XLAT`h]h)}(hjg h]hXLAT}(hhh!ji ubah"}(h$]h&](h(stdstd-termeh+]h-]h/]uh1hh!je ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjs reftypeterm refexplicitrefwarnh?XLATuh1hhAhBhCKDh!ja ubah"}(h$]h&]h+]XLATah-]h/]uh1h hAhBhCKDh!hhhubh section)}(hhh](h title)}(hFirmware Update (FWU)h]hFirmware Update (FWU)}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhA[/home/test/workspace/code/optee_3.16/trusted-firmware-a/docs/components/firmware-update.rsthCKubj )}(hhh](j )}(h Introductionh]h Introduction}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubh paragraph)}(hX This document describes the design of the Firmware Update (FWU) feature, which enables authenticated firmware to update firmware images from external interfaces such as USB, UART, SD-eMMC, NAND, NOR or Ethernet to SoC Non-Volatile memories such as NAND Flash, LPDDR2-NVM or any memory determined by the platform. This feature functions even when the current firmware in the system is corrupt or missing; it therefore may be used as a recovery mode. It may also be complemented by other, higher level firmware update software.h]hX This document describes the design of the Firmware Update (FWU) feature, which enables authenticated firmware to update firmware images from external interfaces such as USB, UART, SD-eMMC, NAND, NOR or Ethernet to SoC Non-Volatile memories such as NAND Flash, LPDDR2-NVM or any memory determined by the platform. This feature functions even when the current firmware in the system is corrupt or missing; it therefore may be used as a recovery mode. It may also be complemented by other, higher level firmware update software.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hX%FWU implements a specific part of the Trusted Board Boot Requirements (TBBR) specification, Arm DEN0006C-1. It should be used in conjunction with the :ref:`Trusted Board Boot` design document, which describes the image authentication parts of the Trusted Firmware-A (TF-A) TBBR implementation.h](hFWU implements a specific part of the Trusted Board Boot Requirements (TBBR) specification, Arm DEN0006C-1. It should be used in conjunction with the }(hFWU implements a specific part of the Trusted Board Boot Requirements (TBBR) specification, Arm DEN0006C-1. It should be used in conjunction with the h!j hhhANhCNubh)}(h:ref:`Trusted Board Boot`h]h)}(hj h]hTrusted Board Boot}(hhh!j ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftyperef refexplicitrefwarnh?trusted board bootuh1hhAj hCKh!j ubhv design document, which describes the image authentication parts of the Trusted Firmware-A (TF-A) TBBR implementation.}(hv design document, which describes the image authentication parts of the Trusted Firmware-A (TF-A) TBBR implementation.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(hScopeh]hScope}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubj )}(hThis document describes the secure world FWU design. It is beyond its scope to describe how normal world FWU images should operate. To implement normal world FWU images, please refer to the "Non-Trusted Firmware Updater" requirements in the TBBR.h]hThis document describes the secure world FWU design. It is beyond its scope to describe how normal world FWU images should operate. To implement normal world FWU images, please refer to the “Non-Trusted Firmware Updater” requirements in the TBBR.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubeh"}(h$]scopeah&]h+]scopeah-]h/]uh1j h!j hhhAj hCKubeh"}(h$] introductionah&]h+] introductionah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(h FWU Overviewh]h FWU Overview}(hj+ h!j) hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j& hhhAj hCKubj )}(hXNThe FWU boot flow is primarily mediated by BL1. Since BL1 executes in ROM, and it is usually desirable to minimize the amount of ROM code, the design allows some parts of FWU to be implemented in other secure and normal world images. Platform code may choose which parts are implemented in which images but the general expectation is:h]hXNThe FWU boot flow is primarily mediated by BL1. Since BL1 executes in ROM, and it is usually desirable to minimize the amount of ROM code, the design allows some parts of FWU to be implemented in other secure and normal world images. Platform code may choose which parts are implemented in which images but the general expectation is:}(hj9 h!j7 hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j& hhubh bullet_list)}(hhh](h list_item)}(hBL1 handles: - Detection and initiation of the FWU boot flow. - Copying images from non-secure to secure memory - FWU image authentication - Context switching between the normal and secure world during the FWU process. h](j )}(h BL1 handles:h]h BL1 handles:}(hjR h!jP ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK%h!jL ubjF )}(hhh](jK )}(h.Detection and initiation of the FWU boot flow.h]j )}(hjc h]h.Detection and initiation of the FWU boot flow.}(hjc h!je ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK'h!ja ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j^ ubjK )}(h/Copying images from non-secure to secure memoryh]j )}(hjz h]h/Copying images from non-secure to secure memory}(hjz h!j| ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK(h!jx ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j^ ubjK )}(hFWU image authenticationh]j )}(hj h]hFWU image authentication}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK)h!j ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j^ ubjK )}(hNContext switching between the normal and secure world during the FWU process. h]j )}(hMContext switching between the normal and secure world during the FWU process.h]hMContext switching between the normal and secure world during the FWU process.}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK*h!j ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j^ ubeh"}(h$]h&]h+]h-]h/]bullet-uh1jE hAj hCK'h!jL ubeh"}(h$]h&]h+]h-]h/]uh1jJ h!jG hhhANhCNubjK )}(hYOther secure world FWU images handle platform initialization required by the FWU process.h]j )}(hYOther secure world FWU images handle platform initialization required by the FWU process.h]hYOther secure world FWU images handle platform initialization required by the FWU process.}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK-h!j ubah"}(h$]h&]h+]h-]h/]uh1jJ h!jG hhhAj hCNubjK )}(hiNormal world FWU images handle loading of firmware images from external interfaces to non-secure memory. h]j )}(hhNormal world FWU images handle loading of firmware images from external interfaces to non-secure memory.h]hhNormal world FWU images handle loading of firmware images from external interfaces to non-secure memory.}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK/h!j ubah"}(h$]h&]h+]h-]h/]uh1jJ h!jG hhhAj hCNubeh"}(h$]h&]h+]h-]h/]j j uh1jE hAj hCK%h!j& hhubj )}(h0The primary requirements of the FWU feature are:h]h0The primary requirements of the FWU feature are:}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK2h!j& hhubh enumerated_list)}(hhh](jK )}(heExport a BL1 SMC interface to interoperate with other FWU images executing at other Exception Levels.h]j )}(heExport a BL1 SMC interface to interoperate with other FWU images executing at other Exception Levels.h]heExport a BL1 SMC interface to interoperate with other FWU images executing at other Exception Levels.}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK4h!j ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j hhhAj hCNubjK )}(hExport a platform interface to provide FWU common code with the information it needs, and to enable platform specific FWU functionality. See the :ref:`Porting Guide` for details of this interface. h]j )}(hExport a platform interface to provide FWU common code with the information it needs, and to enable platform specific FWU functionality. See the :ref:`Porting Guide` for details of this interface.h](hExport a platform interface to provide FWU common code with the information it needs, and to enable platform specific FWU functionality. See the }(hExport a platform interface to provide FWU common code with the information it needs, and to enable platform specific FWU functionality. See the h!j1 ubh)}(h:ref:`Porting Guide`h]h)}(hj< h]h Porting Guide}(hhh!j> ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j: ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjH reftyperef refexplicitrefwarnh? porting guideuh1hhAj hCK6h!j1 ubh for details of this interface.}(h for details of this interface.h!j1 ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK6h!j- ubah"}(h$]h&]h+]h-]h/]uh1jJ h!j hhhAj hCNubeh"}(h$]h&]h+]h-]h/]enumtypearabicprefixhsuffix.uh1j h!j& hhhAj hCK4ubj )}(hTF-A uses abbreviated image terminology for FWU images like for other TF-A images. See the :ref:`Image Terminology` document for an explanation of these terms.h](h[TF-A uses abbreviated image terminology for FWU images like for other TF-A images. See the }(h[TF-A uses abbreviated image terminology for FWU images like for other TF-A images. See the h!jv hhhANhCNubh)}(h:ref:`Image Terminology`h]h)}(hj h]hImage Terminology}(hhh!j ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftyperef refexplicitrefwarnh?image terminologyuh1hhAj hCK:h!jv ubh, document for an explanation of these terms.}(h, document for an explanation of these terms.h!jv hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK:h!j& hhubj )}(hThe following diagram shows the FWU boot flow for Arm development platforms. Arm CSS platforms like Juno have a System Control Processor (SCP), and these use all defined FWU images. Other platforms may use a subset of these.h]hThe following diagram shows the FWU boot flow for Arm development platforms. Arm CSS platforms like Juno have a System Control Processor (SCP), and these use all defined FWU images. Other platforms may use a subset of these.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK>h!j& hhubj )}(h|Flow Diagram|h]h image)}(h*image:: ../resources/diagrams/fwu_flow.pngh]h"}(h$]h&]h+]h-]h/]alt Flow Diagramuriresources/diagrams/fwu_flow.png candidates}*j suh1j hAj hCMh!j hhubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKBh!j& hhubeh"}(h$] fwu-overviewah&]h+] fwu overviewah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(hImage Identificationh]hImage Identification}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKEubj )}(hXWEach FWU image and certificate is identified by a unique ID, defined by the platform, which BL1 uses to fetch an image descriptor (``image_desc_t``) via a call to ``bl1_plat_get_image_desc()``. The same ID is also used to prepare the Chain of Trust (Refer to the :ref:`Authentication Framework & Chain of Trust` document for more information).h](hEach FWU image and certificate is identified by a unique ID, defined by the platform, which BL1 uses to fetch an image descriptor (}(hEach FWU image and certificate is identified by a unique ID, defined by the platform, which BL1 uses to fetch an image descriptor (h!j hhhANhCNubh literal)}(h``image_desc_t``h]h image_desc_t}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh) via a call to }(h) via a call to h!j hhhANhCNubj )}(h``bl1_plat_get_image_desc()``h]hbl1_plat_get_image_desc()}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubhG. The same ID is also used to prepare the Chain of Trust (Refer to the }(hG. The same ID is also used to prepare the Chain of Trust (Refer to the h!j hhhANhCNubh)}(h0:ref:`Authentication Framework & Chain of Trust`h]h)}(hj!h]h)Authentication Framework & Chain of Trust}(hhh!j#ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj-reftyperef refexplicitrefwarnh?)authentication framework & chain of trustuh1hhAj hCKGh!j ubh document for more information).}(h document for more information).h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKGh!j hhubj )}(h8The image descriptor includes the following information:h]h8The image descriptor includes the following information:}(hjLh!jJhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKMh!j hhubjF )}(hhh](jK )}(hExecutable or non-executable image. This indicates whether the normal world is permitted to request execution of a secure world FWU image (after authentication). Secure world certificates and non-AP images are examples of non-executable images.h]j )}(hExecutable or non-executable image. This indicates whether the normal world is permitted to request execution of a secure world FWU image (after authentication). Secure world certificates and non-AP images are examples of non-executable images.h]hExecutable or non-executable image. This indicates whether the normal world is permitted to request execution of a secure world FWU image (after authentication). Secure world certificates and non-AP images are examples of non-executable images.}(hjah!j_ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKOh!j[ubah"}(h$]h&]h+]h-]h/]uh1jJ h!jXhhhAj hCNubjK )}(hvSecure or non-secure image. This indicates whether the image is authenticated/executed in secure or non-secure memory.h]j )}(hvSecure or non-secure image. This indicates whether the image is authenticated/executed in secure or non-secure memory.h]hvSecure or non-secure image. This indicates whether the image is authenticated/executed in secure or non-secure memory.}(hjyh!jwubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKSh!jsubah"}(h$]h&]h+]h-]h/]uh1jJ h!jXhhhAj hCNubjK )}(hImage base address and size.h]j )}(hjh]hImage base address and size.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKUh!jubah"}(h$]h&]h+]h-]h/]uh1jJ h!jXhhhAj hCNubjK )}(h free secure memory) return -ENOMEM if (image overlaps another image) return -EPERMh]hXArguments: uint32_t function ID : 0x10 unsigned int image_id uintptr_t image_addr unsigned int block_size unsigned int image_size Return: int : 0 (Success) : -ENOMEM : -EPERM Pre-conditions: if (image_id is invalid) return -EPERM if (image_id is non-secure image) return -EPERM if (image_id state is not (RESET or COPYING)) return -EPERM if (secure world caller) return -EPERM if (image_addr + block_size overflows) return -ENOMEM if (image destination address + image_size overflows) return -ENOMEM if (source block is in secure memory) return -ENOMEM if (source block is not mapped into BL1) return -ENOMEM if (image_size > free secure memory) return -ENOMEM if (image overlaps another image) return -EPERM}(hhh!jtubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCKh!jchhubj )}(hXThis SMC copies the secure image indicated by ``image_id`` from non-secure memory to secure memory for later authentication. The image may be copied in a single block or multiple blocks. In either case, the total size of the image must be provided in ``image_size`` when invoking this SMC for the first time for each image; it is ignored in subsequent calls (if any) for the same image.h](h.This SMC copies the secure image indicated by }(h.This SMC copies the secure image indicated by h!jhhhANhCNubj )}(h ``image_id``h]himage_id}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh from non-secure memory to secure memory for later authentication. The image may be copied in a single block or multiple blocks. In either case, the total size of the image must be provided in }(h from non-secure memory to secure memory for later authentication. The image may be copied in a single block or multiple blocks. In either case, the total size of the image must be provided in h!jhhhANhCNubj )}(h``image_size``h]h image_size}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhy when invoking this SMC for the first time for each image; it is ignored in subsequent calls (if any) for the same image.}(hy when invoking this SMC for the first time for each image; it is ignored in subsequent calls (if any) for the same image.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jchhubj )}(hThe ``image_addr`` and ``block_size`` specify the source memory block to copy from. The destination address is provided by the platform code.h](hThe }(hThe h!jhhhANhCNubj )}(h``image_addr``h]h image_addr}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh and }(h and h!jhhhANhCNubj )}(h``block_size``h]h block_size}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhh specify the source memory block to copy from. The destination address is provided by the platform code.}(hh specify the source memory block to copy from. The destination address is provided by the platform code.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jchhubj )}(hXwIf ``block_size`` is greater than the amount of remaining bytes to copy for this image then the former is truncated to the latter. The copy operation is then considered as complete and the FWU state machine transitions to the "COPIED" state. If there is still more to copy, the FWU state machine stays in or transitions to the COPYING state (depending on the previous state).h](hIf }(hIf h!jhhhANhCNubj )}(h``block_size``h]h block_size}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhXj is greater than the amount of remaining bytes to copy for this image then the former is truncated to the latter. The copy operation is then considered as complete and the FWU state machine transitions to the “COPIED” state. If there is still more to copy, the FWU state machine stays in or transitions to the COPYING state (depending on the previous state).}(hXf is greater than the amount of remaining bytes to copy for this image then the former is truncated to the latter. The copy operation is then considered as complete and the FWU state machine transitions to the "COPIED" state. If there is still more to copy, the FWU state machine stays in or transitions to the COPYING state (depending on the previous state).h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jchhubj )}(haWhen using multiple blocks, the source blocks do not necessarily need to be in contiguous memory.h]haWhen using multiple blocks, the source blocks do not necessarily need to be in contiguous memory.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jchhubj )}(hOOnce the SMC is handled, BL1 returns from exception to the normal world caller.h]hOOnce the SMC is handled, BL1 returns from exception to the normal world caller.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jchhubeh"}(h$]fwu-smc-image-copyah&]h+]fwu_smc_image_copyah-]h/]uh1j h!jJhhhAj hCKubj )}(hhh](j )}(hFWU_SMC_IMAGE_AUTHh]hFWU_SMC_IMAGE_AUTH}(hj7h!j5hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j2hhhAj hCKubjm)}(hX*Arguments: uint32_t function ID : 0x11 unsigned int image_id uintptr_t image_addr unsigned int image_size Return: int : 0 (Success) : -ENOMEM : -EPERM : -EAUTH Pre-conditions: if (image_id is invalid) return -EPERM if (secure world caller) if (image_id state is not RESET) return -EPERM if (image_addr/image_size is not mapped into BL1) return -ENOMEM else // normal world caller if (image_id is secure image) if (image_id state is not COPIED) return -EPERM else // image_id is non-secure image if (image_id state is not RESET) return -EPERM if (image_addr/image_size is in secure memory) return -ENOMEM if (image_addr/image_size not mapped into BL1) return -ENOMEMh]hX*Arguments: uint32_t function ID : 0x11 unsigned int image_id uintptr_t image_addr unsigned int image_size Return: int : 0 (Success) : -ENOMEM : -EPERM : -EAUTH Pre-conditions: if (image_id is invalid) return -EPERM if (secure world caller) if (image_id state is not RESET) return -EPERM if (image_addr/image_size is not mapped into BL1) return -ENOMEM else // normal world caller if (image_id is secure image) if (image_id state is not COPIED) return -EPERM else // image_id is non-secure image if (image_id state is not RESET) return -EPERM if (image_addr/image_size is in secure memory) return -ENOMEM if (image_addr/image_size not mapped into BL1) return -ENOMEM}(hhh!jCubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCKh!j2hhubj )}(hXLThis SMC authenticates the image specified by ``image_id``. If the image is in the RESET state, BL1 authenticates the image in place using the provided ``image_addr`` and ``image_size``. If the image is a secure image in the COPIED state, BL1 authenticates the image from the secure memory that BL1 previously copied the image into.h](h.This SMC authenticates the image specified by }(h.This SMC authenticates the image specified by h!jQhhhANhCNubj )}(h ``image_id``h]himage_id}(hhh!jZubah"}(h$]h&]h+]h-]h/]uh1j h!jQubh^. If the image is in the RESET state, BL1 authenticates the image in place using the provided }(h^. If the image is in the RESET state, BL1 authenticates the image in place using the provided h!jQhhhANhCNubj )}(h``image_addr``h]h image_addr}(hhh!jmubah"}(h$]h&]h+]h-]h/]uh1j h!jQubh and }(h and h!jQhhhANhCNubj )}(h``image_size``h]h image_size}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jQubh. If the image is a secure image in the COPIED state, BL1 authenticates the image from the secure memory that BL1 previously copied the image into.}(h. If the image is a secure image in the COPIED state, BL1 authenticates the image from the secure memory that BL1 previously copied the image into.h!jQhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j2hhubj )}(hBL1 returns from exception to the caller. If authentication succeeds then BL1 sets the image state to AUTHENTICATED. If authentication fails then BL1 returns the -EAUTH error and sets the image state back to RESET.h]hBL1 returns from exception to the caller. If authentication succeeds then BL1 sets the image state to AUTHENTICATED. If authentication fails then BL1 returns the -EAUTH error and sets the image state back to RESET.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j2hhubeh"}(h$]fwu-smc-image-authah&]h+]fwu_smc_image_authah-]h/]uh1j h!jJhhhAj hCKubj )}(hhh](j )}(hFWU_SMC_IMAGE_EXECUTEh]hFWU_SMC_IMAGE_EXECUTE}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCMubjm)}(hXArguments: uint32_t function ID : 0x12 unsigned int image_id Return: int : 0 (Success) : -EPERM Pre-conditions: if (image_id is invalid) return -EPERM if (secure world caller) return -EPERM if (image_id is non-secure image) return -EPERM if (image_id is non-executable image) return -EPERM if (image_id state is not AUTHENTICATED) return -EPERMh]hXArguments: uint32_t function ID : 0x12 unsigned int image_id Return: int : 0 (Success) : -EPERM Pre-conditions: if (image_id is invalid) return -EPERM if (secure world caller) return -EPERM if (image_id is non-secure image) return -EPERM if (image_id is non-executable image) return -EPERM if (image_id state is not AUTHENTICATED) return -EPERM}(hhh!jubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCMh!jhhubj )}(hThis SMC initiates execution of a previously authenticated image specified by ``image_id``, in the other security world to the caller. The current implementation only supports normal world callers initiating execution of a secure world image.h](hNThis SMC initiates execution of a previously authenticated image specified by }(hNThis SMC initiates execution of a previously authenticated image specified by h!jhhhANhCNubj )}(h ``image_id``h]himage_id}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh, in the other security world to the caller. The current implementation only supports normal world callers initiating execution of a secure world image.}(h, in the other security world to the caller. The current implementation only supports normal world callers initiating execution of a secure world image.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM-h!jhhubj )}(hBL1 saves the normal world caller's context, sets the secure image state to EXECUTED, and returns from exception to the secure image.h]hBL1 saves the normal world caller’s context, sets the secure image state to EXECUTED, and returns from exception to the secure image.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM2h!jhhubeh"}(h$]fwu-smc-image-executeah&]h+]fwu_smc_image_executeah-]h/]uh1j h!jJhhhAj hCMubj )}(hhh](j )}(hFWU_SMC_IMAGE_RESUME 1h]hFWU_SMC_IMAGE_RESUME}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM6ubjm)}(hArguments: uint32_t function ID : 0x13 register_t image_param Return: register_t : image_param (Success) : -EPERM Pre-conditions: if (normal world caller and no INTERRUPTED secure image) return -EPERMh]hArguments: uint32_t function ID : 0x13 register_t image_param Return: register_t : image_param (Success) : -EPERM Pre-conditions: if (normal world caller and no INTERRUPTED secure image) return -EPERM}(hhh!jubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCM:h!jhhubj )}(hwThis SMC resumes execution in the other security world while there is a secure image in the EXECUTED/INTERRUPTED state.h]hwThis SMC resumes execution in the other security world while there is a secure image in the EXECUTED/INTERRUPTED state.}(hj'h!j%hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMEh!jhhubj )}(hXFor normal world callers, BL1 sets the previously interrupted secure image state to EXECUTED. For secure world callers, BL1 sets the previously executing secure image state to INTERRUPTED. In either case, BL1 saves the calling world's context, restores the resuming world's context and returns from exception into the resuming world. If the call is successful then the caller provided ``image_param`` is returned to the resumed world, otherwise an error code is returned to the caller.h](hXFor normal world callers, BL1 sets the previously interrupted secure image state to EXECUTED. For secure world callers, BL1 sets the previously executing secure image state to INTERRUPTED. In either case, BL1 saves the calling world’s context, restores the resuming world’s context and returns from exception into the resuming world. If the call is successful then the caller provided }(hXFor normal world callers, BL1 sets the previously interrupted secure image state to EXECUTED. For secure world callers, BL1 sets the previously executing secure image state to INTERRUPTED. In either case, BL1 saves the calling world's context, restores the resuming world's context and returns from exception into the resuming world. If the call is successful then the caller provided h!j3hhhANhCNubj )}(h``image_param``h]h image_param}(hhh!j<ubah"}(h$]h&]h+]h-]h/]uh1j h!j3ubhU is returned to the resumed world, otherwise an error code is returned to the caller.}(hU is returned to the resumed world, otherwise an error code is returned to the caller.h!j3hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMHh!jhhubeh"}(h$]fwu-smc-image-resumeah&]h+]fwu_smc_image_resumeah-]h/]uh1j h!jJhhhAj hCM6ubj )}(hhh](j )}(hFWU_SMC_SEC_IMAGE_DONEh]hFWU_SMC_SEC_IMAGE_DONE}(hjbh!j`hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j]hhhAj hCMQubjm)}(hArguments: uint32_t function ID : 0x14 Return: int : 0 (Success) : -EPERM Pre-conditions: if (normal world caller) return -EPERMh]hArguments: uint32_t function ID : 0x14 Return: int : 0 (Success) : -EPERM Pre-conditions: if (normal world caller) return -EPERM}(hhh!jnubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCMUh!j]hhubj )}(hEThis SMC indicates completion of a previously executing secure image.h]hEThis SMC indicates completion of a previously executing secure image.}(hj~h!j|hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM_h!j]hhubj )}(hBL1 sets the previously executing secure image state to the RESET state, restores the normal world context and returns from exception into the normal world.h]hBL1 sets the previously executing secure image state to the RESET state, restores the normal world context and returns from exception into the normal world.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMah!j]hhubeh"}(h$]fwu-smc-sec-image-doneah&]h+]fwu_smc_sec_image_doneah-]h/]uh1j h!jJhhhAj hCMQubj )}(hhh](j )}(hFWU_SMC_UPDATE_DONEh]hFWU_SMC_UPDATE_DONE}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCMfubjm)}(hZArguments: uint32_t function ID : 0x15 register_t client_cookie Return: N/Ah]hZArguments: uint32_t function ID : 0x15 register_t client_cookie Return: N/A}(hhh!jubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCMjh!jhhubj )}(hThis SMC completes the firmware update process. BL1 calls the platform specific function ``bl1_plat_fwu_done``, passing the optional argument ``client_cookie`` as a ``void *``. The SMC does not return.h](hYThis SMC completes the firmware update process. BL1 calls the platform specific function }(hYThis SMC completes the firmware update process. BL1 calls the platform specific function h!jhhhANhCNubj )}(h``bl1_plat_fwu_done``h]hbl1_plat_fwu_done}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh , passing the optional argument }(h , passing the optional argument h!jhhhANhCNubj )}(h``client_cookie``h]h client_cookie}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh as a }(h as a h!jhhhANhCNubj )}(h ``void *``h]hvoid *}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh. The SMC does not return.}(h. The SMC does not return.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMqh!jhhubeh"}(h$]fwu-smc-update-doneah&]h+]fwu_smc_update_doneah-]h/]uh1j h!jJhhhAj hCMfubj )}(hhh](j )}(hFWU_SMC_IMAGE_RESETh]hFWU_SMC_IMAGE_RESET}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCMvubjm)}(hArguments: uint32_t function ID : 0x16 unsigned int image_id Return: int : 0 (Success) : -EPERM Pre-conditions: if (secure world caller) return -EPERM if (image in EXECUTED) return -EPERMh]hArguments: uint32_t function ID : 0x16 unsigned int image_id Return: int : 0 (Success) : -EPERM Pre-conditions: if (secure world caller) return -EPERM if (image in EXECUTED) return -EPERM}(hhh!j ubah"}(h$]h&]h+]h-]h/]j|j}uh1jlhAj hCMzh!jhhubj )}(hNThis SMC sets the state of an image to RESET and zeroes the memory used by it.h]hNThis SMC sets the state of an image to RESET and zeroes the memory used by it.}(hj0h!j.hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj )}(h8This is only allowed if the image is not being executed.h]h8This is only allowed if the image is not being executed.}(hj>h!j<hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubh transition)}(h--------------h]h"}(h$]h&]h+]h-]h/]uh1jJhAj hCMh!jhhubj )}(hM*Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved.*h]h emphasis)}(hjXh]hKCopyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved.}(hhh!j\ubah"}(h$]h&]h+]h-]h/]uh1jZh!jVubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubh target)}(hI.. _Universally Unique Identifier: https://tools.ietf.org/rfc/rfc4122.txth]h"}(h$]universally-unique-identifierah&]h+]universally unique identifierah-]h/]jjuh1johCMh!jhhhAj referencedKubh )}(h<.. |Flow Diagram| image:: ../resources/diagrams/fwu_flow.pngh]j )}(hj h]h"}(h$]h&]h+]h-]h/]altj uriresources/diagrams/fwu_flow.pngj }j jsuh1j h!j~hAj hCMubah"}(h$]h&]h+]j ah-]h/]uh1h hAj hCMh!jhhubh )}(hC.. |FWU state machine| image:: ../resources/diagrams/fwu_states.pngh]j )}(hjuh]h"}(h$]h&]h+]h-]h/]altj~uri!resources/diagrams/fwu_states.pngj }j jsuh1j h!jhAj hCMubah"}(h$]h&]h+]j~ah-]h/]uh1h hAj hCMh!jhhubeh"}(h$]fwu-smc-image-resetah&]h+]fwu_smc_image_resetah-]h/]uh1j h!jJhhhAj hCMvubeh"}(h$]bl1-smc-interfaceah&]h+]bl1 smc interfaceah-]h/]uh1j h!j hhhAj hCKubeh"}(h$]firmware-update-fwuah&]h+]firmware update (fwu)ah-]h/]uh1j h!hhhhAj hCKubeh"}(h$]h&]h+]h-]h/]sourcej uh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcej _destinationN _config_files]pep_referencesN pep_base_url https://www.python.org/dev/peps/pep_file_url_templatepep-%04drfc_referencesN rfc_base_urlhttps://tools.ietf.org/html/ tab_widthKtrim_footnote_reference_spacefile_insertion_enabled raw_enabledKsyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xformembed_stylesheetcloak_email_addressesenvNubreporterNindirect_targets]substitution_defs}(hHh hshKhhvhhhhjhjJj"jujMjjxjjjjj!jjLj$jwjOjjzjjjjj#jjNj&jyjQjj|jjjjj%jjPj(j{jSjj~jjjjj'jjRj*j}jUjjjjjjj)jjTj,jjWjjjjjjj+jjVj.jjYjjjjjjj-jjXj0jj[jjjjj jj/ j jZ j2 j j] j j j j j j j1 j j\ j4 j j_ j j j j j j j3 j j^ j6 j ja Flow Diagramj~FWU state machinejusubstitution_names}(aarch32hHaarch64hsamuhamushɌapihbtijcotjucssjcvejdtbjds-5j!dsujLdtjweljehfjfconfjfdtj#ff-ajNfipjyfvpjfwujgicjisaj%linarojPmmuj{mpamjmpmmjmpidrjmtej'oenjRop-teej}otejpddjpauthjpmfj)pscijTrasjrotjscmijscpjsdeij+sdsjVseajsipjsmcjsmcccj-socjXspjspdjspmjssbsj svej/ tbbjZ tbbrj teej tf-aj tf-mj tlbj1 tlkj\ trngj tspj tzcj ubsanj uefij3 wdogj^ xlatj flow diagramjfwu state machinejurefnames}universally unique identifier]jasrefids}nameids}(jjj# j j j j j jMjJjGjDjjjjjjjjj`j]j/j,jjjjjZjWjjj j jjjzjwu nametypes}(jNj# Nj Nj NjMNjGNjNjNjNjNj`Nj/NjNjNjZNjNj NjNjzuh$}(jj j j j j j j& jJj jDjPjjJjj[jjjjj]jj,jcjj2jjjWjjj]j jjjjwjqu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN decorationNhhub.