-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: 5661/1: bcmring: add csp security hardware headers
add csp security hardware headers Signed-off-by: Leo Chen <leochen@broadcom.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Leo Chen
authored and
Russell King
committed
Aug 15, 2009
1 parent
7ba0902
commit a364143
Showing
3 changed files
with
244 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/***************************************************************************** | ||
* Copyright 2004 - 2008 Broadcom Corporation. All rights reserved. | ||
* | ||
* Unless you and Broadcom execute a separate written software license | ||
* agreement governing use of this software, this software is licensed to you | ||
* under the terms of the GNU General Public License version 2, available at | ||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). | ||
* | ||
* Notwithstanding the above, under no circumstances may you combine this | ||
* software in any way with any other Broadcom software provided under a | ||
* license other than the GPL, without Broadcom's express prior written | ||
* consent. | ||
*****************************************************************************/ | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @file secHw.h | ||
* | ||
* @brief Definitions for accessing low level security features | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
#ifndef SECHW_H | ||
#define SECHW_H | ||
|
||
typedef void (*secHw_FUNC_t) (void); | ||
|
||
typedef enum { | ||
secHw_MODE_SECURE = 0x0, /* Switches processor into secure mode */ | ||
secHw_MODE_NONSECURE = 0x1 /* Switches processor into non-secure mode */ | ||
} secHw_MODE; | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Requesting to execute the function in secure mode | ||
* | ||
* This function requests the given function to run in secure mode | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
void secHw_RunSecure(secHw_FUNC_t /* Function to run in secure mode */ | ||
); | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Sets the mode | ||
* | ||
* his function sets the processor mode (secure/non-secure) | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
void secHw_SetMode(secHw_MODE /* Processor mode */ | ||
); | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Get the current mode | ||
* | ||
* This function retieves the processor mode (secure/non-secure) | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
void secHw_GetMode(secHw_MODE *); | ||
|
||
#endif /* SECHW_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
/***************************************************************************** | ||
* Copyright 2003 - 2008 Broadcom Corporation. All rights reserved. | ||
* | ||
* Unless you and Broadcom execute a separate written software license | ||
* agreement governing use of this software, this software is licensed to you | ||
* under the terms of the GNU General Public License version 2, available at | ||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). | ||
* | ||
* Notwithstanding the above, under no circumstances may you combine this | ||
* software in any way with any other Broadcom software provided under a | ||
* license other than the GPL, without Broadcom's express prior written | ||
* consent. | ||
*****************************************************************************/ | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @file secHw_def.h | ||
* | ||
* @brief Definitions for configuring/testing secure blocks | ||
* | ||
* @note | ||
* None | ||
*/ | ||
/****************************************************************************/ | ||
|
||
#ifndef SECHW_DEF_H | ||
#define SECHW_DEF_H | ||
|
||
#include <mach/csp/mm_io.h> | ||
|
||
/* Bit mask for various secure device */ | ||
#define secHw_BLK_MASK_CHIP_CONTROL 0x00000001 | ||
#define secHw_BLK_MASK_KEY_SCAN 0x00000002 | ||
#define secHw_BLK_MASK_TOUCH_SCREEN 0x00000004 | ||
#define secHw_BLK_MASK_UART0 0x00000008 | ||
#define secHw_BLK_MASK_UART1 0x00000010 | ||
#define secHw_BLK_MASK_WATCHDOG 0x00000020 | ||
#define secHw_BLK_MASK_SPUM 0x00000040 | ||
#define secHw_BLK_MASK_DDR2 0x00000080 | ||
#define secHw_BLK_MASK_EXT_MEM 0x00000100 | ||
#define secHw_BLK_MASK_ESW 0x00000200 | ||
#define secHw_BLK_MASK_SPU 0x00010000 | ||
#define secHw_BLK_MASK_PKA 0x00020000 | ||
#define secHw_BLK_MASK_RNG 0x00040000 | ||
#define secHw_BLK_MASK_RTC 0x00080000 | ||
#define secHw_BLK_MASK_OTP 0x00100000 | ||
#define secHw_BLK_MASK_BOOT 0x00200000 | ||
#define secHw_BLK_MASK_MPU 0x00400000 | ||
#define secHw_BLK_MASK_TZCTRL 0x00800000 | ||
#define secHw_BLK_MASK_INTR 0x01000000 | ||
|
||
/* Trustzone register set */ | ||
typedef struct { | ||
volatile uint32_t status; /* read only - reflects status of writes of 2 write registers */ | ||
volatile uint32_t setUnsecure; /* write only. reads back as 0 */ | ||
volatile uint32_t setSecure; /* write only. reads back as 0 */ | ||
} secHw_TZREG_t; | ||
|
||
/* There are 2 register sets. The first is for the lower 16 bits, the 2nd */ | ||
/* is for the higher 16 bits. */ | ||
|
||
typedef enum { | ||
secHw_IDX_LS = 0, | ||
secHw_IDX_MS = 1, | ||
secHw_IDX_NUM | ||
} secHw_IDX_e; | ||
|
||
typedef struct { | ||
volatile secHw_TZREG_t reg[secHw_IDX_NUM]; | ||
} secHw_REGS_t; | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Configures a device as a secure device | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline void secHw_setSecure(uint32_t mask /* mask of type secHw_BLK_MASK_XXXXXX */ | ||
); | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Configures a device as a non-secure device | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline void secHw_setUnsecure(uint32_t mask /* mask of type secHw_BLK_MASK_XXXXXX */ | ||
); | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Get the trustzone status for all components. 1 = non-secure, 0 = secure | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline uint32_t secHw_getStatus(void); | ||
|
||
#include <mach/csp/secHw_inline.h> | ||
|
||
#endif /* SECHW_DEF_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/***************************************************************************** | ||
* Copyright 2003 - 2008 Broadcom Corporation. All rights reserved. | ||
* | ||
* Unless you and Broadcom execute a separate written software license | ||
* agreement governing use of this software, this software is licensed to you | ||
* under the terms of the GNU General Public License version 2, available at | ||
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL"). | ||
* | ||
* Notwithstanding the above, under no circumstances may you combine this | ||
* software in any way with any other Broadcom software provided under a | ||
* license other than the GPL, without Broadcom's express prior written | ||
* consent. | ||
*****************************************************************************/ | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @file secHw_inline.h | ||
* | ||
* @brief Definitions for configuring/testing secure blocks | ||
* | ||
* @note | ||
* None | ||
*/ | ||
/****************************************************************************/ | ||
|
||
#ifndef SECHW_INLINE_H | ||
#define SECHW_INLINE_H | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Configures a device as a secure device | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline void secHw_setSecure(uint32_t mask /* mask of type secHw_BLK_MASK_XXXXXX */ | ||
) { | ||
secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC; | ||
|
||
if (mask & 0x0000FFFF) { | ||
regp->reg[secHw_IDX_LS].setSecure = mask & 0x0000FFFF; | ||
} | ||
|
||
if (mask & 0xFFFF0000) { | ||
regp->reg[secHw_IDX_MS].setSecure = mask >> 16; | ||
} | ||
} | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Configures a device as a non-secure device | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline void secHw_setUnsecure(uint32_t mask /* mask of type secHw_BLK_MASK_XXXXXX */ | ||
) { | ||
secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC; | ||
|
||
if (mask & 0x0000FFFF) { | ||
regp->reg[secHw_IDX_LS].setUnsecure = mask & 0x0000FFFF; | ||
} | ||
if (mask & 0xFFFF0000) { | ||
regp->reg[secHw_IDX_MS].setUnsecure = mask >> 16; | ||
} | ||
} | ||
|
||
/****************************************************************************/ | ||
/** | ||
* @brief Get the trustzone status for all components. 1 = non-secure, 0 = secure | ||
* | ||
*/ | ||
/****************************************************************************/ | ||
static inline uint32_t secHw_getStatus(void) | ||
{ | ||
secHw_REGS_t *regp = (secHw_REGS_t *) MM_IO_BASE_TZPC; | ||
|
||
return (regp->reg[1].status << 16) + regp->reg[0].status; | ||
} | ||
|
||
#endif /* SECHW_INLINE_H */ |