Home | History | Annotate | Download | only in ArmGic
      1 /** @file
      2 *
      3 *  Copyright (c) 2011-2015, ARM Limited. All rights reserved.
      4 *
      5 *  This program and the accompanying materials
      6 *  are licensed and made available under the terms and conditions of the BSD License
      7 *  which accompanies this distribution.  The full text of the license may be found at
      8 *  http://opensource.org/licenses/bsd-license.php
      9 *
     10 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 *
     13 **/
     14 
     15 #include <Uefi.h>
     16 #include <Library/IoLib.h>
     17 #include <Library/ArmGicLib.h>
     18 
     19 VOID
     20 EFIAPI
     21 ArmGicEnableDistributor (
     22   IN  INTN          GicDistributorBase
     23   )
     24 {
     25   ARM_GIC_ARCH_REVISION Revision;
     26 
     27   /*
     28    * Enable GIC distributor in Non-Secure world.
     29    * Note: The ICDDCR register is banked when Security extensions are implemented
     30    */
     31   Revision = ArmGicGetSupportedArchRevision ();
     32   if (Revision == ARM_GIC_ARCH_REVISION_2) {
     33     MmioWrite32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x1);
     34   } else {
     35     if (MmioRead32 (GicDistributorBase + ARM_GIC_ICDDCR) & ARM_GIC_ICDDCR_ARE) {
     36       MmioOr32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x2);
     37     } else {
     38       MmioOr32 (GicDistributorBase + ARM_GIC_ICDDCR, 0x1);
     39     }
     40   }
     41 }
     42