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;
							 | 
						||
| 
								 | 
							
								}
							 |