Home | History | Annotate | Download | only in ArmTrustZone
      1 /** @file
      2 *
      3 *  Copyright (c) 2011-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/BaseLib.h>
     16 #include <Library/IoLib.h>
     17 
     18 #include <Drivers/ArmTrustzone.h>
     19 
     20 #define TZPC_DECPROT0_STATUS_REG        0x800
     21 #define TZPC_DECPROT0_SET_REG           0x804
     22 #define TZPC_DECPROT0_CLEAR_REG         0x808
     23 
     24 #define TZASC_CONFIGURATION_REG         0x000
     25 #define TZASC_REGIONS_REG               0x100
     26 #define TZASC_REGION0_LOW_ADDRESS_REG   0x100
     27 #define TZASC_REGION0_HIGH_ADDRESS_REG  0x104
     28 #define TZASC_REGION0_ATTRIBUTES        0x108
     29 
     30 /**
     31     FIXME: Need documentation
     32 **/
     33 EFI_STATUS
     34 TZPCSetDecProtBits (
     35   IN  UINTN TzpcBase,
     36   IN  UINTN TzpcId,
     37   IN  UINTN Bits
     38   )
     39 {
     40   if (TzpcId > TZPC_DECPROT_MAX) {
     41     return EFI_INVALID_PARAMETER;
     42   }
     43 
     44   MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_SET_REG + (TzpcId * 0x0C), Bits);
     45 
     46   return EFI_SUCCESS;
     47 }
     48 
     49 /**
     50     FIXME: Need documentation
     51 **/
     52 EFI_STATUS
     53 TZPCClearDecProtBits (
     54   IN  UINTN TzpcBase,
     55   IN  UINTN TzpcId,
     56   IN  UINTN Bits
     57   )
     58 {
     59   if (TzpcId> TZPC_DECPROT_MAX) {
     60     return EFI_INVALID_PARAMETER;
     61   }
     62 
     63   MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_CLEAR_REG + (TzpcId * 0x0C), Bits);
     64 
     65   return EFI_SUCCESS;
     66 }
     67 
     68 /**
     69     FIXME: Need documentation
     70 **/
     71 UINT32
     72 TZASCGetNumRegions (
     73   IN UINTN TzascBase
     74   )
     75 {
     76   return (MmioRead32 ((UINTN)TzascBase + TZASC_CONFIGURATION_REG) & 0xF);
     77 }
     78 
     79 /**
     80     FIXME: Need documentation
     81 **/
     82 EFI_STATUS
     83 TZASCSetRegion (
     84   IN  INTN  TzascBase,
     85   IN  UINTN RegionId,
     86   IN  UINTN Enabled,
     87   IN  UINTN LowAddress,
     88   IN  UINTN HighAddress,
     89   IN  UINTN Size,
     90   IN  UINTN Security
     91   )
     92 {
     93   UINT32*     Region;
     94 
     95   if (RegionId > TZASCGetNumRegions(TzascBase)) {
     96     return EFI_INVALID_PARAMETER;
     97   }
     98 
     99   Region = (UINT32*)((UINTN)TzascBase + TZASC_REGIONS_REG + (RegionId * 0x10));
    100 
    101   MmioWrite32((UINTN)(Region), LowAddress&0xFFFF8000);
    102   MmioWrite32((UINTN)(Region+1), HighAddress);
    103   MmioWrite32((UINTN)(Region+2), ((Security & 0xF) <<28) | ((Size & 0x3F) << 1) | (Enabled & 0x1));
    104 
    105   return EFI_SUCCESS;
    106 }
    107