From: Kun Qin <ku...@microsoft.com> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4466
This change extended the functionality of ArmGic to support sending software generated interrupts to non-secure group 1 at EL1. The change made here follows the ARM documentation `ICC_SGI1R_EL1, Interrupt Controller Software Generated Interrupt Group 1 Register`. Cc: Leif Lindholm <quic_llind...@quicinc.com> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> Cc: Sami Mujawar <sami.muja...@arm.com> Signed-off-by: Kun Qin <ku...@microsoft.com> --- ArmPkg/ArmPkg.ci.yaml | 1 + ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S | 11 +++++++++++ ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S | 10 ++++++++++ ArmPkg/Include/Library/ArmGicLib.h | 5 +++++ 4 files changed, 27 insertions(+) diff --git a/ArmPkg/ArmPkg.ci.yaml b/ArmPkg/ArmPkg.ci.yaml index d31248161189..8a8f738437d5 100644 --- a/ArmPkg/ArmPkg.ci.yaml +++ b/ArmPkg/ArmPkg.ci.yaml @@ -158,6 +158,7 @@ "ipriority", "irouter", "isenabler", + "ishst", "istatus", "itargets", "lable", diff --git a/ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S b/ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S index 20f83aa85f3b..f2ab57174be3 100644 --- a/ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S +++ b/ArmPkg/Drivers/ArmGic/GicV3/AArch64/ArmGicV3.S @@ -23,6 +23,7 @@ #define ICC_IAR1_EL1 S3_0_C12_C12_0 #define ICC_PMR_EL1 S3_0_C4_C6_0 #define ICC_BPR1_EL1 S3_0_C12_C12_3 +#define ICC_SGI1R_EL1 S3_0_C12_C11_5 #endif @@ -55,6 +56,16 @@ ASM_FUNC(ArmGicV3SetControlSystemRegisterEnable) 4: isb ret +// VOID +// ArmGicV3SendNsG1Sgi ( +// IN UINT64 SgiVal +// ); +ASM_FUNC(ArmGicV3SendNsG1Sgi) + dsb ishst + msr ICC_SGI1R_EL1, x0 + isb + ret + //VOID //ArmGicV3EnableInterruptInterface ( // VOID diff --git a/ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S b/ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S index 8c43a613dc57..79e57e4afb70 100644 --- a/ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S +++ b/ArmPkg/Drivers/ArmGic/GicV3/Arm/ArmGicV3.S @@ -29,6 +29,16 @@ ASM_FUNC(ArmGicV3SetControlSystemRegisterEnable) isb bx lr +// VOID +// ArmGicV3SendNsG1Sgi ( +// IN UINT64 SgiVal +// ); +ASM_FUNC(ArmGicV3SendNsG1Sgi) + dsb ishst + mcrr p15, 0, r0, r1, c12 // ICC_SGI1R_EL1 + isb + bx lr + //VOID //ArmGicV3EnableInterruptInterface ( // VOID diff --git a/ArmPkg/Include/Library/ArmGicLib.h b/ArmPkg/Include/Library/ArmGicLib.h index 93ce8aeb1994..773b27954522 100644 --- a/ArmPkg/Include/Library/ArmGicLib.h +++ b/ArmPkg/Include/Library/ArmGicLib.h @@ -332,4 +332,9 @@ ArmGicV3SetPriorityMask ( IN UINTN Priority ); +VOID +ArmGicV3SendNsG1Sgi ( + IN UINT64 SgiVal + ); + #endif // ARMGIC_H_ -- 2.41.0.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#107188): https://edk2.groups.io/g/devel/message/107188 Mute This Topic: https://groups.io/mt/100337222/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-