Skip to content

Commit e4d03a0

Browse files
committed
rpc: add disable CM4 autoboot function
1 parent d900363 commit e4d03a0

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

libraries/RPC/src/RPC_Primary.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,38 @@ static void OpenAMP_MPU_Config(void)
105105
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
106106
}
107107

108+
#define return_if_not_ok(x) do { int ret = x ; if (ret != HAL_OK) return; } while (0);
109+
110+
static void disableCM4Autoboot() {
111+
FLASH_OBProgramInitTypeDef OBInit;
112+
OBInit.Banks = FLASH_BANK_1;
113+
HAL_FLASHEx_OBGetConfig(&OBInit);
114+
if (OBInit.USERConfig & FLASH_OPTSR_BCM4) {
115+
OBInit.OptionType = OPTIONBYTE_USER;
116+
OBInit.USERType = OB_USER_BCM4;
117+
OBInit.USERConfig = 0;
118+
return_if_not_ok(HAL_FLASH_OB_Unlock());
119+
return_if_not_ok(HAL_FLASH_Unlock());
120+
return_if_not_ok(HAL_FLASHEx_OBProgram(&OBInit));
121+
return_if_not_ok(HAL_FLASH_OB_Launch());
122+
return_if_not_ok(HAL_FLASH_OB_Lock());
123+
return_if_not_ok(HAL_FLASH_Lock());
124+
printf("CM4 autoboot disabled\n");
125+
NVIC_SystemReset();
126+
return;
127+
}
128+
}
129+
108130
int RPC::begin() {
109131

110132
OpenAMP_MPU_Config();
111133

112134
//resource_table_load_from_flash();
113135
//HAL_SYSCFG_EnableCM4BOOT();
114136

137+
// Ideally this should execute only once
138+
disableCM4Autoboot();
139+
115140
eventThread = new rtos::Thread(osPriorityHigh);
116141
eventThread->start(&eventHandler);
117142

0 commit comments

Comments
 (0)