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

iwl-context-info-gen3.h (9669B)


      1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
      2/*
      3 * Copyright (C) 2018, 2020-2022 Intel Corporation
      4 */
      5#ifndef __iwl_context_info_file_gen3_h__
      6#define __iwl_context_info_file_gen3_h__
      7
      8#include "iwl-context-info.h"
      9
     10#define CSR_CTXT_INFO_BOOT_CTRL         0x0
     11#define CSR_CTXT_INFO_ADDR              0x118
     12#define CSR_IML_DATA_ADDR               0x120
     13#define CSR_IML_SIZE_ADDR               0x128
     14#define CSR_IML_RESP_ADDR               0x12c
     15
     16/* Set bit for enabling automatic function boot */
     17#define CSR_AUTO_FUNC_BOOT_ENA          BIT(1)
     18/* Set bit for initiating function boot */
     19#define CSR_AUTO_FUNC_INIT              BIT(7)
     20
     21/**
     22 * enum iwl_prph_scratch_mtr_format - tfd size configuration
     23 * @IWL_PRPH_MTR_FORMAT_16B: 16 bit tfd
     24 * @IWL_PRPH_MTR_FORMAT_32B: 32 bit tfd
     25 * @IWL_PRPH_MTR_FORMAT_64B: 64 bit tfd
     26 * @IWL_PRPH_MTR_FORMAT_256B: 256 bit tfd
     27 */
     28enum iwl_prph_scratch_mtr_format {
     29	IWL_PRPH_MTR_FORMAT_16B = 0x0,
     30	IWL_PRPH_MTR_FORMAT_32B = 0x40000,
     31	IWL_PRPH_MTR_FORMAT_64B = 0x80000,
     32	IWL_PRPH_MTR_FORMAT_256B = 0xC0000,
     33};
     34
     35/**
     36 * enum iwl_prph_scratch_flags - PRPH scratch control flags
     37 * @IWL_PRPH_SCRATCH_IMR_DEBUG_EN: IMR support for debug
     38 * @IWL_PRPH_SCRATCH_EARLY_DEBUG_EN: enable early debug conf
     39 * @IWL_PRPH_SCRATCH_EDBG_DEST_DRAM: use DRAM, with size allocated
     40 *	in hwm config.
     41 * @IWL_PRPH_SCRATCH_EDBG_DEST_INTERNAL: use buffer on SRAM
     42 * @IWL_PRPH_SCRATCH_EDBG_DEST_ST_ARBITER: use st arbiter, mainly for
     43 *	multicomm.
     44 * @IWL_PRPH_SCRATCH_EDBG_DEST_TB22DTF: route debug data to SoC HW
     45 * @IWL_PRPH_SCTATCH_RB_SIZE_4K: Use 4K RB size (the default is 2K)
     46 * @IWL_PRPH_SCRATCH_MTR_MODE: format used for completion - 0: for
     47 *	completion descriptor, 1 for responses (legacy)
     48 * @IWL_PRPH_SCRATCH_MTR_FORMAT: a mask for the size of the tfd.
     49 *	There are 4 optional values: 0: 16 bit, 1: 32 bit, 2: 64 bit,
     50 *	3: 256 bit.
     51 * @IWL_PRPH_SCRATCH_RB_SIZE_EXT_MASK: RB size full information, ignored
     52 *	by older firmware versions, so set IWL_PRPH_SCRATCH_RB_SIZE_4K
     53 *	appropriately; use the below values for this.
     54 * @IWL_PRPH_SCRATCH_RB_SIZE_EXT_8K: 8kB RB size
     55 * @IWL_PRPH_SCRATCH_RB_SIZE_EXT_12K: 12kB RB size
     56 * @IWL_PRPH_SCRATCH_RB_SIZE_EXT_16K: 16kB RB size
     57 */
     58enum iwl_prph_scratch_flags {
     59	IWL_PRPH_SCRATCH_IMR_DEBUG_EN		= BIT(1),
     60	IWL_PRPH_SCRATCH_EARLY_DEBUG_EN		= BIT(4),
     61	IWL_PRPH_SCRATCH_EDBG_DEST_DRAM		= BIT(8),
     62	IWL_PRPH_SCRATCH_EDBG_DEST_INTERNAL	= BIT(9),
     63	IWL_PRPH_SCRATCH_EDBG_DEST_ST_ARBITER	= BIT(10),
     64	IWL_PRPH_SCRATCH_EDBG_DEST_TB22DTF	= BIT(11),
     65	IWL_PRPH_SCRATCH_RB_SIZE_4K		= BIT(16),
     66	IWL_PRPH_SCRATCH_MTR_MODE		= BIT(17),
     67	IWL_PRPH_SCRATCH_MTR_FORMAT		= BIT(18) | BIT(19),
     68	IWL_PRPH_SCRATCH_RB_SIZE_EXT_MASK	= 0xf << 20,
     69	IWL_PRPH_SCRATCH_RB_SIZE_EXT_8K		= 8 << 20,
     70	IWL_PRPH_SCRATCH_RB_SIZE_EXT_12K	= 9 << 20,
     71	IWL_PRPH_SCRATCH_RB_SIZE_EXT_16K	= 10 << 20,
     72};
     73
     74/*
     75 * struct iwl_prph_scratch_version - version structure
     76 * @mac_id: SKU and revision id
     77 * @version: prph scratch information version id
     78 * @size: the size of the context information in DWs
     79 * @reserved: reserved
     80 */
     81struct iwl_prph_scratch_version {
     82	__le16 mac_id;
     83	__le16 version;
     84	__le16 size;
     85	__le16 reserved;
     86} __packed; /* PERIPH_SCRATCH_VERSION_S */
     87
     88/*
     89 * struct iwl_prph_scratch_control - control structure
     90 * @control_flags: context information flags see &enum iwl_prph_scratch_flags
     91 * @reserved: reserved
     92 */
     93struct iwl_prph_scratch_control {
     94	__le32 control_flags;
     95	__le32 reserved;
     96} __packed; /* PERIPH_SCRATCH_CONTROL_S */
     97
     98/*
     99 * struct iwl_prph_scratch_pnvm_cfg - ror config
    100 * @pnvm_base_addr: PNVM start address
    101 * @pnvm_size: PNVM size in DWs
    102 * @reserved: reserved
    103 */
    104struct iwl_prph_scratch_pnvm_cfg {
    105	__le64 pnvm_base_addr;
    106	__le32 pnvm_size;
    107	__le32 reserved;
    108} __packed; /* PERIPH_SCRATCH_PNVM_CFG_S */
    109
    110/*
    111 * struct iwl_prph_scratch_hwm_cfg - hwm config
    112 * @hwm_base_addr: hwm start address
    113 * @hwm_size: hwm size in DWs
    114 * @debug_token_config: debug preset
    115 */
    116struct iwl_prph_scratch_hwm_cfg {
    117	__le64 hwm_base_addr;
    118	__le32 hwm_size;
    119	__le32 debug_token_config;
    120} __packed; /* PERIPH_SCRATCH_HWM_CFG_S */
    121
    122/*
    123 * struct iwl_prph_scratch_rbd_cfg - RBDs configuration
    124 * @free_rbd_addr: default queue free RB CB base address
    125 * @reserved: reserved
    126 */
    127struct iwl_prph_scratch_rbd_cfg {
    128	__le64 free_rbd_addr;
    129	__le32 reserved;
    130} __packed; /* PERIPH_SCRATCH_RBD_CFG_S */
    131
    132/*
    133 * struct iwl_prph_scratch_uefi_cfg - prph scratch reduce power table
    134 * @base_addr: reduce power table address
    135 * @size: table size in dwords
    136 */
    137struct iwl_prph_scratch_uefi_cfg {
    138	__le64 base_addr;
    139	__le32 size;
    140	__le32 reserved;
    141} __packed; /* PERIPH_SCRATCH_UEFI_CFG_S */
    142
    143/*
    144 * struct iwl_prph_scratch_ctrl_cfg - prph scratch ctrl and config
    145 * @version: version information of context info and HW
    146 * @control: control flags of FH configurations
    147 * @pnvm_cfg: ror configuration
    148 * @hwm_cfg: hwm configuration
    149 * @rbd_cfg: default RX queue configuration
    150 */
    151struct iwl_prph_scratch_ctrl_cfg {
    152	struct iwl_prph_scratch_version version;
    153	struct iwl_prph_scratch_control control;
    154	struct iwl_prph_scratch_pnvm_cfg pnvm_cfg;
    155	struct iwl_prph_scratch_hwm_cfg hwm_cfg;
    156	struct iwl_prph_scratch_rbd_cfg rbd_cfg;
    157	struct iwl_prph_scratch_uefi_cfg reduce_power_cfg;
    158} __packed; /* PERIPH_SCRATCH_CTRL_CFG_S */
    159
    160/*
    161 * struct iwl_prph_scratch - peripheral scratch mapping
    162 * @ctrl_cfg: control and configuration of prph scratch
    163 * @dram: firmware images addresses in DRAM
    164 * @reserved: reserved
    165 */
    166struct iwl_prph_scratch {
    167	struct iwl_prph_scratch_ctrl_cfg ctrl_cfg;
    168	__le32 reserved[12];
    169	struct iwl_context_info_dram dram;
    170} __packed; /* PERIPH_SCRATCH_S */
    171
    172/*
    173 * struct iwl_prph_info - peripheral information
    174 * @boot_stage_mirror: reflects the value in the Boot Stage CSR register
    175 * @ipc_status_mirror: reflects the value in the IPC Status CSR register
    176 * @sleep_notif: indicates the peripheral sleep status
    177 * @reserved: reserved
    178 */
    179struct iwl_prph_info {
    180	__le32 boot_stage_mirror;
    181	__le32 ipc_status_mirror;
    182	__le32 sleep_notif;
    183	__le32 reserved;
    184} __packed; /* PERIPH_INFO_S */
    185
    186/*
    187 * struct iwl_context_info_gen3 - device INIT configuration
    188 * @version: version of the context information
    189 * @size: size of context information in DWs
    190 * @config: context in which the peripheral would execute - a subset of
    191 *	capability csr register published by the peripheral
    192 * @prph_info_base_addr: the peripheral information structure start address
    193 * @cr_head_idx_arr_base_addr: the completion ring head index array
    194 *	start address
    195 * @tr_tail_idx_arr_base_addr: the transfer ring tail index array
    196 *	start address
    197 * @cr_tail_idx_arr_base_addr: the completion ring tail index array
    198 *	start address
    199 * @tr_head_idx_arr_base_addr: the transfer ring head index array
    200 *	start address
    201 * @cr_idx_arr_size: number of entries in the completion ring index array
    202 * @tr_idx_arr_size: number of entries in the transfer ring index array
    203 * @mtr_base_addr: the message transfer ring start address
    204 * @mcr_base_addr: the message completion ring start address
    205 * @mtr_size: number of entries which the message transfer ring can hold
    206 * @mcr_size: number of entries which the message completion ring can hold
    207 * @mtr_doorbell_vec: the doorbell vector associated with the message
    208 *	transfer ring
    209 * @mcr_doorbell_vec: the doorbell vector associated with the message
    210 *	completion ring
    211 * @mtr_msi_vec: the MSI which shall be generated by the peripheral after
    212 *	completing a transfer descriptor in the message transfer ring
    213 * @mcr_msi_vec: the MSI which shall be generated by the peripheral after
    214 *	completing a completion descriptor in the message completion ring
    215 * @mtr_opt_header_size: the size of the optional header in the transfer
    216 *	descriptor associated with the message transfer ring in DWs
    217 * @mtr_opt_footer_size: the size of the optional footer in the transfer
    218 *	descriptor associated with the message transfer ring in DWs
    219 * @mcr_opt_header_size: the size of the optional header in the completion
    220 *	descriptor associated with the message completion ring in DWs
    221 * @mcr_opt_footer_size: the size of the optional footer in the completion
    222 *	descriptor associated with the message completion ring in DWs
    223 * @msg_rings_ctrl_flags: message rings control flags
    224 * @prph_info_msi_vec: the MSI which shall be generated by the peripheral
    225 *	after updating the Peripheral Information structure
    226 * @prph_scratch_base_addr: the peripheral scratch structure start address
    227 * @prph_scratch_size: the size of the peripheral scratch structure in DWs
    228 * @reserved: reserved
    229 */
    230struct iwl_context_info_gen3 {
    231	__le16 version;
    232	__le16 size;
    233	__le32 config;
    234	__le64 prph_info_base_addr;
    235	__le64 cr_head_idx_arr_base_addr;
    236	__le64 tr_tail_idx_arr_base_addr;
    237	__le64 cr_tail_idx_arr_base_addr;
    238	__le64 tr_head_idx_arr_base_addr;
    239	__le16 cr_idx_arr_size;
    240	__le16 tr_idx_arr_size;
    241	__le64 mtr_base_addr;
    242	__le64 mcr_base_addr;
    243	__le16 mtr_size;
    244	__le16 mcr_size;
    245	__le16 mtr_doorbell_vec;
    246	__le16 mcr_doorbell_vec;
    247	__le16 mtr_msi_vec;
    248	__le16 mcr_msi_vec;
    249	u8 mtr_opt_header_size;
    250	u8 mtr_opt_footer_size;
    251	u8 mcr_opt_header_size;
    252	u8 mcr_opt_footer_size;
    253	__le16 msg_rings_ctrl_flags;
    254	__le16 prph_info_msi_vec;
    255	__le64 prph_scratch_base_addr;
    256	__le32 prph_scratch_size;
    257	__le32 reserved;
    258} __packed; /* IPC_CONTEXT_INFO_S */
    259
    260int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans,
    261				 const struct fw_img *fw);
    262void iwl_pcie_ctxt_info_gen3_free(struct iwl_trans *trans, bool alive);
    263
    264int iwl_trans_pcie_ctx_info_gen3_set_pnvm(struct iwl_trans *trans,
    265					  const void *data, u32 len);
    266int iwl_trans_pcie_ctx_info_gen3_set_reduce_power(struct iwl_trans *trans,
    267						  const void *data, u32 len);
    268
    269#endif /* __iwl_context_info_file_gen3_h__ */