focaltech_flash.h 7.9 KB

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