1sphinx.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/ras 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>Reliability, Availability, and Serviceability (RAS) Extensionsh]h>Reliability, Availability, and Serviceability (RAS) Extensions}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAO/home/test/workspace/code/optee_3.16/trusted-firmware-a/docs/components/ras.rsthCKubh paragraph)}(hThis document describes |TF-A| support for Arm Reliability, Availability, and Serviceability (RAS) extensions. RAS is a mandatory extension for Armv8.2 and later CPUs, and also an optional extension to the base Armv8.0 architecture.h](hThis document describes }(hThis document describes h!j hhhANhCNubh)}(hj h]h)}(hj h]hTF-A}(hhh!j ubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!j hhubh support for Arm Reliability, Availability, and Serviceability (RAS) extensions. RAS is a mandatory extension for Armv8.2 and later CPUs, and also an optional extension to the base Armv8.0 architecture.}(h support for Arm Reliability, Availability, and Serviceability (RAS) extensions. RAS is a mandatory extension for Armv8.2 and later CPUs, and also an optional extension to the base Armv8.0 architecture.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hXIn conjunction with the |EHF|, support for RAS extension enables firmware-first paradigm for handling platform errors: exceptions resulting from errors are routed to and handled in EL3. Said errors are Synchronous External Abort (SEA), Asynchronous External Abort (signalled as SErrors), Fault Handling and Error Recovery interrupts. The |EHF| document mentions various :ref:`error handling use-cases ` .h](hIn conjunction with the }(hIn conjunction with the h!j hhhANhCNubh)}(hjh]h)}(hjh]hEHF}(hhh!j ubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej refexplicitrefwarn reftargetjuh1hhAhBhCKh!j hhubhX6, support for RAS extension enables firmware-first paradigm for handling platform errors: exceptions resulting from errors are routed to and handled in EL3. Said errors are Synchronous External Abort (SEA), Asynchronous External Abort (signalled as SErrors), Fault Handling and Error Recovery interrupts. The }(hX6, support for RAS extension enables firmware-first paradigm for handling platform errors: exceptions resulting from errors are routed to and handled in EL3. Said errors are Synchronous External Abort (SEA), Asynchronous External Abort (signalled as SErrors), Fault Handling and Error Recovery interrupts. The h!j hhhANhCNubh)}(hjh]h)}(hjh]hEHF}(hhh!j ubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej refexplicitrefwarn reftargetjuh1hhAhBhCKh!j hhubh document mentions various }(h document mentions various h!j hhhANhCNubh)}(h6:ref:`error handling use-cases `h]h)}(hj! h]herror handling use-cases}(hhh!j# ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj- reftyperef refexplicitrefwarnh?delegation-use-casesuh1hhAj hCKh!j ubh .}(h .h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hFor the description of Arm RAS extensions, Standard Error Records, and the precise definition of RAS terminology, please refer to the Arm Architecture Reference Manual. The rest of this document assumes familiarity with architecture and terminology.h]hFor the description of Arm RAS extensions, Standard Error Records, and the precise definition of RAS terminology, please refer to the Arm Architecture Reference Manual. The rest of this document assumes familiarity with architecture and terminology.}(hjL h!jJ hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hhh](j )}(hOverviewh]hOverview}(hj] h!j[ hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jX hhhAj hCKubj )}(hXZAs mentioned above, the RAS support in |TF-A| enables routing to and handling of exceptions resulting from platform errors in EL3. It allows the platform to define an External Abort handler, and to register RAS nodes and interrupts. RAS framework also provides `helpers`__ for accessing Standard Error Records as introduced by the RAS extensions.h](h'As mentioned above, the RAS support in }(h'As mentioned above, the RAS support in h!ji hhhANhCNubh)}(hj h]h)}(hj h]hTF-A}(hhh!ju ubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!jr ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!ji hhubh enables routing to and handling of exceptions resulting from platform errors in EL3. It allows the platform to define an External Abort handler, and to register RAS nodes and interrupts. RAS framework also provides }(h enables routing to and handling of exceptions resulting from platform errors in EL3. It allows the platform to define an External Abort handler, and to register RAS nodes and interrupts. RAS framework also provides h!ji hhhANhCNubh reference)}(h `helpers`__h]hhelpers}(hhelpersh!j ubah"}(h$]h&]h+]h-]h/]namej anonymousKrefidstandard-error-record-helpersuh1j h!ji resolvedKubhJ for accessing Standard Error Records as introduced by the RAS extensions.}(hJ for accessing Standard Error Records as introduced by the RAS extensions.h!ji hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jX hhubh target)}(h'.. __: `Standard Error Record helpers`_h]h"}(h$]id1ah&]h+]h-]h/]j Kj j uh1j indirect_reference_nameStandard Error Record helpershCKbh!jX hhhAj referencedKj Kubj )}(hXThe build option ``RAS_EXTENSION`` when set to ``1`` includes the RAS in run time firmware; ``EL3_EXCEPTION_HANDLING`` and ``HANDLE_EA_EL3_FIRST`` must also be set ``1``. ``RAS_TRAP_LOWER_EL_ERR_ACCESS`` controls the access to the RAS error record registers from lower ELs.h](hThe build option }(hThe build option h!j hhhANhCNubh literal)}(h``RAS_EXTENSION``h]h RAS_EXTENSION}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh when set to }(h when set to h!j hhhANhCNubj )}(h``1``h]h1}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh( includes the RAS in run time firmware; }(h( includes the RAS in run time firmware; h!j hhhANhCNubj )}(h``EL3_EXCEPTION_HANDLING``h]hEL3_EXCEPTION_HANDLING}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh and }(h and h!j hhhANhCNubj )}(h``HANDLE_EA_EL3_FIRST``h]hHANDLE_EA_EL3_FIRST}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh must also be set }(h must also be set h!j hhhANhCNubj )}(h``1``h]h1}(hhh!j ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubh. }(h. h!j hhhANhCNubj )}(h ``RAS_TRAP_LOWER_EL_ERR_ACCESS``h]hRAS_TRAP_LOWER_EL_ERR_ACCESS}(hhh!j. ubah"}(h$]h&]h+]h-]h/]uh1j h!j ubhF controls the access to the RAS error record registers from lower ELs.}(hF controls the access to the RAS error record registers from lower ELs.h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jX hhubj )}(h.. _ras-figure:h]h"}(h$]h&]h+]h-]h/]j ras-figureuh1j hCKih!jX hhhAj ubh image)}(h1.. image:: ../resources/diagrams/draw.io/ras.svg h]h"}(h$]jQ ah&]h+] ras-figureah-]h/]uri"resources/diagrams/draw.io/ras.svg candidates}*j` suh1jR h!jX hhhAj hCK'expect_referenced_by_name}j\ jG sexpect_referenced_by_id}jQ jG subj )}(h*See more on `Engaging the RAS framework`_.h](h See more on }(h See more on h!jh hhhANhCNubj )}(h`Engaging the RAS framework`_h]hEngaging the RAS framework}(hEngaging the RAS frameworkh!jq ubah"}(h$]h&]h+]h-]h/]nameEngaging the RAS frameworkj engaging-the-ras-frameworkuh1j h!jh j Kubh.}(h.h!jh hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK(h!jX hhubeh"}(h$]overviewah&]h+]overviewah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(h Platform APIsh]h Platform APIs}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCK+ubj )}(hThe RAS framework allows the platform to define handlers for External Abort, Uncontainable Errors, Double Fault, and errors rising from EL3 execution. Please refer to :ref:`RAS Porting Guide `.h](hThe RAS framework allows the platform to define handlers for External Abort, Uncontainable Errors, Double Fault, and errors rising from EL3 execution. Please refer to }(hThe RAS framework allows the platform to define handlers for External Abort, Uncontainable Errors, Double Fault, and errors rising from EL3 execution. Please refer to h!j hhhANhCNubh)}(hB:ref:`RAS Porting Guide `h]h)}(hj h]hRAS Porting Guide}(hhh!j ubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftyperef refexplicitrefwarnh?'external abort handling and ras supportuh1hhAj hCK-h!j ubh.}(hj h!j hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK-h!j hhubeh"}(h$] platform-apisah&]h+] platform apisah-]h/]uh1j h!j hhhAj hCK+ubj )}(hhh](j )}(hRegistering RAS error recordsh]hRegistering RAS error records}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCK2ubj )}(hXRAS nodes are components in the system capable of signalling errors to PEs through one one of the notification mechanisms—SEAs, SErrors, or interrupts. RAS nodes contain one or more error records, which are registers through which the nodes advertise various properties of the signalled error. Arm recommends that error records are implemented in the Standard Error Record format. The RAS architecture allows for error records to be accessible via system or memory-mapped registers.h]hXRAS nodes are components in the system capable of signalling errors to PEs through one one of the notification mechanisms—SEAs, SErrors, or interrupts. RAS nodes contain one or more error records, which are registers through which the nodes advertise various properties of the signalled error. Arm recommends that error records are implemented in the Standard Error Record format. The RAS architecture allows for error records to be accessible via system or memory-mapped registers.}(hj h!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK4h!j hhubj )}(hKThe platform should enumerate the error records providing for each of them:h]hKThe platform should enumerate the error records providing for each of them:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubj)}(h=When the probing identifies an error, a handler to handle it;h]j )}(hj/h]h=When the probing identifies an error, a handler to handle it;}(hj/h!j1ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK?h!j-ubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubj)}(hFor memory-mapped error record, its base address and size in KB; for a system register-accessed record, the start index of the record and number of continuous records from that index;h]j )}(hFor memory-mapped error record, its base address and size in KB; for a system register-accessed record, the start index of the record and number of continuous records from that index;h]hFor memory-mapped error record, its base address and size in KB; for a system register-accessed record, the start index of the record and number of continuous records from that index;}(hjJh!jHubah"}(h$]h&]h+]h-]h/]uh1j hAj hCK@h!jDubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubj)}(h"Any node-specific auxiliary data. h]j )}(h!Any node-specific auxiliary data.h]h!Any node-specific auxiliary data.}(hjbh!j`ubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKCh!j\ubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]bullet-uh1jhAj hCK>h!j hhubj )}(hWith this information supplied, when the run time firmware receives one of the notification mechanisms, the RAS framework can iterate through and probe error records for error, and invoke the appropriate handler to handle it.h]hWith this information supplied, when the run time firmware receives one of the notification mechanisms, the RAS framework can iterate through and probe error records for error, and invoke the appropriate handler to handle it.}(hj~h!j|hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKEh!j hhubj )}(hX The RAS framework provides the macros to populate error record information. The macros are versioned, and the latest version as of this writing is 1. These macros create a structure of type ``struct err_record_info`` from its arguments, which are later passed to probe and error handlers.h](hThe RAS framework provides the macros to populate error record information. The macros are versioned, and the latest version as of this writing is 1. These macros create a structure of type }(hThe RAS framework provides the macros to populate error record information. The macros are versioned, and the latest version as of this writing is 1. These macros create a structure of type h!jhhhANhCNubj )}(h``struct err_record_info``h]hstruct err_record_info}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhH from its arguments, which are later passed to probe and error handlers.}(hH from its arguments, which are later passed to probe and error handlers.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKIh!j hhubj )}(h For memory-mapped error records:h]h For memory-mapped error records:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKNh!j hhubh literal_block)}(h@ERR_RECORD_MEMMAP_V1(base_addr, size_num_k, probe, handler, aux)h]h@ERR_RECORD_MEMMAP_V1(base_addr, size_num_k, probe, handler, aux)}(hhh!jubah"}(h$]h&]h+]h-]h/]forcehighlight_args} xml:spacepreservelanguagecuh1jhAj hCKPh!j hhubj )}(hAnd, for system register ones:h]hAnd, for system register ones:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKTh!j hhubj)}(h=ERR_RECORD_SYSREG_V1(idx_start, num_idx, probe, handler, aux)h]h=ERR_RECORD_SYSREG_V1(idx_start, num_idx, probe, handler, aux)}(hhh!jubah"}(h$]h&]h+]h-]h/]forcehighlight_args}jjjjuh1jhAj hCKVh!j hhubj )}(h4The probe handler must have the following prototype:h]h4The probe handler must have the following prototype:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKZh!j hhubj)}(hgtypedef int (*err_record_probe_t)(const struct err_record_info *info, int *probe_data);h]hgtypedef int (*err_record_probe_t)(const struct err_record_info *info, int *probe_data);}(hhh!jubah"}(h$]h&]h+]h-]h/]forcehighlight_args}jjjjuh1jhAj hCK\h!j hhubj )}(hXThe probe handler must return a non-zero value if an error was detected, or 0 otherwise. The ``probe_data`` output parameter can be used to pass any useful information resulting from probe to the error handler (see `below`__). For example, it could return the index of the record.h](h]The probe handler must return a non-zero value if an error was detected, or 0 otherwise. The }(h]The probe handler must return a non-zero value if an error was detected, or 0 otherwise. The h!jhhhANhCNubj )}(h``probe_data``h]h probe_data}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhl output parameter can be used to pass any useful information resulting from probe to the error handler (see }(hl output parameter can be used to pass any useful information resulting from probe to the error handler (see h!jhhhANhCNubj )}(h `below`__h]hbelow}(hbelowh!j+ubah"}(h$]h&]h+]h-]h/]namej3j Kj j uh1j h!jj Kubh8). For example, it could return the index of the record.}(h8). For example, it could return the index of the record.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKah!j hhubj )}(h'.. __: `Standard Error Record helpers`_h]h"}(h$]id2ah&]h+]h-]h/]j Kj j uh1j j Standard Error Record helpershCKh!j hhhAj j Kj Kubj )}(h4The error handler must have the following prototype:h]h4The error handler must have the following prototype:}(hjTh!jRhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKhh!j hhubj)}(htypedef int (*err_record_handler_t)(const struct err_record_info *info, int probe_data, const struct err_handler_data *const data);h]htypedef int (*err_record_handler_t)(const struct err_record_info *info, int probe_data, const struct err_handler_data *const data);}(hhh!j`ubah"}(h$]h&]h+]h-]h/]forcehighlight_args}jjjjuh1jhAj hCKjh!j hhubj )}(hThe ``data`` constant parameter describes the various properties of the error, including the reason for the error, exception syndrome, and also ``flags``, ``cookie``, and ``handle`` parameters from the :ref:`top-level exception handler `.h](hThe }(hThe h!jqhhhANhCNubj )}(h``data``h]hdata}(hhh!jzubah"}(h$]h&]h+]h-]h/]uh1j h!jqubh constant parameter describes the various properties of the error, including the reason for the error, exception syndrome, and also }(h constant parameter describes the various properties of the error, including the reason for the error, exception syndrome, and also h!jqhhhANhCNubj )}(h ``flags``h]hflags}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jqubh, }(h, h!jqhhhANhCNubj )}(h ``cookie``h]hcookie}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jqubh, and }(h, and h!jqhhhANhCNubj )}(h ``handle``h]hhandle}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jqubh parameters from the }(h parameters from the h!jqhhhANhCNubh)}(h3:ref:`top-level exception handler `h]h)}(hjh]htop-level exception handler}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?el3 interruptsuh1hhAj hCKoh!jqubh.}(hj h!jqhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKoh!j hhubj )}(hX$The platform is expected populate an array using the macros above, and register the it with the RAS framework using the macro ``REGISTER_ERR_RECORD_INFO()``, passing it the name of the array describing the records. Note that the macro must be used in the same file where the array is defined.h](h~The platform is expected populate an array using the macros above, and register the it with the RAS framework using the macro }(h~The platform is expected populate an array using the macros above, and register the it with the RAS framework using the macro h!jhhhANhCNubj )}(h``REGISTER_ERR_RECORD_INFO()``h]hREGISTER_ERR_RECORD_INFO()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh, passing it the name of the array describing the records. Note that the macro must be used in the same file where the array is defined.}(h, passing it the name of the array describing the records. Note that the macro must be used in the same file where the array is defined.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKth!j hhubj )}(hhh](j )}(hStandard Error Record helpersh]hStandard Error Record helpers}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKzubj )}(hThe |TF-A| RAS framework provides probe handlers for Standard Error Records, for both memory-mapped and System Register accesses:h](hThe }(hThe h!j#hhhANhCNubh)}(hj h]h)}(hj h]hTF-A}(hhh!j/ubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!j,ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!j#hhubhw RAS framework provides probe handlers for Standard Error Records, for both memory-mapped and System Register accesses:}(hw RAS framework provides probe handlers for Standard Error Records, for both memory-mapped and System Register accesses:h!j#hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCK|h!jhhubj)}(hint ras_err_ser_probe_memmap(const struct err_record_info *info, int *probe_data); int ras_err_ser_probe_sysreg(const struct err_record_info *info, int *probe_data);h]hint ras_err_ser_probe_memmap(const struct err_record_info *info, int *probe_data); int ras_err_ser_probe_sysreg(const struct err_record_info *info, int *probe_data);}(hhh!jSubah"}(h$]h&]h+]h-]h/]forcehighlight_args}jjjjuh1jhAj hCKh!jhhubj )}(hWhen the platform enumerates error records, for those records in the Standard Error Record format, these helpers maybe used instead of rolling out their own. Both helpers above:h]hWhen the platform enumerates error records, for those records in the Standard Error Record format, these helpers maybe used instead of rolling out their own. Both helpers above:}(hjfh!jdhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj)}(hhh](j)}(hKReturn non-zero value when an error is detected in a Standard Error Record;h]j )}(hjwh]hKReturn non-zero value when an error is detected in a Standard Error Record;}(hjwh!jyubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!juubah"}(h$]h&]h+]h-]h/]uh1jh!jrhhhAj hCNubj)}(hMSet ``probe_data`` to the index of the error record upon detecting an error. h]j )}(hLSet ``probe_data`` to the index of the error record upon detecting an error.h](hSet }(hSet h!jubj )}(h``probe_data``h]h probe_data}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh: to the index of the error record upon detecting an error.}(h: to the index of the error record upon detecting an error.h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jrhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jzj{uh1jhAj hCKh!jhhubeh"}(h$]j ah&]h+]standard error record helpersah-]h/]uh1j h!j hhhAj hCKzj Kubeh"}(h$]registering-ras-error-recordsah&]h+]registering ras error recordsah-]h/]uh1j h!j hhhAj hCK2ubj )}(hhh](j )}(hRegistering RAS interruptsh]hRegistering RAS interrupts}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj )}(hX RAS nodes can signal errors to the PE by raising Fault Handling and/or Error Recovery interrupts. For the firmware-first handling paradigm for interrupts to work, the platform must setup and register with |EHF|. See `Interaction with Exception Handling Framework`_.h](hRAS nodes can signal errors to the PE by raising Fault Handling and/or Error Recovery interrupts. For the firmware-first handling paradigm for interrupts to work, the platform must setup and register with }(hRAS nodes can signal errors to the PE by raising Fault Handling and/or Error Recovery interrupts. For the firmware-first handling paradigm for interrupts to work, the platform must setup and register with h!jhhhANhCNubh)}(hjh]h)}(hjh]hEHF}(hhh!jubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej refexplicitrefwarn reftargetjuh1hhAhBhCKh!jhhubh. See }(h. See h!jhhhANhCNubj )}(h0`Interaction with Exception Handling Framework`_h]h-Interaction with Exception Handling Framework}(h-Interaction with Exception Handling Frameworkh!jubah"}(h$]h&]h+]h-]h/]name-Interaction with Exception Handling Frameworkj -interaction-with-exception-handling-frameworkuh1j h!jj Kubh.}(hj h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(h_For each RAS interrupt, the platform has to provide structure of type ``struct ras_interrupt``:h](hFFor each RAS interrupt, the platform has to provide structure of type }(hFFor each RAS interrupt, the platform has to provide structure of type h!j$hhhANhCNubj )}(h``struct ras_interrupt``h]hstruct ras_interrupt}(hhh!j-ubah"}(h$]h&]h+]h-]h/]uh1j h!j$ubh:}(h:h!j$hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj)}(hhh](j)}(hInterrupt number;h]j )}(hjKh]hInterrupt number;}(hjKh!jMubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jIubah"}(h$]h&]h+]h-]h/]uh1jh!jFhhhAj hCNubj)}(hbThe associated error record information (pointer to the corresponding ``struct err_record_info``);h]j )}(hbThe associated error record information (pointer to the corresponding ``struct err_record_info``);h](hFThe associated error record information (pointer to the corresponding }(hFThe associated error record information (pointer to the corresponding h!jdubj )}(h``struct err_record_info``h]hstruct err_record_info}(hhh!jmubah"}(h$]h&]h+]h-]h/]uh1j h!jdubh);}(h);h!jdubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j`ubah"}(h$]h&]h+]h-]h/]uh1jh!jFhhhAj hCNubj)}(hOptionally, a cookie. h]j )}(hOptionally, a cookie.h]hOptionally, a cookie.}(hjh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jFhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jzj{uh1jhAj hCKh!jhhubj )}(hXThe platform is expected to define an array of ``struct ras_interrupt``, and register it with the RAS framework using the macro ``REGISTER_RAS_INTERRUPTS()``, passing it the name of the array. Note that the macro must be used in the same file where the array is defined.h](h/The platform is expected to define an array of }(h/The platform is expected to define an array of h!jhhhANhCNubj )}(h``struct ras_interrupt``h]hstruct ras_interrupt}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh9, and register it with the RAS framework using the macro }(h9, and register it with the RAS framework using the macro h!jhhhANhCNubj )}(h``REGISTER_RAS_INTERRUPTS()``h]hREGISTER_RAS_INTERRUPTS()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhq, passing it the name of the array. Note that the macro must be used in the same file where the array is defined.}(hq, passing it the name of the array. Note that the macro must be used in the same file where the array is defined.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hThe array of ``struct ras_interrupt`` must be sorted in the increasing order of interrupt number. This allows for fast look of handlers in order to service RAS interrupts.h](h The array of }(h The array of h!jhhhANhCNubj )}(h``struct ras_interrupt``h]hstruct ras_interrupt}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh must be sorted in the increasing order of interrupt number. This allows for fast look of handlers in order to service RAS interrupts.}(h must be sorted in the increasing order of interrupt number. This allows for fast look of handlers in order to service RAS interrupts.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubeh"}(h$]registering-ras-interruptsah&]h+]registering ras interruptsah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(hDouble-fault handlingh]hDouble-fault handling}(hjh!j hhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!j hhhAj hCKubj )}(hX&A Double Fault condition arises when an error is signalled to the PE while handling of a previously signalled error is still underway. When a Double Fault condition arises, the Arm RAS extensions only require for handler to perform orderly shutdown of the system, as recovery may be impossible.h]hX&A Double Fault condition arises when an error is signalled to the PE while handling of a previously signalled error is still underway. When a Double Fault condition arises, the Arm RAS extensions only require for handler to perform orderly shutdown of the system, as recovery may be impossible.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hXThe RAS extensions part of Armv8.4 introduced new architectural features to deal with Double Fault conditions, specifically, the introduction of ``NMEA`` and ``EASE`` bits to ``SCR_EL3`` register. These were introduced to assist EL3 software which runs part of its entry/exit routines with exceptions momentarily masked—meaning, in such systems, External Aborts/SErrors are not immediately handled when they occur, but only after the exceptions are unmasked again.h](hThe RAS extensions part of Armv8.4 introduced new architectural features to deal with Double Fault conditions, specifically, the introduction of }(hThe RAS extensions part of Armv8.4 introduced new architectural features to deal with Double Fault conditions, specifically, the introduction of h!j(hhhANhCNubj )}(h``NMEA``h]hNMEA}(hhh!j1ubah"}(h$]h&]h+]h-]h/]uh1j h!j(ubh and }(h and h!j(hhhANhCNubj )}(h``EASE``h]hEASE}(hhh!jDubah"}(h$]h&]h+]h-]h/]uh1j h!j(ubh bits to }(h bits to h!j(hhhANhCNubj )}(h ``SCR_EL3``h]hSCR_EL3}(hhh!jWubah"}(h$]h&]h+]h-]h/]uh1j h!j(ubhX register. These were introduced to assist EL3 software which runs part of its entry/exit routines with exceptions momentarily masked—meaning, in such systems, External Aborts/SErrors are not immediately handled when they occur, but only after the exceptions are unmasked again.}(hX register. These were introduced to assist EL3 software which runs part of its entry/exit routines with exceptions momentarily masked—meaning, in such systems, External Aborts/SErrors are not immediately handled when they occur, but only after the exceptions are unmasked again.h!j(hhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(hX1|TF-A|, for legacy reasons, executes entire EL3 with all exceptions unmasked. This means that all exceptions routed to EL3 are handled immediately. |TF-A| thus is able to detect a Double Fault conditions in software, without needing the intended advantages of Armv8.4 Double Fault architecture extensions.h](h)}(hj h]h)}(hj h]hTF-A}(hhh!jwubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!jtubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!jphhubh, for legacy reasons, executes entire EL3 with all exceptions unmasked. This means that all exceptions routed to EL3 are handled immediately. }(h, for legacy reasons, executes entire EL3 with all exceptions unmasked. This means that all exceptions routed to EL3 are handled immediately. h!jphhhANhCNubh)}(hj h]h)}(hj h]hTF-A}(hhh!jubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!jphhubh thus is able to detect a Double Fault conditions in software, without needing the intended advantages of Armv8.4 Double Fault architecture extensions.}(h thus is able to detect a Double Fault conditions in software, without needing the intended advantages of Armv8.4 Double Fault architecture extensions.h!jphhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubj )}(h`Double faults are fatal, and terminate at the platform double fault handler, and doesn't return.h]hbDouble faults are fatal, and terminate at the platform double fault handler, and doesn’t return.}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!j hhubeh"}(h$]double-fault-handlingah&]h+]double-fault handlingah-]h/]uh1j h!j hhhAj hCKubj )}(hhh](j )}(hEngaging the RAS frameworkh]hEngaging the RAS framework}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jhhhAj hCKubj )}(hfEnabling RAS support is a platform choice constructed from three distinct, but related, build options:h]hfEnabling RAS support is a platform choice constructed from three distinct, but related, build options:}(hjh!jhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj)}(hhh](j)}(hI``RAS_EXTENSION=1`` includes the RAS framework in the run time firmware; h]j )}(hH``RAS_EXTENSION=1`` includes the RAS framework in the run time firmware;h](j )}(h``RAS_EXTENSION=1``h]hRAS_EXTENSION=1}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh5 includes the RAS framework in the run time firmware;}(h5 includes the RAS framework in the run time firmware;h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubj)}(hz``EL3_EXCEPTION_HANDLING=1`` enables handling of exceptions at EL3. See `Interaction with Exception Handling Framework`_; h]j )}(hy``EL3_EXCEPTION_HANDLING=1`` enables handling of exceptions at EL3. See `Interaction with Exception Handling Framework`_;h](j )}(h``EL3_EXCEPTION_HANDLING=1``h]hEL3_EXCEPTION_HANDLING=1}(hhh!j#ubah"}(h$]h&]h+]h-]h/]uh1j h!jubh, enables handling of exceptions at EL3. See }(h, enables handling of exceptions at EL3. See h!jubj )}(h0`Interaction with Exception Handling Framework`_h]h-Interaction with Exception Handling Framework}(h-Interaction with Exception Handling Frameworkh!j6ubah"}(h$]h&]h+]h-]h/]name-Interaction with Exception Handling Frameworkj juh1j h!jj Kubh;}(h;h!jubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubj)}(hQ``HANDLE_EA_EL3_FIRST=1`` enables routing of External Aborts and SErrors to EL3. h]j )}(hP``HANDLE_EA_EL3_FIRST=1`` enables routing of External Aborts and SErrors to EL3.h](j )}(h``HANDLE_EA_EL3_FIRST=1``h]hHANDLE_EA_EL3_FIRST=1}(hhh!j`ubah"}(h$]h&]h+]h-]h/]uh1j h!j\ubh7 enables routing of External Aborts and SErrors to EL3.}(h7 enables routing of External Aborts and SErrors to EL3.h!j\ubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jXubah"}(h$]h&]h+]h-]h/]uh1jh!jhhhAj hCNubeh"}(h$]h&]h+]h-]h/]jzj{uh1jhAj hCKh!jhhubj )}(hXThe RAS support in |TF-A| introduces a default implementation of ``plat_ea_handler``, the External Abort handler in EL3. When ``RAS_EXTENSION`` is set to ``1``, it'll first call ``ras_ea_handler()`` function, which is the top-level RAS exception handler. ``ras_ea_handler`` is responsible for iterating to through platform-supplied error records, probe them, and when an error is identified, look up and invoke the corresponding error handler.h](hThe RAS support in }(hThe RAS support in h!jhhhANhCNubh)}(hj h]h)}(hj h]hTF-A}(hhh!jubah"}(h$]h&](h(j j eh+]h-]h/]uh1hhANhCNh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj reftypej refexplicitrefwarn reftargetj uh1hhAhBhCK:h!jhhubh( introduces a default implementation of }(h( introduces a default implementation of h!jhhhANhCNubj )}(h``plat_ea_handler``h]hplat_ea_handler}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh*, the External Abort handler in EL3. When }(h*, the External Abort handler in EL3. When h!jhhhANhCNubj )}(h``RAS_EXTENSION``h]h RAS_EXTENSION}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh is set to }(h is set to h!jhhhANhCNubj )}(h``1``h]h1}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh, it’ll first call }(h, it'll first call h!jhhhANhCNubj )}(h``ras_ea_handler()``h]hras_ea_handler()}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh9 function, which is the top-level RAS exception handler. }(h9 function, which is the top-level RAS exception handler. h!jhhhANhCNubj )}(h``ras_ea_handler``h]hras_ea_handler}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh is responsible for iterating to through platform-supplied error records, probe them, and when an error is identified, look up and invoke the corresponding error handler.}(h is responsible for iterating to through platform-supplied error records, probe them, and when an error is identified, look up and invoke the corresponding error handler.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hNote that, if the platform chooses to override the ``plat_ea_handler`` function and intend to use the RAS framework, it must explicitly call ``ras_ea_handler()`` from within.-h](h3Note that, if the platform chooses to override the }(h3Note that, if the platform chooses to override the h!jhhhANhCNubj )}(h``plat_ea_handler``h]hplat_ea_handler}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubhG function and intend to use the RAS framework, it must explicitly call }(hG function and intend to use the RAS framework, it must explicitly call h!jhhhANhCNubj )}(h``ras_ea_handler()``h]hras_ea_handler()}(hhh!j0ubah"}(h$]h&]h+]h-]h/]uh1j h!jubh from within.}(h from within.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubj )}(hXSimilarly, for RAS interrupts, the framework defines ``ras_interrupt_handler()``. The RAS framework arranges for it to be invoked when a RAS interrupt taken at EL3. The function bisects the platform-supplied sorted array of interrupts to look up the error record information associated with the interrupt number. That error handler for that record is then invoked to handle the error.h](h5Similarly, for RAS interrupts, the framework defines }(h5Similarly, for RAS interrupts, the framework defines h!jIhhhANhCNubj )}(h``ras_interrupt_handler()``h]hras_interrupt_handler()}(hhh!jRubah"}(h$]h&]h+]h-]h/]uh1j h!jIubhX1. The RAS framework arranges for it to be invoked when a RAS interrupt taken at EL3. The function bisects the platform-supplied sorted array of interrupts to look up the error record information associated with the interrupt number. That error handler for that record is then invoked to handle the error.}(hX1. The RAS framework arranges for it to be invoked when a RAS interrupt taken at EL3. The function bisects the platform-supplied sorted array of interrupts to look up the error record information associated with the interrupt number. That error handler for that record is then invoked to handle the error.h!jIhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jhhubeh"}(h$]j ah&]h+]engaging the ras frameworkah-]h/]uh1j h!j hhhAj hCKj Kubj )}(hhh](j )}(h-Interaction with Exception Handling Frameworkh]h-Interaction with Exception Handling Framework}(hjwh!juhhhANhCNubah"}(h$]h&]h+]h-]h/]uh1j h!jrhhhAj hCKubj )}(hXAs mentioned in earlier sections, RAS framework interacts with the |EHF| to arbitrate handling of RAS exceptions with others that are routed to EL3. This means that the platform must partition a :ref:`priority level ` for handling RAS exceptions. The platform must then define the macro ``PLAT_RAS_PRI`` to the priority level used for RAS exceptions. Platforms would typically want to allocate the highest secure priority for RAS handling.h](hCAs mentioned in earlier sections, RAS framework interacts with the }(hCAs mentioned in earlier sections, RAS framework interacts with the h!jhhhANhCNubh)}(hjh]h)}(hjh]hEHF}(hhh!jubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej refexplicitrefwarn reftargetjuh1hhAhBhCKh!jhhubh{ to arbitrate handling of RAS exceptions with others that are routed to EL3. This means that the platform must partition a }(h{ to arbitrate handling of RAS exceptions with others that are routed to EL3. This means that the platform must partition a h!jhhhANhCNubh)}(h4:ref:`priority level `h]h)}(hjh]hpriority level}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?partitioning priority levelsuh1hhAj hCKh!jubhF for handling RAS exceptions. The platform must then define the macro }(hF for handling RAS exceptions. The platform must then define the macro h!jhhhANhCNubj )}(h``PLAT_RAS_PRI``h]h PLAT_RAS_PRI}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubh to the priority level used for RAS exceptions. Platforms would typically want to allocate the highest secure priority for RAS handling.}(h to the priority level used for RAS exceptions. Platforms would typically want to allocate the highest secure priority for RAS handling.h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jrhhubj )}(hXSHandling of both :ref:`interrupt ` and :ref:`non-interrupt ` exceptions follow the sequences outlined in the |EHF| documentation. I.e., for interrupts, the priority management is implicit; but for non-interrupt exceptions, they're explicit using :ref:`EHF APIs `.h](hHandling of both }(hHandling of both h!jhhhANhCNubh)}(h!:ref:`interrupt `h]h)}(hjh]h interrupt}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftyperef refexplicitrefwarnh?interrupt-flowuh1hhAj hCKh!jubh and }(h and h!jhhhANhCNubh)}(h):ref:`non-interrupt `h]h)}(hjh]h non-interrupt}(hhh!jubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!jubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainj'reftyperef refexplicitrefwarnh?non-interrupt-flowuh1hhAj hCKh!jubh1 exceptions follow the sequences outlined in the }(h1 exceptions follow the sequences outlined in the h!jhhhANhCNubh)}(hjh]h)}(hjh]hEHF}(hhh!jAubah"}(h$]h&](h(jjeh+]h-]h/]uh1hhANhCNh!j>ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjreftypej refexplicitrefwarn reftargetjuh1hhAhBhCKh!jhhubh documentation. I.e., for interrupts, the priority management is implicit; but for non-interrupt exceptions, they’re explicit using }(h documentation. I.e., for interrupts, the priority management is implicit; but for non-interrupt exceptions, they're explicit using h!jhhhANhCNubh)}(h8:ref:`EHF APIs `h]h)}(hjah]hEHF APIs}(hhh!jcubah"}(h$]h&](h(stdstd-refeh+]h-]h/]uh1hh!j_ubah"}(h$]h&]h+]h-]h/]refdoch9 refdomainjmreftyperef refexplicitrefwarnh?&activating and deactivating prioritiesuh1hhAj hCKh!jubh.}(hj h!jhhhANhCNubeh"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jrhhubh transition)}(h--------------h]h"}(h$]h&]h+]h-]h/]uh1jhAj hCKh!jrhhubj )}(hM*Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.*h]h emphasis)}(hjh]hKCopyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1jh!jubah"}(h$]h&]h+]h-]h/]uh1j hAj hCKh!jrhhubeh"}(h$]jah&]h+]-interaction with exception handling frameworkah-]h/]uh1j h!j hhhAj hCKj Kubeh"}(h$]:reliability-availability-and-serviceability-ras-extensionsah&]h+]>reliability, availability, and serviceability (ras) extensionsah-]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](j jFesubstitution_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}(engaging the ras framework]jq a-interaction with exception handling framework](jj6eurefids}(jQ ]jG aj ]j ajL]j+aj ](j j jFj+eunameids}(jjj j j\ jQ j j jjjj jjjjjoj jju nametypes}(jNj Nj\ j NjNjNjNjNjoNjNuh$}(jj j jX j j jQ jT j j jj jLjFj jjjjj j jjjru footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages]h system_message)}(hhh]j )}(hhh]h0Hyperlink target "ras-figure" is not referenced.}(hhh!jubah"}(h$]h&]h+]h-]h/]uh1j h!jubah"}(h$]h&]h+]h-]h/]levelKtypeINFOsourcej lineKiuh1juba transformerN decorationNhhub.