1*1b2596b5SMatthias Ringwald /** 2*1b2596b5SMatthias Ringwald * \file 3*1b2596b5SMatthias Ringwald * 4*1b2596b5SMatthias Ringwald * \brief SAMV70/SAMV71/SAME70/SAMS70-XULTRA board mpu config. 5*1b2596b5SMatthias Ringwald * 6*1b2596b5SMatthias Ringwald * Copyright (c) 2015 Atmel Corporation. All rights reserved. 7*1b2596b5SMatthias Ringwald * 8*1b2596b5SMatthias Ringwald * \asf_license_start 9*1b2596b5SMatthias Ringwald * 10*1b2596b5SMatthias Ringwald * \page License 11*1b2596b5SMatthias Ringwald * 12*1b2596b5SMatthias Ringwald * Redistribution and use in source and binary forms, with or without 13*1b2596b5SMatthias Ringwald * modification, are permitted provided that the following conditions are met: 14*1b2596b5SMatthias Ringwald * 15*1b2596b5SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright notice, 16*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer. 17*1b2596b5SMatthias Ringwald * 18*1b2596b5SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright notice, 19*1b2596b5SMatthias Ringwald * this list of conditions and the following disclaimer in the documentation 20*1b2596b5SMatthias Ringwald * and/or other materials provided with the distribution. 21*1b2596b5SMatthias Ringwald * 22*1b2596b5SMatthias Ringwald * 3. The name of Atmel may not be used to endorse or promote products derived 23*1b2596b5SMatthias Ringwald * from this software without specific prior written permission. 24*1b2596b5SMatthias Ringwald * 25*1b2596b5SMatthias Ringwald * 4. This software may only be redistributed and used in connection with an 26*1b2596b5SMatthias Ringwald * Atmel microcontroller product. 27*1b2596b5SMatthias Ringwald * 28*1b2596b5SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 29*1b2596b5SMatthias Ringwald * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 30*1b2596b5SMatthias Ringwald * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 31*1b2596b5SMatthias Ringwald * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 32*1b2596b5SMatthias Ringwald * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33*1b2596b5SMatthias Ringwald * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34*1b2596b5SMatthias Ringwald * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35*1b2596b5SMatthias Ringwald * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 36*1b2596b5SMatthias Ringwald * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 37*1b2596b5SMatthias Ringwald * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 38*1b2596b5SMatthias Ringwald * POSSIBILITY OF SUCH DAMAGE. 39*1b2596b5SMatthias Ringwald * 40*1b2596b5SMatthias Ringwald * \asf_license_stop 41*1b2596b5SMatthias Ringwald * 42*1b2596b5SMatthias Ringwald */ 43*1b2596b5SMatthias Ringwald /* 44*1b2596b5SMatthias Ringwald * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a> 45*1b2596b5SMatthias Ringwald */ 46*1b2596b5SMatthias Ringwald 47*1b2596b5SMatthias Ringwald 48*1b2596b5SMatthias Ringwald #ifndef _MPU_H_ 49*1b2596b5SMatthias Ringwald #define _MPU_H_ 50*1b2596b5SMatthias Ringwald 51*1b2596b5SMatthias Ringwald #include "compiler.h" 52*1b2596b5SMatthias Ringwald 53*1b2596b5SMatthias Ringwald /*---------------------------------------------------------------------------- 54*1b2596b5SMatthias Ringwald * Definitions 55*1b2596b5SMatthias Ringwald *----------------------------------------------------------------------------*/ 56*1b2596b5SMatthias Ringwald #define ARM_MODE_USR 0x10 57*1b2596b5SMatthias Ringwald 58*1b2596b5SMatthias Ringwald #define PRIVILEGE_MODE 0 59*1b2596b5SMatthias Ringwald #define USER_MODE 1 60*1b2596b5SMatthias Ringwald 61*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_ITCM_REGION ( 1 ) 62*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_IFLASH_REGION ( 2 ) 63*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_DTCM_REGION ( 3 ) 64*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_SRAM_REGION_1 ( 4 ) 65*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_SRAM_REGION_2 ( 5 ) 66*1b2596b5SMatthias Ringwald #define MPU_PERIPHERALS_REGION ( 6 ) 67*1b2596b5SMatthias Ringwald #define MPU_EXT_EBI_REGION ( 7 ) 68*1b2596b5SMatthias Ringwald #define MPU_DEFAULT_SDRAM_REGION ( 8 ) 69*1b2596b5SMatthias Ringwald #define MPU_QSPIMEM_REGION ( 9 ) 70*1b2596b5SMatthias Ringwald #define MPU_USBHSRAM_REGION ( 10 ) 71*1b2596b5SMatthias Ringwald #if defined MPU_HAS_NOCACHE_REGION 72*1b2596b5SMatthias Ringwald #define MPU_NOCACHE_SRAM_REGION ( 11 ) 73*1b2596b5SMatthias Ringwald #endif 74*1b2596b5SMatthias Ringwald 75*1b2596b5SMatthias Ringwald #define MPU_REGION_VALID ( 0x10 ) 76*1b2596b5SMatthias Ringwald #define MPU_REGION_ENABLE ( 0x01 ) 77*1b2596b5SMatthias Ringwald #define MPU_REGION_DISABLE ( 0x0 ) 78*1b2596b5SMatthias Ringwald 79*1b2596b5SMatthias Ringwald #define MPU_ENABLE ( 0x1 << MPU_CTRL_ENABLE_Pos) 80*1b2596b5SMatthias Ringwald #define MPU_HFNMIENA ( 0x1 << MPU_CTRL_HFNMIENA_Pos ) 81*1b2596b5SMatthias Ringwald #define MPU_PRIVDEFENA ( 0x1 << MPU_CTRL_PRIVDEFENA_Pos ) 82*1b2596b5SMatthias Ringwald 83*1b2596b5SMatthias Ringwald 84*1b2596b5SMatthias Ringwald #define MPU_REGION_BUFFERABLE ( 0x01 << MPU_RASR_B_Pos ) 85*1b2596b5SMatthias Ringwald #define MPU_REGION_CACHEABLE ( 0x01 << MPU_RASR_C_Pos ) 86*1b2596b5SMatthias Ringwald #define MPU_REGION_SHAREABLE ( 0x01 << MPU_RASR_S_Pos ) 87*1b2596b5SMatthias Ringwald 88*1b2596b5SMatthias Ringwald #define MPU_REGION_EXECUTE_NEVER ( 0x01 << MPU_RASR_XN_Pos ) 89*1b2596b5SMatthias Ringwald 90*1b2596b5SMatthias Ringwald #define MPU_AP_NO_ACCESS ( 0x00 << MPU_RASR_AP_Pos ) 91*1b2596b5SMatthias Ringwald #define MPU_AP_PRIVILEGED_READ_WRITE ( 0x01 << MPU_RASR_AP_Pos ) 92*1b2596b5SMatthias Ringwald #define MPU_AP_UNPRIVILEGED_READONLY ( 0x02 << MPU_RASR_AP_Pos ) 93*1b2596b5SMatthias Ringwald #define MPU_AP_FULL_ACCESS ( 0x03 << MPU_RASR_AP_Pos ) 94*1b2596b5SMatthias Ringwald #define MPU_AP_RES ( 0x04 << MPU_RASR_AP_Pos ) 95*1b2596b5SMatthias Ringwald #define MPU_AP_PRIVILEGED_READONLY ( 0x05 << MPU_RASR_AP_Pos ) 96*1b2596b5SMatthias Ringwald #define MPU_AP_READONLY ( 0x06 << MPU_RASR_AP_Pos ) 97*1b2596b5SMatthias Ringwald #define MPU_AP_READONLY2 ( 0x07 << MPU_RASR_AP_Pos ) 98*1b2596b5SMatthias Ringwald 99*1b2596b5SMatthias Ringwald #define MPU_TEX_B000 ( 0x01 << MPU_RASR_TEX_Pos ) 100*1b2596b5SMatthias Ringwald #define MPU_TEX_B001 ( 0x01 << MPU_RASR_TEX_Pos ) 101*1b2596b5SMatthias Ringwald #define MPU_TEX_B010 ( 0x01 << MPU_RASR_TEX_Pos ) 102*1b2596b5SMatthias Ringwald #define MPU_TEX_B011 ( 0x01 << MPU_RASR_TEX_Pos ) 103*1b2596b5SMatthias Ringwald #define MPU_TEX_B100 ( 0x01 << MPU_RASR_TEX_Pos ) 104*1b2596b5SMatthias Ringwald #define MPU_TEX_B101 ( 0x01 << MPU_RASR_TEX_Pos ) 105*1b2596b5SMatthias Ringwald #define MPU_TEX_B110 ( 0x01 << MPU_RASR_TEX_Pos ) 106*1b2596b5SMatthias Ringwald #define MPU_TEX_B111 ( 0x01 << MPU_RASR_TEX_Pos ) 107*1b2596b5SMatthias Ringwald 108*1b2596b5SMatthias Ringwald #define SHAREABLE 1 109*1b2596b5SMatthias Ringwald #define NON_SHAREABLE 0 110*1b2596b5SMatthias Ringwald 111*1b2596b5SMatthias Ringwald #define INNER_NORMAL_WB_RWA_TYPE(x) (( 0x04 << MPU_RASR_TEX_Pos ) | ( DISABLE << MPU_RASR_C_Pos ) | ( ENABLE << MPU_RASR_B_Pos ) | ( x << MPU_RASR_S_Pos )) 112*1b2596b5SMatthias Ringwald #define INNER_NORMAL_WB_NWA_TYPE(x) (( 0x04 << MPU_RASR_TEX_Pos ) | ( ENABLE << MPU_RASR_C_Pos ) | ( ENABLE << MPU_RASR_B_Pos ) | ( x << MPU_RASR_S_Pos )) 113*1b2596b5SMatthias Ringwald #define STRONGLY_ORDERED_SHAREABLE_TYPE (( 0x00 << MPU_RASR_TEX_Pos ) | ( DISABLE << MPU_RASR_C_Pos ) | ( DISABLE << MPU_RASR_B_Pos )) // DO not care // 114*1b2596b5SMatthias Ringwald #define SHAREABLE_DEVICE_TYPE (( 0x00 << MPU_RASR_TEX_Pos ) | ( DISABLE << MPU_RASR_C_Pos ) | ( ENABLE << MPU_RASR_B_Pos )) // DO not care // 115*1b2596b5SMatthias Ringwald 116*1b2596b5SMatthias Ringwald 117*1b2596b5SMatthias Ringwald /* Default memory map 118*1b2596b5SMatthias Ringwald Address range Memory region Memory type Shareability Cache policy 119*1b2596b5SMatthias Ringwald 0x00000000- 0x1FFFFFFF Code Normal Non-shareable WT 120*1b2596b5SMatthias Ringwald 0x20000000- 0x3FFFFFFF SRAM Normal Non-shareable WBWA 121*1b2596b5SMatthias Ringwald 0x40000000- 0x5FFFFFFF Peripheral Device Non-shareable - 122*1b2596b5SMatthias Ringwald 0x60000000- 0x7FFFFFFF RAM Normal Non-shareable WBWA 123*1b2596b5SMatthias Ringwald 0x80000000- 0x9FFFFFFF RAM Normal Non-shareable WT 124*1b2596b5SMatthias Ringwald 0xA0000000- 0xBFFFFFFF Device Device Shareable 125*1b2596b5SMatthias Ringwald 0xC0000000- 0xDFFFFFFF Device Device Non Shareable 126*1b2596b5SMatthias Ringwald 0xE0000000- 0xFFFFFFFF System - - 127*1b2596b5SMatthias Ringwald */ 128*1b2596b5SMatthias Ringwald 129*1b2596b5SMatthias Ringwald /********* IFLASH memory macros *********************/ 130*1b2596b5SMatthias Ringwald #define ITCM_START_ADDRESS 0x00000000UL 131*1b2596b5SMatthias Ringwald #define ITCM_END_ADDRESS 0x003FFFFFUL 132*1b2596b5SMatthias Ringwald #define IFLASH_START_ADDRESS 0x00400000UL 133*1b2596b5SMatthias Ringwald #define IFLASH_END_ADDRESS 0x005FFFFFUL 134*1b2596b5SMatthias Ringwald 135*1b2596b5SMatthias Ringwald 136*1b2596b5SMatthias Ringwald #define IFLASH_PRIVILEGE_START_ADDRESS (IFLASH_START_ADDRESS) 137*1b2596b5SMatthias Ringwald #define IFLASH_PRIVILEGE_END_ADDRESS (IFLASH_START_ADDRESS + 0xFFF) 138*1b2596b5SMatthias Ringwald 139*1b2596b5SMatthias Ringwald #define IFLASH_UNPRIVILEGE_START_ADDRESS (IFLASH_PRIVILEGE_END_ADDRESS + 1) 140*1b2596b5SMatthias Ringwald #define IFLASH_UNPRIVILEGE_END_ADDRESS (IFLASH_END_ADDRESS) 141*1b2596b5SMatthias Ringwald 142*1b2596b5SMatthias Ringwald /**************** DTCM *******************************/ 143*1b2596b5SMatthias Ringwald #define DTCM_START_ADDRESS 0x20000000UL 144*1b2596b5SMatthias Ringwald #define DTCM_END_ADDRESS 0x203FFFFFUL 145*1b2596b5SMatthias Ringwald 146*1b2596b5SMatthias Ringwald 147*1b2596b5SMatthias Ringwald /******* SRAM memory macros ***************************/ 148*1b2596b5SMatthias Ringwald 149*1b2596b5SMatthias Ringwald #define SRAM_START_ADDRESS 0x20400000UL 150*1b2596b5SMatthias Ringwald #define SRAM_END_ADDRESS 0x2045FFFFUL 151*1b2596b5SMatthias Ringwald 152*1b2596b5SMatthias Ringwald #if defined MPU_HAS_NOCACHE_REGION 153*1b2596b5SMatthias Ringwald #define NOCACHE_SRAM_REGION_SIZE 0x1000 154*1b2596b5SMatthias Ringwald #endif 155*1b2596b5SMatthias Ringwald 156*1b2596b5SMatthias Ringwald /* Regions should be a 2^(N+1) where 4 < N < 31 */ 157*1b2596b5SMatthias Ringwald #define SRAM_FIRST_START_ADDRESS (SRAM_START_ADDRESS) 158*1b2596b5SMatthias Ringwald #define SRAM_FIRST_END_ADDRESS (SRAM_FIRST_START_ADDRESS + 0x3FFFF) // (2^18) 256 KB 159*1b2596b5SMatthias Ringwald 160*1b2596b5SMatthias Ringwald #if defined MPU_HAS_NOCACHE_REGION 161*1b2596b5SMatthias Ringwald #define SRAM_SECOND_START_ADDRESS (SRAM_FIRST_END_ADDRESS+1) 162*1b2596b5SMatthias Ringwald #define SRAM_SECOND_END_ADDRESS (SRAM_END_ADDRESS - NOCACHE_SRAM_REGION_SIZE ) // (2^17) 128 - 0x1000 KB 163*1b2596b5SMatthias Ringwald #define SRAM_NOCACHE_START_ADDRESS (SRAM_SECOND_END_ADDRESS + 1) 164*1b2596b5SMatthias Ringwald #define SRAM_NOCACHE_END_ADDRESS (SRAM_END_ADDRESS ) 165*1b2596b5SMatthias Ringwald #else 166*1b2596b5SMatthias Ringwald #define SRAM_SECOND_START_ADDRESS (SRAM_FIRST_END_ADDRESS + 1) 167*1b2596b5SMatthias Ringwald #define SRAM_SECOND_END_ADDRESS (SRAM_END_ADDRESS) // (2^17) 128 KB 168*1b2596b5SMatthias Ringwald #endif 169*1b2596b5SMatthias Ringwald /************** Peripherals memory region macros ********/ 170*1b2596b5SMatthias Ringwald #define PERIPHERALS_START_ADDRESS 0x40000000UL 171*1b2596b5SMatthias Ringwald #define PERIPHERALS_END_ADDRESS 0x5FFFFFFFUL 172*1b2596b5SMatthias Ringwald 173*1b2596b5SMatthias Ringwald /******* Ext EBI memory macros ***************************/ 174*1b2596b5SMatthias Ringwald #define EXT_EBI_START_ADDRESS 0x60000000UL 175*1b2596b5SMatthias Ringwald #define EXT_EBI_END_ADDRESS 0x6FFFFFFFUL 176*1b2596b5SMatthias Ringwald 177*1b2596b5SMatthias Ringwald /******* Ext-SRAM memory macros ***************************/ 178*1b2596b5SMatthias Ringwald #define SDRAM_START_ADDRESS 0x70000000UL 179*1b2596b5SMatthias Ringwald #define SDRAM_END_ADDRESS 0x7FFFFFFFUL 180*1b2596b5SMatthias Ringwald 181*1b2596b5SMatthias Ringwald /******* QSPI macros ***************************/ 182*1b2596b5SMatthias Ringwald #define QSPI_START_ADDRESS 0x80000000UL 183*1b2596b5SMatthias Ringwald #define QSPI_END_ADDRESS 0x9FFFFFFFUL 184*1b2596b5SMatthias Ringwald 185*1b2596b5SMatthias Ringwald /************** USBHS_RAM region macros ******************/ 186*1b2596b5SMatthias Ringwald #define USBHSRAM_START_ADDRESS 0xA0100000UL 187*1b2596b5SMatthias Ringwald #define USBHSRAM_END_ADDRESS 0xA01FFFFFUL 188*1b2596b5SMatthias Ringwald 189*1b2596b5SMatthias Ringwald /*---------------------------------------------------------------------------- 190*1b2596b5SMatthias Ringwald * Export functions 191*1b2596b5SMatthias Ringwald *----------------------------------------------------------------------------*/ 192*1b2596b5SMatthias Ringwald void mpu_enable(uint32_t dw_mpu_enable); 193*1b2596b5SMatthias Ringwald void mpu_set_region(uint32_t dw_region_base_addr, uint32_t dw_region_attr); 194*1b2596b5SMatthias Ringwald void mpu_set_region_num(uint32_t dw_region_num); 195*1b2596b5SMatthias Ringwald void mpu_disable_region(void); 196*1b2596b5SMatthias Ringwald uint32_t mpu_cal_mpu_region_size(uint32_t dw_actual_size_in_bytes); 197*1b2596b5SMatthias Ringwald void mpu_update_regions(uint32_t dw_region_num, uint32_t dw_region_base_addr, uint32_t dw_region_attr); 198*1b2596b5SMatthias Ringwald 199*1b2596b5SMatthias Ringwald #endif /* #ifndef _MPU_H_ */