Bluetooth: controller: split: Fix radio in use during flash op

Fix a race condition in radio abort requested by flash
driver. It is possible that during abort function execution,
PPI setup to start radio fires. Hence, check explicitly in
cleanup function for radio being in use and disable it.

Fixes #22945.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2020-02-19 21:17:47 +05:30 committed by Alberto Escolar
commit ae9bf5e440
3 changed files with 12 additions and 0 deletions

View file

@ -574,6 +574,10 @@ static void isr_cleanup(void *param)
int err; int err;
radio_isr_set(isr_race, param); radio_isr_set(isr_race, param);
if (!radio_is_idle()) {
radio_disable();
}
radio_tmr_stop(); radio_tmr_stop();
err = lll_clk_off(); err = lll_clk_off();

View file

@ -632,6 +632,10 @@ static void isr_cleanup(void *param)
int err; int err;
radio_isr_set(isr_race, param); radio_isr_set(isr_race, param);
if (!radio_is_idle()) {
radio_disable();
}
radio_tmr_stop(); radio_tmr_stop();
err = lll_clk_off(); err = lll_clk_off();

View file

@ -636,6 +636,10 @@ static void isr_cleanup(void *param)
#endif /* !CONFIG_BT_CTLR_SCAN_INDICATION */ #endif /* !CONFIG_BT_CTLR_SCAN_INDICATION */
radio_isr_set(isr_race, param); radio_isr_set(isr_race, param);
if (!radio_is_idle()) {
radio_disable();
}
radio_tmr_stop(); radio_tmr_stop();
err = lll_clk_off(); err = lll_clk_off();