From 7bc4c0ec212203403048e08a6b7e893203e265eb Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Mon, 23 Apr 2018 12:48:32 -0500 Subject: [PATCH] K64F, K66F: Update the SYSMPU implementation Do not disable SYSMPU, instead add access for ENET bus master Signed-off-by: Mahesh Mahadevan --- .../TARGET_K64F/hardware_init_MK64F12.c | 37 ++++++++++++++++--- .../TARGET_K66F/hardware_init_MK66F18.c | 37 ++++++++++++++++--- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K64F/hardware_init_MK64F12.c b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K64F/hardware_init_MK64F12.c index dc04700dba..bdd51be7ec 100644 --- a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K64F/hardware_init_MK64F12.c +++ b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K64F/hardware_init_MK64F12.c @@ -29,18 +29,45 @@ */ #include "fsl_port.h" +#include "fsl_sysmpu.h" + +/* Initialize the region 1, master 0, 1, 2, 3 - core access rights supervisior r/w/x , user r/w/x. */ +sysmpu_rwxrights_master_access_control_t right = +{ + kSYSMPU_SupervisorEqualToUsermode, + kSYSMPU_UserReadWriteExecute, +#if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER + false, +#endif /* FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER */ +}; /******************************************************************************* * Code ******************************************************************************/ -void k64f_init_eth_hardware(void) +void kinetis_init_eth_hardware(void) { port_pin_config_t configENET = {0}; + sysmpu_region_config_t regConfig; + sysmpu_config_t config; -#ifndef FEATURE_UVISOR - /* Disable MPU only when uVisor is not around. */ - MPU->CESR &= ~MPU_CESR_VLD_MASK; -#endif/*FEATURE_UVISOR*/ + memset(®Config, 0, sizeof(sysmpu_region_config_t)); + memset(&config, 0, sizeof(sysmpu_config_t)); + + regConfig.regionNum = 1; + regConfig.startAddress = 0U; + regConfig.endAddress = 0xFFFFFFFFU; + regConfig.accessRights1[0] = right; + regConfig.accessRights1[1] = right; + regConfig.accessRights1[2] = right; + regConfig.accessRights1[3] = right; + +#if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER + regConfig.processIdentifier = 1U; + regConfig.processIdMask = 0U; +#endif + + config.regionConfig = regConfig; + SYSMPU_Init(SYSMPU, &config); CLOCK_EnableClock(kCLOCK_PortC); CLOCK_EnableClock(kCLOCK_PortB); diff --git a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K66F/hardware_init_MK66F18.c b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K66F/hardware_init_MK66F18.c index 222a3173ee..d891fb376f 100644 --- a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K66F/hardware_init_MK66F18.c +++ b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/TARGET_K66F/hardware_init_MK66F18.c @@ -29,18 +29,45 @@ */ #include "fsl_port.h" +#include "fsl_sysmpu.h" + +/* Initialize the region 1, master 0, 1, 2, 3 - core access rights supervisior r/w/x , user r/w/x. */ +sysmpu_rwxrights_master_access_control_t right = +{ + kSYSMPU_SupervisorEqualToUsermode, + kSYSMPU_UserReadWriteExecute, +#if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER + false, +#endif /* FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER */ +}; /******************************************************************************* * Code ******************************************************************************/ -void k66f_init_eth_hardware(void) +void kinetis_init_eth_hardware(void) { port_pin_config_t configENET = {0}; + sysmpu_region_config_t regConfig; + sysmpu_config_t config; -#ifndef FEATURE_UVISOR - /* Disable MPU only when uVisor is not around. */ - SYSMPU->CESR &= ~SYSMPU_CESR_VLD_MASK; -#endif/*FEATURE_UVISOR*/ + memset(®Config, 0, sizeof(sysmpu_region_config_t)); + memset(&config, 0, sizeof(sysmpu_config_t)); + + regConfig.regionNum = 1; + regConfig.startAddress = 0U; + regConfig.endAddress = 0xFFFFFFFFU; + regConfig.accessRights1[0] = right; + regConfig.accessRights1[1] = right; + regConfig.accessRights1[2] = right; + regConfig.accessRights1[3] = right; + +#if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER + regConfig.processIdentifier = 1U; + regConfig.processIdMask = 0U; +#endif + + config.regionConfig = regConfig; + SYSMPU_Init(SYSMPU, &config); /* Ungate the port clock */ CLOCK_EnableClock(kCLOCK_PortA);