Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 1 addition & 30 deletions drivers/bluetooth/hci/hci_silabs_efr32.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <sl_hci_common_transport.h>
#include <pa_conversions_efr32.h>
#include <rail.h>
#include <soc_radio.h>

#define LOG_LEVEL CONFIG_BT_HCI_DRIVER_LOG_LEVEL
#include <zephyr/logging/log.h>
Expand Down Expand Up @@ -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)
{
Expand Down
44 changes: 0 additions & 44 deletions modules/hal_silabs/simplicity_sdk/src/blob_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
}
1 change: 1 addition & 0 deletions soc/silabs/silabs_s2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
91 changes: 91 additions & 0 deletions soc/silabs/silabs_s2/soc_radio.c
Original file line number Diff line number Diff line change
@@ -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 <zephyr/kernel.h>
#include <rail.h>

#include <soc_radio.h>

#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);
}));
}
16 changes: 16 additions & 0 deletions soc/silabs/silabs_s2/soc_radio.h
Original file line number Diff line number Diff line change
@@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't feel like you have to add these obvious comments...

*/
void rail_isr_installer(void);
Loading