Home | History | Annotate | Download | only in ArmVExpressLibCTA15-A7
      1 /** @file
      2 *
      3 *  Copyright (c) 2012, 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 <Library/IoLib.h>
     16 #include <Library/ArmPlatformLib.h>
     17 #include <Library/DebugLib.h>
     18 #include <Library/PcdLib.h>
     19 
     20 #include <Ppi/ArmMpCoreInfo.h>
     21 
     22 #include <ArmPlatform.h>
     23 
     24 ARM_CORE_INFO mVersatileExpressCTA15A7InfoTable[] = {
     25   {
     26     // Cluster 0, Core 0
     27     0x0, 0x0,
     28 
     29     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     30     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR0,
     31     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR0,
     32     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR0,
     33     (UINT64)0
     34   },
     35   {
     36     // Cluster 0, Core 1
     37     0x0, 0x1,
     38 
     39     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     40     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR1,
     41     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR1,
     42     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR1,
     43     (UINT64)0
     44   },
     45 #ifndef ARM_BIGLITTLE_TC2
     46   {
     47     // Cluster 0, Core 2
     48     0x0, 0x2,
     49 
     50     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     51     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR2,
     52     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR2,
     53     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR2,
     54     (UINT64)0
     55   },
     56   {
     57     // Cluster 0, Core 3
     58     0x0, 0x3,
     59 
     60     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     61     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR3,
     62     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR3,
     63     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A15_BX_ADDR3,
     64     (UINT64)0
     65   },
     66 #endif
     67   {
     68     // Cluster 1, Core 0
     69     0x1, 0x0,
     70 
     71     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     72     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR0,
     73     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR0,
     74     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR0,
     75     (UINT64)0
     76   },
     77   {
     78     // Cluster 1, Core 1
     79     0x1, 0x1,
     80 
     81     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     82     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR1,
     83     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR1,
     84     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR1,
     85     (UINT64)0
     86   },
     87   {
     88     // Cluster 1, Core 2
     89     0x1, 0x2,
     90 
     91     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
     92     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR2,
     93     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR2,
     94     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR2,
     95     (UINT64)0
     96   }
     97 #ifndef ARM_BIGLITTLE_TC2
     98   ,{
     99     // Cluster 1, Core 3
    100     0x1, 0x3,
    101 
    102     // MP Core MailBox Set/Get/Clear Addresses and Clear Value
    103     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR3,
    104     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR3,
    105     (EFI_PHYSICAL_ADDRESS)ARM_CTA15A7_SPC_A7_BX_ADDR3,
    106     (UINT64)0
    107   }
    108 #endif
    109 };
    110 
    111 /**
    112   Return the current Boot Mode
    113 
    114   This function returns the boot reason on the platform
    115 
    116   @return   Return the current Boot Mode of the platform
    117 
    118 **/
    119 EFI_BOOT_MODE
    120 ArmPlatformGetBootMode (
    121   VOID
    122   )
    123 {
    124   if (MmioRead32(ARM_CTA15A7_SCC_SYSINFO) & ARM_CTA15A7_SCC_SYSINFO_UEFI_RESTORE_DEFAULT_NORFLASH) {
    125     return BOOT_WITH_DEFAULT_SETTINGS;
    126   } else {
    127     return BOOT_WITH_FULL_CONFIGURATION;
    128   }
    129 }
    130 
    131 /**
    132   Initialize controllers that must setup in the normal world
    133 
    134   This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim
    135   in the PEI phase.
    136 
    137 **/
    138 RETURN_STATUS
    139 ArmPlatformInitialize (
    140   IN  UINTN                     MpId
    141   )
    142 {
    143   if (!ArmPlatformIsPrimaryCore (MpId)) {
    144     return RETURN_SUCCESS;
    145   }
    146 
    147   // Nothing to do here
    148 
    149   return RETURN_SUCCESS;
    150 }
    151 
    152 /**
    153   Initialize the system (or sometimes called permanent) memory
    154 
    155   This memory is generally represented by the DRAM.
    156 
    157 **/
    158 VOID
    159 ArmPlatformInitializeSystemMemory (
    160   VOID
    161   )
    162 {
    163 }
    164 
    165 EFI_STATUS
    166 PrePeiCoreGetMpCoreInfo (
    167   OUT UINTN                   *CoreCount,
    168   OUT ARM_CORE_INFO           **ArmCoreTable
    169   )
    170 {
    171   // Only support one cluster
    172   *CoreCount    = sizeof(mVersatileExpressCTA15A7InfoTable) / sizeof(ARM_CORE_INFO);
    173   *ArmCoreTable = mVersatileExpressCTA15A7InfoTable;
    174   return EFI_SUCCESS;
    175 }
    176 
    177 ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
    178 
    179 EFI_PEI_PPI_DESCRIPTOR      gPlatformPpiTable[] = {
    180   {
    181     EFI_PEI_PPI_DESCRIPTOR_PPI,
    182     &gArmMpCoreInfoPpiGuid,
    183     &mMpCoreInfoPpi
    184   }
    185 };
    186 
    187 VOID
    188 ArmPlatformGetPlatformPpiList (
    189   OUT UINTN                   *PpiListSize,
    190   OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList
    191   )
    192 {
    193   *PpiListSize = sizeof(gPlatformPpiTable);
    194   *PpiList = gPlatformPpiTable;
    195 }
    196