Skip to content

Commit 398b915

Browse files
cvinayakkartben
authored andcommitted
samples: Bluetooth: hci_ipc: Fix Newton's Cradle, reduce RAM usage
The required ISO Tx buffers have to match the Read Buffer Size values, otherwise the difference in the value cause a similar amount of buffers to be stalled in the IPC driver. Use reduced HEAP size to make room for increase in RAM usage. Signed-off-by: Vinayak Kariappa Chettimada <[email protected]>
1 parent 98130af commit 398b915

10 files changed

+56
-27
lines changed

samples/bluetooth/hci_ipc/nrf5340_cpunet_bis-bt_ll_sw_split.conf

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
@@ -40,7 +40,11 @@ CONFIG_BT_ISO_PERIPHERAL=n
4040

4141
# ISO Streams
4242
CONFIG_BT_ISO_MAX_CHAN=4
43-
CONFIG_BT_ISO_TX_BUF_COUNT=1
43+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
44+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
45+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
46+
# buffers get throttled. Hence, always have the value equal or greater.
47+
CONFIG_BT_ISO_TX_BUF_COUNT=12
4448
CONFIG_BT_ISO_RX_BUF_COUNT=1
4549

4650
# Controller

samples/bluetooth/hci_ipc/nrf5340_cpunet_bt_mesh-bt_ll_sw_split.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CONFIG_IPC_SERVICE=y
22
CONFIG_MBOX=y
33

4-
CONFIG_HEAP_MEM_POOL_SIZE=8192
4+
CONFIG_HEAP_MEM_POOL_SIZE=6144
55

66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512

samples/bluetooth/hci_ipc/nrf5340_cpunet_cis-bt_ll_sw_split.conf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
@@ -39,7 +39,11 @@ CONFIG_BT_ISO_PERIPHERAL=y
3939

4040
# ISO Streams
4141
CONFIG_BT_ISO_MAX_CHAN=4
42-
CONFIG_BT_ISO_TX_BUF_COUNT=1
42+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
43+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
44+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
45+
# buffers get throttled. Hence, always have the value equal or greater.
46+
CONFIG_BT_ISO_TX_BUF_COUNT=12
4347
CONFIG_BT_ISO_RX_BUF_COUNT=1
4448

4549
# Controller
@@ -82,8 +86,8 @@ CONFIG_BT_CTLR_LLCP_LOCAL_PROC_CTX_BUF_NUM=6
8286
# ISO Connection Oriented
8387
CONFIG_BT_CTLR_CENTRAL_ISO=y
8488
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
85-
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
8689
CONFIG_BT_CTLR_CONN_ISO_GROUPS=1
90+
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
8791
CONFIG_BT_CTLR_CONN_ISO_STREAMS_PER_GROUP=2
8892
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
8993
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251

samples/bluetooth/hci_ipc/nrf5340_cpunet_df-bt_ll_sw_split.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y

samples/bluetooth/hci_ipc/nrf5340_cpunet_iso-bt_ll_sw_split.conf

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99
CONFIG_CBPRINTF_REDUCED_INTEGRAL=y
1010

1111
CONFIG_ISR_TABLES_LOCAL_DECLARATION=y
@@ -46,7 +46,11 @@ CONFIG_BT_ISO_PERIPHERAL=y
4646
CONFIG_BT_ISO_TX_MTU=310
4747
CONFIG_BT_ISO_RX_MTU=310
4848
CONFIG_BT_ISO_MAX_CHAN=4
49-
CONFIG_BT_ISO_TX_BUF_COUNT=1
49+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
50+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
51+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
52+
# buffers get throttled. Hence, always have the value equal or greater.
53+
CONFIG_BT_ISO_TX_BUF_COUNT=8
5054
CONFIG_BT_ISO_RX_BUF_COUNT=1
5155

5256
# Controller
@@ -100,8 +104,8 @@ CONFIG_BT_CTLR_ADV_EXT=y
100104
CONFIG_BT_CTLR_ADV_PERIODIC=y
101105
CONFIG_BT_CTLR_SYNC_TRANSFER_SENDER=y
102106
CONFIG_BT_CTLR_ADV_ISO=y
103-
CONFIG_BT_CTLR_ADV_ISO_SET=2
104-
CONFIG_BT_CTLR_ADV_ISO_STREAM_COUNT=4
107+
CONFIG_BT_CTLR_ADV_ISO_SET=1
108+
CONFIG_BT_CTLR_ADV_ISO_STREAM_COUNT=2
105109
CONFIG_BT_CTLR_ADV_ISO_STREAM_MAX=2
106110
CONFIG_BT_CTLR_ADV_ISO_PDU_LEN_MAX=247
107111

@@ -118,16 +122,16 @@ CONFIG_BT_CTLR_SYNC_ISO_PDU_LEN_MAX=251
118122
# ISO Connection Oriented
119123
CONFIG_BT_CTLR_CENTRAL_ISO=y
120124
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
121-
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
122125
CONFIG_BT_CTLR_CONN_ISO_GROUPS=1
126+
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
123127
CONFIG_BT_CTLR_CONN_ISO_STREAMS_PER_GROUP=2
124128
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
125129
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251
126130
CONFIG_BT_CTLR_CONN_ISO_LOW_LATENCY_POLICY=y
127131

128132
# ISO Transmissions
129-
CONFIG_BT_CTLR_ISOAL_SOURCES=4
130-
CONFIG_BT_CTLR_ISO_TX_BUFFERS=12
133+
CONFIG_BT_CTLR_ISOAL_SOURCES=2
134+
CONFIG_BT_CTLR_ISO_TX_BUFFERS=8
131135
CONFIG_BT_CTLR_ISO_TX_BUFFER_SIZE=255
132136

133137
# ISO Receptions

samples/bluetooth/hci_ipc/nrf5340_cpunet_iso_broadcast-bt_ll_sw_split.conf

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
@@ -20,11 +20,18 @@ CONFIG_BT_OBSERVER=n
2020
CONFIG_BT_EXT_ADV=y
2121
CONFIG_BT_PER_ADV=y
2222
CONFIG_BT_ISO_BROADCASTER=y
23-
CONFIG_BT_ISO_MAX_CHAN=4
24-
CONFIG_BT_ISO_TX_BUF_COUNT=1
2523
CONFIG_BT_CENTRAL=n
2624
CONFIG_BT_PERIPHERAL=n
2725

26+
# ISO Streams
27+
CONFIG_BT_ISO_MAX_CHAN=4
28+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
29+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
30+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
31+
# buffers get throttled. Hence, always have the value equal or greater.
32+
CONFIG_BT_ISO_TX_BUF_COUNT=12
33+
CONFIG_BT_ISO_RX_BUF_COUNT=1
34+
2835
# ISO Broadcast Controller
2936
CONFIG_BT_LL_SW_SPLIT=y
3037
CONFIG_BT_CTLR_ADV_PERIODIC=y

samples/bluetooth/hci_ipc/nrf5340_cpunet_iso_central-bt_ll_sw_split.conf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
@@ -35,7 +35,11 @@ CONFIG_BT_ISO_PERIPHERAL=n
3535

3636
# ISO Streams
3737
CONFIG_BT_ISO_MAX_CHAN=2
38-
CONFIG_BT_ISO_TX_BUF_COUNT=1
38+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
39+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
40+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
41+
# buffers get throttled. Hence, always have the value equal or greater.
42+
CONFIG_BT_ISO_TX_BUF_COUNT=12
3943
CONFIG_BT_ISO_RX_BUF_COUNT=1
4044

4145
# Controller
@@ -46,8 +50,8 @@ CONFIG_BT_CTLR_SCAN_DATA_LEN_MAX=191
4650
# ISO Connection Oriented
4751
CONFIG_BT_CTLR_CENTRAL_ISO=y
4852
CONFIG_BT_CTLR_PERIPHERAL_ISO=n
49-
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
5053
CONFIG_BT_CTLR_CONN_ISO_GROUPS=1
54+
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
5155
CONFIG_BT_CTLR_CONN_ISO_STREAMS_PER_GROUP=2
5256
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
5357
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251

samples/bluetooth/hci_ipc/nrf5340_cpunet_iso_peripheral-bt_ll_sw_split.conf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
@@ -35,7 +35,11 @@ CONFIG_BT_ISO_PERIPHERAL=y
3535

3636
# ISO Streams
3737
CONFIG_BT_ISO_MAX_CHAN=2
38-
CONFIG_BT_ISO_TX_BUF_COUNT=1
38+
# In theory, CONFIG_BT_ISO_TX_BUF_COUNT=1, should be sufficient but this count
39+
# is used in the context of IPC which falls into a "Newton's Cradle" effect
40+
# where probably (CONFIG_BT_CTLR_ISO_TX_BUFFERS - CONFIG_BT_ISO_TX_BUF_COUNT)
41+
# buffers get throttled. Hence, always have the value equal or greater.
42+
CONFIG_BT_ISO_TX_BUF_COUNT=12
3943
CONFIG_BT_ISO_RX_BUF_COUNT=1
4044

4145
# Controller
@@ -46,8 +50,8 @@ CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=191
4650
# ISO Connection Oriented
4751
CONFIG_BT_CTLR_CENTRAL_ISO=n
4852
CONFIG_BT_CTLR_PERIPHERAL_ISO=y
49-
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
5053
CONFIG_BT_CTLR_CONN_ISO_GROUPS=1
54+
CONFIG_BT_CTLR_CONN_ISO_STREAMS=2
5155
CONFIG_BT_CTLR_CONN_ISO_STREAMS_PER_GROUP=2
5256
CONFIG_BT_CTLR_CONN_ISO_SDU_LEN_MAX=247
5357
CONFIG_BT_CTLR_CONN_ISO_PDU_LEN_MAX=251

samples/bluetooth/hci_ipc/nrf5340_cpunet_iso_receive-bt_ll_sw_split.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ CONFIG_ISR_STACK_SIZE=1024
55
CONFIG_IDLE_STACK_SIZE=256
66
CONFIG_MAIN_STACK_SIZE=512
77
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
8-
CONFIG_HEAP_MEM_POOL_SIZE=8192
8+
CONFIG_HEAP_MEM_POOL_SIZE=6144
99

1010
CONFIG_BT=y
1111
CONFIG_BT_HCI_RAW=y
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Reduce from 310 bytes, in nrf5340_cpunet_iso-bt_ll_sw_split.conf
2-
# to be able to fit in 64KB RAM.
3-
CONFIG_BT_ISO_TX_MTU=247
4-
CONFIG_BT_ISO_RX_MTU=251
2+
# to be able to fit in 64KB RAM, in case needed in the future.
3+
4+
# Example:
5+
# CONFIG_BT_ISO_TX_MTU=247
6+
# CONFIG_BT_ISO_RX_MTU=251

0 commit comments

Comments
 (0)