1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun /* Copyright (c) 2018 Rockchip Electronics Co. Ltd. */ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #ifndef __RK_FLASH_API_H 6*4882a593Smuzhiyun #define __RK_FLASH_API_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifdef CONFIG_RK_NANDC_NAND 9*4882a593Smuzhiyun #include "flash.h" 10*4882a593Smuzhiyun #endif 11*4882a593Smuzhiyun #ifdef CONFIG_RK_SFC_NAND 12*4882a593Smuzhiyun #include "sfc_nand.h" 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun #ifdef CONFIG_RK_SFC_NOR 15*4882a593Smuzhiyun #include "sfc_nor.h" 16*4882a593Smuzhiyun #endif 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun enum flash_con_type { 19*4882a593Smuzhiyun FLASH_CON_TYPE_NANDC = 0, 20*4882a593Smuzhiyun FLASH_CON_TYPE_SFC, 21*4882a593Smuzhiyun FLASH_CON_TYPE_MAX, 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun enum flash_type { 25*4882a593Smuzhiyun FLASH_TYPE_NANDC_NAND = 0, 26*4882a593Smuzhiyun FLASH_TYPE_SFC_NOR, 27*4882a593Smuzhiyun FLASH_TYPE_SFC_NAND, 28*4882a593Smuzhiyun FLASH_TYPE_MAX, 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct flash_boot_ops { 32*4882a593Smuzhiyun int (*init)(void __iomem *reg_addr); 33*4882a593Smuzhiyun int (*read)(u32 sec, u32 n_sec, void *p_data); 34*4882a593Smuzhiyun int (*write)(u32 sec, u32 n_sec, void *p_data); 35*4882a593Smuzhiyun u32 (*get_capacity)(void); 36*4882a593Smuzhiyun void (*deinit)(void); 37*4882a593Smuzhiyun int (*resume)(void __iomem *reg_addr); 38*4882a593Smuzhiyun int (*vendor_read)(u32 sec, u32 n_sec, void *p_data); 39*4882a593Smuzhiyun int (*vendor_write)(u32 sec, u32 n_sec, void *p_data); 40*4882a593Smuzhiyun int (*gc)(void); 41*4882a593Smuzhiyun int (*discard)(u32 sec, u32 n_sec); 42*4882a593Smuzhiyun }; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_RK_NANDC_NAND) 45*4882a593Smuzhiyun extern const struct flash_boot_ops nandc_nand_ops; 46*4882a593Smuzhiyun #endif 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #ifdef CONFIG_RK_SFC_NOR 49*4882a593Smuzhiyun extern struct SFNOR_DEV *sfnor_dev; 50*4882a593Smuzhiyun extern const struct flash_boot_ops sfc_nor_ops; 51*4882a593Smuzhiyun #endif 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #ifdef CONFIG_RK_SFC_NAND 54*4882a593Smuzhiyun extern struct SFNAND_DEV *sfnand_dev; 55*4882a593Smuzhiyun extern const struct flash_boot_ops sfc_nand_ops; 56*4882a593Smuzhiyun #endif 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #endif 59