/* SPDX-License-Identifier: GPL-2.0-only
*
* Copyright ( C ) 2020 - 2021 Intel Corporation .
*/
#ifndef _IOSM_IPC_FLASH_H
#define _IOSM_IPC_FLASH_H
/* Buffer size used to read the fls image */
#define IOSM_FLS_BUF_SIZE 0 x00100000
/* Full erase start address */
#define IOSM_ERASE_START_ADDR 0 x00000000
/* Erase length for NAND flash */
#define IOSM_ERASE_LEN 0 xFFFFFFFF
/* EBL response Header size */
#define IOSM_EBL_HEAD_SIZE 8
/* EBL payload size */
#define IOSM_EBL_W_PAYL_SIZE 2048
/* Total EBL pack size */
#define IOSM_EBL_W_PACK_SIZE (IOSM_EBL_HEAD_SIZE + IOSM_EBL_W_PAYL_SIZE)
/* EBL payload size */
#define IOSM_EBL_DW_PAYL_SIZE 16384
/* Total EBL pack size */
#define IOSM_EBL_DW_PACK_SIZE (IOSM_EBL_HEAD_SIZE + IOSM_EBL_DW_PAYL_SIZE)
/* EBL name size */
#define IOSM_EBL_NAME 32
/* Maximum supported error types */
#define IOSM_MAX_ERRORS 8
/* Read size for RPSI/EBL response */
#define IOSM_READ_SIZE 2
/* Link establishment response ack size */
#define IOSM_LER_ACK_SIZE 2
/* PSI ACK len */
#define IOSM_PSI_ACK 8
/* SWID capability for packed swid type */
#define IOSM_EXT_CAP_SWID_OOS_PACK 0 x02
/* EBL error response buffer */
#define IOSM_EBL_RSP_BUFF 0 x0041
/* SWID string length */
#define IOSM_SWID_STR 64
/* Load EBL command size */
#define IOSM_RPSI_LOAD_SIZE 0
/* EBL payload checksum */
#define IOSM_EBL_CKSM 0 x0000FFFF
/* SWID msg len and argument */
#define IOSM_MSG_LEN_ARG 0
/* Data to be sent to modem */
#define IOSM_MDM_SEND_DATA 0 x0000
/* Data received from modem as part of erase check */
#define IOSM_MDM_ERASE_RSP 0 x0001
/* Bit shift to calculate Checksum */
#define IOSM_EBL_PAYL_SHIFT 16
/* Flag To be set */
#define IOSM_SET_FLAG 1
/* Set flash erase check timeout to 100 msec */
#define IOSM_FLASH_ERASE_CHECK_TIMEOUT 100
/* Set flash erase check interval to 20 msec */
#define IOSM_FLASH_ERASE_CHECK_INTERVAL 20
/* Link establishment response ack size */
#define IOSM_LER_RSP_SIZE 60
/**
* enum iosm_flash_package_type - Enum for the flashing operations
* @ FLASH_SET_PROT_CONF : Write EBL capabilities
* @ FLASH_SEC_START : Start writing the secpack
* @ FLASH_SEC_END : Validate secpack end
* @ FLASH_SET_ADDRESS : Set the address for flashing
* @ FLASH_ERASE_START : Start erase before flashing
* @ FLASH_ERASE_CHECK : Validate the erase functionality
* @ FLASH_OOS_CONTROL : Retrieve data based on oos actions
* @ FLASH_OOS_DATA_READ : Read data from EBL
* @ FLASH_WRITE_IMAGE_RAW : Write the raw image to flash
*/
enum iosm_flash_package_type {
FLASH_SET_PROT_CONF = 0 x0086,
FLASH_SEC_START = 0 x0204,
FLASH_SEC_END,
FLASH_SET_ADDRESS = 0 x0802,
FLASH_ERASE_START = 0 x0805,
FLASH_ERASE_CHECK,
FLASH_OOS_CONTROL = 0 x080C,
FLASH_OOS_DATA_READ = 0 x080E,
FLASH_WRITE_IMAGE_RAW,
};
/**
* enum iosm_out_of_session_action - Actions possible over the
* OutOfSession command interface
* @ FLASH_OOSC_ACTION_READ : Read data according to its type
* @ FLASH_OOSC_ACTION_ERASE : Erase data according to its type
*/
enum iosm_out_of_session_action {
FLASH_OOSC_ACTION_READ = 2 ,
FLASH_OOSC_ACTION_ERASE = 3 ,
};
/**
* enum iosm_out_of_session_type - Data types that can be handled over the
* Out Of Session command Interface
* @ FLASH_OOSC_TYPE_ALL_FLASH : The whole flash area
* @ FLASH_OOSC_TYPE_SWID_TABLE : Read the swid table from the target
*/
enum iosm_out_of_session_type {
FLASH_OOSC_TYPE_ALL_FLASH = 8 ,
FLASH_OOSC_TYPE_SWID_TABLE = 16 ,
};
/**
* enum iosm_ebl_caps - EBL capability settings
* @ IOSM_CAP_NOT_ENHANCED : If capability not supported
* @ IOSM_CAP_USE_EXT_CAP : To be set if extended capability is set
* @ IOSM_EXT_CAP_ERASE_ALL : Set Erase all capability
* @ IOSM_EXT_CAP_COMMIT_ALL : Set the commit all capability
*/
enum iosm_ebl_caps {
IOSM_CAP_NOT_ENHANCED = 0 x00,
IOSM_CAP_USE_EXT_CAP = 0 x01,
IOSM_EXT_CAP_ERASE_ALL = 0 x08,
IOSM_EXT_CAP_COMMIT_ALL = 0 x20,
};
/**
* enum iosm_ebl_rsp - EBL response field
* @ EBL_CAPS_FLAG : EBL capability flag
* @ EBL_SKIP_ERASE : EBL skip erase flag
* @ EBL_SKIP_CRC : EBL skip wr_pack crc
* @ EBL_EXT_CAPS_HANDLED : EBL extended capability handled flag
* @ EBL_OOS_CONFIG : EBL oos configuration
* @ EBL_RSP_SW_INFO_VER : EBL SW info version
*/
enum iosm_ebl_rsp {
EBL_CAPS_FLAG = 50 ,
EBL_SKIP_ERASE = 54 ,
EBL_SKIP_CRC = 55 ,
EBL_EXT_CAPS_HANDLED = 57 ,
EBL_OOS_CONFIG = 64 ,
EBL_RSP_SW_INFO_VER = 70 ,
};
/**
* enum iosm_mdm_send_recv_data - Data to send to modem
* @ IOSM_MDM_SEND_2 : Send 2 bytes of payload
* @ IOSM_MDM_SEND_4 : Send 4 bytes of payload
* @ IOSM_MDM_SEND_8 : Send 8 bytes of payload
* @ IOSM_MDM_SEND_16 : Send 16 bytes of payload
*/
enum iosm_mdm_send_recv_data {
IOSM_MDM_SEND_2 = 2 ,
IOSM_MDM_SEND_4 = 4 ,
IOSM_MDM_SEND_8 = 8 ,
IOSM_MDM_SEND_16 = 16 ,
};
/**
* struct iosm_ebl_one_error - Structure containing error details
* @ error_class : Error type - standard , security and text error
* @ error_code : Specific error from error type
*/
struct iosm_ebl_one_error {
u16 error_class;
u16 error_code;
};
/**
* struct iosm_ebl_error - Structure with max error type supported
* @ error : Array of one_error structure with max errors
*/
struct iosm_ebl_error {
struct iosm_ebl_one_error error[IOSM_MAX_ERRORS];
};
/**
* struct iosm_swid_table - SWID table data for modem
* @ number_of_data_sets : Number of swid types
* @ sw_id_type : SWID type - SWID
* @ sw_id_val : SWID value
* @ rf_engine_id_type : RF engine ID type - RF_ENGINE_ID
* @ rf_engine_id_val : RF engine ID value
*/
struct iosm_swid_table {
u32 number_of_data_sets;
char sw_id_type[IOSM_EBL_NAME];
u32 sw_id_val;
char rf_engine_id_type[IOSM_EBL_NAME];
u32 rf_engine_id_val;
};
/**
* struct iosm_flash_msg_control - Data sent to modem
* @ action : Action to be performed
* @ type : Type of action
* @ length : Length of the action
* @ arguments : Argument value sent to modem
*/
struct iosm_flash_msg_control {
__le32 action;
__le32 type;
__le32 length;
__le32 arguments;
};
/**
* struct iosm_flash_data - Header Data to be sent to modem
* @ checksum : Checksum value calculated for the payload data
* @ pack_id : Flash Action type
* @ msg_length : Payload length
*/
struct iosm_flash_data {
__le16 checksum;
__le16 pack_id;
__le32 msg_length;
};
int ipc_flash_boot_psi(struct iosm_devlink *ipc_devlink,
const struct firmware *fw);
int ipc_flash_boot_ebl(struct iosm_devlink *ipc_devlink,
const struct firmware *fw);
int ipc_flash_boot_set_capabilities(struct iosm_devlink *ipc_devlink,
u8 *mdm_rsp);
int ipc_flash_link_establish(struct iosm_imem *ipc_imem);
int ipc_flash_read_swid(struct iosm_devlink *ipc_devlink, u8 *mdm_rsp);
int ipc_flash_send_fls(struct iosm_devlink *ipc_devlink,
const struct firmware *fw, u8 *mdm_rsp);
#endif
Messung V0.5 in Prozent C=93 H=97 G=94
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-10-12)
¤
*© Formatika GbR, Deutschland