Skip to content

Commit 69d44fe

Browse files
committed
[nrf noup] Bluetooth: Controller: nrf54hx: Initial GRTC support
Added initial implementation for nrf54hx GRTC use for Radio. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
1 parent ab690ac commit 69d44fe

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

subsys/bluetooth/controller/Kconfig.ll_sw_split

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ config BT_CTLR_RX_PDU_META
938938

939939
config BT_CTLR_NRF_GRTC
940940
bool "Use nRF GRTC peripheral"
941-
depends on SOC_COMPATIBLE_NRF54LX
941+
depends on SOC_COMPATIBLE_NRF54LX || SOC_SERIES_NRF54HX
942942
select BT_TICKER_CNTR_FREE_RUNNING
943943
default y
944944
help

subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/cntr.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,18 @@ void cntr_init(void)
6060
* with ability to select/set IRQ group.
6161
* Shared interrupts is an option? It may add ISR latencies?
6262
*/
63+
#if defined(CONFIG_SOC_COMPATIBLE_NRF54LX)
6364
NRF_GRTC->INTENSET1 = HAL_CNTR_GRTC_INTENSET_COMPARE_TICKER_Msk;
6465
if (IS_ENABLED(CONFIG_SOC_SERIES_BSIM_NRF54LX)) {
6566
extern void nhw_GRTC_regw_sideeffects_INTENSET(uint32_t inst, uint32_t n);
6667

6768
nhw_GRTC_regw_sideeffects_INTENSET(0, 1);
6869
}
70+
#elif defined(CONFIG_SOC_SERIES_NRF54HX)
71+
NRF_GRTC->INTENSET6 = HAL_CNTR_GRTC_INTENSET_COMPARE_TICKER_Msk;
72+
#else
73+
#error "Unknown SoC."
74+
#endif
6975

7076
#if defined(CONFIG_BT_CTLR_NRF_GRTC_START)
7177
NRF_GRTC->MODE = ((GRTC_MODE_SYSCOUNTEREN_Enabled <<

subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#include "radio_nrf54lx.h"
4545
#elif defined(CONFIG_SOC_SERIES_NRF54HX)
4646
#include <hal/nrf_lrcconf.h>
47+
#include <hal/nrf_ipct.h>
4748
#include "radio_nrf54hx.h"
4849
#elif defined(CONFIG_BOARD_NRF52_BSIM)
4950
#include "radio_sim_nrf52.h"

subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_dppi.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ static inline void hal_event_timer_start_ppi_config(void)
108108
nrf_grtc_publish_set(NRF_GRTC, HAL_CNTR_GRTC_EVENT_COMPARE_RADIO,
109109
HAL_EVENT_TIMER_START_PPI);
110110

111+
#if defined(CONFIG_SOC_COMPATIBLE_NRF54LX)
111112
/* Setup PPIB receive publish */
112113
nrf_ppib_publish_set(NRF_PPIB11, HAL_PPIB_RECEIVE_EVENT_TIMER_START_PPI,
113114
HAL_EVENT_TIMER_START_PPI);
@@ -117,8 +118,26 @@ static inline void hal_event_timer_start_ppi_config(void)
117118
HAL_EVENT_TIMER_START_PPI);
118119

119120
/* Enable same DPPI in Peripheral domain */
120-
nrf_dppi_channels_enable(NRF_DPPIC20,
121-
BIT(HAL_EVENT_TIMER_START_PPI));
121+
nrf_dppi_channels_enable(NRF_DPPIC20, BIT(HAL_EVENT_TIMER_START_PPI));
122+
123+
#elif defined(CONFIG_SOC_SERIES_NRF54HX)
124+
/* Setup IPCT receive publish in radio domain */
125+
nrf_ipct_publish_set(NRF_IPCT, HAL_IPCT_RECEIVE_EVENT_TIMER_START_PPI,
126+
HAL_EVENT_TIMER_START_PPI);
127+
128+
/* Setup IPCT send subscribe in main domain */
129+
nrf_ipct_subscribe_set(NRF_IPCT130, HAL_IPCT_SEND_EVENT_TIMER_START_PPI,
130+
HAL_EVENT_TIMER_START_PPI);
131+
132+
nrf_ipct_shorts_enable(NRF_IPCT, IPCT_SHORTS_RECEIVE0_FLUSH0_Msk);
133+
134+
/* Enable same DPPI in main domain */
135+
nrf_dppi_channels_enable(NRF_DPPIC130, BIT(HAL_EVENT_TIMER_START_PPI));
136+
137+
/* Enable same DPPI in global domain */
138+
nrf_dppi_channels_enable(NRF_DPPIC132, BIT(HAL_EVENT_TIMER_START_PPI));
139+
#else
140+
#endif
122141

123142
#else /* !CONFIG_BT_CTLR_NRF_GRTC */
124143
nrf_rtc_publish_set(NRF_RTC, NRF_RTC_EVENT_COMPARE_2, HAL_EVENT_TIMER_START_PPI);

subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_dppi_resources.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,15 @@
3636
* Start event timer on RTC tick:
3737
* wire the RTC0 EVENTS_COMPARE[2] event to EVENT_TIMER TASKS_START task.
3838
*/
39-
#define HAL_EVENT_TIMER_START_PPI 8
39+
#define HAL_EVENT_TIMER_START_PPI 0
4040
#define HAL_PPIB_SEND_EVENT_TIMER_START_PPI \
4141
_CONCAT(NRF_PPIB_TASK_SEND_, HAL_EVENT_TIMER_START_PPI)
4242
#define HAL_PPIB_RECEIVE_EVENT_TIMER_START_PPI \
4343
_CONCAT(NRF_PPIB_EVENT_RECEIVE_, HAL_EVENT_TIMER_START_PPI)
44+
#define HAL_IPCT_SEND_EVENT_TIMER_START_PPI \
45+
_CONCAT(NRF_IPCT_TASK_SEND_, HAL_EVENT_TIMER_START_PPI)
46+
#define HAL_IPCT_RECEIVE_EVENT_TIMER_START_PPI \
47+
_CONCAT(NRF_IPCT_EVENT_RECEIVE_, HAL_EVENT_TIMER_START_PPI)
4448

4549
/*******************************************************************************
4650
* Capture event timer on Radio ready:

subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/swi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@
6767
#define HAL_SWI_RADIO_IRQ SWI2_IRQn
6868

6969
#if defined(CONFIG_BT_CTLR_NRF_GRTC)
70-
#define HAL_SWI_WORKER_IRQ GRTC_1_IRQn
71-
#define HAL_RTC_IRQn GRTC_1_IRQn
70+
#define HAL_SWI_WORKER_IRQ GRTC_2_IRQn
71+
#define HAL_RTC_IRQn GRTC_2_IRQn
7272
#else /* !CONFIG_BT_CTLR_NRF_GRTC */
7373
#define HAL_SWI_WORKER_IRQ RTC_IRQn
7474
#define HAL_RTC_IRQn RTC_IRQn

0 commit comments

Comments
 (0)