More work on TZ support.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13526 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
d99cc1acc9
commit
5f4acc7089
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
# Compiler options here.
|
# Compiler options here.
|
||||||
ifeq ($(USE_OPT),)
|
ifeq ($(USE_OPT),)
|
||||||
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
|
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16 -mcmse
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# C specific options here (added to USE_OPT).
|
# C specific options here (added to USE_OPT).
|
||||||
|
@ -114,7 +114,7 @@ include $(CHIBIOS)/test/rt/rt_test.mk
|
||||||
include $(CHIBIOS)/test/oslib/oslib_test.mk
|
include $(CHIBIOS)/test/oslib/oslib_test.mk
|
||||||
|
|
||||||
# Define linker script file here.
|
# Define linker script file here.
|
||||||
LDSCRIPT= $(STARTUPLD)/STM32L552xE_TZ.ld
|
LDSCRIPT= ./secure.ld
|
||||||
|
|
||||||
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
# setting.
|
# setting.
|
||||||
|
@ -151,6 +151,8 @@ CPPWARN = -Wall -Wextra -Wundef
|
||||||
|
|
||||||
# List all user C define here, like -D_DEBUG=1
|
# List all user C define here, like -D_DEBUG=1
|
||||||
UDEFS =
|
UDEFS =
|
||||||
|
UDEFS += -D__ARM_FEATURE_CMSE=3 # It is already intrinsic because -mcmse, added
|
||||||
|
# again to make it discoverable by Eclipse.
|
||||||
|
|
||||||
# Define ASM defines here
|
# Define ASM defines here
|
||||||
UADEFS =
|
UADEFS =
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STM32L552xE memory setup (custom).
|
||||||
|
*/
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
flash0 (rx) : org = 0x0C000000, len = 120k - 256 /* Flash S */
|
||||||
|
flash1 (rx) : org = 0x0C01FF00, len = 256 /* Flash NSC */
|
||||||
|
flash2 (rx) : org = 0x08020000, len = 384k /* Flash NS */
|
||||||
|
flash3 (rx) : org = 0x00000000, len = 0
|
||||||
|
flash4 (rx) : org = 0x00000000, len = 0
|
||||||
|
flash5 (rx) : org = 0x00000000, len = 0
|
||||||
|
flash6 (rx) : org = 0x00000000, len = 0
|
||||||
|
flash7 (rx) : org = 0x00000000, len = 0
|
||||||
|
ram0 (wx) : org = 0x30000000, len = 32k /* SRAM1 S */
|
||||||
|
ram1 (wx) : org = 0x20008000, len = 160k /* SRAM1+SRAM2 NS */
|
||||||
|
ram2 (wx) : org = 0x00000000, len = 0
|
||||||
|
ram3 (wx) : org = 0x00000000, len = 0
|
||||||
|
ram4 (wx) : org = 0x00000000, len = 0
|
||||||
|
ram5 (wx) : org = 0x00000000, len = 0
|
||||||
|
ram6 (wx) : org = 0x00000000, len = 0
|
||||||
|
ram7 (wx) : org = 0x00000000, len = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* Special section for NSC flash.*/
|
||||||
|
.nsc_flash : ALIGN(4)
|
||||||
|
{
|
||||||
|
__nsc_flash_base__ = .;
|
||||||
|
KEEP(*(.nsc_flash))
|
||||||
|
__nsc_flash_end__ = .;
|
||||||
|
} > flash1
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For each data/text section two region are defined, a virtual region
|
||||||
|
and a load region (_LMA suffix).*/
|
||||||
|
|
||||||
|
/* Flash region to be used for exception vectors.*/
|
||||||
|
REGION_ALIAS("VECTORS_FLASH", flash0);
|
||||||
|
REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
|
/* Flash region to be used for constructors and destructors.*/
|
||||||
|
REGION_ALIAS("XTORS_FLASH", flash0);
|
||||||
|
REGION_ALIAS("XTORS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
|
/* Flash region to be used for code text.*/
|
||||||
|
REGION_ALIAS("TEXT_FLASH", flash0);
|
||||||
|
REGION_ALIAS("TEXT_FLASH_LMA", flash0);
|
||||||
|
|
||||||
|
/* Flash region to be used for read only data.*/
|
||||||
|
REGION_ALIAS("RODATA_FLASH", flash0);
|
||||||
|
REGION_ALIAS("RODATA_FLASH_LMA", flash0);
|
||||||
|
|
||||||
|
/* Flash region to be used for various.*/
|
||||||
|
REGION_ALIAS("VARIOUS_FLASH", flash0);
|
||||||
|
REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
|
||||||
|
|
||||||
|
/* Flash region to be used for RAM(n) initialization data.*/
|
||||||
|
REGION_ALIAS("RAM_INIT_FLASH_LMA", flash1);
|
||||||
|
|
||||||
|
/* RAM region to be used for Main stack. This stack accommodates the processing
|
||||||
|
of all exceptions and interrupts.*/
|
||||||
|
REGION_ALIAS("MAIN_STACK_RAM", ram0);
|
||||||
|
|
||||||
|
/* RAM region to be used for the process stack. This is the stack used by
|
||||||
|
the main() function.*/
|
||||||
|
REGION_ALIAS("PROCESS_STACK_RAM", ram0);
|
||||||
|
|
||||||
|
/* RAM region to be used for data segment.*/
|
||||||
|
REGION_ALIAS("DATA_RAM", ram0);
|
||||||
|
REGION_ALIAS("DATA_RAM_LMA", flash0);
|
||||||
|
|
||||||
|
/* RAM region to be used for BSS segment.*/
|
||||||
|
REGION_ALIAS("BSS_RAM", ram0);
|
||||||
|
|
||||||
|
/* RAM region to be used for the default heap.*/
|
||||||
|
REGION_ALIAS("HEAP_RAM", ram0);
|
||||||
|
|
||||||
|
/* Generic rules inclusion.*/
|
||||||
|
INCLUDE rules.ld
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file nsc_flash.S
|
||||||
|
* @brief Non-secure callable area configuration.
|
||||||
|
*
|
||||||
|
* @defgroup NSC_FLASH_CONFIGURATION
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Module constants. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Module pre-compile time settings. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Code section. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
#if !defined(__DOXYGEN__)
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
.cpu cortex-m33
|
||||||
|
.thumb
|
||||||
|
|
||||||
|
.section .nsc_flash, "ax"
|
||||||
|
.align 4
|
||||||
|
.globl __nsc_entries
|
||||||
|
__nsc_entries:
|
||||||
|
sg
|
||||||
|
.here:
|
||||||
|
b .here
|
||||||
|
|
||||||
|
#endif /* !defined(__DOXYGEN__) */
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -102,6 +102,9 @@ void hal_lld_init(void) {
|
||||||
|
|
||||||
/* IRQ subsystem initialization.*/
|
/* IRQ subsystem initialization.*/
|
||||||
irqInit();
|
irqInit();
|
||||||
|
|
||||||
|
/* Security initialization.*/
|
||||||
|
secure_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1774,6 +1774,7 @@
|
||||||
|
|
||||||
/* Various helpers.*/
|
/* Various helpers.*/
|
||||||
#include "nvic.h"
|
#include "nvic.h"
|
||||||
|
#include "sau.h"
|
||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
//#include "mpu_v7m.h"
|
//#include "mpu_v7m.h"
|
||||||
#include "stm32_isr.h"
|
#include "stm32_isr.h"
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# Required platform files.
|
# Required platform files.
|
||||||
PLATFORMSRC := $(CHIBIOS)/os/hal/ports/common/ARMCMx/nvic.c \
|
PLATFORMSRC := $(CHIBIOS)/os/hal/ports/common/ARMCMx/nvic.c \
|
||||||
|
$(CHIBIOS)/os/hal/ports/common/ARMCMx/sau.c \
|
||||||
$(CHIBIOS)/os/hal/ports/STM32/STM32L5xx/stm32_isr.c \
|
$(CHIBIOS)/os/hal/ports/STM32/STM32L5xx/stm32_isr.c \
|
||||||
$(CHIBIOS)/os/hal/ports/STM32/STM32L5xx/hal_lld.c
|
$(CHIBIOS)/os/hal/ports/STM32/STM32L5xx/hal_lld.c
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file common/ARMCMx/sau.c
|
||||||
|
* @brief Cortex-Mx SAU support code.
|
||||||
|
*
|
||||||
|
* @addtogroup COMMON_ARMCMx_SAU
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "hal.h"
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver local definitions. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver exported variables. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver local types. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver local variables. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver local functions. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver exported functions. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enables SAU.
|
||||||
|
*/
|
||||||
|
void sauEnable(void) {
|
||||||
|
|
||||||
|
SAU->CTRL = 1U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables SAU.
|
||||||
|
*/
|
||||||
|
void sauDisable(void) {
|
||||||
|
|
||||||
|
SAU->CTRL = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enables a SAU region.
|
||||||
|
*
|
||||||
|
* @param[in] region the region number
|
||||||
|
* @param[in] start the region start address
|
||||||
|
* @param[in] end the region end address
|
||||||
|
* @param[in] flags regions mode, note, this is tricky, read carefully
|
||||||
|
* the ARM documentation
|
||||||
|
*/
|
||||||
|
void sauEnableRegion(uint32_t region, uint32_t start,
|
||||||
|
uint32_t end, uint32_t flags) {
|
||||||
|
|
||||||
|
osalDbgCheck(region < SAU->TYPE);
|
||||||
|
osalDbgCheck((start & 0x1FU) == 0U);
|
||||||
|
osalDbgCheck((end & 0x1FU) == 0x1FU);
|
||||||
|
|
||||||
|
SAU->RNR = region;
|
||||||
|
SAU->RBAR = start;
|
||||||
|
SAU->RLAR = (end & 0xFFFFFFE0U) | (flags & SAU_REGION_NSC) | 1U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disables a SAU region.
|
||||||
|
*
|
||||||
|
* @param[in] region the region number
|
||||||
|
*/
|
||||||
|
void sauDisableRegion(uint32_t region) {
|
||||||
|
|
||||||
|
osalDbgCheck(region < SAU->TYPE);
|
||||||
|
|
||||||
|
SAU->RNR = region;
|
||||||
|
SAU->RLAR = 0U;
|
||||||
|
SAU->RBAR = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file common/ARMCMx/sau.h
|
||||||
|
* @brief Cortex-Mx SAU support macros and structures.
|
||||||
|
*
|
||||||
|
* @addtogroup COMMON_ARMCMx_SAU
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SAU_H
|
||||||
|
#define SAU_H
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver constants. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name System vectors numbers
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define SAU_REGION_NOT_NSC (0U << 1U)
|
||||||
|
#define SAU_REGION_NSC (1U << 1U)
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver pre-compile time settings. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Derived constants and error checks. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver data structures and types. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* Driver macros. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/* External declarations. */
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void sauEnable(void);
|
||||||
|
void sauDisable(void);
|
||||||
|
void sauEnableRegion(uint32_t region, uint32_t start,
|
||||||
|
uint32_t end, uint32_t flags);
|
||||||
|
void sauDisableRegion(uint32_t region);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SAU_H */
|
||||||
|
|
||||||
|
/** @} */
|
Loading…
Reference in New Issue