Skip to content

Commit

Permalink
[FL-1811] FuriHal: move core2 startup to hal init stage, prevent work…
Browse files Browse the repository at this point in the history
…ing with flash controller till core2 startup finish. #704
  • Loading branch information
skotopes committed Sep 15, 2021
1 parent 95d9140 commit 3db456d
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 35 deletions.
1 change: 0 additions & 1 deletion applications/bt/bt_service/bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
2 changes: 2 additions & 0 deletions firmware/targets/f6/ble-glue/app_entry.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
30 changes: 13 additions & 17 deletions firmware/targets/f6/furi-hal/furi-hal-bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions firmware/targets/f6/furi-hal/furi-hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,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();
Expand Down
2 changes: 2 additions & 0 deletions firmware/targets/f7/ble-glue/app_entry.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
30 changes: 13 additions & 17 deletions firmware/targets/f7/furi-hal/furi-hal-bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions firmware/targets/f7/furi-hal/furi-hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,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();
Expand Down

0 comments on commit 3db456d

Please sign in to comment.