11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef _BOOT_ROM_H_ 171bd4fe43Sopenharmony_ci#define _BOOT_ROM_H_ 181bd4fe43Sopenharmony_ci#include <hi_types.h> 191bd4fe43Sopenharmony_ci#include <hi_cipher.h> 201bd4fe43Sopenharmony_ci 211bd4fe43Sopenharmony_ci#define BOOTLOADER_FLASH_HEAD_ADDR 0x00400000 221bd4fe43Sopenharmony_ci 231bd4fe43Sopenharmony_ci/* This register is used internally and cannot be used externally. */ 241bd4fe43Sopenharmony_ci#define GLB_CTL_GP_REG0_REG (GLB_CTL_BASE + 0x10) 251bd4fe43Sopenharmony_ci#define GLB_CTL_GP_REG1_REG (GLB_CTL_BASE + 0x14) 261bd4fe43Sopenharmony_ci#define GLB_CTL_GP_REG2_REG (GLB_CTL_BASE + 0x18) 271bd4fe43Sopenharmony_ci#define GLB_CTL_GP_REG3_REG (GLB_CTL_BASE + 0x1C) 281bd4fe43Sopenharmony_ci#define PMU_CMU_CTL_GP_REG0_REG (PMU_CMU_CTL_BASE + 0x010) 291bd4fe43Sopenharmony_ci#define PMU_CMU_CTL_GP_REG1_REG (PMU_CMU_CTL_BASE + 0x014) 301bd4fe43Sopenharmony_ci#define PMU_CMU_CTL_GP_REG2_REG (PMU_CMU_CTL_BASE + 0x018) 311bd4fe43Sopenharmony_ci#define PMU_CMU_CTL_GP_REG3_REG (PMU_CMU_CTL_BASE + 0x01C) 321bd4fe43Sopenharmony_ci#define CLDO_CTL_GEN_REG0 (CLDO_CTL_RB_BASE + 0x10) 331bd4fe43Sopenharmony_ci#define CLDO_CTL_GEN_REG1 (CLDO_CTL_RB_BASE + 0x14) 341bd4fe43Sopenharmony_ci#define CLDO_CTL_GEN_REG2 (CLDO_CTL_RB_BASE + 0x18) 351bd4fe43Sopenharmony_ci#define CLDO_CTL_GEN_REG3 (CLDO_CTL_RB_BASE + 0x1C) 361bd4fe43Sopenharmony_ci 371bd4fe43Sopenharmony_ci/* heap module */ 381bd4fe43Sopenharmony_cihi_void rom_boot_malloc_init(hi_u32 heap_start_addr, hi_u32 heap_end_addr, hi_u32 check_sum); 391bd4fe43Sopenharmony_cihi_void *rom_boot_malloc(hi_u32 size); 401bd4fe43Sopenharmony_cihi_u32 rom_boot_free(hi_void *addr); 411bd4fe43Sopenharmony_ci 421bd4fe43Sopenharmony_ci/* reset module */ 431bd4fe43Sopenharmony_ci#define RESET_DELAY_MS 3 441bd4fe43Sopenharmony_cihi_void reset(hi_void); 451bd4fe43Sopenharmony_cihi_void global_reset(hi_void); 461bd4fe43Sopenharmony_ci 471bd4fe43Sopenharmony_ci/* secure module */ 481bd4fe43Sopenharmony_ciHI_EXTERN hi_cipher_ecc_param g_brain_pool_p256r1_verify; 491bd4fe43Sopenharmony_ci 501bd4fe43Sopenharmony_ci/* flash driver module */ 511bd4fe43Sopenharmony_ci#define FEATURE_SUPPORT_FLASH_PROTECT 521bd4fe43Sopenharmony_ci 531bd4fe43Sopenharmony_ci#define flash_info_print(fmt, ...) 541bd4fe43Sopenharmony_ci#define SPI_QE_EN 0x02 /* QE Bit Enable */ 551bd4fe43Sopenharmony_ci#define SPI_QE_EN_MX 0x40 /* QE Bit Enable(temp for FPGA MX) */ 561bd4fe43Sopenharmony_ci 571bd4fe43Sopenharmony_ci#define SPI_CMD_WREN 0x06 /* Write Enable */ 581bd4fe43Sopenharmony_ci/* ----------------------------------------------------------------------------- */ 591bd4fe43Sopenharmony_ci#define SPI_CMD_SE_4K 0x20 /* 4KB sector Erase */ 601bd4fe43Sopenharmony_ci#define SPI_CMD_SE_32K 0x52 /* 32KB sector Erase */ 611bd4fe43Sopenharmony_ci#define SPI_CMD_SE 0xD8 /* 64KB Sector Erase */ 621bd4fe43Sopenharmony_ci#define SPI_CMD_CE1 0xC7 /* chip erase */ 631bd4fe43Sopenharmony_ci#define SPI_CMD_CE2 0x60 /* chip erase */ 641bd4fe43Sopenharmony_ci 651bd4fe43Sopenharmony_ci/* ----------------------------------------------------------------------------- */ 661bd4fe43Sopenharmony_ci#define SPI_CMD_WRSR1 0x01 /* Write Status Register */ 671bd4fe43Sopenharmony_ci 681bd4fe43Sopenharmony_ci#define SPI_CMD_WRSR2 0x31 /* Write Status Register-2 */ 691bd4fe43Sopenharmony_ci#define SPI_CMD_RDSR2 0x35 /* Read Status Register-2 */ 701bd4fe43Sopenharmony_ci 711bd4fe43Sopenharmony_ci#define SPI_CMD_WRSR3 0x11 /* Write Status Register-3 */ 721bd4fe43Sopenharmony_ci#define SPI_CMD_RDSR3 0x15 /* Read Status Register-3 */ 731bd4fe43Sopenharmony_ci 741bd4fe43Sopenharmony_ci#define SPI_CMD_RDID 0x9F /* Read Identification */ 751bd4fe43Sopenharmony_ci 761bd4fe43Sopenharmony_ci/* read status register. */ 771bd4fe43Sopenharmony_ci#define SPI_CMD_RDSR 0x05 781bd4fe43Sopenharmony_ci#define SPI_CMD_VSR_WREN 0x50 /* write volatile SR reg enable */ 791bd4fe43Sopenharmony_ci 801bd4fe43Sopenharmony_ci/* write status/configuration register. */ 811bd4fe43Sopenharmony_ci#define SPI_CMD_WRSRCR 0x01 821bd4fe43Sopenharmony_ci 831bd4fe43Sopenharmony_ci/* ----------------------------------------------------------------------------- */ 841bd4fe43Sopenharmony_ci#define SPI_CMD_SR_WIPN 0 /* Write in Progress */ 851bd4fe43Sopenharmony_ci#define SPI_CMD_SR_WIP 1 /* Write in Progress */ 861bd4fe43Sopenharmony_ci#define SPI_CMD_SR_WEL 2 /* Write Enable Latch */ 871bd4fe43Sopenharmony_ci 881bd4fe43Sopenharmony_ci#define SPI_SR_BIT_WIP (1 << 0) /* Write in Progress */ 891bd4fe43Sopenharmony_ci#define SPI_SR_BIT_WEL (1 << 1) /* Write Enable Latch */ 901bd4fe43Sopenharmony_ci 911bd4fe43Sopenharmony_ci#define FLASH_DMA_BUF_LEN 256 921bd4fe43Sopenharmony_ci#define FLASH_DMA_RAM_SIZE 1024 931bd4fe43Sopenharmony_ci#define HI_FLASH_DEFAULT_TYPE_NUM 8 941bd4fe43Sopenharmony_ci#define HI_FLASH_CHIP_ID_NUM 3 951bd4fe43Sopenharmony_ci#define HI_FLASH_CAPACITY_ID 2 961bd4fe43Sopenharmony_citypedef struct { 971bd4fe43Sopenharmony_ci hi_u32 cmd : 8; 981bd4fe43Sopenharmony_ci hi_u32 iftype : 3; 991bd4fe43Sopenharmony_ci hi_u32 dummy : 3; 1001bd4fe43Sopenharmony_ci hi_u32 size : 18; 1011bd4fe43Sopenharmony_ci} spi_flash_operation; 1021bd4fe43Sopenharmony_ci 1031bd4fe43Sopenharmony_citypedef enum { 1041bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_4K_ERASE = 0x1, /* Flash 4K erasing */ 1051bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_32K_ERASE = 0x2, /* Flash 32K erasing */ 1061bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_64K_ERASE = 0x4, /* Flash 64K erasing */ 1071bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_CHIP_ERASE = 0x8, /* Flash full-chip erasing */ 1081bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_AREA_LOCK_NV = 0x10, /* Non-volatile flash area protection */ 1091bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_AREA_LOCK_VOLATILE = 0x20, /* Flash volatile area protection */ 1101bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_INDIVIDUAL_LOCK = 0x40, /* Independent flash block protection */ 1111bd4fe43Sopenharmony_ci HI_FLASH_VLT_INFLUENCE_FREQ = 0x100, 1121bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_MASK = 0xFFFF, /* Mask */ 1131bd4fe43Sopenharmony_ci} hi_spi_flash_chip_attribute; 1141bd4fe43Sopenharmony_ci 1151bd4fe43Sopenharmony_citypedef struct { 1161bd4fe43Sopenharmony_ci hi_char *chip_name; 1171bd4fe43Sopenharmony_ci hi_u8 chip_id[HI_FLASH_CHIP_ID_NUM]; 1181bd4fe43Sopenharmony_ci hi_u8 freq_read; 1191bd4fe43Sopenharmony_ci hi_u8 freq_lowpower; 1201bd4fe43Sopenharmony_ci hi_u8 freq_hpm; 1211bd4fe43Sopenharmony_ci hi_u16 chip_attribute; 1221bd4fe43Sopenharmony_ci} hi_spi_flash_basic_info; 1231bd4fe43Sopenharmony_ci 1241bd4fe43Sopenharmony_ci#define HI_FLASH_SUPPORT_CHIPS (HI_FLASH_SUPPORT_4K_ERASE | \ 1251bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_64K_ERASE | \ 1261bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_CHIP_ERASE | \ 1271bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_AREA_LOCK_NV | \ 1281bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_AREA_LOCK_VOLATILE) 1291bd4fe43Sopenharmony_ci#define HI_FLASH_SUPPORT_DEFAULT (HI_FLASH_SUPPORT_4K_ERASE | \ 1301bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_64K_ERASE | \ 1311bd4fe43Sopenharmony_ci HI_FLASH_SUPPORT_CHIP_ERASE) 1321bd4fe43Sopenharmony_ci 1331bd4fe43Sopenharmony_ci#define PRODUCT_CFG_FLASH_BLOCK_SIZE 0x1000 1341bd4fe43Sopenharmony_ci/*****************************************************************************/ 1351bd4fe43Sopenharmony_ci#define HISFC300_DMA_MAX_SIZE 2048 1361bd4fe43Sopenharmony_ci#define HISFC300_DMA_MAX_MASK 0x7FF 1371bd4fe43Sopenharmony_ci 1381bd4fe43Sopenharmony_ci/*****************************************************************************/ 1391bd4fe43Sopenharmony_ci#define HISFC300_REG_BUF_SIZE 64 1401bd4fe43Sopenharmony_ci#define HISFC300_REG_BUF_MASK 0x3F 1411bd4fe43Sopenharmony_ci 1421bd4fe43Sopenharmony_ci#define HISFC300_BUS_CONFIG2 0x0204 1431bd4fe43Sopenharmony_ci#define HISFC300_BUS_BASE_ADDR_CS1 0x0218 1441bd4fe43Sopenharmony_ci#define HISFC300_BUS_ALIAS_ADDR 0x021C 1451bd4fe43Sopenharmony_ci#define HISFC300_BUS_ALIAS_CS 0x0220 1461bd4fe43Sopenharmony_ci#define HISFC300_CMD_DATABUF64 0x04FC 1471bd4fe43Sopenharmony_ci 1481bd4fe43Sopenharmony_ci#define SFC_REG_BASE_ADDRESS HI_SFC_REG_BASE 1491bd4fe43Sopenharmony_ci#define SFC_BUFFER_BASE_ADDRESS 0x400000 1501bd4fe43Sopenharmony_ci 1511bd4fe43Sopenharmony_ci#define SFC_REG_GLOBAL_CONFIG 0x0100 1521bd4fe43Sopenharmony_ci#define SFC_REG_GLOBAL_CONFIG_ADDR_MODE_4B (1 << 2) 1531bd4fe43Sopenharmony_ci#define SFC_REG_TIMING 0x0110 1541bd4fe43Sopenharmony_ci#define SFC_REG_GLOBAL_CONFIG_WP_ENABLE (1 << 1) 1551bd4fe43Sopenharmony_ci#define sfc_timing_tshsl(_n) ((_n) & 0xF) 1561bd4fe43Sopenharmony_ci#define sfc_timing_tshwl(_n) (((_n) & 0xF) << 4) 1571bd4fe43Sopenharmony_ci#define sfc_timing_tcss(_n) (((_n) & 0x7) << 8) 1581bd4fe43Sopenharmony_ci#define sfc_timing_tcsh(_n) (((_n) & 0x7) << 12) 1591bd4fe43Sopenharmony_ci#define sfc_timing_trpd(_n) (((_n) & 0xFFF) << 16) 1601bd4fe43Sopenharmony_ci#define SFC_REG_INT_RAW_STATUS 0x0120 /* Raw interrupt status register */ 1611bd4fe43Sopenharmony_ci#define SFC_REG_INT_RAW_STATUS_DMA_DONE (1 << 1) 1621bd4fe43Sopenharmony_ci#define SFC_REG_INT_STATUS 0x0124 1631bd4fe43Sopenharmony_ci#define SFC_REG_INT_MASK 0x0128 1641bd4fe43Sopenharmony_ci#define SFC_REG_INT_CLEAR 0x012C 1651bd4fe43Sopenharmony_ci#define SFC_REG_INT_CLEAR_DMA_DONE (1 << 1) 1661bd4fe43Sopenharmony_ci#define SFC_REG_VERSION 0x01F8 1671bd4fe43Sopenharmony_ci#define SFC_REG_VERSION_SEL 0x01FC 1681bd4fe43Sopenharmony_ci#define SFC_REG_BUS_CONFIG1 0x0200 1691bd4fe43Sopenharmony_ci#define SFC_REG_BUS_CONFIG1_MASK_RD 0x8000ffff 1701bd4fe43Sopenharmony_ci#define SFC_REG_BUS_CONFIG1_MASK_WT 0x7fff0000 1711bd4fe43Sopenharmony_ci#define sfc_bus_config1_wr_ins(_n) (((_n) & 0xFF) << 22) 1721bd4fe43Sopenharmony_ci#define sfc_bus_config1_rd_ins(_n) (((_n) & 0xFF) << 8) 1731bd4fe43Sopenharmony_ci#define sfc_bus_config1_rd_prefetch_cnt(_n) (((_n) & 0x3) << 6) 1741bd4fe43Sopenharmony_ci#define sfc_bus_config1_rd_dummy_bytes(_n) (((_n) & 0x7) << 3) 1751bd4fe43Sopenharmony_ci#define sfc_bus_config1_rd_mem_if_type(_n) ((_n) & 0x7) 1761bd4fe43Sopenharmony_ci#define SFC_BUS_CONFIG1_RD_ENABLE ((hi_u32)1 << 31) 1771bd4fe43Sopenharmony_ci 1781bd4fe43Sopenharmony_ci#define SFC_REG_BUS_FLASH_SIZE 0x0210 1791bd4fe43Sopenharmony_ci#define SFC_REG_BUS_BASE_ADDR_CS0 0x0214 1801bd4fe43Sopenharmony_ci#define SFC_REG_BUS_BASE_ADDR_CS1 0x0218 1811bd4fe43Sopenharmony_ci 1821bd4fe43Sopenharmony_ci#define SFC_REG_BUS_DMA_CTRL 0X0240 1831bd4fe43Sopenharmony_ci#define SFC_BUS_DMA_CTRL_START (1 << 0) 1841bd4fe43Sopenharmony_ci#define sfc_bus_dma_ctrl_read(_dir) ((_dir) << 1) 1851bd4fe43Sopenharmony_ci#define sfc_bus_dma_ctrl_cs(_cs) (((_cs) & 0x01) << 4) 1861bd4fe43Sopenharmony_ci#define SFC_REG_BUS_DMA_MEM_SADDR 0X0244 /* DMA DDR start address R */ 1871bd4fe43Sopenharmony_ci#define SFC_REG_BUS_DMA_FLASH_SADDR 0X0248 1881bd4fe43Sopenharmony_ci#define SFC_REG_BUS_DMA_LEN 0x024C 1891bd4fe43Sopenharmony_ci#define SFC_REG_BUS_DMA_AHB_CTRL 0X0250 1901bd4fe43Sopenharmony_ci#define SFC_BUS_DMA_AHB_CTRL_INCR4_EN (1 << 0) 1911bd4fe43Sopenharmony_ci#define SFC_BUS_DMA_AHB_CTRL_INCR8_EN (1 << 1) 1921bd4fe43Sopenharmony_ci#define SFC_BUS_DMA_AHB_CTRL_INCR16_EN (1 << 2) 1931bd4fe43Sopenharmony_ci 1941bd4fe43Sopenharmony_ci#define SFC_REG_CMD_CONFIG 0x0300 1951bd4fe43Sopenharmony_ci#define sfc_cmd_config_mem_if_type(_n) (((_n) & 0x07) << 17) 1961bd4fe43Sopenharmony_ci#define sfc_cmd_config_data_cnt(_n) ((((_n) - 1) & HISFC300_REG_BUF_MASK) << 9) 1971bd4fe43Sopenharmony_ci#define SFC_CMD_CONFIG_RW (1 << 8) 1981bd4fe43Sopenharmony_ci#define SFC_CMD_CONFIG_DATA_EN (1 << 7) 1991bd4fe43Sopenharmony_ci#define sfc_cmd_config_dummy_byte_cnt(_n) (((_n) & 0x07) << 4) 2001bd4fe43Sopenharmony_ci#define SFC_CMD_CONFIG_ADDR_EN (1 << 3) 2011bd4fe43Sopenharmony_ci#define SFC_CMD_CONFIG_SEL_CS (0x01 << 1) 2021bd4fe43Sopenharmony_ci#define SFC_CMD_CONFIG_START (1 << 0) 2031bd4fe43Sopenharmony_ci#define SFC_REG_CMD_INS 0x0308 2041bd4fe43Sopenharmony_ci 2051bd4fe43Sopenharmony_ci#define SFC_REG_CMD_ADDR 0x030C 2061bd4fe43Sopenharmony_ci#define SFC_CMD_ADDR_MASK 0x3FFFFFFF 2071bd4fe43Sopenharmony_ci#define SFC_REG_CMD_DATABUF1 0x0400 2081bd4fe43Sopenharmony_ci 2091bd4fe43Sopenharmony_ci#define SPI_SR3_DRV_MASK 0x3 2101bd4fe43Sopenharmony_ci 2111bd4fe43Sopenharmony_ci#define SFC_ERASE_OPT_MAX_NUM 4 2121bd4fe43Sopenharmony_ci 2131bd4fe43Sopenharmony_citypedef enum { 2141bd4fe43Sopenharmony_ci SPI_SR3_DRV_100PCT = 0, 2151bd4fe43Sopenharmony_ci SPI_SR3_DRV_75PCT, 2161bd4fe43Sopenharmony_ci SPI_SR3_DRV_50PCT, 2171bd4fe43Sopenharmony_ci SPI_SR3_DRV_25PCT, 2181bd4fe43Sopenharmony_ci SPI_SR3_DRV_MAX, 2191bd4fe43Sopenharmony_ci} hi_flash_drv_strength; 2201bd4fe43Sopenharmony_ci 2211bd4fe43Sopenharmony_ci#define SFC_CMD_WRITE (0 << 8) 2221bd4fe43Sopenharmony_ci#define SFC_CMD_READ (1 << 8) 2231bd4fe43Sopenharmony_ci 2241bd4fe43Sopenharmony_citypedef enum { 2251bd4fe43Sopenharmony_ci HI_FLASH_CHECK_PARAM_OPT_READ, 2261bd4fe43Sopenharmony_ci HI_FLASH_CHECK_PARAM_OPT_WRITE, 2271bd4fe43Sopenharmony_ci HI_FLASH_CHECK_PARAM_OPT_ERASE, 2281bd4fe43Sopenharmony_ci} hi_flash_check_param_opt; 2291bd4fe43Sopenharmony_ci 2301bd4fe43Sopenharmony_citypedef struct spi_flash_ctrl { 2311bd4fe43Sopenharmony_ci hi_u32 is_inited; 2321bd4fe43Sopenharmony_ci hi_spi_flash_basic_info basic_info; 2331bd4fe43Sopenharmony_ci spi_flash_operation opt_read; 2341bd4fe43Sopenharmony_ci spi_flash_operation opt_write; 2351bd4fe43Sopenharmony_ci spi_flash_operation array_opt_erase[SFC_ERASE_OPT_MAX_NUM]; 2361bd4fe43Sopenharmony_ci hi_u32 chip_size; 2371bd4fe43Sopenharmony_ci hi_u32 erase_size; 2381bd4fe43Sopenharmony_ci hi_u32 dma_ram_size; 2391bd4fe43Sopenharmony_ci hi_u8 *dma_ram_buffer; 2401bd4fe43Sopenharmony_ci hi_u8 *back_up_buf; 2411bd4fe43Sopenharmony_ci hi_u32(*read)(struct spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, 2421bd4fe43Sopenharmony_ci hi_u32 read_size, hi_void *ram_addr, hi_bool is_crash); 2431bd4fe43Sopenharmony_ci hi_u32(*write)(struct spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, 2441bd4fe43Sopenharmony_ci hi_u32 write_size, hi_void *ram_addr, hi_bool is_crash); 2451bd4fe43Sopenharmony_ci hi_u32(*erase)(struct spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, 2461bd4fe43Sopenharmony_ci hi_u32 erase_size, hi_bool is_crash); 2471bd4fe43Sopenharmony_ci hi_u32 mutex_handle; 2481bd4fe43Sopenharmony_ci hi_pvoid usr_data; 2491bd4fe43Sopenharmony_ci} hi_spi_flash_ctrl; 2501bd4fe43Sopenharmony_ci 2511bd4fe43Sopenharmony_ci/*****************************************************************************/ 2521bd4fe43Sopenharmony_ci#define hisfc_read(_reg) \ 2531bd4fe43Sopenharmony_ci hi_reg_read_val32(SFC_REG_BASE_ADDRESS + (_reg)) 2541bd4fe43Sopenharmony_ci 2551bd4fe43Sopenharmony_ci#define hisfc_write(_reg, _value) \ 2561bd4fe43Sopenharmony_ci hi_reg_write(SFC_REG_BASE_ADDRESS + (_reg), (_value)) 2571bd4fe43Sopenharmony_ci 2581bd4fe43Sopenharmony_ci 2591bd4fe43Sopenharmony_ciHI_EXTERN HI_CONST spi_flash_operation g_spi_opt_fast_quad_out_read; 2601bd4fe43Sopenharmony_ciHI_EXTERN HI_CONST spi_flash_operation g_spi_opt_fast_quad_eb_out_read; 2611bd4fe43Sopenharmony_ci 2621bd4fe43Sopenharmony_ciHI_EXTERN HI_CONST hi_spi_flash_basic_info g_flash_default_info_tbl[]; 2631bd4fe43Sopenharmony_ci 2641bd4fe43Sopenharmony_cihi_u32 spi_flash_read_chip_id(hi_u8 *chip_id, hi_u8 chip_id_len); 2651bd4fe43Sopenharmony_cihi_u32 spi_flash_configure_driver_strength(hi_flash_drv_strength drv_strength); 2661bd4fe43Sopenharmony_ci 2671bd4fe43Sopenharmony_cihi_u32 spif_map_chipsize(hi_u32 chip_size); 2681bd4fe43Sopenharmony_cihi_u32 spif_dma_read(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, hi_u32 read_size, hi_void *ram_addr, 2691bd4fe43Sopenharmony_ci hi_bool is_crash); 2701bd4fe43Sopenharmony_cihi_u32 spif_reg_erase(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, hi_u32 erase_size, hi_bool is_crash); 2711bd4fe43Sopenharmony_cihi_u32 spif_dma_write(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, hi_u32 write_size, hi_void *ram_addr, 2721bd4fe43Sopenharmony_ci hi_bool is_crash); 2731bd4fe43Sopenharmony_cihi_u32 spi_flash_read_reg(hi_u8 cmd, hi_u8 *data, hi_u8 data_len); 2741bd4fe43Sopenharmony_cihi_u32 spi_flash_write_reg(hi_u8 cmd, const hi_u8 *data, hi_u8 data_len); 2751bd4fe43Sopenharmony_cihi_void spif_config(const spi_flash_operation *spi_operation, hi_u8 cmd, hi_bool read); 2761bd4fe43Sopenharmony_cihi_u32 spi_flash_enable_quad_mode_mx(hi_void); 2771bd4fe43Sopenharmony_cihi_u32 spi_flash_enable_quad_mode(hi_void); 2781bd4fe43Sopenharmony_cihi_void spif_wait_config_start(hi_void); 2791bd4fe43Sopenharmony_cihi_u32 spif_write_enable(hi_bool is_crash); 2801bd4fe43Sopenharmony_cihi_u32 spif_wait_ready(hi_bool is_crash, hi_u8 val, hi_u8 bit_mask); 2811bd4fe43Sopenharmony_ci 2821bd4fe43Sopenharmony_cihi_u32 spi_flash_basic_info_probe(hi_spi_flash_ctrl *spif_ctrl, hi_u8 *chip_id, 2831bd4fe43Sopenharmony_ci hi_u8 id_len, hi_spi_flash_basic_info *spi_info_tbl, hi_u32 tbl_size); 2841bd4fe43Sopenharmony_cihi_u32 flash_write_prv(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, const hi_u8 *ram_addr, hi_u32 size, 2851bd4fe43Sopenharmony_ci hi_bool do_erase); 2861bd4fe43Sopenharmony_cihi_u32 flash_erase_prv(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, hi_u32 size); 2871bd4fe43Sopenharmony_cihi_u32 flash_read_prv(hi_spi_flash_ctrl *spif_ctrl, hi_u32 flash_addr, hi_u8 *data, hi_u32 size); 2881bd4fe43Sopenharmony_cihi_u32 spi_flash_get_size(const hi_u8 *chip_id); 2891bd4fe43Sopenharmony_cihi_u32 sfc_check_para(const hi_spi_flash_ctrl *spif_ctrl, hi_u32 addr, hi_u32 size, hi_flash_check_param_opt opt); 2901bd4fe43Sopenharmony_cihi_u32 flash_protect_set_protect(hi_u8 cmp_bp, hi_bool is_volatile); 2911bd4fe43Sopenharmony_ci 2921bd4fe43Sopenharmony_citypedef hi_u32 (*flash_init_func)(hi_void); 2931bd4fe43Sopenharmony_citypedef hi_u32 (*flash_read_func)(hi_u32 flash_addr, hi_u32 flash_read_size, hi_u8 *p_flash_read_data); 2941bd4fe43Sopenharmony_citypedef hi_u32 (*flash_write_func)(hi_u32 flash_addr, hi_u32 flash_write_size, 2951bd4fe43Sopenharmony_ci const hi_u8 *p_flash_write_data, hi_bool do_erase); 2961bd4fe43Sopenharmony_citypedef hi_u32 (*flash_erase_func)(hi_u32 flash_addr, hi_u32 flash_erase_size); 2971bd4fe43Sopenharmony_ci 2981bd4fe43Sopenharmony_citypedef struct { 2991bd4fe43Sopenharmony_ci flash_init_func init; 3001bd4fe43Sopenharmony_ci flash_read_func read; 3011bd4fe43Sopenharmony_ci flash_write_func write; 3021bd4fe43Sopenharmony_ci flash_erase_func erase; 3031bd4fe43Sopenharmony_ci} hi_flash_cmd_func; 3041bd4fe43Sopenharmony_ciHI_EXTERN hi_flash_cmd_func g_flash_cmd_funcs; 3051bd4fe43Sopenharmony_ci 3061bd4fe43Sopenharmony_cihi_u32 hi_cmd_regist_flash_cmd(const hi_flash_cmd_func *funcs); 3071bd4fe43Sopenharmony_ci 3081bd4fe43Sopenharmony_ci#endif 309