From 72ca76097a9752cc539c22cb8961ee481939eac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=82=E3=81=8F?= Date: Wed, 15 Sep 2021 17:40:09 +0300 Subject: [PATCH] [FL-1811] FuriHal: move core2 startup to hal init stage, prevent working with flash controller till core2 startup finish. #704 --- applications/bt/bt_service/bt.c | 1 - firmware/targets/f6/ble-glue/app_entry.c | 2 ++ firmware/targets/f6/furi-hal/furi-hal-bt.c | 30 ++++++++++------------ firmware/targets/f6/furi-hal/furi-hal.c | 1 + firmware/targets/f7/ble-glue/app_entry.c | 2 ++ firmware/targets/f7/furi-hal/furi-hal-bt.c | 30 ++++++++++------------ firmware/targets/f7/furi-hal/furi-hal.c | 1 + 7 files changed, 32 insertions(+), 35 deletions(-) diff --git a/applications/bt/bt_service/bt.c b/applications/bt/bt_service/bt.c index 0c7dac90..09094d17 100755 --- a/applications/bt/bt_service/bt.c +++ b/applications/bt/bt_service/bt.c @@ -62,7 +62,6 @@ Bt* bt_alloc() { int32_t bt_srv() { Bt* bt = bt_alloc(); furi_record_create("bt", bt); - furi_hal_bt_init(); if(!furi_hal_bt_wait_startup()) { FURI_LOG_E(BT_SERVICE_TAG, "Core2 startup failed"); diff --git a/firmware/targets/f6/ble-glue/app_entry.c b/firmware/targets/f6/ble-glue/app_entry.c index f2367263..431fed6a 100644 --- a/firmware/targets/f6/ble-glue/app_entry.c +++ b/firmware/targets/f6/ble-glue/app_entry.c @@ -138,8 +138,10 @@ static void APPE_SysUserEvtRx( void * pPayload ) { // APPD_EnableCPU2( ); if (APP_BLE_Init()) { + FURI_LOG_I("Core2", "BLE stack started"); ble_glue_status = BleGlueStatusStarted; } else { + FURI_LOG_E("Core2", "BLE stack startup failed"); ble_glue_status = BleGlueStatusBroken; } furi_hal_power_insomnia_exit(); diff --git a/firmware/targets/f6/furi-hal/furi-hal-bt.c b/firmware/targets/f6/furi-hal/furi-hal-bt.c index 36bd1fa2..4d5e0674 100644 --- a/firmware/targets/f6/furi-hal/furi-hal-bt.c +++ b/firmware/targets/f6/furi-hal/furi-hal-bt.c @@ -46,7 +46,7 @@ bool furi_hal_bt_is_alive() { bool furi_hal_bt_wait_startup() { uint8_t counter = 0; - while (APPE_Status() == BleGlueStatusStartup) { + while (!(APPE_Status() == BleGlueStatusStarted || APPE_Status() == BleGlueStatusBroken)) { osDelay(10); counter++; if (counter > 1000) { @@ -60,27 +60,23 @@ bool furi_hal_bt_lock_flash() { if (!furi_hal_bt_wait_startup()) { return false; } - if (APPE_Status() == BleGlueStatusUninitialized) { - HAL_FLASH_Unlock(); - } else { - while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) { - osDelay(1); - } - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON); - HAL_FLASH_Unlock(); - while(LL_FLASH_IsOperationSuspended()) {}; + + while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) { + osDelay(1); } + + SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON); + HAL_FLASH_Unlock(); + + while(LL_FLASH_IsOperationSuspended()) {}; + return true; } void furi_hal_bt_unlock_flash() { - if (APPE_Status() == BleGlueStatusUninitialized) { - HAL_FLASH_Lock(); - } else { - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF); - HAL_FLASH_Lock(); - HAL_HSEM_Release(CFG_HW_FLASH_SEMID, HSEM_CPU1_COREID); - } + SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF); + HAL_FLASH_Lock(); + HAL_HSEM_Release(CFG_HW_FLASH_SEMID, HSEM_CPU1_COREID); } void furi_hal_bt_start_tone_tx(uint8_t channel, uint8_t power) { diff --git a/firmware/targets/f6/furi-hal/furi-hal.c b/firmware/targets/f6/furi-hal/furi-hal.c index 6ea90317..2ec06dd4 100644 --- a/firmware/targets/f6/furi-hal/furi-hal.c +++ b/firmware/targets/f6/furi-hal/furi-hal.c @@ -47,6 +47,7 @@ void furi_hal_init() { furi_hal_subghz_init(); furi_hal_nfc_init(); furi_hal_rfid_init(); + furi_hal_bt_init(); // FreeRTOS glue furi_hal_os_init(); diff --git a/firmware/targets/f7/ble-glue/app_entry.c b/firmware/targets/f7/ble-glue/app_entry.c index f2367263..431fed6a 100644 --- a/firmware/targets/f7/ble-glue/app_entry.c +++ b/firmware/targets/f7/ble-glue/app_entry.c @@ -138,8 +138,10 @@ static void APPE_SysUserEvtRx( void * pPayload ) { // APPD_EnableCPU2( ); if (APP_BLE_Init()) { + FURI_LOG_I("Core2", "BLE stack started"); ble_glue_status = BleGlueStatusStarted; } else { + FURI_LOG_E("Core2", "BLE stack startup failed"); ble_glue_status = BleGlueStatusBroken; } furi_hal_power_insomnia_exit(); diff --git a/firmware/targets/f7/furi-hal/furi-hal-bt.c b/firmware/targets/f7/furi-hal/furi-hal-bt.c index 36bd1fa2..4d5e0674 100644 --- a/firmware/targets/f7/furi-hal/furi-hal-bt.c +++ b/firmware/targets/f7/furi-hal/furi-hal-bt.c @@ -46,7 +46,7 @@ bool furi_hal_bt_is_alive() { bool furi_hal_bt_wait_startup() { uint8_t counter = 0; - while (APPE_Status() == BleGlueStatusStartup) { + while (!(APPE_Status() == BleGlueStatusStarted || APPE_Status() == BleGlueStatusBroken)) { osDelay(10); counter++; if (counter > 1000) { @@ -60,27 +60,23 @@ bool furi_hal_bt_lock_flash() { if (!furi_hal_bt_wait_startup()) { return false; } - if (APPE_Status() == BleGlueStatusUninitialized) { - HAL_FLASH_Unlock(); - } else { - while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) { - osDelay(1); - } - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON); - HAL_FLASH_Unlock(); - while(LL_FLASH_IsOperationSuspended()) {}; + + while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) { + osDelay(1); } + + SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_ON); + HAL_FLASH_Unlock(); + + while(LL_FLASH_IsOperationSuspended()) {}; + return true; } void furi_hal_bt_unlock_flash() { - if (APPE_Status() == BleGlueStatusUninitialized) { - HAL_FLASH_Lock(); - } else { - SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF); - HAL_FLASH_Lock(); - HAL_HSEM_Release(CFG_HW_FLASH_SEMID, HSEM_CPU1_COREID); - } + SHCI_C2_FLASH_EraseActivity(ERASE_ACTIVITY_OFF); + HAL_FLASH_Lock(); + HAL_HSEM_Release(CFG_HW_FLASH_SEMID, HSEM_CPU1_COREID); } void furi_hal_bt_start_tone_tx(uint8_t channel, uint8_t power) { diff --git a/firmware/targets/f7/furi-hal/furi-hal.c b/firmware/targets/f7/furi-hal/furi-hal.c index 6ea90317..2ec06dd4 100644 --- a/firmware/targets/f7/furi-hal/furi-hal.c +++ b/firmware/targets/f7/furi-hal/furi-hal.c @@ -47,6 +47,7 @@ void furi_hal_init() { furi_hal_subghz_init(); furi_hal_nfc_init(); furi_hal_rfid_init(); + furi_hal_bt_init(); // FreeRTOS glue furi_hal_os_init();