Skip to content

Commit f530ffc

Browse files
vtardy-stcfriedt
authored andcommitted
soc: stm32: add 802.15.4 support for STM32WBA
Add 802.15.4 support in hci_if files Signed-off-by: Vincent Tardy <[email protected]>
1 parent a5fe624 commit f530ffc

File tree

6 files changed

+78
-17
lines changed

6 files changed

+78
-17
lines changed

soc/st/stm32/stm32wbax/CMakeLists.txt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ zephyr_sources_ifdef(CONFIG_PM
1010
)
1111

1212
zephyr_sources_ifdef(CONFIG_POWEROFF poweroff.c)
13-
14-
if(CONFIG_BT_STM32WBA)
13+
if(CONFIG_BT_STM32WBA OR CONFIG_IEEE802154_STM32WBA)
1514
zephyr_include_directories(hci_if)
16-
1715
zephyr_sources(hci_if/linklayer_plat_adapt.c)
18-
zephyr_sources(hci_if/bleplat.c)
16+
zephyr_sources(hci_if/sys_wireless_plat.c)
1917
zephyr_sources(hci_if/host_stack_if.c)
2018
zephyr_sources(hci_if/ll_sys_if_adapt.c)
2119
zephyr_sources(hci_if/stm32_timer.c)

soc/st/stm32/stm32wbax/Kconfig.defconfig

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,29 @@ config SYSTEM_WORKQUEUE_STACK_SIZE
5050

5151
endif
5252

53+
config IEEE802154_STM32WBA
54+
select DYNAMIC_INTERRUPTS
55+
select DYNAMIC_DIRECT_INTERRUPTS
56+
select ENTROPY_GENERATOR
57+
select HAS_STM32LIB
58+
59+
if IEEE802154_STM32WBA
60+
61+
config FPU
62+
default y
63+
64+
choice LIBC_IMPLEMENTATION
65+
default NEWLIB_LIBC
66+
endchoice
67+
68+
config ENTROPY_STM32_CLK_CHECK
69+
default n
70+
71+
config SYSTEM_WORKQUEUE_STACK_SIZE
72+
default 2048
73+
74+
endif # IEEE802154_STM32WBA
75+
5376
if PM_S2RAM
5477

5578
config COUNTER

soc/st/stm32/stm32wbax/hci_if/host_stack_if.c

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,41 @@
77
#include <zephyr/kernel.h>
88
#include <zephyr/init.h>
99

10+
#include "app_conf.h"
11+
#if defined(CONFIG_BT_STM32WBA)
1012
#include "blestack.h"
1113
#include "bpka.h"
14+
#endif /* CONFIG_BT_STM32WBA */
1215
#include "ll_intf.h"
1316

1417
K_MUTEX_DEFINE(ble_ctrl_stack_mutex);
15-
struct k_work_q ble_ctrl_work_q, ll_work_q;
18+
#if defined(CONFIG_BT_STM32WBA)
19+
struct k_work_q ble_ctrl_work_q;
1620
struct k_work ble_ctrl_stack_work, bpka_work;
17-
21+
#endif /* CONFIG_BT_STM32WBA */
22+
struct k_work_q ll_work_q;
1823
uint8_t ll_state_busy;
1924

2025
/* TODO: More tests to be done to optimize thread stacks' sizes */
26+
#if defined(CONFIG_BT_STM32WBA)
2127
#define BLE_CTRL_THREAD_STACK_SIZE (256 * 7)
22-
#define LL_THREAD_STACK_SIZE (256 * 7)
2328
#define BLE_CTRL_THREAD_PRIO (14)
29+
#endif /* CONFIG_BT_STM32WBA */
30+
#define LL_THREAD_STACK_SIZE (256 * 7)
31+
2432
/* The LL thread has higher priority than the BLE CTRL thread and the Zephyr BLE stack threads */
2533
#define LL_THREAD_PRIO (4)
2634

35+
#if defined(CONFIG_BT_STM32WBA)
2736
K_THREAD_STACK_DEFINE(ble_ctrl_work_area, BLE_CTRL_THREAD_STACK_SIZE);
37+
#endif /* CONFIG_BT_STM32WBA */
2838
K_THREAD_STACK_DEFINE(ll_work_area, LL_THREAD_STACK_SIZE);
2939

40+
#if defined(CONFIG_BT_STM32WBA)
3041
void HostStack_Process(void);
42+
#endif /* CONFIG_BT_STM32WBA */
3143

44+
#if defined(CONFIG_BT_STM32WBA)
3245
static void ble_ctrl_stack_handler(struct k_work *work)
3346
{
3447
uint8_t running = 0x00;
@@ -53,25 +66,33 @@ static void bpka_work_handler(struct k_work *work)
5366
{
5467
BPKA_BG_Process();
5568
}
69+
#endif /* CONFIG_BT_STM32WBA */
5670

57-
static int stm32wba_ble_ctrl_init(void)
71+
static int stm32wba_ctrl_init(void)
5872
{
73+
struct k_work_queue_config ll_cfg = {.name = "LL thread"};
74+
75+
#if defined(CONFIG_BT_STM32WBA)
76+
struct k_work_queue_config ble_ctrl_cfg = {.name = "ble ctrl thread"};
77+
5978
k_work_queue_init(&ble_ctrl_work_q);
6079
k_work_queue_start(&ble_ctrl_work_q, ble_ctrl_work_area,
6180
K_THREAD_STACK_SIZEOF(ble_ctrl_work_area),
62-
BLE_CTRL_THREAD_PRIO, NULL);
81+
BLE_CTRL_THREAD_PRIO, &ble_ctrl_cfg);
82+
83+
k_work_init(&ble_ctrl_stack_work, &ble_ctrl_stack_handler);
84+
k_work_init(&bpka_work, &bpka_work_handler);
85+
#endif /* CONFIG_BT_STM32WBA */
6386

6487
k_work_queue_init(&ll_work_q);
6588
k_work_queue_start(&ll_work_q, ll_work_area,
6689
K_THREAD_STACK_SIZEOF(ll_work_area),
67-
LL_THREAD_PRIO, NULL);
68-
69-
k_work_init(&ble_ctrl_stack_work, &ble_ctrl_stack_handler);
70-
k_work_init(&bpka_work, &bpka_work_handler);
90+
LL_THREAD_PRIO, &ll_cfg);
7191

7292
return 0;
7393
}
7494

95+
#if defined(CONFIG_BT_STM32WBA)
7596
void HostStack_Process(void)
7697
{
7798
k_work_submit_to_queue(&ble_ctrl_work_q, &ble_ctrl_stack_work);
@@ -81,5 +102,6 @@ void BPKACB_Process(void)
81102
{
82103
k_work_submit_to_queue(&ble_ctrl_work_q, &bpka_work);
83104
}
105+
#endif /* CONFIG_BT_STM32WBA */
84106

85-
SYS_INIT(stm32wba_ble_ctrl_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);
107+
SYS_INIT(stm32wba_ctrl_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);

soc/st/stm32/stm32wbax/hci_if/linklayer_plat_adapt.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ void LINKLAYER_PLAT_DisableOSContextSwitch(void)
285285
**/
286286
}
287287

288+
uint32_t LINKLAYER_PLAT_GetSTCompanyID(void)
289+
{
290+
return LL_FLASH_GetSTCompanyID();
291+
}
292+
293+
uint32_t LINKLAYER_PLAT_GetUDN(void)
294+
{
295+
return LL_FLASH_GetUDN();
296+
}
297+
288298
void LINKLAYER_PLAT_EnableBackupDomainAccess(void)
289299
{
290300
stm32_backup_domain_enable_access();

soc/st/stm32/stm32wbax/hci_if/ll_sys_if_adapt.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ LOG_MODULE_REGISTER(ll_sys_if_adapt);
1515
#if defined(CONFIG_BT_STM32WBA_USE_TEMP_BASED_CALIB)
1616
#include <zephyr/drivers/sensor.h>
1717
#endif /* defined(CONFIG_BT_STM32WBA_USE_TEMP_BASED_CALIB) */
18-
18+
#if defined(CONFIG_BT_STM32WBA)
1919
extern struct k_mutex ble_ctrl_stack_mutex;
20+
#endif /* CONFIG_BT_STM32WBA */
2021
extern struct k_work_q ll_work_q;
2122
struct k_work ll_sys_work;
2223

@@ -27,9 +28,13 @@ static struct k_work temp_calibration_work;
2728

2829
static void ll_sys_bg_process_handler(struct k_work *work)
2930
{
31+
#if defined(CONFIG_BT_STM32WBA)
3032
k_mutex_lock(&ble_ctrl_stack_mutex, K_FOREVER);
3133
ll_sys_bg_process();
3234
k_mutex_unlock(&ble_ctrl_stack_mutex);
35+
#else
36+
ll_sys_bg_process();
37+
#endif /* CONFIG_BT_STM32WBA */
3338
}
3439

3540
void ll_sys_schedule_bg_process(void)

soc/st/stm32/stm32wbax/hci_if/bleplat.c renamed to soc/st/stm32/stm32wbax/hci_if/sys_wireless_plat.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111
#include <zephyr/drivers/clock_control/stm32_clock_control.h>
1212

1313
#include <stm32_ll_rng.h>
14-
14+
#if defined(CONFIG_BT_STM32WBA)
1515
#include "bleplat.h"
1616
#include "bpka.h"
17+
#endif /* CONFIG_BT_STM32WBA */
1718
#include "linklayer_plat.h"
1819

1920
#define LOG_LEVEL CONFIG_SOC_LOG_LEVEL
20-
LOG_MODULE_REGISTER(ble_plat);
21+
LOG_MODULE_REGISTER(sys_wireless_plat);
2122

2223
RAMCFG_HandleTypeDef hramcfg_SRAM1;
2324
const struct device *rng_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_entropy));
@@ -30,6 +31,7 @@ struct entropy_stm32_rng_dev_cfg {
3031
struct stm32_pclken *pclken;
3132
};
3233

34+
#if defined(CONFIG_BT_STM32WBA)
3335
void BLEPLAT_Init(void)
3436
{
3537
BPKA_Reset();
@@ -70,6 +72,7 @@ void BPKACB_Complete(void)
7072
{
7173
BLEPLATCB_PkaComplete();
7274
}
75+
#endif /* CONFIG_BT_STM32WBA */
7376

7477
void MX_RAMCFG_Init(void)
7578
{

0 commit comments

Comments
 (0)