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/]refdoc*getting_started/psci-lib-integration-guide 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)}(h:PSCI Library Integration guide for Armv8-A AArch32 systemsh]h:PSCI Library Integration guide for Armv8-A AArch32 systems}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAk/home/test/workspace/code/optee_3.16/trusted-firmware-a/docs/getting_started/psci-lib-integration-guide.rsthCKubh paragraph)}(hXThis document describes the PSCI library interface with a focus on how to integrate with a suitable Trusted OS for an Armv8-A AArch32 system. The PSCI Library implements the PSCI Standard as described in `PSCI spec`_ and is meant to be integrated with EL3 Runtime Software which invokes the PSCI Library interface appropriately. **EL3 Runtime Software** refers to software executing at the highest secure privileged mode, which is EL3 in AArch64 or Secure SVC/ Monitor mode in AArch32, and provides runtime services to the non-secure world. The runtime service request is made via SMC (Secure Monitor Call) and the call must adhere to `SMCCC`_. In AArch32, EL3 Runtime Software may additionally include Trusted OS functionality. A minimal AArch32 Secure Payload, SP-MIN, is provided in Trusted Firmware-A (TF-A) to illustrate the usage and integration of the PSCI library. The description of PSCI library interface and its integration with EL3 Runtime Software in this document is targeted towards AArch32 systems.h](hThis document describes the PSCI library interface with a focus on how to integrate with a suitable Trusted OS for an Armv8-A AArch32 system. The PSCI Library implements the PSCI Standard as described in }(hThis document describes the PSCI library interface with a focus on how to integrate with a suitable Trusted OS for an Armv8-A AArch32 system. The PSCI Library implements the PSCI Standard as described in h!j hhhANhCNubh reference)}(h `PSCI spec`_h]h PSCI spec}(h PSCI spech!j ubah"}(h$]h&]h+]h-]h/]name PSCI specrefuriihttp://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdfuh1j h!j resolvedKubhq and is meant to be integrated with EL3 Runtime Software which invokes the PSCI Library interface appropriately. }(hq and is meant to be integrated with EL3 Runtime Software which invokes the PSCI Library interface appropriately. h!j hhhANhCNubh strong)}(h**EL3 Runtime Software**h]hEL3 Runtime Software}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubhX refers to software executing at the highest secure privileged mode, which is EL3 in AArch64 or Secure SVC/ Monitor mode in AArch32, and provides runtime services to the non-secure world. The runtime service request is made via SMC (Secure Monitor Call) and the call must adhere to }(hX refers to software executing at the highest secure privileged mode, which is EL3 in AArch64 or Secure SVC/ Monitor mode in AArch32, and provides runtime services to the non-secure world. The runtime service request is made via SMC (Secure Monitor Call) and the call must adhere to h!j hhhANhCNubj )}(h`SMCCC`_h]hSMCCC}(hSMCCCh!j ubah"}(h$]h&]h+]h-]h/]namej j -https://developer.arm.com/docs/den0028/latestuh1j h!j j KubhXs. In AArch32, EL3 Runtime Software may additionally include Trusted OS functionality. A minimal AArch32 Secure Payload, SP-MIN, is provided in Trusted Firmware-A (TF-A) to illustrate the usage and integration of the PSCI library. The description of PSCI library interface and its integration with EL3 Runtime Software in this document is targeted towards AArch32 systems.}(hXs. In AArch32, EL3 Runtime Software may additionally include Trusted OS functionality. A minimal AArch32 Secure Payload, SP-MIN, is provided in Trusted Firmware-A (TF-A) to illustrate the usage and integration of the PSCI library. The description of PSCI library interface and its integration with EL3 Runtime Software in this document is targeted towards AArch32 systems.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(h:Generic call sequence for PSCI Library interface (AArch32)h]h:Generic call sequence for PSCI Library interface (AArch32)}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubj )}(hThe generic call sequence of PSCI Library interfaces (see `PSCI Library Interface`_) during cold boot in AArch32 system is described below:h](h:The generic call sequence of PSCI Library interfaces (see }(h:The generic call sequence of PSCI Library interfaces (see h!j hhhANhCNubj )}(h`PSCI Library Interface`_h]hPSCI Library Interface}(hPSCI Library Interfaceh!j ubah"}(h$]h&]h+]h-]h/]namePSCI Library Interfacerefidpsci-library-interfaceuh1j h!j j Kubh8) during cold boot in AArch32 system is described below:}(h8) during cold boot in AArch32 system is described below:h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubh enumerated_list)}(hhh](h list_item)}(hAfter cold reset, the EL3 Runtime Software performs its cold boot initialization including the PSCI library pre-requisites mentioned in `PSCI Library Interface`_, and also the necessary platform setup. h]j )}(hAfter cold reset, the EL3 Runtime Software performs its cold boot initialization including the PSCI library pre-requisites mentioned in `PSCI Library Interface`_, and also the necessary platform setup.h](hAfter cold reset, the EL3 Runtime Software performs its cold boot initialization including the PSCI library pre-requisites mentioned in }(hAfter cold reset, the EL3 Runtime Software performs its cold boot initialization including the PSCI library pre-requisites mentioned in h!j< ubj )}(h`PSCI Library Interface`_h]hPSCI Library Interface}(hPSCI Library Interfaceh!jE ubah"}(h$]h&]h+]h-]h/]namePSCI Library Interfacej$ j% uh1j h!j< j Kubh(, and also the necessary platform setup.}(h(, and also the necessary platform setup.h!j< ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j8 ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j3 hhhAj hCNubj7 )}(h'Call ``psci_setup()`` in Monitor mode. h]j )}(h&Call ``psci_setup()`` in Monitor mode.h](hCall }(hCall h!jk ubh literal)}(h``psci_setup()``h]h psci_setup()}(hhh!jv ubah"}(h$]h&]h+]h-]h/]uh1jt h!jk ubh in Monitor mode.}(h in Monitor mode.h!jk ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jg ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j3 hhhAj hCNubj7 )}(hOptionally call ``psci_register_spd_pm_hook()`` to register callbacks to do bookkeeping for the EL3 Runtime Software during power management. h]j )}(hOptionally call ``psci_register_spd_pm_hook()`` to register callbacks to do bookkeeping for the EL3 Runtime Software during power management.h](hOptionally call }(hOptionally call h!j ubju )}(h``psci_register_spd_pm_hook()``h]hpsci_register_spd_pm_hook()}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!j ubh^ to register callbacks to do bookkeeping for the EL3 Runtime Software during power management.}(h^ to register callbacks to do bookkeeping for the EL3 Runtime Software during power management.h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK!h!j ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j3 hhhAj hCNubj7 )}(hVCall ``psci_prepare_next_non_secure_ctx()`` to initialize the non-secure CPU context. h]j )}(hUCall ``psci_prepare_next_non_secure_ctx()`` to initialize the non-secure CPU context.h](hCall }(hCall h!j ubju )}(h&``psci_prepare_next_non_secure_ctx()``h]h"psci_prepare_next_non_secure_ctx()}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!j ubh* to initialize the non-secure CPU context.}(h* to initialize the non-secure CPU context.h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK$h!j ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j3 hhhAj hCNubj7 )}(hXGet the non-secure ``cpu_context_t`` for the current CPU by calling ``cm_get_context()`` , then programming the registers in the non-secure context and exiting to non-secure world. If the EL3 Runtime Software needs additional configuration to be set for non-secure context, like routing FIQs to the secure world, the values of the registers can be modified prior to programming. See `PSCI CPU context management`_ for more details on CPU context management. h]j )}(hXGet the non-secure ``cpu_context_t`` for the current CPU by calling ``cm_get_context()`` , then programming the registers in the non-secure context and exiting to non-secure world. If the EL3 Runtime Software needs additional configuration to be set for non-secure context, like routing FIQs to the secure world, the values of the registers can be modified prior to programming. See `PSCI CPU context management`_ for more details on CPU context management.h](hGet the non-secure }(hGet the non-secure h!j ubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!j ubh for the current CPU by calling }(h for the current CPU by calling h!j ubju )}(h``cm_get_context()``h]hcm_get_context()}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!j ubhX' , then programming the registers in the non-secure context and exiting to non-secure world. If the EL3 Runtime Software needs additional configuration to be set for non-secure context, like routing FIQs to the secure world, the values of the registers can be modified prior to programming. See }(hX' , then programming the registers in the non-secure context and exiting to non-secure world. If the EL3 Runtime Software needs additional configuration to be set for non-secure context, like routing FIQs to the secure world, the values of the registers can be modified prior to programming. See h!j ubj )}(h`PSCI CPU context management`_h]hPSCI CPU context management}(hPSCI CPU context managementh!j ubah"}(h$]h&]h+]h-]h/]namePSCI CPU context managementj$ psci-cpu-context-managementuh1j h!j j Kubh, for more details on CPU context management.}(h, for more details on CPU context management.h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK'h!j ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j3 hhhAj hCNubeh"}(h$]h&]h+]h-]h/]enumtypearabicprefixhsuffix.uh1j1 h!j hhhAj hCKubj )}(hlThe generic call sequence of PSCI library interfaces during warm boot in AArch32 systems is described below:h]hlThe generic call sequence of PSCI library interfaces during warm boot in AArch32 systems is described below:}(hjP h!jN hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK/h!j hhubj2 )}(hhh](j7 )}(hAfter warm reset, the EL3 Runtime Software performs the necessary warm boot initialization including the PSCI library pre-requisites mentioned in `PSCI Library Interface`_ (Note that the Data cache **must not** be enabled). h]j )}(hAfter warm reset, the EL3 Runtime Software performs the necessary warm boot initialization including the PSCI library pre-requisites mentioned in `PSCI Library Interface`_ (Note that the Data cache **must not** be enabled).h](hAfter warm reset, the EL3 Runtime Software performs the necessary warm boot initialization including the PSCI library pre-requisites mentioned in }(hAfter warm reset, the EL3 Runtime Software performs the necessary warm boot initialization including the PSCI library pre-requisites mentioned in h!jc ubj )}(h`PSCI Library Interface`_h]hPSCI Library Interface}(hPSCI Library Interfaceh!jl ubah"}(h$]h&]h+]h-]h/]namePSCI Library Interfacej$ j% uh1j h!jc j Kubh (Note that the Data cache }(h (Note that the Data cache h!jc ubj )}(h **must not**h]hmust not}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!jc ubh be enabled).}(h be enabled).h!jc ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK2h!j_ ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j\ hhhAj hCNubj7 )}(h}Call ``psci_warmboot_entrypoint()`` in Monitor mode. This interface initializes/restores the non-secure CPU context as well. h]j )}(h|Call ``psci_warmboot_entrypoint()`` in Monitor mode. This interface initializes/restores the non-secure CPU context as well.h](hCall }(hCall h!j ubju )}(h``psci_warmboot_entrypoint()``h]hpsci_warmboot_entrypoint()}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!j ubhY in Monitor mode. This interface initializes/restores the non-secure CPU context as well.}(hY in Monitor mode. This interface initializes/restores the non-secure CPU context as well.h!j ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK7h!j ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j\ hhhAj hCNubj7 )}(h:Do step 5 of the cold boot call sequence described above. h]j )}(h9Do step 5 of the cold boot call sequence described above.h]h9Do step 5 of the cold boot call sequence described above.}(hj h!j ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK:h!j ubah"}(h$]h&]h+]h-]h/]uh1j6 h!j\ hhhAj hCNubeh"}(h$]h&]h+]h-]h/]jI jJ jK hjL jM uh1j1 h!j hhhAj hCK2ubj )}(hvThe generic call sequence of PSCI library interfaces on receipt of a PSCI SMC on an AArch32 system is described below:h]hvThe generic call sequence of PSCI library interfaces on receipt of a PSCI SMC on an AArch32 system is described below:}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKArgument : entry_point_info_t *next_image_info Return : voidh]h>Argument : entry_point_info_t *next_image_info Return : void}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCKh!jhhubj )}(hXAfter ``psci_setup()`` and prior to exit to the non-secure world, this function must be called by the EL3 Runtime Software to initialize the non-secure world context. The non-secure world entrypoint information ``next_image_info`` (first argument) will be used to determine the non-secure context. After this function returns, the EL3 Runtime Software must retrieve the ``cpu_context_t`` (using cm_get_context()) for the current CPU and program the registers prior to exit to the non-secure world.h](hAfter }(hAfter h!jhhhANhCNubju )}(h``psci_setup()``h]h psci_setup()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh and prior to exit to the non-secure world, this function must be called by the EL3 Runtime Software to initialize the non-secure world context. The non-secure world entrypoint information }(h and prior to exit to the non-secure world, this function must be called by the EL3 Runtime Software to initialize the non-secure world context. The non-secure world entrypoint information h!jhhhANhCNubju )}(h``next_image_info``h]hnext_image_info}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh (first argument) will be used to determine the non-secure context. After this function returns, the EL3 Runtime Software must retrieve the }(h (first argument) will be used to determine the non-secure context. After this function returns, the EL3 Runtime Software must retrieve the h!jhhhANhCNubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhn (using cm_get_context()) for the current CPU and program the registers prior to exit to the non-secure world.}(hn (using cm_get_context()) for the current CPU and program the registers prior to exit to the non-secure world.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubeh"}(h$]*interface-psci-prepare-next-non-secure-ctxah&]h+].interface : psci_prepare_next_non_secure_ctx()ah-]h/]uh1j h!jBhhhAj hCKubj )}(hhh](j )}(h'Interface : psci_register_spd_pm_hook()h]h'Interface : psci_register_spd_pm_hook()}(hj#h!j!hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj)}(h/Argument : const spd_pm_ops_t * Return : voidh]h/Argument : const spd_pm_ops_t * Return : void}(hhh!j/ubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCKh!jhhubj )}(hXAs explained in `Secure payload power management callback`_, the EL3 Runtime Software may want to perform some bookkeeping during power management operations. This function is used to register the ``spd_pm_ops_t`` (first argument) callbacks with the PSCI library which will be called appropriately during power management. Calling this function is optional and need to be called by the primary CPU during the cold boot sequence after ``psci_setup()`` has completed.h](hAs explained in }(hAs explained in h!j=hhhANhCNubj )}(h+`Secure payload power management callback`_h]h(Secure payload power management callback}(h(Secure payload power management callbackh!jFubah"}(h$]h&]h+]h-]h/]name(Secure payload power management callbackj$ (secure-payload-power-management-callbackuh1j h!j=j Kubh, the EL3 Runtime Software may want to perform some bookkeeping during power management operations. This function is used to register the }(h, the EL3 Runtime Software may want to perform some bookkeeping during power management operations. This function is used to register the h!j=hhhANhCNubju )}(h``spd_pm_ops_t``h]h spd_pm_ops_t}(hhh!j]ubah"}(h$]h&]h+]h-]h/]uh1jt h!j=ubh (first argument) callbacks with the PSCI library which will be called appropriately during power management. Calling this function is optional and need to be called by the primary CPU during the cold boot sequence after }(h (first argument) callbacks with the PSCI library which will be called appropriately during power management. Calling this function is optional and need to be called by the primary CPU during the cold boot sequence after h!j=hhhANhCNubju )}(h``psci_setup()``h]h psci_setup()}(hhh!jpubah"}(h$]h&]h+]h-]h/]uh1jt h!j=ubh has completed.}(h has completed.h!j=hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubeh"}(h$]#interface-psci-register-spd-pm-hookah&]h+]'interface : psci_register_spd_pm_hook()ah-]h/]uh1j h!jBhhhAj hCKubj )}(hhh](j )}(hInterface : psci_smc_handler()h]hInterface : psci_smc_handler()}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj)}(hArgument : uint32_t smc_fid, u_register_t x1, u_register_t x2, u_register_t x3, u_register_t x4, void *cookie, void *handle, u_register_t flags Return : u_register_th]hArgument : uint32_t smc_fid, u_register_t x1, u_register_t x2, u_register_t x3, u_register_t x4, void *cookie, void *handle, u_register_t flags Return : u_register_t}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCKh!jhhubj )}(hXThis function is the top level handler for SMCs which fall within the PSCI service range specified in `SMCCC`_. The function ID ``smc_fid`` (first argument) determines the PSCI API to be called. The ``x1`` to ``x4`` (2nd to 5th arguments), are the values of the registers r1 - r4 (in AArch32) or x1 - x4 (in AArch64) when the SMC is received. These are the arguments to PSCI API as described in `PSCI spec`_. The 'flags' (8th argument) is a bit field parameter and is detailed in 'smccc.h' header. It includes whether the call is from the secure or non-secure world. The ``cookie`` (6th argument) and the ``handle`` (7th argument) are not used and are reserved for future use.h](hfThis function is the top level handler for SMCs which fall within the PSCI service range specified in }(hfThis function is the top level handler for SMCs which fall within the PSCI service range specified in h!jhhhANhCNubj )}(h`SMCCC`_h]hSMCCC}(hSMCCCh!jubah"}(h$]h&]h+]h-]h/]namejj j uh1j h!jj Kubh. The function ID }(h. The function ID h!jhhhANhCNubju )}(h ``smc_fid``h]hsmc_fid}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh< (first argument) determines the PSCI API to be called. The }(h< (first argument) determines the PSCI API to be called. The h!jhhhANhCNubju )}(h``x1``h]hx1}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh to }(h to h!jhhhANhCNubju )}(h``x4``h]hx4}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh (2nd to 5th arguments), are the values of the registers r1 - r4 (in AArch32) or x1 - x4 (in AArch64) when the SMC is received. These are the arguments to PSCI API as described in }(h (2nd to 5th arguments), are the values of the registers r1 - r4 (in AArch32) or x1 - x4 (in AArch64) when the SMC is received. These are the arguments to PSCI API as described in h!jhhhANhCNubj )}(h `PSCI spec`_h]h PSCI spec}(h PSCI spech!jubah"}(h$]h&]h+]h-]h/]name PSCI specj j uh1j h!jj Kubh. The ‘flags’ (8th argument) is a bit field parameter and is detailed in ‘smccc.h’ header. It includes whether the call is from the secure or non-secure world. The }(h. The 'flags' (8th argument) is a bit field parameter and is detailed in 'smccc.h' header. It includes whether the call is from the secure or non-secure world. The h!jhhhANhCNubju )}(h ``cookie``h]hcookie}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh (6th argument) and the }(h (6th argument) and the h!jhhhANhCNubju )}(h ``handle``h]hhandle}(hhh!j0ubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh= (7th argument) are not used and are reserved for future use.}(h= (7th argument) are not used and are reserved for future use.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hX'The return value from this interface is the return value from the underlying PSCI API corresponding to ``smc_fid``. This function may not return back to the caller if PSCI API causes power down of the CPU. In this case, when the CPU wakes up, it will start execution from the warm reset address.h](hgThe return value from this interface is the return value from the underlying PSCI API corresponding to }(hgThe return value from this interface is the return value from the underlying PSCI API corresponding to h!jIhhhANhCNubju )}(h ``smc_fid``h]hsmc_fid}(hhh!jRubah"}(h$]h&]h+]h-]h/]uh1jt h!jIubh. This function may not return back to the caller if PSCI API causes power down of the CPU. In this case, when the CPU wakes up, it will start execution from the warm reset address.}(h. This function may not return back to the caller if PSCI API causes power down of the CPU. In this case, when the CPU wakes up, it will start execution from the warm reset address.h!jIhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubeh"}(h$]interface-psci-smc-handlerah&]h+]interface : psci_smc_handler()ah-]h/]uh1j h!jBhhhAj hCKubj )}(hhh](j )}(h&Interface : psci_warmboot_entrypoint()h]h&Interface : psci_warmboot_entrypoint()}(hjxh!jvhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jshhhAj hCM ubj)}(hArgument : void Return : voidh]hArgument : void Return : void}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jshhubj )}(hXThis function performs the warm boot initialization/restoration as mandated by `PSCI spec`_. For AArch32, on wakeup from power down the CPU resets to secure SVC mode and the EL3 Runtime Software must perform the prerequisite initializations mentioned at top of this section. This function must be called with Data cache disabled (unless build option ``HW_ASSISTED_COHERENCY`` is enabled) but with MMU initialized and enabled. The major actions performed by this function are:h](hOThis function performs the warm boot initialization/restoration as mandated by }(hOThis function performs the warm boot initialization/restoration as mandated by h!jhhhANhCNubj )}(h `PSCI spec`_h]h PSCI spec}(h PSCI spech!jubah"}(h$]h&]h+]h-]h/]name PSCI specj j uh1j h!jj KubhX. For AArch32, on wakeup from power down the CPU resets to secure SVC mode and the EL3 Runtime Software must perform the prerequisite initializations mentioned at top of this section. This function must be called with Data cache disabled (unless build option }(hX. For AArch32, on wakeup from power down the CPU resets to secure SVC mode and the EL3 Runtime Software must perform the prerequisite initializations mentioned at top of this section. This function must be called with Data cache disabled (unless build option h!jhhhANhCNubju )}(h``HW_ASSISTED_COHERENCY``h]hHW_ASSISTED_COHERENCY}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhd is enabled) but with MMU initialized and enabled. The major actions performed by this function are:}(hd is enabled) but with MMU initialized and enabled. The major actions performed by this function are:h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jshhubj)}(hhh](j7 )}(h1Invalidates the stack and enables the data cache.h]j )}(hjh]h1Invalidates the stack and enables the data cache.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(h5Initializes architecture and PSCI state coordination.h]j )}(hjh]h5Initializes architecture and PSCI state coordination.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hkRestores/Initializes the peripheral drivers to the required state via appropriate ``plat_psci_ops_t`` hooksh]j )}(hkRestores/Initializes the peripheral drivers to the required state via appropriate ``plat_psci_ops_t`` hooksh](hRRestores/Initializes the peripheral drivers to the required state via appropriate }(hRRestores/Initializes the peripheral drivers to the required state via appropriate h!jubju )}(h``plat_psci_ops_t``h]hplat_psci_ops_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh hooks}(h hooksh!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hURestores the EL3 Runtime Software context via appropriate ``spd_pm_ops_t`` callbacks.h]j )}(hURestores the EL3 Runtime Software context via appropriate ``spd_pm_ops_t`` callbacks.h](h:Restores the EL3 Runtime Software context via appropriate }(h:Restores the EL3 Runtime Software context via appropriate h!j+ubju )}(h``spd_pm_ops_t``h]h spd_pm_ops_t}(hhh!j4ubah"}(h$]h&]h+]h-]h/]uh1jt h!j+ubh callbacks.}(h callbacks.h!j+ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j'ubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(heRestores/Initializes the non-secure context and populates the ``cpu_context_t`` for the current CPU. h]j )}(hdRestores/Initializes the non-secure context and populates the ``cpu_context_t`` for the current CPU.h](h>Restores/Initializes the non-secure context and populates the }(h>Restores/Initializes the non-secure context and populates the h!jWubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!j`ubah"}(h$]h&]h+]h-]h/]uh1jt h!jWubh for the current CPU.}(h for the current CPU.h!jWubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM h!jSubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jshhubj )}(hUpon the return of this function, the EL3 Runtime Software must retrieve the non-secure ``cpu_context_t`` using ``cm_get_context()`` and program the registers prior to exit to the non-secure world.h](hXUpon the return of this function, the EL3 Runtime Software must retrieve the non-secure }(hXUpon the return of this function, the EL3 Runtime Software must retrieve the non-secure h!jhhhANhCNubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh using }(h using h!jhhhANhCNubju )}(h``cm_get_context()``h]hcm_get_context()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhA and program the registers prior to exit to the non-secure world.}(hA and program the registers prior to exit to the non-secure world.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM#h!jshhubeh"}(h$]"interface-psci-warmboot-entrypointah&]h+]&interface : psci_warmboot_entrypoint()ah-]h/]uh1j h!jBhhhAj hCM ubeh"}(h$]j% ah&]h+]psci library interfaceah-]h/]uh1j h!j hhhAj hCKyjAKubj )}(hhh](j )}(h!EL3 Runtime Software dependenciesh]h!EL3 Runtime Software dependencies}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM(ubj )}(hX[The PSCI Library includes supporting frameworks like context management, cpu operations (cpu_ops) and per-cpu data framework. Other helper library functions like bakery locks and spin locks are also included in the library. The dependencies which must be fulfilled by the EL3 Runtime Software for integration with PSCI library are described below.h]hX[The PSCI Library includes supporting frameworks like context management, cpu operations (cpu_ops) and per-cpu data framework. Other helper library functions like bakery locks and spin locks are also included in the library. The dependencies which must be fulfilled by the EL3 Runtime Software for integration with PSCI library are described below.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM*h!jhhubj )}(hhh](j )}(hGeneral dependenciesh]hGeneral dependencies}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM1ubj )}(hThe PSCI library being a Multiprocessor (MP) implementation, EL3 Runtime Software must provide an SMC handling framework capable of MP adhering to `SMCCC`_ specification.h](hThe PSCI library being a Multiprocessor (MP) implementation, EL3 Runtime Software must provide an SMC handling framework capable of MP adhering to }(hThe PSCI library being a Multiprocessor (MP) implementation, EL3 Runtime Software must provide an SMC handling framework capable of MP adhering to h!jhhhANhCNubj )}(h`SMCCC`_h]hSMCCC}(hSMCCCh!jubah"}(h$]h&]h+]h-]h/]namej j j uh1j h!jj Kubh specification.}(h specification.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM3h!jhhubj )}(hXThe EL3 Runtime Software must also export cache maintenance primitives and some helper utilities for assert, print and memory operations as listed below. The TF-A source tree provides implementations for all these functions but the EL3 Runtime Software may use its own implementation.h]hXThe EL3 Runtime Software must also export cache maintenance primitives and some helper utilities for assert, print and memory operations as listed below. The TF-A source tree provides implementations for all these functions but the EL3 Runtime Software may use its own implementation.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM7h!jhhubj )}(h6**Functions : assert(), memcpy(), memset(), printf()**h]j )}(hj-h]h2Functions : assert(), memcpy(), memset(), printf()}(hhh!j/ubah"}(h$]h&]h+]h-]h/]uh1j h!j+ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM<h!jhhubj )}(h9These must be implemented as described in ISO C Standard.h]h9These must be implemented as described in ISO C Standard.}(hjDh!jBhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM>h!jhhubj )}(h#**Function : flush_dcache_range()**h]j )}(hjRh]hFunction : flush_dcache_range()}(hhh!jTubah"}(h$]h&]h+]h-]h/]uh1j h!jPubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM@h!jhhubj)}(h6Argument : uintptr_t addr, size_t size Return : voidh]h6Argument : uintptr_t addr, size_t size Return : void}(hhh!jgubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMDh!jhhubj )}(hThis function cleans and invalidates (flushes) the data cache for memory at address ``addr`` (first argument) address and of size ``size`` (second argument).h](hTThis function cleans and invalidates (flushes) the data cache for memory at address }(hTThis function cleans and invalidates (flushes) the data cache for memory at address h!juhhhANhCNubju )}(h``addr``h]haddr}(hhh!j~ubah"}(h$]h&]h+]h-]h/]uh1jt h!juubh& (first argument) address and of size }(h& (first argument) address and of size h!juhhhANhCNubju )}(h``size``h]hsize}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!juubh (second argument).}(h (second argument).h!juhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMGh!jhhubj )}(h!**Function : inv_dcache_range()**h]j )}(hjh]hFunction : inv_dcache_range()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMJh!jhhubj)}(h6Argument : uintptr_t addr, size_t size Return : voidh]h6Argument : uintptr_t addr, size_t size Return : void}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMNh!jhhubj )}(hThis function invalidates (flushes) the data cache for memory at address ``addr`` (first argument) address and of size ``size`` (second argument).h](hIThis function invalidates (flushes) the data cache for memory at address }(hIThis function invalidates (flushes) the data cache for memory at address h!jhhhANhCNubju )}(h``addr``h]haddr}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh& (first argument) address and of size }(h& (first argument) address and of size h!jhhhANhCNubju )}(h``size``h]hsize}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh (second argument).}(h (second argument).h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMQh!jhhubj )}(h**Function : do_panic()**h]j )}(hjh]hFunction : do_panic()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMTh!jhhubj)}(hArgument : void Return : voidh]hArgument : void Return : void}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMXh!jhhubj )}(hThis function will be called by the PSCI library on encountering a critical failure that cannot be recovered from. This function **must not** return.h](hThis function will be called by the PSCI library on encountering a critical failure that cannot be recovered from. This function }(hThis function will be called by the PSCI library on encountering a critical failure that cannot be recovered from. This function h!j)hhhANhCNubj )}(h **must not**h]hmust not}(hhh!j2ubah"}(h$]h&]h+]h-]h/]uh1j h!j)ubh return.}(h return.h!j)hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCM[h!jhhubeh"}(h$]general-dependenciesah&]h+]general dependenciesah-]h/]uh1j h!jhhhAj hCM1ubj )}(hhh](j )}(hCPU Context management APIh]hCPU Context management API}(hjXh!jVhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jShhhAj hCM_ubj )}(hXThe CPU context management data memory is statically allocated by PSCI library in BSS section. The PSCI library requires the EL3 Runtime Software to implement APIs to store and retrieve pointers to this CPU context data. SP-MIN demonstrates how these APIs can be implemented but the EL3 Runtime Software can choose a more optimal implementation (like dedicating the secure TPIDRPRW system register (in AArch32) for storing these pointers).h]hXThe CPU context management data memory is statically allocated by PSCI library in BSS section. The PSCI library requires the EL3 Runtime Software to implement APIs to store and retrieve pointers to this CPU context data. SP-MIN demonstrates how these APIs can be implemented but the EL3 Runtime Software can choose a more optimal implementation (like dedicating the secure TPIDRPRW system register (in AArch32) for storing these pointers).}(hjfh!jdhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMah!jShhubj )}(h(**Function : cm_set_context_by_index()**h]j )}(hjth]h$Function : cm_set_context_by_index()}(hhh!jvubah"}(h$]h&]h+]h-]h/]uh1j h!jrubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMhh!jShhubj)}(h[Argument : unsigned int cpu_idx, void *context, unsigned int security_state Return : voidh]h[Argument : unsigned int cpu_idx, void *context, unsigned int security_state Return : void}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMlh!jShhubj )}(hdThis function is called during cold boot when the ``psci_setup()`` PSCI library interface is called.h](h2This function is called during cold boot when the }(h2This function is called during cold boot when the h!jhhhANhCNubju )}(h``psci_setup()``h]h psci_setup()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh" PSCI library interface is called.}(h" PSCI library interface is called.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMoh!jShhubj )}(hXThis function must store the pointer to the CPU context data, ``context`` (2nd argument), for the specified ``security_state`` (3rd argument) and CPU identified by ``cpu_idx`` (first argument). The ``security_state`` will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The ``cpu_idx`` will correspond to the index returned by the ``plat_core_pos_by_mpidr()`` for ``mpidr`` of the CPU.h](h>This function must store the pointer to the CPU context data, }(h>This function must store the pointer to the CPU context data, h!jhhhANhCNubju )}(h ``context``h]hcontext}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh# (2nd argument), for the specified }(h# (2nd argument), for the specified h!jhhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh& (3rd argument) and CPU identified by }(h& (3rd argument) and CPU identified by h!jhhhANhCNubju )}(h ``cpu_idx``h]hcpu_idx}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh (first argument). The }(h (first argument). The h!jhhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhv will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The }(hv will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The h!jhhhANhCNubju )}(h ``cpu_idx``h]hcpu_idx}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh. will correspond to the index returned by the }(h. will correspond to the index returned by the h!jhhhANhCNubju )}(h``plat_core_pos_by_mpidr()``h]hplat_core_pos_by_mpidr()}(hhh!j!ubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh for }(h for h!jhhhANhCNubju )}(h ``mpidr``h]hmpidr}(hhh!j4ubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh of the CPU.}(h of the CPU.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMrh!jShhubj )}(hThe actual method of storing the ``context`` pointers is implementation specific. For example, SP-MIN stores the pointers in the array ``sp_min_cpu_ctx_ptr`` declared in ``sp_min_main.c``.h](h!The actual method of storing the }(h!The actual method of storing the h!jMhhhANhCNubju )}(h ``context``h]hcontext}(hhh!jVubah"}(h$]h&]h+]h-]h/]uh1jt h!jMubh[ pointers is implementation specific. For example, SP-MIN stores the pointers in the array }(h[ pointers is implementation specific. For example, SP-MIN stores the pointers in the array h!jMhhhANhCNubju )}(h``sp_min_cpu_ctx_ptr``h]hsp_min_cpu_ctx_ptr}(hhh!jiubah"}(h$]h&]h+]h-]h/]uh1jt h!jMubh declared in }(h declared in h!jMhhhANhCNubju )}(h``sp_min_main.c``h]h sp_min_main.c}(hhh!j|ubah"}(h$]h&]h+]h-]h/]uh1jt h!jMubh.}(hjM h!jMhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMyh!jShhubj )}(h**Function : cm_get_context()**h]j )}(hjh]hFunction : cm_get_context()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCM}h!jShhubj)}(h4Argument : uint32_t security_state Return : void *h]h4Argument : uint32_t security_state Return : void *}(hhh!jubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jShhubj )}(hXThis function must return the pointer to the ``cpu_context_t`` structure for the specified ``security_state`` (first argument) for the current CPU. The caller must ensure that ``cm_set_context_by_index`` is called first and the appropriate context pointers are stored prior to invoking this API. The ``security_state`` will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31.h](h-This function must return the pointer to the }(h-This function must return the pointer to the h!jhhhANhCNubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh structure for the specified }(h structure for the specified h!jhhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhC (first argument) for the current CPU. The caller must ensure that }(hC (first argument) for the current CPU. The caller must ensure that h!jhhhANhCNubju )}(h``cm_set_context_by_index``h]hcm_set_context_by_index}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubha is called first and the appropriate context pointers are stored prior to invoking this API. The }(ha is called first and the appropriate context pointers are stored prior to invoking this API. The h!jhhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhq will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31.}(hq will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jShhubj )}(h(**Function : cm_get_context_by_index()**h]j )}(hjh]h$Function : cm_get_context_by_index()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jShhubj)}(hNArgument : unsigned int cpu_idx, unsigned int security_state Return : void *h]hNArgument : unsigned int cpu_idx, unsigned int security_state Return : void *}(hhh!j+ubah"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jShhubj )}(hXGThis function must return the pointer to the ``cpu_context_t`` structure for the specified ``security_state`` (second argument) for the CPU identified by ``cpu_idx`` (first argument). The caller must ensure that ``cm_set_context_by_index`` is called first and the appropriate context pointers are stored prior to invoking this API. The ``security_state`` will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The ``cpu_idx`` will correspond to the index returned by the ``plat_core_pos_by_mpidr()`` for ``mpidr`` of the CPU.h](h-This function must return the pointer to the }(h-This function must return the pointer to the h!j9hhhANhCNubju )}(h``cpu_context_t``h]h cpu_context_t}(hhh!jBubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh structure for the specified }(h structure for the specified h!j9hhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jUubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh- (second argument) for the CPU identified by }(h- (second argument) for the CPU identified by h!j9hhhANhCNubju )}(h ``cpu_idx``h]hcpu_idx}(hhh!jhubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh/ (first argument). The caller must ensure that }(h/ (first argument). The caller must ensure that h!j9hhhANhCNubju )}(h``cm_set_context_by_index``h]hcm_set_context_by_index}(hhh!j{ubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubha is called first and the appropriate context pointers are stored prior to invoking this API. The }(ha is called first and the appropriate context pointers are stored prior to invoking this API. The h!j9hhhANhCNubju )}(h``security_state``h]hsecurity_state}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubhv will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The }(hv will always be non-secure when called by PSCI library and this argument is retained for compatibility with BL31. The h!j9hhhANhCNubju )}(h ``cpu_idx``h]hcpu_idx}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh. will correspond to the index returned by the }(h. will correspond to the index returned by the h!j9hhhANhCNubju )}(h``plat_core_pos_by_mpidr()``h]hplat_core_pos_by_mpidr()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh for }(h for h!j9hhhANhCNubju )}(h ``mpidr``h]hmpidr}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!j9ubh of the CPU.}(h of the CPU.h!j9hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jShhubeh"}(h$]j/ah&]h+]cpu context management apiah-]h/]uh1j h!jhhhAj hCM_jAKubj )}(hhh](j )}(h Platform APIh]h Platform API}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCMubj )}(hThe platform layer abstracts the platform-specific details from the generic PSCI library. The following platform APIs/macros must be defined by the EL3 Runtime Software for integration with the PSCI library.h]hThe platform layer abstracts the platform-specific details from the generic PSCI library. The following platform APIs/macros must be defined by the EL3 Runtime Software for integration with the PSCI library.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj )}(h The mandatory platform APIs are:h]h The mandatory platform APIs are:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj)}(hhh](j7 )}(hplat_my_core_posh]j )}(hjh]hplat_my_core_pos}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_core_pos_by_mpidrh]j )}(hj0h]hplat_core_pos_by_mpidr}(hj0h!j2ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j.ubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_get_syscnt_freq2h]j )}(hjGh]hplat_get_syscnt_freq2}(hjGh!jIubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jEubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_get_power_domain_tree_desch]j )}(hj^h]hplat_get_power_domain_tree_desc}(hj^h!j`ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j\ubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_setup_psci_opsh]j )}(hjuh]hplat_setup_psci_ops}(hjuh!jwubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jsubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_reset_handlerh]j )}(hjh]hplat_reset_handler}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_panic_handlerh]j )}(hjh]hplat_panic_handler}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hplat_get_my_stack h]j )}(hplat_get_my_stackh]hplat_get_my_stack}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jhhubj )}(h"The mandatory platform macros are:h]h"The mandatory platform macros are:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj)}(hhh](j7 )}(hPLATFORM_CORE_COUNTh]j )}(hjh]hPLATFORM_CORE_COUNT}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hPLAT_MAX_PWR_LVLh]j )}(hjh]hPLAT_MAX_PWR_LVL}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hPLAT_NUM_PWR_DOMAINSh]j )}(hjh]hPLAT_NUM_PWR_DOMAINS}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hCACHE_WRITEBACK_GRANULEh]j )}(hj.h]hCACHE_WRITEBACK_GRANULE}(hj.h!j0ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j,ubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hPLAT_MAX_OFF_STATEh]j )}(hjEh]hPLAT_MAX_OFF_STATE}(hjEh!jGubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jCubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hPLAT_MAX_RET_STATEh]j )}(hj\h]hPLAT_MAX_RET_STATE}(hj\h!j^ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jZubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(h"PLAT_MAX_PWR_LVL_STATES (optional)h]j )}(hjsh]h"PLAT_MAX_PWR_LVL_STATES (optional)}(hjsh!juubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jqubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hPLAT_PCPU_DATA_SIZE (optional) h]j )}(hPLAT_PCPU_DATA_SIZE (optional)h]hPLAT_PCPU_DATA_SIZE (optional)}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubah"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jhhubj )}(hJThe details of these APIs/macros can be found in the :ref:`Porting Guide`.h](h5The details of these APIs/macros can be found in the }(h5The details of these APIs/macros can be found in the h!jhhhANhCNubh)}(h:ref:`Porting Guide`h]h)}(hjh]h Porting Guide}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh? porting guideuh1hhAj hCMh!jubh.}(hjM h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj )}(hXAll platform specific operations for power management are done via ``plat_psci_ops_t`` callbacks registered by the platform when ``plat_setup_psci_ops()`` API is called. The description of each of the callbacks in ``plat_psci_ops_t`` can be found in PSCI section of the :ref:`Porting Guide`. If any these callbacks are not registered, then the PSCI API associated with that callback will not be supported by PSCI library.h](hCAll platform specific operations for power management are done via }(hCAll platform specific operations for power management are done via h!jhhhANhCNubju )}(h``plat_psci_ops_t``h]hplat_psci_ops_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh+ callbacks registered by the platform when }(h+ callbacks registered by the platform when h!jhhhANhCNubju )}(h``plat_setup_psci_ops()``h]hplat_setup_psci_ops()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh< API is called. The description of each of the callbacks in }(h< API is called. The description of each of the callbacks in h!jhhhANhCNubju )}(h``plat_psci_ops_t``h]hplat_psci_ops_t}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh% can be found in PSCI section of the }(h% can be found in PSCI section of the h!jhhhANhCNubh)}(h:ref:`Porting Guide`h]h)}(hjh]h Porting Guide}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj)reftyperef refexplicitrefwarnh? porting guideuh1hhAj hCMh!jubh. If any these callbacks are not registered, then the PSCI API associated with that callback will not be supported by PSCI library.}(h. If any these callbacks are not registered, then the PSCI API associated with that callback will not be supported by PSCI library.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubeh"}(h$] platform-apiah&]h+] platform apiah-]h/]uh1j h!jhhhAj hCMubj )}(hhh](j )}(h(Secure payload power management callbackh]h(Secure payload power management callback}(hjSh!jQhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jNhhhAj hCMubj )}(hXDuring PSCI power management operations, the EL3 Runtime Software may need to perform some bookkeeping, and PSCI library provides ``spd_pm_ops_t`` callbacks for this purpose. These hooks must be populated and registered by using ``psci_register_spd_pm_hook()`` PSCI library interface.h](hDuring PSCI power management operations, the EL3 Runtime Software may need to perform some bookkeeping, and PSCI library provides }(hDuring PSCI power management operations, the EL3 Runtime Software may need to perform some bookkeeping, and PSCI library provides h!j_hhhANhCNubju )}(h``spd_pm_ops_t``h]h spd_pm_ops_t}(hhh!jhubah"}(h$]h&]h+]h-]h/]uh1jt h!j_ubhS callbacks for this purpose. These hooks must be populated and registered by using }(hS callbacks for this purpose. These hooks must be populated and registered by using h!j_hhhANhCNubju )}(h``psci_register_spd_pm_hook()``h]hpsci_register_spd_pm_hook()}(hhh!j{ubah"}(h$]h&]h+]h-]h/]uh1jt h!j_ubh PSCI library interface.}(h PSCI library interface.h!j_hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jNhhubj )}(hXTypical bookkeeping during PSCI power management calls include save/restore of the EL3 Runtime Software context. Also if the EL3 Runtime Software makes use of secure interrupts, then these interrupts must also be managed appropriately during CPU power down/power up. Any secure interrupt targeted to the current CPU must be disabled or re-targeted to other running CPU prior to power down of the current CPU. During power up, these interrupt can be enabled/re-targeted back to the current CPU.h]hXTypical bookkeeping during PSCI power management calls include save/restore of the EL3 Runtime Software context. Also if the EL3 Runtime Software makes use of secure interrupts, then these interrupts must also be managed appropriately during CPU power down/power up. Any secure interrupt targeted to the current CPU must be disabled or re-targeted to other running CPU prior to power down of the current CPU. During power up, these interrupt can be enabled/re-targeted back to the current CPU.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jNhhubj)}(hXtypedef struct spd_pm_ops { void (*svc_on)(u_register_t target_cpu); int32_t (*svc_off)(u_register_t __unused); void (*svc_suspend)(u_register_t max_off_pwrlvl); void (*svc_on_finish)(u_register_t __unused); void (*svc_suspend_finish)(u_register_t max_off_pwrlvl); int32_t (*svc_migrate)(u_register_t from_cpu, u_register_t to_cpu); int32_t (*svc_migrate_info)(u_register_t *resident_cpu); void (*svc_system_off)(void); void (*svc_system_reset)(void); } spd_pm_ops_t;h]hXtypedef struct spd_pm_ops { void (*svc_on)(u_register_t target_cpu); int32_t (*svc_off)(u_register_t __unused); void (*svc_suspend)(u_register_t max_off_pwrlvl); void (*svc_on_finish)(u_register_t __unused); void (*svc_suspend_finish)(u_register_t max_off_pwrlvl); int32_t (*svc_migrate)(u_register_t from_cpu, u_register_t to_cpu); int32_t (*svc_migrate_info)(u_register_t *resident_cpu); void (*svc_system_off)(void); void (*svc_system_reset)(void); } spd_pm_ops_t;}(hhh!jubah"}(h$]h&]h+]h-]h/]forcehighlight_args}jjjjuh1jhAj hCMh!jNhhubj )}(h4A brief description of each callback is given below:h]h4A brief description of each callback is given below:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jNhhubj)}(hhh](j7 )}(hXsvc_on, svc_off, svc_on_finish The ``svc_on``, ``svc_off`` callbacks are called during PSCI_CPU_ON, PSCI_CPU_OFF APIs respectively. The ``svc_on_finish`` is called when the target CPU of PSCI_CPU_ON API powers up and executes the ``psci_warmboot_entrypoint()`` PSCI library interface. h](j )}(hsvc_on, svc_off, svc_on_finishh]hsvc_on, svc_off, svc_on_finish}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubj )}(hThe ``svc_on``, ``svc_off`` callbacks are called during PSCI_CPU_ON, PSCI_CPU_OFF APIs respectively. The ``svc_on_finish`` is called when the target CPU of PSCI_CPU_ON API powers up and executes the ``psci_warmboot_entrypoint()`` PSCI library interface.h](hThe }(hThe h!jubju )}(h ``svc_on``h]hsvc_on}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh, }(h, h!jubju )}(h ``svc_off``h]hsvc_off}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhN callbacks are called during PSCI_CPU_ON, PSCI_CPU_OFF APIs respectively. The }(hN callbacks are called during PSCI_CPU_ON, PSCI_CPU_OFF APIs respectively. The h!jubju )}(h``svc_on_finish``h]h svc_on_finish}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhM is called when the target CPU of PSCI_CPU_ON API powers up and executes the }(hM is called when the target CPU of PSCI_CPU_ON API powers up and executes the h!jubju )}(h``psci_warmboot_entrypoint()``h]hpsci_warmboot_entrypoint()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh PSCI library interface.}(h PSCI library interface.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubeh"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hXsvc_suspend, svc_suspend_finish The ``svc_suspend`` callback is called during power down bu either PSCI_SUSPEND or PSCI_SYSTEM_SUSPEND APIs. The ``svc_suspend_finish`` is called when the CPU wakes up from suspend and executes the ``psci_warmboot_entrypoint()`` PSCI library interface. The ``max_off_pwrlvl`` (first parameter) denotes the highest power domain level being powered down to or woken up from suspend. h](j )}(hsvc_suspend, svc_suspend_finishh]hsvc_suspend, svc_suspend_finish}(hj=h!j;ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j7ubj )}(hX|The ``svc_suspend`` callback is called during power down bu either PSCI_SUSPEND or PSCI_SYSTEM_SUSPEND APIs. The ``svc_suspend_finish`` is called when the CPU wakes up from suspend and executes the ``psci_warmboot_entrypoint()`` PSCI library interface. The ``max_off_pwrlvl`` (first parameter) denotes the highest power domain level being powered down to or woken up from suspend.h](hThe }(hThe h!jIubju )}(h``svc_suspend``h]h svc_suspend}(hhh!jRubah"}(h$]h&]h+]h-]h/]uh1jt h!jIubh^ callback is called during power down bu either PSCI_SUSPEND or PSCI_SYSTEM_SUSPEND APIs. The }(h^ callback is called during power down bu either PSCI_SUSPEND or PSCI_SYSTEM_SUSPEND APIs. The h!jIubju )}(h``svc_suspend_finish``h]hsvc_suspend_finish}(hhh!jeubah"}(h$]h&]h+]h-]h/]uh1jt h!jIubh? is called when the CPU wakes up from suspend and executes the }(h? is called when the CPU wakes up from suspend and executes the h!jIubju )}(h``psci_warmboot_entrypoint()``h]hpsci_warmboot_entrypoint()}(hhh!jxubah"}(h$]h&]h+]h-]h/]uh1jt h!jIubh PSCI library interface. The }(h PSCI library interface. The h!jIubju )}(h``max_off_pwrlvl``h]hmax_off_pwrlvl}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jIubhi (first parameter) denotes the highest power domain level being powered down to or woken up from suspend.}(hi (first parameter) denotes the highest power domain level being powered down to or woken up from suspend.h!jIubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j7ubeh"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hsvc_system_off, svc_system_reset These callbacks are called during PSCI_SYSTEM_OFF and PSCI_SYSTEM_RESET PSCI APIs respectively. h](j )}(h svc_system_off, svc_system_reseth]h svc_system_off, svc_system_reset}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubj )}(h_These callbacks are called during PSCI_SYSTEM_OFF and PSCI_SYSTEM_RESET PSCI APIs respectively.h]h_These callbacks are called during PSCI_SYSTEM_OFF and PSCI_SYSTEM_RESET PSCI APIs respectively.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubeh"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hXsvc_migrate_info This callback is called in response to PSCI_MIGRATE_INFO_TYPE or PSCI_MIGRATE_INFO_UP_CPU APIs. The return value of this callback must correspond to the return value of PSCI_MIGRATE_INFO_TYPE API as described in `PSCI spec`_. If the secure payload is a Uniprocessor (UP) implementation, then it must update the mpidr of the CPU it is resident in via ``resident_cpu`` (first argument). The updates to ``resident_cpu`` is ignored if the secure payload is a multiprocessor (MP) implementation. h](j )}(hsvc_migrate_infoh]hsvc_migrate_info}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubj )}(hXThis callback is called in response to PSCI_MIGRATE_INFO_TYPE or PSCI_MIGRATE_INFO_UP_CPU APIs. The return value of this callback must correspond to the return value of PSCI_MIGRATE_INFO_TYPE API as described in `PSCI spec`_. If the secure payload is a Uniprocessor (UP) implementation, then it must update the mpidr of the CPU it is resident in via ``resident_cpu`` (first argument). The updates to ``resident_cpu`` is ignored if the secure payload is a multiprocessor (MP) implementation.h](hThis callback is called in response to PSCI_MIGRATE_INFO_TYPE or PSCI_MIGRATE_INFO_UP_CPU APIs. The return value of this callback must correspond to the return value of PSCI_MIGRATE_INFO_TYPE API as described in }(hThis callback is called in response to PSCI_MIGRATE_INFO_TYPE or PSCI_MIGRATE_INFO_UP_CPU APIs. The return value of this callback must correspond to the return value of PSCI_MIGRATE_INFO_TYPE API as described in h!jubj )}(h `PSCI spec`_h]h PSCI spec}(h PSCI spech!jubah"}(h$]h&]h+]h-]h/]name PSCI specj j uh1j h!jj Kubh~. If the secure payload is a Uniprocessor (UP) implementation, then it must update the mpidr of the CPU it is resident in via }(h~. If the secure payload is a Uniprocessor (UP) implementation, then it must update the mpidr of the CPU it is resident in via h!jubju )}(h``resident_cpu``h]h resident_cpu}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh" (first argument). The updates to }(h" (first argument). The updates to h!jubju )}(h``resident_cpu``h]h resident_cpu}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhJ is ignored if the secure payload is a multiprocessor (MP) implementation.}(hJ is ignored if the secure payload is a multiprocessor (MP) implementation.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jubeh"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubj7 )}(hXsvc_migrate This callback is only relevant if the secure payload in EL3 Runtime Software is a Uniprocessor (UP) implementation and supports migration from the current CPU ``from_cpu`` (first argument) to another CPU ``to_cpu`` (second argument). This callback is called in response to PSCI_MIGRATE API. This callback is never called if the secure payload is a Multiprocessor (MP) implementation. h](j )}(h svc_migrateh]h svc_migrate}(hj9h!j7ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j3ubj )}(hXThis callback is only relevant if the secure payload in EL3 Runtime Software is a Uniprocessor (UP) implementation and supports migration from the current CPU ``from_cpu`` (first argument) to another CPU ``to_cpu`` (second argument). This callback is called in response to PSCI_MIGRATE API. This callback is never called if the secure payload is a Multiprocessor (MP) implementation.h](hThis callback is only relevant if the secure payload in EL3 Runtime Software is a Uniprocessor (UP) implementation and supports migration from the current CPU }(hThis callback is only relevant if the secure payload in EL3 Runtime Software is a Uniprocessor (UP) implementation and supports migration from the current CPU h!jEubju )}(h ``from_cpu``h]hfrom_cpu}(hhh!jNubah"}(h$]h&]h+]h-]h/]uh1jt h!jEubh! (first argument) to another CPU }(h! (first argument) to another CPU h!jEubju )}(h ``to_cpu``h]hto_cpu}(hhh!jaubah"}(h$]h&]h+]h-]h/]uh1jt h!jEubh (second argument). This callback is called in response to PSCI_MIGRATE API. This callback is never called if the secure payload is a Multiprocessor (MP) implementation.}(h (second argument). This callback is called in response to PSCI_MIGRATE API. This callback is never called if the secure payload is a Multiprocessor (MP) implementation.h!jEubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!j3ubeh"}(h$]h&]h+]h-]h/]uh1j6 h!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jjuh1jhAj hCMh!jNhhubeh"}(h$]jWah&]h+](secure payload power management callbackah-]h/]uh1j h!jhhhAj hCMjAKubj )}(hhh](j )}(hCPU operationsh]hCPU operations}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCM ubj )}(hXThe CPU operations (cpu_ops) framework implement power down sequence specific to the CPU and the details of which can be found at :ref:`firmware_design_cpu_ops_fwk`. The TF-A tree implements the ``cpu_ops`` for various supported CPUs and the EL3 Runtime Software needs to include the required ``cpu_ops`` in its build. The start and end of the ``cpu_ops`` descriptors must be exported by the EL3 Runtime Software via the ``__CPU_OPS_START__`` and ``__CPU_OPS_END__`` linker symbols.h](hThe CPU operations (cpu_ops) framework implement power down sequence specific to the CPU and the details of which can be found at }(hThe CPU operations (cpu_ops) framework implement power down sequence specific to the CPU and the details of which can be found at h!jhhhANhCNubh)}(h":ref:`firmware_design_cpu_ops_fwk`h]h)}(hjh]hfirmware_design_cpu_ops_fwk}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?firmware_design_cpu_ops_fwkuh1hhAj hCMh!jubh. The TF-A tree implements the }(h. The TF-A tree implements the h!jhhhANhCNubju )}(h ``cpu_ops``h]hcpu_ops}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhW for various supported CPUs and the EL3 Runtime Software needs to include the required }(hW for various supported CPUs and the EL3 Runtime Software needs to include the required h!jhhhANhCNubju )}(h ``cpu_ops``h]hcpu_ops}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh( in its build. The start and end of the }(h( in its build. The start and end of the h!jhhhANhCNubju )}(h ``cpu_ops``h]hcpu_ops}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jt h!jubhB descriptors must be exported by the EL3 Runtime Software via the }(hB descriptors must be exported by the EL3 Runtime Software via the h!jhhhANhCNubju )}(h``__CPU_OPS_START__``h]h__CPU_OPS_START__}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh and }(h and h!jhhhANhCNubju )}(h``__CPU_OPS_END__``h]h__CPU_OPS_END__}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1jt h!jubh linker symbols.}(h linker symbols.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubj )}(hThe ``cpu_ops`` descriptors also include reset sequences and may include errata workarounds for the CPU. The EL3 Runtime Software can choose to call this during cold/warm reset if it does not implement its own reset sequence/errata workarounds.h](hThe }(hThe h!j1 hhhANhCNubju )}(h ``cpu_ops``h]hcpu_ops}(hhh!j: ubah"}(h$]h&]h+]h-]h/]uh1jt h!j1 ubh descriptors also include reset sequences and may include errata workarounds for the CPU. The EL3 Runtime Software can choose to call this during cold/warm reset if it does not implement its own reset sequence/errata workarounds.}(h descriptors also include reset sequences and may include errata workarounds for the CPU. The EL3 Runtime Software can choose to call this during cold/warm reset if it does not implement its own reset sequence/errata workarounds.h!j1 hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubh transition)}(h--------------h]h"}(h$]h&]h+]h-]h/]uh1jS hAj hCMh!jhhubj )}(hM*Copyright (c) 2016-2020, Arm Limited and Contributors. All rights reserved.*h]h emphasis)}(hja jh]hKCopyright (c) 2016-2020, Arm Limited and Contributors. All rights reserved.}(hhh!je ubah"}(h$]h&]h+]h-]h/]uh1jc h!j_ ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCMh!jhhubh target)}(hx.. _PSCI spec: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdfh]h"}(h$] psci-specah&]h+] psci specah-]h/]j j uh1jx hCMdh!jhhhAj jAKubjy )}(h8.. _SMCCC: https://developer.arm.com/docs/den0028/latesth]h"}(h$]smcccah&]h+]smcccah-]h/]j j uh1jx hCMeh!jhhhAj jAKubjy )}(h.. _PSCI specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdfh]h"}(h$]psci-specificationah&]h+]psci specificationah-]h/]j juh1jx hCMfh!jhhhAj jAKubjy )}(h.. _PSCI Specification: http://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdfh]h"}(h$]id1ah&]h+]h-]psci specificationah/]j ihttp://infocenter.arm.com/help/topic/com.arm.doc.den0022c/DEN0022C_Power_State_Coordination_Interface.pdfuh1jx hCMgjAKh!jhhhAj ubeh"}(h$]cpu-operationsah&]h+]cpu operationsah-]h/]uh1j h!jhhhAj hCM ubeh"}(h$]!el3-runtime-software-dependenciesah&]h+]!el3 runtime software dependenciesah-]h/]uh1j h!j hhhAj hCM(ubeh"}(h$]:psci-library-integration-guide-for-armv8-a-aarch32-systemsah&]h+]:psci library integration guide for armv8-a aarch32 systemsah-]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_handlerj error_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 usubstitution_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 urefnames}( psci spec](j jjjesmccc](j j jujjjepsci library interface](j jE jl epsci cpu context management]j apsci specification](jj\ecpu context management api](jje(secure payload power management callback]jFaurefids}nameids}(j j jjj>j1 jj% jjjjjjjpjmjjj j jPjMjj/jKjHjjWj j j j j j j j u nametypes}(j NjNj>NjNjNjNjNjpNjNj NjPNjNjKNjNj Nj j j uh$}(j j jj j1 jj% jBjjjjjjjmjjjsj jjMjj/jSjHjjWjNj jj jz j j j j j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j KsRparse_messages]h system_message)}(hhh]j )}(h5Duplicate explicit target name: "psci specification".h]h9Duplicate explicit target name: “psci specification”.}(hhh!j!ubah"}(h$]h&]h+]h-]h/]uh1j h!j!ubah"}(h$]h&]h+]h-]h/]j alevelKtypeINFOlineM"sourcej uh1j!h!jhhhAj hCM"ubatransform_messages] transformerN decorationNhhub.