On 7 July 2016 at 19:22, Ard Biesheuvel <[email protected]> wrote:
> Unlike SGIs and PPIs, which are private to the CPU and are managed at
> the redistributor level (which is also a per-CPU construct), shared
> interrupts (SPIs) are shared between all CPUs, and therefore managed at
> the distributor level.
>
> Reported-by: Narinder Dhillon <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ard Biesheuvel <[email protected]>

Ping?

> ---
>  ArmPkg/Drivers/ArmGic/ArmGicLib.c | 25 +++++++++++++++++---
>  1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/ArmPkg/Drivers/ArmGic/ArmGicLib.c 
> b/ArmPkg/Drivers/ArmGic/ArmGicLib.c
> index 248e896c4b94..73795ed4e56c 100644
> --- a/ArmPkg/Drivers/ArmGic/ArmGicLib.c
> +++ b/ArmPkg/Drivers/ArmGic/ArmGicLib.c
> @@ -20,6 +20,19 @@
>  #include <Library/PcdLib.h>
>
>  /**
> + *
> + * Return whether the Source interrupt index refers to a shared interrupt 
> (SPI)
> + */
> +STATIC
> +BOOLEAN
> +SourceIsSpi (
> +  IN UINTN  Source
> +  )
> +{
> +  return Source >= 32 && Source < 1020;
> +}
> +
> +/**
>   * Return the base address of the GIC redistributor for the current CPU
>   *
>   * @param Revision  GIC Revision. The GIC redistributor might have a 
> different
> @@ -183,7 +196,9 @@ ArmGicEnableInterrupt (
>    RegShift = Source % 32;
>
>    Revision = ArmGicGetSupportedArchRevision ();
> -  if ((Revision == ARM_GIC_ARCH_REVISION_2) || FeaturePcdGet 
> (PcdArmGicV3WithV2Legacy)) {
> +  if ((Revision == ARM_GIC_ARCH_REVISION_2) ||
> +      FeaturePcdGet (PcdArmGicV3WithV2Legacy) ||
> +      SourceIsSpi (Source)) {
>      // Write set-enable register
>      MmioWrite32 (GicDistributorBase + ARM_GIC_ICDISER + (4 * RegOffset), 1 
> << RegShift);
>    } else {
> @@ -216,7 +231,9 @@ ArmGicDisableInterrupt (
>    RegShift = Source % 32;
>
>    Revision = ArmGicGetSupportedArchRevision ();
> -  if ((Revision == ARM_GIC_ARCH_REVISION_2) || FeaturePcdGet 
> (PcdArmGicV3WithV2Legacy)) {
> +  if ((Revision == ARM_GIC_ARCH_REVISION_2) ||
> +      FeaturePcdGet (PcdArmGicV3WithV2Legacy) ||
> +      SourceIsSpi (Source)) {
>      // Write clear-enable register
>      MmioWrite32 (GicDistributorBase + ARM_GIC_ICDICER + (4 * RegOffset), 1 
> << RegShift);
>    } else {
> @@ -249,7 +266,9 @@ ArmGicIsInterruptEnabled (
>    RegShift = Source % 32;
>
>    Revision = ArmGicGetSupportedArchRevision ();
> -  if ((Revision == ARM_GIC_ARCH_REVISION_2) || FeaturePcdGet 
> (PcdArmGicV3WithV2Legacy)) {
> +  if ((Revision == ARM_GIC_ARCH_REVISION_2) ||
> +      FeaturePcdGet (PcdArmGicV3WithV2Legacy) ||
> +      SourceIsSpi (Source)) {
>      Interrupts = ((MmioRead32 (GicDistributorBase + ARM_GIC_ICDISER + (4 * 
> RegOffset)) & (1 << RegShift)) != 0);
>    } else {
>      GicCpuRedistributorBase = GicGetCpuRedistributorBase 
> (GicRedistributorBase, Revision);
> --
> 2.7.4
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to