diff --git a/drivers/bluetooth/hci/hci_silabs_efr32.c b/drivers/bluetooth/hci/hci_silabs_efr32.c index 8710c54b5ca24..5f6037f63ad52 100644 --- a/drivers/bluetooth/hci/hci_silabs_efr32.c +++ b/drivers/bluetooth/hci/hci_silabs_efr32.c @@ -11,6 +11,7 @@ #include #include #include +#include #define LOG_LEVEL CONFIG_BT_HCI_DRIVER_LOG_LEVEL #include @@ -55,36 +56,6 @@ void BTLE_LL_Process(uint32_t events); int16_t BTLE_LL_SetMaxPower(int16_t power); bool sli_pending_btctrl_events(void); -#define RADIO_IRQN(name) DT_IRQ_BY_NAME(DT_NODELABEL(radio), name, irq) -#define RADIO_IRQ_PRIO(name) DT_IRQ_BY_NAME(DT_NODELABEL(radio), name, priority) - -void rail_isr_installer(void) -{ - IRQ_CONNECT(RADIO_IRQN(agc), RADIO_IRQ_PRIO(agc), AGC_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(bufc), RADIO_IRQ_PRIO(bufc), BUFC_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(frc_pri), RADIO_IRQ_PRIO(frc_pri), FRC_PRI_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(frc), RADIO_IRQ_PRIO(frc), FRC_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(modem), RADIO_IRQ_PRIO(modem), MODEM_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(protimer), RADIO_IRQ_PRIO(protimer), PROTIMER_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(rac_rsm), RADIO_IRQ_PRIO(rac_rsm), RAC_RSM_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(rac_seq), RADIO_IRQ_PRIO(rac_seq), RAC_SEQ_IRQHandler, NULL, 0); - IRQ_CONNECT(RADIO_IRQN(synth), RADIO_IRQ_PRIO(synth), SYNTH_IRQHandler, NULL, 0); - - /* Depending on the chip family, either HOSTMAILBOX, RDMAILBOX or neither is present */ - IF_ENABLED(DT_IRQ_HAS_NAME(DT_NODELABEL(radio), hostmailbox), ({ - IRQ_CONNECT(RADIO_IRQN(hostmailbox), - RADIO_IRQ_PRIO(hostmailbox), - HOSTMAILBOX_IRQHandler, - NULL, 0); - })); - IF_ENABLED(DT_IRQ_HAS_NAME(DT_NODELABEL(radio), rdmailbox), ({ - IRQ_CONNECT(RADIO_IRQN(rdmailbox), - RADIO_IRQ_PRIO(rdmailbox), - RDMAILBOX_IRQHandler, - NULL, 0); - })); -} - static bool slz_is_evt_discardable(const struct bt_hci_evt_hdr *hdr, const uint8_t *params, int16_t params_len) { diff --git a/modules/hal_silabs/simplicity_sdk/src/blob_stubs.c b/modules/hal_silabs/simplicity_sdk/src/blob_stubs.c index 236e0cd5b10b9..f52ab30225c1d 100644 --- a/modules/hal_silabs/simplicity_sdk/src/blob_stubs.c +++ b/modules/hal_silabs/simplicity_sdk/src/blob_stubs.c @@ -58,47 +58,3 @@ void *sli_btctrl_get_radio_context_handle(void) { return 0; } - -void AGC_IRQHandler(void) -{ -} - -void BUFC_IRQHandler(void) -{ -} - -void FRC_IRQHandler(void) -{ -} - -void FRC_PRI_IRQHandler(void) -{ -} - -void MODEM_IRQHandler(void) -{ -} - -void PROTIMER_IRQHandler(void) -{ -} - -void RAC_RSM_IRQHandler(void) -{ -} - -void RAC_SEQ_IRQHandler(void) -{ -} - -void SYNTH_IRQHandler(void) -{ -} - -void HOSTMAILBOX_IRQHandler(void) -{ -} - -void RDMAILBOX_IRQHandler(void) -{ -} diff --git a/soc/silabs/silabs_s2/CMakeLists.txt b/soc/silabs/silabs_s2/CMakeLists.txt index d5228429c4fd4..2c8f637ed9b50 100644 --- a/soc/silabs/silabs_s2/CMakeLists.txt +++ b/soc/silabs/silabs_s2/CMakeLists.txt @@ -2,5 +2,6 @@ # SPDX-License-Identifier: Apache-2.0 zephyr_sources(soc.c) +zephyr_sources(soc_radio.c) zephyr_sources_ifdef(CONFIG_SOC_SILABS_IMAGE_PROPERTIES soc_image_properties.c) zephyr_linker_sources_ifdef(CONFIG_SOC_SILABS_IMAGE_PROPERTIES RODATA soc_image_properties.ld) diff --git a/soc/silabs/silabs_s2/soc_radio.c b/soc/silabs/silabs_s2/soc_radio.c new file mode 100644 index 0000000000000..77eee0c6b6ec5 --- /dev/null +++ b/soc/silabs/silabs_s2/soc_radio.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2025 Silicon Laboratories Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief Radio initialization for Silicon Labs Series 2 products + */ + +#include +#include + +#include + +#define RADIO_IRQN(name) DT_IRQ_BY_NAME(DT_NODELABEL(radio), name, irq) +#define RADIO_IRQ_PRIO(name) DT_IRQ_BY_NAME(DT_NODELABEL(radio), name, priority) + +#ifdef CONFIG_BUILD_ONLY_NO_BLOBS +void AGC_IRQHandler(void) +{ +} + +void BUFC_IRQHandler(void) +{ +} + +void FRC_IRQHandler(void) +{ +} + +void FRC_PRI_IRQHandler(void) +{ +} + +void MODEM_IRQHandler(void) +{ +} + +void PROTIMER_IRQHandler(void) +{ +} + +void RAC_RSM_IRQHandler(void) +{ +} + +void RAC_SEQ_IRQHandler(void) +{ +} + +void SYNTH_IRQHandler(void) +{ +} + +void HOSTMAILBOX_IRQHandler(void) +{ +} + +void RDMAILBOX_IRQHandler(void) +{ +} +#endif /* CONFIG_BUILD_ONLY_NO_BLOBS */ + +void rail_isr_installer(void) +{ + IRQ_CONNECT(RADIO_IRQN(agc), RADIO_IRQ_PRIO(agc), AGC_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(bufc), RADIO_IRQ_PRIO(bufc), BUFC_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(frc_pri), RADIO_IRQ_PRIO(frc_pri), FRC_PRI_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(frc), RADIO_IRQ_PRIO(frc), FRC_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(modem), RADIO_IRQ_PRIO(modem), MODEM_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(protimer), RADIO_IRQ_PRIO(protimer), PROTIMER_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(rac_rsm), RADIO_IRQ_PRIO(rac_rsm), RAC_RSM_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(rac_seq), RADIO_IRQ_PRIO(rac_seq), RAC_SEQ_IRQHandler, NULL, 0); + IRQ_CONNECT(RADIO_IRQN(synth), RADIO_IRQ_PRIO(synth), SYNTH_IRQHandler, NULL, 0); + + /* Depending on the chip family, either HOSTMAILBOX, RDMAILBOX or neither is present */ + IF_ENABLED(DT_IRQ_HAS_NAME(DT_NODELABEL(radio), hostmailbox), ({ + IRQ_CONNECT(RADIO_IRQN(hostmailbox), + RADIO_IRQ_PRIO(hostmailbox), + HOSTMAILBOX_IRQHandler, + NULL, 0); + })); + IF_ENABLED(DT_IRQ_HAS_NAME(DT_NODELABEL(radio), rdmailbox), ({ + IRQ_CONNECT(RADIO_IRQN(rdmailbox), + RADIO_IRQ_PRIO(rdmailbox), + RDMAILBOX_IRQHandler, + NULL, 0); + })); +} diff --git a/soc/silabs/silabs_s2/soc_radio.h b/soc/silabs/silabs_s2/soc_radio.h new file mode 100644 index 0000000000000..fb1db200e225a --- /dev/null +++ b/soc/silabs/silabs_s2/soc_radio.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2025 Silicon Laboratories Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief Declare radio functions for Silicon Labs Series 2 products + * + */ + +/** + * @brief Register RAIL IRQ handlers + */ +void rail_isr_installer(void);