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