113 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			113 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | #include "chip_reg_base.h"
 | ||
|  | #include "hw_reg_api.h"
 | ||
|  | #include "flash.h"
 | ||
|  | #include "iot_config.h"
 | ||
|  | #include "flash_bench.h"
 | ||
|  | #include "os_mem.h"
 | ||
|  | #include "iot_flash_layout.h"
 | ||
|  | 
 | ||
|  | void flash_bench_get_flash_image_offset(uint32_t part[], uint32_t *p_num) | ||
|  | { | ||
|  |     iot_flash_info_t info; | ||
|  | 
 | ||
|  |     flash_bench_get_flash_info(&info); | ||
|  | 
 | ||
|  |     if (FLASH_BENCH_SIZE_4M == info.chip_size) { | ||
|  |         part[0] = FLASH_4M_SP_OFFSET; | ||
|  |         part[1] = FLASH_4M_SBL_OFFSET; | ||
|  |         part[2] = FLASH_4M_OEM_OFFSET; | ||
|  |         part[3] = FLASH_4M_PIB1_OFFSET; | ||
|  |         part[4] = FLASH_4M_PSRAM_RUN_OFFSET; | ||
|  |         part[5] = FLASH_4M_FW1_OFFSET; | ||
|  |         *p_num = 6; | ||
|  |     } else if (FLASH_BENCH_SIZE_2M == info.chip_size) { | ||
|  |         part[0] = FLASH_2M_SP_OFFSET; | ||
|  |         part[1] = FLASH_2M_SBL_OFFSET;//FLASH_2M_SBL_OFFSET;
 | ||
|  |         part[2] = FLASH_2M_OEM_OFFSET; | ||
|  |         part[3] = FLASH_2M_PIB1_OFFSET; | ||
|  |         part[4] = FLASH_2M_RUN_OFFSET; | ||
|  |         part[5] = FLASH_2M_FW1_OFFSET; | ||
|  |         *p_num = 6; | ||
|  |     } else if (FLASH_BENCH_SIZE_1M == info.chip_size) { | ||
|  |         part[0] = FLASH_1M_SP_OFFSET; | ||
|  |         part[1] = FLASH_1M_SBL_OFFSET; | ||
|  |         part[2] = FLASH_1M_OEM_OFFSET; | ||
|  |         part[3] = FLASH_1M_PIB1_OFFSET; | ||
|  |         part[4] = FLASH_1M_FW1_OFFSET; | ||
|  |         *p_num = 5; | ||
|  |     } else { | ||
|  |         *p_num = 0; | ||
|  |     } | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | uint32_t flash_bench_get_flash_base_addr(void) | ||
|  | { | ||
|  |     return FLASH_BENCH_FLASH_BASE; | ||
|  | } | ||
|  | 
 | ||
|  | void flash_bench_get_flash_info(iot_flash_info_t *p_info) | ||
|  | { | ||
|  |     uint8_t data[4]; | ||
|  |     uint32_t chip_size; | ||
|  | 
 | ||
|  |     if (NULL == p_info) { | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     flash_get_dev_id(data); | ||
|  |     p_info->id = data[1] | data[0]; | ||
|  |     p_info->sec_size = FLASH_DEF_SECTOR_SIZE; | ||
|  | 
 | ||
|  |     chip_size = flash_get_dev_size(); | ||
|  | 
 | ||
|  |     if (chip_size >= FLASH_8M) { | ||
|  |         p_info->chip_size = FLASH_BENCH_SIZE_8M; | ||
|  |     } else if (chip_size >= FLASH_4M) { | ||
|  |         p_info->chip_size = FLASH_BENCH_SIZE_4M; | ||
|  |     } else if (chip_size >= FLASH_2M) { | ||
|  |         p_info->chip_size = FLASH_BENCH_SIZE_2M; | ||
|  |     } else { | ||
|  |         p_info->chip_size = FLASH_BENCH_SIZE_1M; | ||
|  |     } | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | 
 | ||
|  | void flash_bench_read_contrl(void *data, uint32_t offset, uint32_t size) | ||
|  | { | ||
|  |     flash_read(data, offset, (int)size, MOD_SFC_READ_QUAD_IO_FAST); | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | 
 | ||
|  | void flash_bench_read_cache(void *data, uint32_t offset, uint32_t size) | ||
|  | { | ||
|  |     uint32_t flash_base = flash_bench_get_flash_base_addr(); | ||
|  | 
 | ||
|  |     os_mem_cpy(data, (void *)(flash_base | offset), size); | ||
|  | 
 | ||
|  |     return; | ||
|  | } | ||
|  | 
 | ||
|  | void flash_bench_init(void) | ||
|  | { | ||
|  |     flash_init(1); | ||
|  | 
 | ||
|  |     return; | ||
|  | } |