mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 00:21:44 +01:00 
			
		
		
		
	Merge branch 'bugfix/improve_psram_adding_to_heap_way_v5.0' into 'release/v5.0'
esp_psram: correct the way adding to heap allocator (v5.0) See merge request espressif/esp-idf!19808
This commit is contained in:
		@@ -18,6 +18,38 @@
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU virtual address to linear address
 | 
			
		||||
 *
 | 
			
		||||
 * @param vaddr  virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @return linear address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_vaddr_to_laddr(uint32_t vaddr)
 | 
			
		||||
{
 | 
			
		||||
    return vaddr & SOC_MMU_LINEAR_ADDR_MASK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU linear address to virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @param laddr       linear address
 | 
			
		||||
 * @param vaddr_type  virtual address type, could be instruction type or data type. See `mmu_vaddr_t`
 | 
			
		||||
 *
 | 
			
		||||
 * @return virtual address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_laddr_to_vaddr(uint32_t laddr, mmu_vaddr_t vaddr_type)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t vaddr_base = 0;
 | 
			
		||||
    if (vaddr_type == MMU_VADDR_DATA) {
 | 
			
		||||
        vaddr_base = SOC_MMU_DBUS_VADDR_BASE;
 | 
			
		||||
    } else {
 | 
			
		||||
        vaddr_base = SOC_MMU_IBUS_VADDR_BASE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return vaddr_base | laddr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get MMU page size
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "stdint.h"
 | 
			
		||||
#include "soc/extmem_reg.h"
 | 
			
		||||
#include "soc/ext_mem_defs.h"
 | 
			
		||||
#include "hal/assert.h"
 | 
			
		||||
@@ -18,6 +19,38 @@
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU virtual address to linear address
 | 
			
		||||
 *
 | 
			
		||||
 * @param vaddr  virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @return linear address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_vaddr_to_laddr(uint32_t vaddr)
 | 
			
		||||
{
 | 
			
		||||
    return vaddr & SOC_MMU_LINEAR_ADDR_MASK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU linear address to virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @param laddr       linear address
 | 
			
		||||
 * @param vaddr_type  virtual address type, could be instruction type or data type. See `mmu_vaddr_t`
 | 
			
		||||
 *
 | 
			
		||||
 * @return virtual address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_laddr_to_vaddr(uint32_t laddr, mmu_vaddr_t vaddr_type)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t vaddr_base = 0;
 | 
			
		||||
    if (vaddr_type == MMU_VADDR_DATA) {
 | 
			
		||||
        vaddr_base = SOC_MMU_DBUS_VADDR_BASE;
 | 
			
		||||
    } else {
 | 
			
		||||
        vaddr_base = SOC_MMU_IBUS_VADDR_BASE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return vaddr_base | laddr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get MMU page size
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,38 @@
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU virtual address to linear address
 | 
			
		||||
 *
 | 
			
		||||
 * @param vaddr  virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @return linear address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_vaddr_to_laddr(uint32_t vaddr)
 | 
			
		||||
{
 | 
			
		||||
    return vaddr & SOC_MMU_LINEAR_ADDR_MASK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convert MMU linear address to virtual address
 | 
			
		||||
 *
 | 
			
		||||
 * @param laddr       linear address
 | 
			
		||||
 * @param vaddr_type  virtual address type, could be instruction type or data type. See `mmu_vaddr_t`
 | 
			
		||||
 *
 | 
			
		||||
 * @return virtual address
 | 
			
		||||
 */
 | 
			
		||||
static inline uint32_t mmu_ll_laddr_to_vaddr(uint32_t laddr, mmu_vaddr_t vaddr_type)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t vaddr_base = 0;
 | 
			
		||||
    if (vaddr_type == MMU_VADDR_DATA) {
 | 
			
		||||
        vaddr_base = SOC_MMU_DBUS_VADDR_BASE;
 | 
			
		||||
    } else {
 | 
			
		||||
        vaddr_base = SOC_MMU_IBUS_VADDR_BASE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return vaddr_base | laddr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Get MMU page size
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,14 @@ typedef enum {
 | 
			
		||||
    MMU_PAGE_64KB = 0x10000,
 | 
			
		||||
} mmu_page_size_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MMU virtual address type
 | 
			
		||||
 */
 | 
			
		||||
typedef enum {
 | 
			
		||||
    MMU_VADDR_DATA,
 | 
			
		||||
    MMU_VADDR_INSTRUCTION,
 | 
			
		||||
} mmu_vaddr_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * External physical memory
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user