/* * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #include #include #define PSRAM_ADDR (DT_REG_ADDR(DT_NODELABEL(psram0))) extern int _spiram_heap_start; extern int _ext_ram_bss_start; extern int _ext_ram_bss_end; struct shared_multi_heap_region smh_psram = { .addr = (uintptr_t)&_spiram_heap_start, .size = CONFIG_ESP_SPIRAM_SIZE, .attr = SMH_REG_ATTR_EXTERNAL, }; int esp_psram_smh_init(void) { shared_multi_heap_pool_init(); smh_psram.size = CONFIG_ESP_SPIRAM_SIZE - ((int)&_spiram_heap_start - PSRAM_ADDR); return shared_multi_heap_add(&smh_psram, NULL); } void esp_init_psram(void) { if (esp_psram_init()) { ets_printf("Failed to Initialize external RAM, aborting.\n"); return; } if (esp_psram_get_size() < CONFIG_ESP_SPIRAM_SIZE) { ets_printf("External RAM size is less than configured.\n"); } if (IS_ENABLED(CONFIG_ESP_SPIRAM_MEMTEST)) { if (esp_psram_is_initialized()) { if (!esp_psram_extram_test()) { ets_printf("External RAM failed memory test!"); return; } } } memset(&_ext_ram_bss_start, 0, (&_ext_ram_bss_end - &_ext_ram_bss_start) * sizeof(_ext_ram_bss_start)); }