From 449295eee39a1aad80f02703b70d1d4014e70a8c Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Thu, 13 Jul 2017 08:15:25 +0200 Subject: [PATCH] Bluetooth: controller: Revert fix for assert due to stale tick This reverts commit 3c23c6f53d69 ("Bluetooth: controller: Fix assert due to stale tick count") as this leads to connection events to be skipped, failing conformance tests. Signed-off-by: Vinayak Kariappa Chettimada --- subsys/bluetooth/controller/ll_sw/ctrl.c | 85 +++++++++--------------- 1 file changed, 31 insertions(+), 54 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/ctrl.c b/subsys/bluetooth/controller/ll_sw/ctrl.c index 801f1c1e8d8..8aeddcba0a9 100644 --- a/subsys/bluetooth/controller/ll_sw/ctrl.c +++ b/subsys/bluetooth/controller/ll_sw/ctrl.c @@ -4425,26 +4425,20 @@ static void event_stop(u32_t ticks_at_expire, u32_t remainder, LL_ASSERT(!retval); } -static u32_t event_common_prepare(u32_t ticks_at_expire, - u32_t remainder, - u32_t *ticks_xtal_to_start, - u32_t *ticks_active_to_start, - u32_t ticks_preempt_to_start, - u8_t ticker_id, - ticker_timeout_func ticker_timeout_fp, - void *context) +static void event_common_prepare(u32_t ticks_at_expire, + u32_t remainder, + u32_t *ticks_xtal_to_start, + u32_t *ticks_active_to_start, + u32_t ticks_preempt_to_start, + u8_t ticker_id, + ticker_timeout_func ticker_timeout_fp, + void *context) { u32_t ticker_status; u32_t _ticks_xtal_to_start = *ticks_xtal_to_start; u32_t _ticks_active_to_start = *ticks_active_to_start; u32_t ticks_to_start; - /* Check for stale ticks_at_expire */ - if (ticker_ticks_diff_get(ticker_ticks_now_get(), ticks_at_expire) > - TICKER_US_TO_TICKS(RADIO_TICKER_START_PART_US)) { - return 1; - } - /* in case this event is short prepare, xtal to start duration will be * active to start duration. */ @@ -4587,8 +4581,6 @@ static u32_t event_common_prepare(u32_t ticks_at_expire, LL_ASSERT(!retval); } #endif /* CONFIG_BLUETOOTH_CONTROLLER_XTAL_ADVANCED */ - - return 0; } static u8_t chan_sel_remap(u8_t *chan_map, u8_t chan_index) @@ -4867,23 +4859,19 @@ static void adv_scan_configure(u8_t phy, u8_t flags) void radio_event_adv_prepare(u32_t ticks_at_expire, u32_t remainder, u16_t lazy, void *context) { - u32_t err; - ARG_UNUSED(lazy); ARG_UNUSED(context); DEBUG_RADIO_PREPARE_A(1); LL_ASSERT(!_radio.ticker_id_prepare); + _radio.ticker_id_prepare = RADIO_TICKER_ID_ADV; - err = event_common_prepare(ticks_at_expire, remainder, - &_radio.advertiser.hdr.ticks_xtal_to_start, - &_radio.advertiser.hdr.ticks_active_to_start, - _radio.advertiser.hdr.ticks_preempt_to_start, - RADIO_TICKER_ID_ADV, event_adv, NULL); - if (!err) { - _radio.ticker_id_prepare = RADIO_TICKER_ID_ADV; - } + event_common_prepare(ticks_at_expire, remainder, + &_radio.advertiser.hdr.ticks_xtal_to_start, + &_radio.advertiser.hdr.ticks_active_to_start, + _radio.advertiser.hdr.ticks_preempt_to_start, + RADIO_TICKER_ID_ADV, event_adv, NULL); DEBUG_RADIO_PREPARE_A(0); } @@ -5096,26 +5084,20 @@ void event_adv_stop(u32_t ticks_at_expire, u32_t remainder, u16_t lazy, static void event_scan_prepare(u32_t ticks_at_expire, u32_t remainder, u16_t lazy, void *context) { - u32_t err; - ARG_UNUSED(lazy); ARG_UNUSED(context); DEBUG_RADIO_PREPARE_O(1); LL_ASSERT(!_radio.ticker_id_prepare); - - err = event_common_prepare(ticks_at_expire, remainder, - &_radio.scanner.hdr.ticks_xtal_to_start, - &_radio.scanner.hdr.ticks_active_to_start, - _radio.scanner.hdr.ticks_preempt_to_start, - RADIO_TICKER_ID_SCAN, event_scan, NULL); - if (err) { - goto skip; - } - _radio.ticker_id_prepare = RADIO_TICKER_ID_SCAN; + event_common_prepare(ticks_at_expire, remainder, + &_radio.scanner.hdr.ticks_xtal_to_start, + &_radio.scanner.hdr.ticks_active_to_start, + _radio.scanner.hdr.ticks_preempt_to_start, + RADIO_TICKER_ID_SCAN, event_scan, NULL); + #if defined(CONFIG_BLUETOOTH_CONTROLLER_SCHED_ADVANCED) /* calc next group in us for the anchor where first connection event * to be placed @@ -5151,7 +5133,6 @@ static void event_scan_prepare(u32_t ticks_at_expire, u32_t remainder, } #endif /* CONFIG_BLUETOOTH_CONTROLLER_SCHED_ADVANCED */ -skip: DEBUG_RADIO_PREPARE_O(0); } @@ -6507,9 +6488,10 @@ static void event_connection_prepare(u32_t ticks_at_expire, struct connection *conn) { u16_t event_counter; - u32_t err; LL_ASSERT(!_radio.ticker_id_prepare); + _radio.ticker_id_prepare = RADIO_TICKER_ID_FIRST_CONNECTION + + conn->handle; /* Calc window widening */ if (conn->role) { @@ -6643,22 +6625,17 @@ static void event_connection_prepare(u32_t ticks_at_expire, } #endif /* CONFIG_BLUETOOTH_CONTROLLER_DATA_LENGTH */ + /* Setup XTAL startup and radio active events */ + event_common_prepare(ticks_at_expire, remainder, + &conn->hdr.ticks_xtal_to_start, + &conn->hdr.ticks_active_to_start, + conn->hdr.ticks_preempt_to_start, + (RADIO_TICKER_ID_FIRST_CONNECTION + conn->handle), + conn->role ? event_slave : event_master, + conn); + /* store the next event counter value */ conn->event_counter = event_counter + 1; - - /* Setup XTAL startup and radio active events */ - err = event_common_prepare(ticks_at_expire, remainder, - &conn->hdr.ticks_xtal_to_start, - &conn->hdr.ticks_active_to_start, - conn->hdr.ticks_preempt_to_start, - (RADIO_TICKER_ID_FIRST_CONNECTION + - conn->handle), - conn->role ? event_slave : event_master, - conn); - if (!err) { - _radio.ticker_id_prepare = RADIO_TICKER_ID_FIRST_CONNECTION + - conn->handle; - } } static void connection_configure(struct connection *conn)