196 lines
6 KiB
C
196 lines
6 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/*
|
||
|
* Copyright (C) 2016 MediaTek Inc.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef __LINUX_FOCALTECH_FLASH_H__
|
||
|
#define __LINUX_FOCALTECH_FLASH_H__
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* 1.Included header files
|
||
|
*****************************************************************************/
|
||
|
#include "focaltech_core.h"
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Private constant and macro definitions using #define
|
||
|
*****************************************************************************/
|
||
|
#define FTS_CMD_RESET 0x07
|
||
|
#define FTS_ROMBOOT_CMD_WRITE 0xAE
|
||
|
#define FTS_ROMBOOT_CMD_START_APP 0x08
|
||
|
#define FTS_DELAY_PRAMBOOT_START 10
|
||
|
#define FTS_ROMBOOT_CMD_ECC 0xCC
|
||
|
|
||
|
#define FTS_CMD_READ 0x03
|
||
|
#define FTS_CMD_READ_DELAY 1
|
||
|
#define FTS_CMD_READ_LEN 4
|
||
|
#define FTS_CMD_FLASH_TYPE 0x05
|
||
|
#define FTS_CMD_FLASH_MODE 0x09
|
||
|
#define FLASH_MODE_WRITE_FLASH_VALUE 0x0A
|
||
|
#define FLASH_MODE_UPGRADE_VALUE 0x0B
|
||
|
#define FLASH_MODE_LIC_VALUE 0x0C
|
||
|
#define FLASH_MODE_PARAM_VALUE 0x0D
|
||
|
#define FTS_CMD_ERASE_APP 0x61
|
||
|
#define FTS_REASE_APP_DELAY 1350
|
||
|
#define FTS_ERASE_SECTOR_DELAY 60
|
||
|
#define FTS_RETRIES_REASE 50
|
||
|
#define FTS_RETRIES_DELAY_REASE 200
|
||
|
#define FTS_CMD_FLASH_STATUS 0x6A
|
||
|
#define FTS_CMD_FLASH_STATUS_LEN 2
|
||
|
#define FTS_CMD_FLASH_STATUS_NOP 0x0000
|
||
|
#define FTS_CMD_FLASH_STATUS_ECC_OK 0xF055
|
||
|
#define FTS_CMD_FLASH_STATUS_ERASE_OK 0xF0AA
|
||
|
#define FTS_CMD_FLASH_STATUS_WRITE_OK 0x1000
|
||
|
#define FTS_CMD_ECC_INIT 0x64
|
||
|
#define FTS_CMD_ECC_CAL 0x65
|
||
|
#define FTS_CMD_ECC_CAL_LEN 6
|
||
|
#define FTS_RETRIES_ECC_CAL 10
|
||
|
#define FTS_RETRIES_DELAY_ECC_CAL 50
|
||
|
#define FTS_CMD_ECC_READ 0x66
|
||
|
#define FTS_CMD_DATA_LEN 0xB0
|
||
|
#define FTS_CMD_APP_DATA_LEN_INCELL 0x7A
|
||
|
#define FTS_CMD_DATA_LEN_LEN 4
|
||
|
#define FTS_CMD_WRITE 0xBF
|
||
|
#define FTS_RETRIES_WRITE 100
|
||
|
#define FTS_RETRIES_DELAY_WRITE 1
|
||
|
#define FTS_CMD_WRITE_LEN 6
|
||
|
#define FTS_DELAY_READ_ID 20
|
||
|
#define FTS_DELAY_UPGRADE_RESET 80
|
||
|
#define PRAMBOOT_MIN_SIZE 0x120
|
||
|
#define PRAMBOOT_MAX_SIZE (64 * 1024)
|
||
|
#define FTS_FLASH_PACKET_LENGTH 32 /* max=128 */
|
||
|
#define FTS_MAX_LEN_ECC_CALC 0xFFFE /* must be even */
|
||
|
#define FTS_MIN_LEN 0x120
|
||
|
#define FTS_MAX_LEN_FILE (128 * 1024)
|
||
|
#define FTS_MAX_LEN_APP (64 * 1024)
|
||
|
#define FTS_MAX_LEN_SECTOR (4 * 1024)
|
||
|
#define FTS_CONIFG_VENDORID_OFF 0x04
|
||
|
#define FTS_CONIFG_MODULEID_OFF 0x1E
|
||
|
#define FTS_CONIFG_PROJECTID_OFF 0x20
|
||
|
#define FTS_APPINFO_OFF 0x100
|
||
|
#define FTS_APPINFO_APPLEN_OFF 0x00
|
||
|
#define FTS_APPINFO_APPLEN2_OFF 0x12
|
||
|
#define FTS_REG_UPGRADE 0xFC
|
||
|
#define FTS_REG_UPGRADE2 0xBC
|
||
|
#define FTS_UPGRADE_AA 0xAA
|
||
|
#define FTS_UPGRADE_55 0x55
|
||
|
#define FTS_DELAY_UPGRADE_AA 10
|
||
|
#define FTS_UPGRADE_LOOP 30
|
||
|
#define FTS_HEADER_LEN 32
|
||
|
#define FTS_FW_BIN_FILEPATH "/sdcard/"
|
||
|
#define FTS_FW_IDE_SIG "IDE_"
|
||
|
#define FTS_FW_IDE_SIG_LEN 4
|
||
|
#define MAX_MODULE_VENDOR_NAME_LEN 16
|
||
|
|
||
|
#define FTS_ROMBOOT_CMD_ECC_NEW_LEN 7
|
||
|
#define FTS_ECC_FINISH_TIMEOUT 100
|
||
|
#define FTS_ROMBOOT_CMD_ECC_FINISH 0xCE
|
||
|
#define FTS_ROMBOOT_CMD_ECC_FINISH_OK_A5 0xA5
|
||
|
#define FTS_ROMBOOT_CMD_ECC_FINISH_OK_00 0x00
|
||
|
#define FTS_ROMBOOT_CMD_ECC_READ 0xCD
|
||
|
#define AL2_FCS_COEF ((1 << 15) + (1 << 10) + (1 << 3))
|
||
|
|
||
|
#define FTS_APP_INFO_OFFSET 0x100
|
||
|
|
||
|
enum FW_STATUS {
|
||
|
FTS_RUN_IN_ERROR,
|
||
|
FTS_RUN_IN_APP,
|
||
|
FTS_RUN_IN_ROM,
|
||
|
FTS_RUN_IN_PRAM,
|
||
|
FTS_RUN_IN_BOOTLOADER,
|
||
|
};
|
||
|
|
||
|
enum FW_FLASH_MODE {
|
||
|
FLASH_MODE_APP,
|
||
|
FLASH_MODE_LIC,
|
||
|
FLASH_MODE_PARAM,
|
||
|
FLASH_MODE_ALL,
|
||
|
};
|
||
|
|
||
|
enum ECC_CHECK_MODE {
|
||
|
ECC_CHECK_MODE_XOR,
|
||
|
ECC_CHECK_MODE_CRC16,
|
||
|
};
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Private enumerations, structures and unions using typedef
|
||
|
*****************************************************************************/
|
||
|
/* IC info */
|
||
|
struct upgrade_func {
|
||
|
u64 ctype[FTX_MAX_COMPATIBLE_TYPE];
|
||
|
u32 fwveroff;
|
||
|
u32 fwcfgoff;
|
||
|
u32 appoff;
|
||
|
u32 licoff;
|
||
|
u32 paramcfgoff;
|
||
|
u32 paramcfgveroff;
|
||
|
u32 paramcfg2off;
|
||
|
int pram_ecc_check_mode;
|
||
|
int fw_ecc_check_mode;
|
||
|
bool new_return_value_from_ic;
|
||
|
bool appoff_handle_in_ic;
|
||
|
bool is_reset_register_BC;
|
||
|
bool read_boot_id_need_reset;
|
||
|
bool hid_supported;
|
||
|
bool pramboot_supported;
|
||
|
u8 *pramboot;
|
||
|
u32 pb_length;
|
||
|
int (*init)(u8 *buf, u32 len);
|
||
|
int (*upgrade)(u8 *buf, u32 len);
|
||
|
int (*get_hlic_ver)(u8 *buf);
|
||
|
int (*lic_upgrade)(u8 *buf, u32 len);
|
||
|
int (*param_upgrade)(u8 *buf, u32 len);
|
||
|
int (*force_upgrade)(u8 *buf, u32 len);
|
||
|
};
|
||
|
|
||
|
struct upgrade_module {
|
||
|
int id;
|
||
|
char vendor_name[MAX_MODULE_VENDOR_NAME_LEN];
|
||
|
u8 *fw_file;
|
||
|
u32 fw_len;
|
||
|
};
|
||
|
|
||
|
struct fts_upgrade {
|
||
|
struct fts_ts_data *ts_data;
|
||
|
struct upgrade_module *module_info;
|
||
|
struct upgrade_func *func;
|
||
|
int module_id;
|
||
|
bool fw_from_request;
|
||
|
u8 *fw;
|
||
|
u32 fw_length;
|
||
|
u8 *lic;
|
||
|
u32 lic_length;
|
||
|
};
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Global variable or extern global variabls/functions
|
||
|
*****************************************************************************/
|
||
|
extern struct upgrade_func upgrade_func_ft5822;
|
||
|
extern struct upgrade_func upgrade_func_ft5422;
|
||
|
extern struct upgrade_func upgrade_func_ft6426;
|
||
|
extern struct upgrade_func upgrade_func_ft8716;
|
||
|
extern struct upgrade_func upgrade_func_ft8736;
|
||
|
extern struct upgrade_func upgrade_func_ft8006m;
|
||
|
extern struct upgrade_func upgrade_func_ft8607;
|
||
|
extern struct upgrade_func upgrade_func_ft8006u;
|
||
|
extern struct upgrade_func upgrade_func_ft8719;
|
||
|
extern struct upgrade_func upgrade_func_ft8739;
|
||
|
extern struct upgrade_func upgrade_func_ft8006p;
|
||
|
extern struct upgrade_func upgrade_func_ft5452;
|
||
|
extern struct upgrade_func upgrade_func_ft5422u;
|
||
|
extern struct upgrade_func upgrade_func_ft5472;
|
||
|
extern struct upgrade_func upgrade_func_ft6216;
|
||
|
extern struct upgrade_func upgrade_func_ft7251;
|
||
|
extern struct upgrade_func upgrade_func_ft8613s;
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Static function prototypes
|
||
|
*****************************************************************************/
|
||
|
int fts_fwupg_reset_in_boot(void);
|
||
|
int fts_fwupg_enter_into_boot(void);
|
||
|
int fts_fwupg_erase(u32 delay);
|
||
|
int fts_fwupg_ecc_cal(u32 saddr, u32 len);
|
||
|
int fts_flash_write_buf(u32 saddr, u8 *buf, u32 len, u32 delay);
|
||
|
int fts_fwupg_upgrade(struct fts_upgrade *upg);
|
||
|
#endif
|