forked from epagris/FreeRTOS-Kernel
		
	Use linker script variables for MPU setup for Nuvoton M2351 Keil Project
Earlier we were using hard-coded addresses for MPU setup which were ensured to be the same as linker script setup. This change updates the Keil uVision project for Nuvoton Numaker-PFM-M2351 to use the variables exported from the linker script. This ensures that the MPU setup never goes out of sync with linker script.
This commit is contained in:
		
							parent
							
								
									d449c8979d
								
							
						
					
					
						commit
						d58e6a7b09
					
				@ -1,59 +1,70 @@
 | 
			
		||||
 | 
			
		||||
; Privileged Code:
 | 
			
		||||
;   Start   : 0x10040000
 | 
			
		||||
;   End     : 0x10047000 - 1
 | 
			
		||||
;   Size    : 28 Kbytes
 | 
			
		||||
; NOTE: ARMv8-M MPU requires that each region must start on a 32 byte aligned
 | 
			
		||||
; address and the size of a region must be a multiple of 32 bytes.
 | 
			
		||||
;
 | 
			
		||||
; Privileged Data:
 | 
			
		||||
;   Start   : 0x30008000
 | 
			
		||||
;   End     : 0x30009000 - 1
 | 
			
		||||
;   Size    : 4 Kbytes
 | 
			
		||||
LR_IROM_NS_PRIVILEGED 0x10040000 0x00007000 ; load region size_region
 | 
			
		||||
; Flash Layout
 | 
			
		||||
;
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |   Privileged Code   |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |    System Calls     |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |  Unprivileged Code  |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
;
 | 
			
		||||
; RAM Layout
 | 
			
		||||
;
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |   Privileged Data   |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |  Unprivileged Data  |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
 | 
			
		||||
LR_APP 0x10040000 ; load region
 | 
			
		||||
{
 | 
			
		||||
    ER_IROM_NS_PRIVILEGED +0 ; load address = execution address
 | 
			
		||||
    ER_IROM_NS_PRIVILEGED +0 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *.o(RESET, +First)
 | 
			
		||||
        *(InRoot$$Sections) ; All sections that must be in a root region
 | 
			
		||||
        *(privileged_functions)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IRAM_NS_PRIVILEGED 0x30008000 0x00001000
 | 
			
		||||
    ER_IROM_NS_PRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IROM_NS_FREERTOS_SYSTEM_CALLS +0 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *(freertos_system_calls)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IROM_NS_UNPRIVILEGED +0 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *(+RO)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IROM_NS_UNPRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IRAM_NS_PRIVILEGED 0x30008000 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *(privileged_data)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; System Calls:
 | 
			
		||||
;   Start   : 0x10047000
 | 
			
		||||
;   End     : 0x10048000 - 1
 | 
			
		||||
;   Size    : 4 Kbytes
 | 
			
		||||
LR_IROM_NS_SYSTEM_CALLS 0x10047000 0x00001000 ; load region size_region
 | 
			
		||||
{
 | 
			
		||||
    ER_IROM_NS_SYSTEM_CALLS +0 ; load address = execution address
 | 
			
		||||
    ER_IRAM_NS_PRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
         *(freertos_system_calls)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; Unprivileged Code:
 | 
			
		||||
;   Start   : 0x10048000
 | 
			
		||||
;   End     : 0x10080000 - 1
 | 
			
		||||
;   Size    : 224 Kbytes
 | 
			
		||||
;
 | 
			
		||||
; Unprivileged Data:
 | 
			
		||||
;   Start   : 0x30009000
 | 
			
		||||
;   End     : 0x30018000 - 1
 | 
			
		||||
;   Size    : 60 Kbytes
 | 
			
		||||
LR_IROM_NS_UNPRIVILEGED 0x10048000 0x00038000 ; load region size_region
 | 
			
		||||
{
 | 
			
		||||
    ER_IROM_NS_UNPRIVILEGED +0 ; load address = execution address
 | 
			
		||||
    {
 | 
			
		||||
         *(+RO)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ER_IRAM_NS_UNPRIVILEGED 0x30009000 0x0000F000
 | 
			
		||||
    ER_IRAM_NS_UNPRIVILEGED +0 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *(+RW, +ZI)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    ER_IRAM_NS_UNPRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -37,28 +37,40 @@
 | 
			
		||||
#include "tz_demo.h"
 | 
			
		||||
#include "mpu_demo.h"
 | 
			
		||||
 | 
			
		||||
/* Externs needed by the MPU setup code. These must match the memory map as
 | 
			
		||||
 * specified in Scatter-Loading description file (FreeRTOSDemo_ns.sct). */
 | 
			
		||||
/* Externs needed by the MPU setup code. These are defined in Scatter-Loading
 | 
			
		||||
 * description file (FreeRTOSDemo_ns.sct). */
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_PRIVILEGED$$Base;
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_PRIVILEGED_ALIGN$$Limit;
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS$$Base;
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN$$Limit;
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_UNPRIVILEGED$$Base;
 | 
			
		||||
extern uint32_t Image$$ER_IROM_NS_UNPRIVILEGED_ALIGN$$Limit;
 | 
			
		||||
 | 
			
		||||
extern uint32_t Image$$ER_IRAM_NS_PRIVILEGED$$Base;
 | 
			
		||||
extern uint32_t Image$$ER_IRAM_NS_PRIVILEGED_ALIGN$$Limit;
 | 
			
		||||
extern uint32_t Image$$ER_IRAM_NS_UNPRIVILEGED$$Base;
 | 
			
		||||
extern uint32_t Image$$ER_IRAM_NS_UNPRIVILEGED_ALIGN$$Limit;
 | 
			
		||||
 | 
			
		||||
/* Privileged flash. */
 | 
			
		||||
const uint32_t * __privileged_functions_start__		= ( uint32_t * ) ( 0x10040000 );
 | 
			
		||||
const uint32_t * __privileged_functions_end__		= ( uint32_t * ) ( 0x10047000 - 0x1 );	/* Last address in privileged Flash region. */
 | 
			
		||||
const uint32_t * __privileged_functions_start__		= ( uint32_t * ) &( Image$$ER_IROM_NS_PRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __privileged_functions_end__		= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_PRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in privileged Flash region. */
 | 
			
		||||
 | 
			
		||||
/* Flash containing system calls. Note that the section containing system calls
 | 
			
		||||
 * is unprivileged so that unprivileged tasks can make system calls.*/
 | 
			
		||||
const uint32_t * __syscalls_flash_start__			= ( uint32_t * ) ( 0x10047000 );
 | 
			
		||||
const uint32_t * __syscalls_flash_end__				= ( uint32_t * ) ( 0x10048000 - 0x1 );	/* Last address in Flash region containing system calls. */
 | 
			
		||||
/* Flash containing system calls. */
 | 
			
		||||
const uint32_t * __syscalls_flash_start__			= ( uint32_t * ) &( Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS$$Base );
 | 
			
		||||
const uint32_t * __syscalls_flash_end__				= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_FREERTOS_SYSTEM_CALLS_ALIGN$$Limit ) - 0x1 ); /* Last address in Flash region containing system calls. */
 | 
			
		||||
 | 
			
		||||
/* Unprivileged flash. */
 | 
			
		||||
const uint32_t * __unprivileged_flash_start__		= ( uint32_t * ) ( 0x10048000 );
 | 
			
		||||
const uint32_t * __unprivileged_flash_end__			= ( uint32_t * ) ( 0x10080000 - 0x1 );	/* Last address in un-privileged Flash region. */
 | 
			
		||||
/* Unprivileged flash. Note that the section containing system calls is
 | 
			
		||||
 * unprivileged so that unprivileged tasks can make system calls. */
 | 
			
		||||
const uint32_t * __unprivileged_flash_start__		= ( uint32_t * ) &( Image$$ER_IROM_NS_UNPRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __unprivileged_flash_end__			= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IROM_NS_UNPRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in un-privileged Flash region. */
 | 
			
		||||
 | 
			
		||||
/* Privileged RAM. It contains kernel data. */
 | 
			
		||||
const uint32_t * __privileged_sram_start__			= ( uint32_t * ) ( 0x30008000 );
 | 
			
		||||
const uint32_t * __privileged_sram_end__			= ( uint32_t * ) ( 0x30009000 - 0x1 );	/* Last address in privileged RAM. */
 | 
			
		||||
/* RAM with priviledged access only. This contains kernel data. */
 | 
			
		||||
const uint32_t * __privileged_sram_start__			= ( uint32_t * ) &( Image$$ER_IRAM_NS_PRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __privileged_sram_end__			= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_PRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in privileged RAM. */
 | 
			
		||||
 | 
			
		||||
/* Unprivileged RAM. */
 | 
			
		||||
const uint32_t * __unprivileged_sram_start__		= ( uint32_t * ) ( 0x30009000 );
 | 
			
		||||
const uint32_t * __unprivileged_sram_end__			= ( uint32_t * ) ( 0x30018000 - 0x1 );	/* Last address in un-privileged RAM. */
 | 
			
		||||
const uint32_t * __unprivileged_sram_start__		= ( uint32_t * ) &( Image$$ER_IRAM_NS_UNPRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __unprivileged_sram_end__			= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_UNPRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in un-privileged RAM. */
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,7 @@
 | 
			
		||||
; *************************************************************
 | 
			
		||||
; *** Scatter-Loading Description File generated by uVision ***
 | 
			
		||||
; *************************************************************
 | 
			
		||||
 | 
			
		||||
; NOTE: ARMv8-M MPU requires that each region must start on a 32 byte aligned
 | 
			
		||||
; address and the size of a region must be a multiple of 32 bytes.
 | 
			
		||||
;
 | 
			
		||||
; Flash Layout
 | 
			
		||||
; [ ARMv8-M MPU requires that each region must start on a 32 byte aligned
 | 
			
		||||
;   address and the size of a region must be a multiple of 32 bytes. ]
 | 
			
		||||
;
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |   Privileged Code   |
 | 
			
		||||
@ -13,8 +10,16 @@
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |  Unprivileged Code  |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
;
 | 
			
		||||
; RAM Layout
 | 
			
		||||
;
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |   Privileged Data   |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |  Unprivileged Data  |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
 | 
			
		||||
LR_CODE 0x00200000 ; load region
 | 
			
		||||
LR_APP 0x00200000 ; load region
 | 
			
		||||
{
 | 
			
		||||
    ER_IROM_NS_PRIVILEGED +0 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
@ -44,20 +49,7 @@ LR_CODE 0x00200000 ; load region
 | 
			
		||||
    ER_IROM_NS_UNPRIVILEGED_ALIGN +0 ALIGN 32 EMPTY 0x0
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; RAM Layout
 | 
			
		||||
; [ ARMv8-M MPU requires that each region must start on a 32 byte aligned
 | 
			
		||||
;   address and the size of a region must be a multiple of 32 bytes. ]
 | 
			
		||||
;
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |   Privileged Data   |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
; |  Unprivileged Data  |
 | 
			
		||||
;  ---------------------
 | 
			
		||||
 | 
			
		||||
LR_DATA 0x20200000 ; load region
 | 
			
		||||
{
 | 
			
		||||
    ER_IRAM_NS_PRIVILEGED 0x20200000 ALIGN 32
 | 
			
		||||
    {
 | 
			
		||||
        *(privileged_data)
 | 
			
		||||
 | 
			
		||||
@ -63,7 +63,7 @@ const uint32_t * __unprivileged_flash_end__			= ( uint32_t * ) ( ( uint32_t ) &(
 | 
			
		||||
/* RAM with priviledged access only. This contains kernel data. */
 | 
			
		||||
const uint32_t * __privileged_sram_start__			= ( uint32_t * ) &( Image$$ER_IRAM_NS_PRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __privileged_sram_end__			= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_PRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in privileged RAM. */
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
/* Unprivileged RAM. */
 | 
			
		||||
const uint32_t * __unprivileged_sram_start__		= ( uint32_t * ) &( Image$$ER_IRAM_NS_UNPRIVILEGED$$Base );
 | 
			
		||||
const uint32_t * __unprivileged_sram_end__			= ( uint32_t * ) ( ( uint32_t ) &( Image$$ER_IRAM_NS_UNPRIVILEGED_ALIGN$$Limit ) - 0x1 ); /* Last address in un-privileged RAM. */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user