1 /************************************************************************ 2 * Copyright (C) 2012-2019, Focaltech Systems (R)��All Rights Reserved. 3 * 4 * File Name: focaltech_flash.h 5 * 6 * Author: Focaltech Driver Team 7 * 8 * Created: 2016-08-07 9 * 10 * Abstract: 11 * 12 ************************************************************************/ 13 #ifndef __LINUX_FOCALTECH_FLASH_H__ 14 #define __LINUX_FOCALTECH_FLASH_H__ 15 16 /***************************************************************************** 17 * 1.Included header files 18 *****************************************************************************/ 19 #include "focaltech_core.h" 20 21 /***************************************************************************** 22 * Private constant and macro definitions using #define 23 *****************************************************************************/ 24 #define FTS_CMD_RESET 0x07 25 #define FTS_ROMBOOT_CMD_SET_PRAM_ADDR 0xAD 26 #define FTS_ROMBOOT_CMD_SET_PRAM_ADDR_LEN 4 27 #define FTS_ROMBOOT_CMD_WRITE 0xAE 28 #define FTS_ROMBOOT_CMD_START_APP 0x08 29 #define FTS_DELAY_PRAMBOOT_START 10 30 #define FTS_ROMBOOT_CMD_ECC 0xCC 31 #define FTS_PRAM_SADDR 0x000000 32 #define FTS_DRAM_SADDR 0xD00000 33 34 #define FTS_CMD_READ 0x03 35 #define FTS_CMD_READ_DELAY 1 36 #define FTS_CMD_READ_LEN 4 37 #define FTS_CMD_FLASH_TYPE 0x05 38 #define FTS_CMD_FLASH_MODE 0x09 39 #define FLASH_MODE_WRITE_FLASH_VALUE 0x0A 40 #define FLASH_MODE_UPGRADE_VALUE 0x0B 41 #define FLASH_MODE_LIC_VALUE 0x0C 42 #define FLASH_MODE_PARAM_VALUE 0x0D 43 #define FTS_CMD_ERASE_APP 0x61 44 #define FTS_REASE_APP_DELAY 1350 45 #define FTS_ERASE_SECTOR_DELAY 60 46 #define FTS_RETRIES_REASE 50 47 #define FTS_RETRIES_DELAY_REASE 200 48 #define FTS_CMD_FLASH_STATUS 0x6A 49 #define FTS_CMD_FLASH_STATUS_LEN 2 50 #define FTS_CMD_FLASH_STATUS_NOP 0x0000 51 #define FTS_CMD_FLASH_STATUS_ECC_OK 0xF055 52 #define FTS_CMD_FLASH_STATUS_ERASE_OK 0xF0AA 53 #define FTS_CMD_FLASH_STATUS_WRITE_OK 0x1000 54 #define FTS_CMD_ECC_INIT 0x64 55 #define FTS_CMD_ECC_CAL 0x65 56 #define FTS_CMD_ECC_CAL_LEN 6 57 #define FTS_RETRIES_ECC_CAL 10 58 #define FTS_RETRIES_DELAY_ECC_CAL 50 59 #define FTS_CMD_ECC_READ 0x66 60 #define FTS_CMD_DATA_LEN 0xB0 61 #define FTS_CMD_APP_DATA_LEN_INCELL 0x7A 62 #define FTS_CMD_DATA_LEN_LEN 4 63 #define FTS_CMD_WRITE 0xBF 64 #define FTS_RETRIES_WRITE 100 65 #define FTS_RETRIES_DELAY_WRITE 1 66 #define FTS_CMD_WRITE_LEN 6 67 #define FTS_DELAY_READ_ID 20 68 #define FTS_DELAY_UPGRADE_RESET 80 69 #define PRAMBOOT_MIN_SIZE 0x120 70 #define PRAMBOOT_MAX_SIZE (64*1024) 71 #define FTS_FLASH_PACKET_LENGTH 32 /* max=128 */ 72 #define FTS_MAX_LEN_ECC_CALC 0xFFFE /* must be even */ 73 #define FTS_MIN_LEN 0x120 74 #define FTS_MAX_LEN_FILE (128 * 1024) 75 #define FTS_MAX_LEN_APP (64 * 1024) 76 #define FTS_MAX_LEN_SECTOR (4 * 1024) 77 #define FTS_CONIFG_VENDORID_OFF 0x04 78 #define FTS_CONIFG_MODULEID_OFF 0x1E 79 #define FTS_CONIFG_PROJECTID_OFF 0x20 80 #define FTS_APPINFO_OFF 0x100 81 #define FTS_APPINFO_APPLEN_OFF 0x00 82 #define FTS_APPINFO_APPLEN2_OFF 0x12 83 #define FTS_REG_UPGRADE 0xFC 84 #define FTS_REG_UPGRADE2 0xBC 85 #define FTS_UPGRADE_AA 0xAA 86 #define FTS_UPGRADE_55 0x55 87 #define FTS_DELAY_UPGRADE_AA 10 88 #define FTS_UPGRADE_LOOP 30 89 #define FTS_HEADER_LEN 32 90 #define FTS_FW_BIN_FILEPATH "/sdcard/" 91 #define FTS_FW_IDE_SIG "IDE_" 92 #define FTS_FW_IDE_SIG_LEN 4 93 #define MAX_MODULE_VENDOR_NAME_LEN 16 94 95 #define FTS_ROMBOOT_CMD_ECC_NEW_LEN 7 96 #define FTS_ECC_FINISH_TIMEOUT 100 97 #define FTS_ROMBOOT_CMD_ECC_FINISH 0xCE 98 #define FTS_ROMBOOT_CMD_ECC_FINISH_OK_A5 0xA5 99 #define FTS_ROMBOOT_CMD_ECC_FINISH_OK_00 0x00 100 #define FTS_ROMBOOT_CMD_ECC_READ 0xCD 101 #define AL2_FCS_COEF ((1 << 15) + (1 << 10) + (1 << 3)) 102 103 #define FTS_APP_INFO_OFFSET 0x100 104 105 enum FW_STATUS { 106 FTS_RUN_IN_ERROR, 107 FTS_RUN_IN_APP, 108 FTS_RUN_IN_ROM, 109 FTS_RUN_IN_PRAM, 110 FTS_RUN_IN_BOOTLOADER, 111 }; 112 113 enum FW_FLASH_MODE { 114 FLASH_MODE_APP, 115 FLASH_MODE_LIC, 116 FLASH_MODE_PARAM, 117 FLASH_MODE_ALL, 118 }; 119 120 enum ECC_CHECK_MODE { 121 ECC_CHECK_MODE_XOR, 122 ECC_CHECK_MODE_CRC16, 123 }; 124 125 /***************************************************************************** 126 * Private enumerations, structures and unions using typedef 127 *****************************************************************************/ 128 /* IC info */ 129 struct upgrade_func { 130 u64 ctype[FTX_MAX_COMPATIBLE_TYPE]; 131 u32 fwveroff; 132 u32 fwcfgoff; 133 u32 appoff; 134 u32 licoff; 135 u32 paramcfgoff; 136 u32 paramcfgveroff; 137 u32 paramcfg2off; 138 int pram_ecc_check_mode; 139 int fw_ecc_check_mode; 140 bool new_return_value_from_ic; 141 bool appoff_handle_in_ic; 142 bool is_reset_register_BC; 143 bool read_boot_id_need_reset; 144 bool hid_supported; 145 bool pramboot_supported; 146 u8 *pramboot; 147 u32 pb_length; 148 int (*init)(u8 *, u32); 149 int (*upgrade)(u8 *, u32); 150 int (*get_hlic_ver)(u8 *); 151 int (*lic_upgrade)(u8 *, u32); 152 int (*param_upgrade)(u8 *, u32); 153 int (*force_upgrade)(u8 *, u32); 154 }; 155 156 struct upgrade_setting_nf { 157 u8 rom_idh; 158 u8 rom_idl; 159 u16 reserved; 160 u32 app2_offset; 161 u32 ecclen_max; 162 u8 eccok_val; 163 u8 upgsts_boot; 164 u8 delay_init; 165 bool spi_pe; 166 bool half_length; 167 bool fd_check; 168 bool drwr_support; 169 }; 170 171 struct upgrade_module { 172 int id; 173 char vendor_name[MAX_MODULE_VENDOR_NAME_LEN]; 174 u8 *fw_file; 175 u32 fw_len; 176 }; 177 178 struct fts_upgrade { 179 struct fts_ts_data *ts_data; 180 struct upgrade_module *module_info; 181 struct upgrade_func *func; 182 struct upgrade_setting_nf *setting_nf; 183 int module_id; 184 bool fw_from_request; 185 u8 *fw; 186 u32 fw_length; 187 u8 *lic; 188 u32 lic_length; 189 }; 190 191 /***************************************************************************** 192 * Global variable or extern global variabls/functions 193 *****************************************************************************/ 194 extern struct upgrade_func upgrade_func_ft5422; 195 196 /***************************************************************************** 197 * Static function prototypes 198 *****************************************************************************/ 199 int fts_fwupg_reset_in_boot(void); 200 int fts_fwupg_enter_into_boot(void); 201 int fts_fwupg_erase(u32 delay); 202 int fts_fwupg_ecc_cal(u32 saddr, u32 len); 203 int fts_flash_write_buf(u32 saddr, u8 *buf, u32 len, u32 delay); 204 int fts_fwupg_upgrade(struct fts_upgrade *upg); 205 #endif 206