cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

iosm_ipc_flash.h (6719B)


      1/* SPDX-License-Identifier: GPL-2.0-only
      2 *
      3 * Copyright (C) 2020-2021 Intel Corporation.
      4 */
      5
      6#ifndef _IOSM_IPC_FLASH_H
      7#define _IOSM_IPC_FLASH_H
      8
      9/* Buffer size used to read the fls image */
     10#define IOSM_FLS_BUF_SIZE 0x00100000
     11/* Full erase start address */
     12#define IOSM_ERASE_START_ADDR 0x00000000
     13/* Erase length for NAND flash */
     14#define IOSM_ERASE_LEN 0xFFFFFFFF
     15/* EBL response Header size */
     16#define IOSM_EBL_HEAD_SIZE  8
     17/* EBL payload size */
     18#define IOSM_EBL_W_PAYL_SIZE  2048
     19/* Total EBL pack size */
     20#define IOSM_EBL_W_PACK_SIZE  (IOSM_EBL_HEAD_SIZE + IOSM_EBL_W_PAYL_SIZE)
     21/* EBL payload size */
     22#define IOSM_EBL_DW_PAYL_SIZE  16384
     23/* Total EBL pack size */
     24#define IOSM_EBL_DW_PACK_SIZE  (IOSM_EBL_HEAD_SIZE + IOSM_EBL_DW_PAYL_SIZE)
     25/* EBL name size */
     26#define IOSM_EBL_NAME  32
     27/* Maximum supported error types */
     28#define IOSM_MAX_ERRORS 8
     29/* Read size for RPSI/EBL response */
     30#define IOSM_READ_SIZE 2
     31/* Link establishment response ack size */
     32#define IOSM_LER_ACK_SIZE 2
     33/* PSI ACK len */
     34#define IOSM_PSI_ACK 8
     35/* SWID capability for packed swid type */
     36#define IOSM_EXT_CAP_SWID_OOS_PACK     0x02
     37/* EBL error response buffer */
     38#define IOSM_EBL_RSP_BUFF 0x0041
     39/* SWID string length */
     40#define IOSM_SWID_STR 64
     41/* Load EBL command size */
     42#define IOSM_RPSI_LOAD_SIZE 0
     43/* EBL payload checksum */
     44#define IOSM_EBL_CKSM 0x0000FFFF
     45/* SWID msg len and argument */
     46#define IOSM_MSG_LEN_ARG 0
     47/* Data to be sent to modem */
     48#define IOSM_MDM_SEND_DATA 0x0000
     49/* Data received from modem as part of erase check */
     50#define IOSM_MDM_ERASE_RSP 0x0001
     51/* Bit shift to calculate Checksum */
     52#define IOSM_EBL_PAYL_SHIFT 16
     53/* Flag To be set */
     54#define IOSM_SET_FLAG 1
     55/* Set flash erase check timeout to 100 msec */
     56#define IOSM_FLASH_ERASE_CHECK_TIMEOUT 100
     57/* Set flash erase check interval to 20 msec */
     58#define IOSM_FLASH_ERASE_CHECK_INTERVAL 20
     59/* Link establishment response ack size */
     60#define IOSM_LER_RSP_SIZE 60
     61
     62/**
     63 * enum iosm_flash_package_type -	Enum for the flashing operations
     64 * @FLASH_SET_PROT_CONF:	Write EBL capabilities
     65 * @FLASH_SEC_START:		Start writing the secpack
     66 * @FLASH_SEC_END:		Validate secpack end
     67 * @FLASH_SET_ADDRESS:		Set the address for flashing
     68 * @FLASH_ERASE_START:		Start erase before flashing
     69 * @FLASH_ERASE_CHECK:		Validate the erase functionality
     70 * @FLASH_OOS_CONTROL:		Retrieve data based on oos actions
     71 * @FLASH_OOS_DATA_READ:	Read data from EBL
     72 * @FLASH_WRITE_IMAGE_RAW:	Write the raw image to flash
     73 */
     74enum iosm_flash_package_type {
     75	FLASH_SET_PROT_CONF = 0x0086,
     76	FLASH_SEC_START = 0x0204,
     77	FLASH_SEC_END,
     78	FLASH_SET_ADDRESS = 0x0802,
     79	FLASH_ERASE_START = 0x0805,
     80	FLASH_ERASE_CHECK,
     81	FLASH_OOS_CONTROL = 0x080C,
     82	FLASH_OOS_DATA_READ = 0x080E,
     83	FLASH_WRITE_IMAGE_RAW,
     84};
     85
     86/**
     87 * enum iosm_out_of_session_action -	Actions possible over the
     88 *					OutOfSession command interface
     89 * @FLASH_OOSC_ACTION_READ:		Read data according to its type
     90 * @FLASH_OOSC_ACTION_ERASE:		Erase data according to its type
     91 */
     92enum iosm_out_of_session_action {
     93	FLASH_OOSC_ACTION_READ = 2,
     94	FLASH_OOSC_ACTION_ERASE = 3,
     95};
     96
     97/**
     98 * enum iosm_out_of_session_type -	Data types that can be handled over the
     99 *					Out Of Session command Interface
    100 * @FLASH_OOSC_TYPE_ALL_FLASH:		The whole flash area
    101 * @FLASH_OOSC_TYPE_SWID_TABLE:		Read the swid table from the target
    102 */
    103enum iosm_out_of_session_type {
    104	FLASH_OOSC_TYPE_ALL_FLASH = 8,
    105	FLASH_OOSC_TYPE_SWID_TABLE = 16,
    106};
    107
    108/**
    109 * enum iosm_ebl_caps -	EBL capability settings
    110 * @IOSM_CAP_NOT_ENHANCED:	If capability not supported
    111 * @IOSM_CAP_USE_EXT_CAP:	To be set if extended capability is set
    112 * @IOSM_EXT_CAP_ERASE_ALL:	Set Erase all capability
    113 * @IOSM_EXT_CAP_COMMIT_ALL:	Set the commit all capability
    114 */
    115enum iosm_ebl_caps {
    116	IOSM_CAP_NOT_ENHANCED = 0x00,
    117	IOSM_CAP_USE_EXT_CAP = 0x01,
    118	IOSM_EXT_CAP_ERASE_ALL = 0x08,
    119	IOSM_EXT_CAP_COMMIT_ALL = 0x20,
    120};
    121
    122/**
    123 * enum iosm_ebl_rsp -  EBL response field
    124 * @EBL_CAPS_FLAG:	EBL capability flag
    125 * @EBL_SKIP_ERASE:	EBL skip erase flag
    126 * @EBL_SKIP_CRC:	EBL skip wr_pack crc
    127 * @EBL_EXT_CAPS_HANDLED:	EBL extended capability handled flag
    128 * @EBL_OOS_CONFIG:	EBL oos configuration
    129 * @EBL_RSP_SW_INFO_VER: EBL SW info version
    130 */
    131enum iosm_ebl_rsp {
    132	EBL_CAPS_FLAG = 50,
    133	EBL_SKIP_ERASE = 54,
    134	EBL_SKIP_CRC = 55,
    135	EBL_EXT_CAPS_HANDLED = 57,
    136	EBL_OOS_CONFIG = 64,
    137	EBL_RSP_SW_INFO_VER = 70,
    138};
    139
    140/**
    141 * enum iosm_mdm_send_recv_data - Data to send to modem
    142 * @IOSM_MDM_SEND_2:	Send 2 bytes of payload
    143 * @IOSM_MDM_SEND_4:	Send 4 bytes of payload
    144 * @IOSM_MDM_SEND_8:	Send 8 bytes of payload
    145 * @IOSM_MDM_SEND_16:	Send 16 bytes of payload
    146 */
    147enum iosm_mdm_send_recv_data {
    148	IOSM_MDM_SEND_2 = 2,
    149	IOSM_MDM_SEND_4 = 4,
    150	IOSM_MDM_SEND_8 = 8,
    151	IOSM_MDM_SEND_16 = 16,
    152};
    153
    154/**
    155 * struct iosm_ebl_one_error -	Structure containing error details
    156 * @error_class:		Error type- standard, security and text error
    157 * @error_code:			Specific error from error type
    158 */
    159struct iosm_ebl_one_error {
    160	u16 error_class;
    161	u16 error_code;
    162};
    163
    164/**
    165 * struct iosm_ebl_error- Structure with max error type supported
    166 * @error:		Array of one_error structure with max errors
    167 */
    168struct iosm_ebl_error {
    169	struct iosm_ebl_one_error error[IOSM_MAX_ERRORS];
    170};
    171
    172/**
    173 * struct iosm_swid_table - SWID table data for modem
    174 * @number_of_data_sets:	Number of swid types
    175 * @sw_id_type:			SWID type - SWID
    176 * @sw_id_val:			SWID value
    177 * @rf_engine_id_type:		RF engine ID type - RF_ENGINE_ID
    178 * @rf_engine_id_val:		RF engine ID value
    179 */
    180struct iosm_swid_table {
    181	u32 number_of_data_sets;
    182	char sw_id_type[IOSM_EBL_NAME];
    183	u32 sw_id_val;
    184	char rf_engine_id_type[IOSM_EBL_NAME];
    185	u32 rf_engine_id_val;
    186};
    187
    188/**
    189 * struct iosm_flash_msg_control - Data sent to modem
    190 * @action:	Action to be performed
    191 * @type:	Type of action
    192 * @length:	Length of the action
    193 * @arguments:	Argument value sent to modem
    194 */
    195struct iosm_flash_msg_control {
    196	__le32 action;
    197	__le32 type;
    198	__le32 length;
    199	__le32 arguments;
    200};
    201
    202/**
    203 * struct iosm_flash_data -  Header Data to be sent to modem
    204 * @checksum:	Checksum value calculated for the payload data
    205 * @pack_id:	Flash Action type
    206 * @msg_length:	Payload length
    207 */
    208struct iosm_flash_data {
    209	__le16  checksum;
    210	__le16  pack_id;
    211	__le32  msg_length;
    212};
    213
    214int ipc_flash_boot_psi(struct iosm_devlink *ipc_devlink,
    215		       const struct firmware *fw);
    216
    217int ipc_flash_boot_ebl(struct iosm_devlink *ipc_devlink,
    218		       const struct firmware *fw);
    219
    220int ipc_flash_boot_set_capabilities(struct iosm_devlink *ipc_devlink,
    221				    u8 *mdm_rsp);
    222
    223int ipc_flash_link_establish(struct iosm_imem *ipc_imem);
    224
    225int ipc_flash_read_swid(struct iosm_devlink *ipc_devlink, u8 *mdm_rsp);
    226
    227int ipc_flash_send_fls(struct iosm_devlink *ipc_devlink,
    228		       const struct firmware *fw, u8 *mdm_rsp);
    229#endif