Skip to content

Commit 5f0a5ec

Browse files
Marek Matejmarekmatej
authored andcommitted
zephyr: esp32s3: SPIRAM option for Wi-Fi adapter
Use SPIRAM option when allocating Wi-Fi buffers. Signed-off-by: Marek Matej <[email protected]>
1 parent fa60a7a commit 5f0a5ec

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

zephyr/esp32s3/src/coex/esp_coex_adapter.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void IRAM_ATTR esp_coex_common_timer_arm_us_wrapper(void *ptimer, uint32_t us, b
125125

126126
void * IRAM_ATTR esp_coex_common_malloc_internal_wrapper(size_t size)
127127
{
128-
return wifi_malloc(size);
128+
return k_malloc(size);
129129
}
130130

131131
uint32_t esp_coex_common_clk_slowclk_cal_get_wrapper(void)

zephyr/esp32s3/src/wifi/esp_wifi_adapter.c

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static void *wifi_msgq_buffer;
4949

5050
static struct k_thread wifi_task_handle;
5151

52-
static void esp_wifi_free(void *mem);
52+
static void wifi_free(void *mem);
5353

5454
IRAM_ATTR void *wifi_malloc(size_t size)
5555
{
@@ -81,16 +81,12 @@ IRAM_ATTR void *wifi_calloc(size_t n, size_t size)
8181

8282
static void *IRAM_ATTR wifi_zalloc_wrapper(size_t size)
8383
{
84-
void *ptr = wifi_malloc(size);
85-
86-
if (ptr) {
87-
memset(ptr, 0, size);
88-
}
84+
void *ptr = wifi_calloc(1, size);
8985

9086
return ptr;
9187
}
9288

93-
static void esp_wifi_free(void *mem)
89+
static void wifi_free(void *mem)
9490
{
9591
esp_wifi_free_func(mem);
9692
}
@@ -99,21 +95,24 @@ wifi_static_queue_t *wifi_create_queue(int queue_len, int item_size)
9995
{
10096
wifi_static_queue_t *queue = NULL;
10197

102-
queue = (wifi_static_queue_t *) wifi_malloc(sizeof(wifi_static_queue_t));
98+
queue = (wifi_static_queue_t *) k_malloc(sizeof(wifi_static_queue_t));
99+
103100
if (!queue) {
104101
LOG_ERR("msg buffer allocation failed");
105102
return NULL;
106103
}
107104

108-
wifi_msgq_buffer = wifi_malloc(queue_len * item_size);
105+
wifi_msgq_buffer = k_malloc(queue_len * item_size);
106+
109107
if (wifi_msgq_buffer == NULL) {
110108
LOG_ERR("msg buffer allocation failed");
111109
return NULL;
112110
}
113111

114-
queue->handle = wifi_malloc(sizeof(struct k_msgq));
112+
queue->handle = k_malloc(sizeof(struct k_msgq));
113+
115114
if (queue->handle == NULL) {
116-
esp_wifi_free(wifi_msgq_buffer);
115+
k_free(wifi_msgq_buffer);
117116
LOG_ERR("queue handle allocation failed");
118117
return NULL;
119118
}
@@ -126,8 +125,8 @@ wifi_static_queue_t *wifi_create_queue(int queue_len, int item_size)
126125
void wifi_delete_queue(wifi_static_queue_t *queue)
127126
{
128127
if (queue) {
129-
esp_wifi_free(queue->handle);
130-
esp_wifi_free(queue);
128+
k_free(queue->handle);
129+
k_free(queue);
131130
}
132131
}
133132

@@ -214,7 +213,7 @@ static void *mutex_create_wrapper(void)
214213

215214
static void mutex_delete_wrapper(void *mutex)
216215
{
217-
esp_wifi_free(mutex);
216+
wifi_free(mutex);
218217
}
219218

220219
static int32_t IRAM_ATTR mutex_lock_wrapper(void *mutex)
@@ -250,7 +249,7 @@ static void *queue_create_wrapper(uint32_t queue_len, uint32_t item_size)
250249
static void queue_delete_wrapper(void *handle)
251250
{
252251
if (handle != NULL) {
253-
esp_wifi_free(handle);
252+
wifi_free(handle);
254253
}
255254
}
256255

@@ -408,12 +407,12 @@ static void *IRAM_ATTR realloc_internal_wrapper(void *ptr, size_t size)
408407

409408
static void *IRAM_ATTR calloc_internal_wrapper(size_t n, size_t size)
410409
{
411-
return wifi_calloc(n, size);
410+
return k_calloc(n, size);
412411
}
413412

414413
static void *IRAM_ATTR zalloc_internal_wrapper(size_t size)
415414
{
416-
return wifi_calloc(1, size);
415+
return k_calloc(1, size);
417416
}
418417

419418
uint32_t uxQueueMessagesWaiting(void *queue)
@@ -746,7 +745,7 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
746745
._ints_off = intr_off,
747746
._is_from_isr = k_is_in_isr,
748747
._spin_lock_create = esp_coex_common_spin_lock_create_wrapper,
749-
._spin_lock_delete = esp_wifi_free,
748+
._spin_lock_delete = wifi_free,
750749
._wifi_int_disable = esp_coex_common_int_disable_wrapper,
751750
._wifi_int_restore = esp_coex_common_int_restore_wrapper,
752751
._task_yield_from_isr = esp_coex_common_task_yield_from_isr_wrapper,
@@ -781,7 +780,7 @@ wifi_osi_funcs_t g_wifi_osi_funcs = {
781780
._task_get_current_task = (void *(*)(void))k_current_get,
782781
._task_get_max_priority = task_get_max_priority_wrapper,
783782
._malloc = wifi_malloc,
784-
._free = esp_wifi_free,
783+
._free = wifi_free,
785784
._event_post = esp_event_post_wrapper,
786785
._get_free_heap_size = esp_get_free_heap_size,
787786
._rand = sys_rand32_get,

zephyr/port/include/esp_heap_adapter.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
#pragma once
88

9+
#include <soc.h>
910
#include <string.h>
1011
#include <zephyr/multi_heap/shared_multi_heap.h>
1112

@@ -23,6 +24,8 @@
2324

2425
#elif defined(CONFIG_ESP_WIFI_HEAP_SPIRAM)
2526

27+
#define IS_DRAM(addr) ((uint32_t)addr >= SOC_DRAM_LOW && (uint32_t)addr < SOC_DRAM_HIGH)
28+
2629
static inline void* esp_wifi_malloc_func(size_t _size)
2730
{
2831
return shared_multi_heap_aligned_alloc(SMH_REG_ATTR_EXTERNAL, 16, _size);
@@ -39,7 +42,11 @@ static inline void* esp_wifi_calloc_func(size_t _nmemb, size_t _size)
3942

4043
static inline void esp_wifi_free_func(void *_mem)
4144
{
42-
shared_multi_heap_free(_mem);
45+
if (IS_DRAM(_mem)) {
46+
k_free(_mem);
47+
} else {
48+
shared_multi_heap_free(_mem);
49+
}
4350
}
4451

4552
static inline void* os_wpa_malloc_func(size_t _size)
@@ -50,21 +57,22 @@ static inline void* os_wpa_malloc_func(size_t _size)
5057
static inline void* os_wpa_realloc_func(void *_ptr, size_t _size)
5158
{
5259
if (_ptr) {
53-
shared_multi_heap_free(_ptr);
60+
esp_wifi_free_func(_ptr);
5461
}
55-
return shared_multi_heap_aligned_alloc(SMH_REG_ATTR_EXTERNAL, 16, _size);
62+
return os_wpa_malloc_func(_size);
5663
}
64+
5765
static inline void* os_wpa_calloc_func(size_t _nmemb, size_t _size)
5866
{
59-
void *p = shared_multi_heap_aligned_alloc(SMH_REG_ATTR_EXTERNAL, 16, _nmemb * _size);
67+
void *p = os_wpa_malloc_func(_nmemb * _size);
6068
if (p) {
6169
memset(p, 0, _nmemb * _size);
6270
}
6371
return p;
6472
}
6573
static inline void os_wpa_free_func(void *_mem)
6674
{
67-
shared_multi_heap_free(_mem);
75+
esp_wifi_free_func(_mem);
6876
}
6977

7078
#else

0 commit comments

Comments
 (0)