From: M V Pratap Reddy Date: Fri, 4 Dec 2020 12:52:36 +0000 (+0530) Subject: PDK-6948: Board: Updated mmr config for am64x evm X-Git-Tag: REL.CORESDK.07.01.04.02~7 X-Git-Url: https://git.ti.com/gitweb?p=processor-sdk%2Fpdk.git;a=commitdiff_plain;h=847e3b3022ff0102123ec646415faadb181420f0;ds=sidebyside PDK-6948: Board: Updated mmr config for am64x evm - MMR config is failing during the pinmux configuration in release mode. Order of execution for setting kick0 and kick1 is done in reverse which is causing unlock/lock failure. Added volatile specifier for kick address variables to avoid the optimization. --- diff --git a/packages/ti/board/src/am64x_evm/board_mmr.c b/packages/ti/board/src/am64x_evm/board_mmr.c index 7e623dafc..26639a041 100644 --- a/packages/ti/board/src/am64x_evm/board_mmr.c +++ b/packages/ti/board/src/am64x_evm/board_mmr.c @@ -145,7 +145,7 @@ typedef enum { #define MCU_PADCONFIG_MMR_BASE_ADDRESS CSL_MCU_PADCFG_CTRL0_CFG0_BASE #endif -uint32_t MMR_change_lock(mmr_lock_actions_t target_state, uint32_t * kick0); +uint32_t MMR_change_lock(mmr_lock_actions_t target_state, volatile uint32_t * kick0); uint32_t generic_mmr_change_all_locks(mmr_lock_actions_t target_state, uint32_t base_addr, const uint32_t * offset_array, uint32_t array_size); uint32_t MAIN_PADCONFIG_MMR_unlock_all(); @@ -173,8 +173,8 @@ uint32_t MCU_PLL_MMR_lock_all(); uint32_t MCU_PLL_MMR_change_all_locks(mmr_lock_actions_t target_state); - uint32_t MMR_change_lock(mmr_lock_actions_t target_state, uint32_t * kick0) { - uint32_t * kick1 = kick0 + 1; + uint32_t MMR_change_lock(mmr_lock_actions_t target_state, volatile uint32_t * kick0) { + volatile uint32_t * kick1 = kick0 + 1; uint32_t lock_state = (*kick0 & 0x1); //status is 1 if unlocked, 0 if locked //If lock state is not what we want, change it @@ -206,9 +206,9 @@ uint32_t MCU_PLL_MMR_change_all_locks(mmr_lock_actions_t target_state); uint32_t generic_mmr_change_all_locks(mmr_lock_actions_t target_state, uint32_t base_addr, const uint32_t * offset_array, uint32_t array_size) { uint32_t errors=0; uint32_t i=0; - uint32_t * kick0_ptr; + volatile uint32_t * kick0_ptr; for(i=0;i