diff --git a/components/heap/heap_tlsf.c b/components/heap/heap_tlsf.c index 58d75f0fa9..4784e8ceeb 100644 --- a/components/heap/heap_tlsf.c +++ b/components/heap/heap_tlsf.c @@ -37,6 +37,7 @@ #include "multi_heap_config.h" #include "multi_heap.h" #include "multi_heap_internal.h" +#include "heap_tlsf_config.h" #include "heap_tlsf.h" /* diff --git a/components/heap/heap_tlsf.h b/components/heap/heap_tlsf.h index 24e4c1659f..c7152fe5a3 100644 --- a/components/heap/heap_tlsf.h +++ b/components/heap/heap_tlsf.h @@ -43,7 +43,6 @@ #include #include #include -#include "sdkconfig.h" #include "heap_tlsf_config.h" #if defined(__cplusplus) diff --git a/components/heap/heap_tlsf_config.h b/components/heap/heap_tlsf_config.h index ed7568eef9..2daf315672 100644 --- a/components/heap/heap_tlsf_config.h +++ b/components/heap/heap_tlsf_config.h @@ -37,13 +37,23 @@ #pragma once +#ifdef ESP_PLATFORM + +#include "soc/soc.h" + +#if !CONFIG_SPIRAM +#define TLSF_MAX_POOL_SIZE (SOC_DIRAM_DRAM_HIGH - SOC_DIRAM_DRAM_LOW) +#else +#define TLSF_MAX_POOL_SIZE SOC_EXTRAM_DATA_SIZE +#endif + enum tlsf_config { /* log2 of number of linear subdivisions of block sizes. Larger ** values require more memory in the control structure. Values of ** 4 or 5 are typical. */ - SL_INDEX_COUNT_LOG2 = 2, + SL_INDEX_COUNT_LOG2 = 3, /* All allocation sizes and addresses are aligned to 4 bytes. */ ALIGN_SIZE_LOG2 = 2, @@ -63,10 +73,14 @@ enum tlsf_config /* Tunning the first level, we can reduce TLSF pool overhead * in exchange of manage a pool smaller than 4GB */ - #ifndef CONFIG_SPIRAM + #if (TLSF_MAX_POOL_SIZE <= (256 * 1024)) FL_INDEX_MAX = 18, //Each pool can have up 256KB + #elif (TLSF_MAX_POOL_SIZE <= (512 * 1024)) + FL_INDEX_MAX = 19, //Each pool can have up 512KB + #elif (TLSF_MAX_POOL_SIZE <= (16 * 1024 * 1024)) + FL_INDEX_MAX = 24, //Each pool can have up 16MB #else - FL_INDEX_MAX = 23, //Each pool can have up 8MB + #error "Higher TLSF pool sizes should be added for this new config" #endif SL_INDEX_COUNT = (1 << SL_INDEX_COUNT_LOG2), @@ -75,3 +89,30 @@ enum tlsf_config SMALL_BLOCK_SIZE = (1 << FL_INDEX_SHIFT), }; +#else +enum tlsf_config +{ + //Specific configuration for host test. + + /* log2 of number of linear subdivisions of block sizes. Larger + ** values require more memory in the control structure. Values of + ** 4 or 5 are typical. + */ + SL_INDEX_COUNT_LOG2 = 5, + + /* All allocation sizes and addresses are aligned to 4 bytes. */ + ALIGN_SIZE_LOG2 = 2, + ALIGN_SIZE = (1 << ALIGN_SIZE_LOG2), + + /* Tunning the first level, we can reduce TLSF pool overhead + * in exchange of manage a pool smaller than 4GB + */ + FL_INDEX_MAX = 30, + + SL_INDEX_COUNT = (1 << SL_INDEX_COUNT_LOG2), + FL_INDEX_SHIFT = (SL_INDEX_COUNT_LOG2 + ALIGN_SIZE_LOG2), + FL_INDEX_COUNT = (FL_INDEX_MAX - FL_INDEX_SHIFT + 1), + + SMALL_BLOCK_SIZE = (1 << FL_INDEX_SHIFT), +}; +#endif diff --git a/components/heap/multi_heap_config.h b/components/heap/multi_heap_config.h index 2759766005..13d30cfd75 100644 --- a/components/heap/multi_heap_config.h +++ b/components/heap/multi_heap_config.h @@ -15,6 +15,8 @@ #ifdef ESP_PLATFORM #include "sdkconfig.h" +#include "soc/soc.h" +#include "soc/soc_caps.h" #endif /* Configuration macros for multi-heap */