arch: arc: fix mpu version number

ARC mpu version used a wrong number 3, could cause conflict in future.
This commit fix this issue to version number 4.

Signed-off-by: Yuguo Zou <yuguo.zou@synopsys.com>
This commit is contained in:
Yuguo Zou 2021-02-23 15:10:14 +08:00 committed by Anas Nashif
commit a8b6936c7d
9 changed files with 20 additions and 20 deletions

View file

@ -9,7 +9,7 @@ config ARC_MPU_VER
default 2
help
ARC MPU has several versions. For MPU v2, the minimum region is 2048 bytes;
For MPU v3, the minimum region is 32 bytes
For MPU v3 and v4, the minimum region is 32 bytes
config ARC_CORE_MPU
bool "ARC Core MPU functionalities"
@ -33,6 +33,6 @@ config ARC_MPU
select THREAD_STACK_INFO
select GEN_PRIV_STACKS if ARC_MPU_VER = 2
select MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT if ARC_MPU_VER = 2
select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if ARC_MPU_VER = 3
select MPU_REQUIRES_NON_OVERLAPPING_REGIONS if ARC_MPU_VER = 4
help
Target has ARC MPU (currently only works for EMSK 2.2/2.3 ARCEM7D)

View file

@ -54,6 +54,6 @@ static inline uint32_t get_region_attr_by_type(uint32_t type)
#if CONFIG_ARC_MPU_VER == 2
#include "arc_mpu_v2_internal.h"
#elif CONFIG_ARC_MPU_VER == 3
#include "arc_mpu_v3_internal.h"
#elif CONFIG_ARC_MPU_VER == 4
#include "arc_mpu_v4_internal.h"
#endif

View file

@ -3,8 +3,8 @@
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V3_INTERNAL_H_
#define ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V3_INTERNAL_H_
#ifndef ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V4_INTERNAL_H_
#define ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V4_INTERNAL_H_
#define AUX_MPU_RPER_SID1 0x10000
/* valid mask: SID1+secure+valid */
@ -12,13 +12,13 @@
#define AUX_MPU_RPER_ATTR_MASK (0x1FF)
/* For MPU version 3, the minimum protection region size is 32 bytes */
/* For MPU version 4, the minimum protection region size is 32 bytes */
#define ARC_FEATURE_MPU_ALIGNMENT_BITS 5
#define CALC_REGION_END_ADDR(start, size) \
(start + size - (1 << ARC_FEATURE_MPU_ALIGNMENT_BITS))
/* ARC MPU version 3 does not support mpu region overlap in hardware
/* ARC MPU version 4 does not support mpu region overlap in hardware
* so if we want to allocate MPU region dynamically, e.g. thread stack,
* memory domain from a background region, a dynamic region splitting
* approach is designed. pls see comments in
@ -521,7 +521,7 @@ void arc_core_mpu_disable(void)
void arc_core_mpu_configure_thread(struct k_thread *thread)
{
#if defined(CONFIG_MPU_GAP_FILLING)
/* the mpu entries of ARC MPUv3 are divided into 2 parts:
/* the mpu entries of ARC MPUv4 are divided into 2 parts:
* static entries: global mpu entries, not changed in context switch
* dynamic entries: MPU entries changed in context switch and
* memory domain configure, including:
@ -785,7 +785,7 @@ int arc_core_mpu_buffer_validate(void *addr, size_t size, int write)
int key = arch_irq_lock();
/*
* For ARC MPU v3, overlapping is not supported.
* For ARC MPU v4, overlapping is not supported.
* we can stop the iteration immediately once we find the
* matched region that grants permission or denies access.
*/
@ -893,4 +893,4 @@ static int arc_mpu_init(const struct device *arg)
SYS_INIT(arc_mpu_init, PRE_KERNEL_1,
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
#endif /* ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V3_INTERNAL_H_ */
#endif /* ZEPHYR_ARCH_ARC_CORE_MPU_ARC_MPU_V4_INTERNAL_H_ */

View file

@ -129,8 +129,8 @@ done_cache_invalidate:
* substitution of normal hardware reset sequence.
*/
#ifdef CONFIG_INIT_ARCH_HW_AT_BOOT
/* Set MPU (v3) registers to default */
#if CONFIG_ARC_MPU_VER == 3
/* Set MPU (v4) registers to default */
#if CONFIG_ARC_MPU_VER == 4
/* Set default reset value to _ARC_V2_MPU_EN register */
#define ARC_MPU_EN_RESET_VALUE 0x400181C0
mov_s r1, ARC_MPU_EN_RESET_VALUE

View file

@ -52,13 +52,13 @@ extern "C" {
*
* For regions that are NOT the minimum size, this define has no semantics
* on ARC MPUv2 as its regions must be power of two size and aligned to their
* own size. On ARC MPUv3, region sizes are arbitrary and this just indicates
* own size. On ARC MPUv4, region sizes are arbitrary and this just indicates
* the required size granularity.
*/
#ifdef CONFIG_ARC_CORE_MPU
#if CONFIG_ARC_MPU_VER == 2
#define Z_ARC_MPU_ALIGN 2048
#elif CONFIG_ARC_MPU_VER == 3
#elif CONFIG_ARC_MPU_VER == 4
#define Z_ARC_MPU_ALIGN 32
#else
#error "Unsupported MPU version"
@ -244,7 +244,7 @@ BUILD_ASSERT(CONFIG_PRIVILEGED_STACK_SIZE % Z_ARC_MPU_ALIGN == 0,
"the size of the partition must be power of 2" \
" and greater than or equal to the mpu adddress alignment." \
"start address of the partition must align with size.")
#elif CONFIG_ARC_MPU_VER == 3
#elif CONFIG_ARC_MPU_VER == 4
#define _ARCH_MEM_PARTITION_ALIGN_CHECK(start, size) \
BUILD_ASSERT((size) % Z_ARC_MPU_ALIGN == 0 && \
(size) >= Z_ARC_MPU_ALIGN && \

View file

@ -30,7 +30,7 @@
#ifdef CONFIG_ARC_MPU_ENABLE
#if CONFIG_ARC_MPU_VER == 2
#define MPU_MIN_SIZE 2048
#elif CONFIG_ARC_MPU_VER == 3
#elif CONFIG_ARC_MPU_VER == 4
#define MPU_MIN_SIZE 32
#endif
#define MPU_MIN_SIZE_ALIGN . = ALIGN(MPU_MIN_SIZE);

View file

@ -10,7 +10,7 @@ config CPU_EM4_FPUDA
default y
config ARC_MPU_VER
default 3
default 4
config RGF_NUM_BANKS
default 1

View file

@ -18,7 +18,7 @@ config NUM_IRQS
default 36 if BOARD_EM_STARTERKIT_R22
config ARC_MPU_VER
default 3 if BOARD_EM_STARTERKIT_R23
default 4 if BOARD_EM_STARTERKIT_R23
default 2 if BOARD_EM_STARTERKIT_R22
config RGF_NUM_BANKS

View file

@ -16,7 +16,7 @@ config NUM_IRQS
default 30
config ARC_MPU_VER
default 3
default 4
config RGF_NUM_BANKS
default 1