mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +00:00 
			
		
		
		
	Merge branch 'fix/fix_psram_incr16' into 'master'
fix(dma): add burst size check when dma access psram See merge request espressif/esp-idf!40991
This commit is contained in:
		@@ -351,6 +351,12 @@ esp_err_t gdma_config_transfer(gdma_channel_handle_t dma_chan, const gdma_transf
 | 
			
		||||
        // burst size must be power of 2
 | 
			
		||||
        ESP_RETURN_ON_FALSE((max_data_burst_size & (max_data_burst_size - 1)) == 0, ESP_ERR_INVALID_ARG,
 | 
			
		||||
                            TAG, "invalid max_data_burst_size: %"PRIu32, max_data_burst_size);
 | 
			
		||||
#if SOC_AHB_GDMA_SUPPORT_PSRAM || SOC_AXI_GDMA_SUPPORT_PSRAM
 | 
			
		||||
        if (config->access_ext_mem) {
 | 
			
		||||
            ESP_RETURN_ON_FALSE(max_data_burst_size <= GDMA_LL_MAX_BURST_SIZE_PSRAM, ESP_ERR_INVALID_ARG,
 | 
			
		||||
                                TAG, "max_data_burst_size must not exceed %d when accessing external memory", GDMA_LL_MAX_BURST_SIZE_PSRAM);
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
    gdma_pair_t *pair = dma_chan->pair;
 | 
			
		||||
    gdma_group_t *group = pair->group;
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
#include "soc/pcr_struct.h"
 | 
			
		||||
#include "hal/ahb_dma_ll.h"
 | 
			
		||||
#define GDMA_LL_AHB_BURST_SIZE_ADJUSTABLE 1 // AHB GDMA supports adjustable burst size
 | 
			
		||||
#define GDMA_LL_MAX_BURST_SIZE_PSRAM      32 // PSRAM controller doesn't support burst access with size > 32 bytes
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
#include "soc/pcr_struct.h"
 | 
			
		||||
#include "hal/ahb_dma_ll.h"
 | 
			
		||||
#define GDMA_LL_AHB_BURST_SIZE_ADJUSTABLE 1 // AHB GDMA supports adjustable burst size
 | 
			
		||||
#define GDMA_LL_MAX_BURST_SIZE_PSRAM      32 // PSRAM controller doesn't support burst access with size > 32 bytes
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@
 | 
			
		||||
#include "soc/pcr_struct.h"
 | 
			
		||||
#include "hal/ahb_dma_ll.h"
 | 
			
		||||
#define GDMA_LL_AHB_BURST_SIZE_ADJUSTABLE 1 // AHB GDMA supports adjustable burst size
 | 
			
		||||
#define GDMA_LL_MAX_BURST_SIZE_PSRAM      64 // PSRAM support INCR16
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
 
 | 
			
		||||
@@ -47,6 +47,7 @@
 | 
			
		||||
 | 
			
		||||
#define GDMA_LL_AHB_DESC_ALIGNMENT      4
 | 
			
		||||
#define GDMA_LL_AXI_DESC_ALIGNMENT      8
 | 
			
		||||
#define GDMA_LL_MAX_BURST_SIZE_PSRAM    64 // PSRAM controller doesn't support burst access with size > 64 bytes
 | 
			
		||||
 | 
			
		||||
#define GDMA_LL_TX_ETM_EVENT_TABLE(group, chan, event)                \
 | 
			
		||||
    (uint32_t[2][GDMA_ETM_EVENT_MAX]){                                \
 | 
			
		||||
 
 | 
			
		||||
@@ -64,6 +64,7 @@ extern "C" {
 | 
			
		||||
 | 
			
		||||
#define GDMA_LL_AHB_BURST_SIZE_ADJUSTABLE 1 // AHB GDMA supports adjustable burst size
 | 
			
		||||
#define GDMA_LL_AHB_RX_BURST_NEEDS_ALIGNMENT  1
 | 
			
		||||
#define GDMA_LL_MAX_BURST_SIZE_PSRAM          64 // PSRAM controller doesn't support burst access with size > 64 bytes
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////// Common /////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user