111e25f0dSDavid C Somayajulu /* 211e25f0dSDavid C Somayajulu * Copyright (c) 2017-2018 Cavium, Inc. 311e25f0dSDavid C Somayajulu * All rights reserved. 411e25f0dSDavid C Somayajulu * 511e25f0dSDavid C Somayajulu * Redistribution and use in source and binary forms, with or without 611e25f0dSDavid C Somayajulu * modification, are permitted provided that the following conditions 711e25f0dSDavid C Somayajulu * are met: 811e25f0dSDavid C Somayajulu * 911e25f0dSDavid C Somayajulu * 1. Redistributions of source code must retain the above copyright 1011e25f0dSDavid C Somayajulu * notice, this list of conditions and the following disclaimer. 1111e25f0dSDavid C Somayajulu * 2. Redistributions in binary form must reproduce the above copyright 1211e25f0dSDavid C Somayajulu * notice, this list of conditions and the following disclaimer in the 1311e25f0dSDavid C Somayajulu * documentation and/or other materials provided with the distribution. 1411e25f0dSDavid C Somayajulu * 1511e25f0dSDavid C Somayajulu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1611e25f0dSDavid C Somayajulu * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1711e25f0dSDavid C Somayajulu * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1811e25f0dSDavid C Somayajulu * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 1911e25f0dSDavid C Somayajulu * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2011e25f0dSDavid C Somayajulu * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2111e25f0dSDavid C Somayajulu * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2211e25f0dSDavid C Somayajulu * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2311e25f0dSDavid C Somayajulu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2411e25f0dSDavid C Somayajulu * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2511e25f0dSDavid C Somayajulu * POSSIBILITY OF SUCH DAMAGE. 2611e25f0dSDavid C Somayajulu * 2711e25f0dSDavid C Somayajulu */ 2811e25f0dSDavid C Somayajulu 2911e25f0dSDavid C Somayajulu #ifndef __ECORE_HSI_INIT_TOOL__ 3011e25f0dSDavid C Somayajulu #define __ECORE_HSI_INIT_TOOL__ 3111e25f0dSDavid C Somayajulu /**************************************/ 3211e25f0dSDavid C Somayajulu /* Init Tool HSI constants and macros */ 3311e25f0dSDavid C Somayajulu /**************************************/ 3411e25f0dSDavid C Somayajulu 3511e25f0dSDavid C Somayajulu /* Width of GRC address in bits (addresses are specified in dwords) */ 3611e25f0dSDavid C Somayajulu #define GRC_ADDR_BITS 23 3711e25f0dSDavid C Somayajulu #define MAX_GRC_ADDR ((1 << GRC_ADDR_BITS) - 1) 3811e25f0dSDavid C Somayajulu 3911e25f0dSDavid C Somayajulu /* indicates an init that should be applied to any phase ID */ 4011e25f0dSDavid C Somayajulu #define ANY_PHASE_ID 0xffff 4111e25f0dSDavid C Somayajulu 4211e25f0dSDavid C Somayajulu /* Max size in dwords of a zipped array */ 4311e25f0dSDavid C Somayajulu #define MAX_ZIPPED_SIZE 8192 4411e25f0dSDavid C Somayajulu 4511e25f0dSDavid C Somayajulu enum chip_ids 4611e25f0dSDavid C Somayajulu { 4711e25f0dSDavid C Somayajulu CHIP_BB, 4811e25f0dSDavid C Somayajulu CHIP_K2, 4911e25f0dSDavid C Somayajulu CHIP_E5, 5011e25f0dSDavid C Somayajulu MAX_CHIP_IDS 5111e25f0dSDavid C Somayajulu }; 5211e25f0dSDavid C Somayajulu 5311e25f0dSDavid C Somayajulu enum init_modes 5411e25f0dSDavid C Somayajulu { 5511e25f0dSDavid C Somayajulu MODE_BB_A0_DEPRECATED, 5611e25f0dSDavid C Somayajulu MODE_BB, 5711e25f0dSDavid C Somayajulu MODE_K2, 5811e25f0dSDavid C Somayajulu MODE_ASIC, 5911e25f0dSDavid C Somayajulu MODE_EMUL_REDUCED, 6011e25f0dSDavid C Somayajulu MODE_EMUL_FULL, 6111e25f0dSDavid C Somayajulu MODE_FPGA, 6211e25f0dSDavid C Somayajulu MODE_CHIPSIM, 6311e25f0dSDavid C Somayajulu MODE_SF, 6411e25f0dSDavid C Somayajulu MODE_MF_SD, 6511e25f0dSDavid C Somayajulu MODE_MF_SI, 6611e25f0dSDavid C Somayajulu MODE_PORTS_PER_ENG_1, 6711e25f0dSDavid C Somayajulu MODE_PORTS_PER_ENG_2, 6811e25f0dSDavid C Somayajulu MODE_PORTS_PER_ENG_4, 6911e25f0dSDavid C Somayajulu MODE_100G, 7011e25f0dSDavid C Somayajulu MODE_E5, 7111e25f0dSDavid C Somayajulu MAX_INIT_MODES 7211e25f0dSDavid C Somayajulu }; 7311e25f0dSDavid C Somayajulu 7411e25f0dSDavid C Somayajulu enum init_phases 7511e25f0dSDavid C Somayajulu { 7611e25f0dSDavid C Somayajulu PHASE_ENGINE, 7711e25f0dSDavid C Somayajulu PHASE_PORT, 7811e25f0dSDavid C Somayajulu PHASE_PF, 7911e25f0dSDavid C Somayajulu PHASE_VF, 8011e25f0dSDavid C Somayajulu PHASE_QM_PF, 8111e25f0dSDavid C Somayajulu MAX_INIT_PHASES 8211e25f0dSDavid C Somayajulu }; 8311e25f0dSDavid C Somayajulu 8411e25f0dSDavid C Somayajulu enum init_split_types 8511e25f0dSDavid C Somayajulu { 8611e25f0dSDavid C Somayajulu SPLIT_TYPE_NONE, 8711e25f0dSDavid C Somayajulu SPLIT_TYPE_PORT, 8811e25f0dSDavid C Somayajulu SPLIT_TYPE_PF, 8911e25f0dSDavid C Somayajulu SPLIT_TYPE_PORT_PF, 9011e25f0dSDavid C Somayajulu SPLIT_TYPE_VF, 9111e25f0dSDavid C Somayajulu MAX_INIT_SPLIT_TYPES 9211e25f0dSDavid C Somayajulu }; 9311e25f0dSDavid C Somayajulu 9411e25f0dSDavid C Somayajulu /* 9511e25f0dSDavid C Somayajulu * Binary buffer header 9611e25f0dSDavid C Somayajulu */ 9711e25f0dSDavid C Somayajulu struct bin_buffer_hdr 9811e25f0dSDavid C Somayajulu { 99217ec208SDavid C Somayajulu u32 offset /* buffer offset in bytes from the beginning of the binary file */; 100217ec208SDavid C Somayajulu u32 length /* buffer length in bytes */; 10111e25f0dSDavid C Somayajulu }; 10211e25f0dSDavid C Somayajulu 10311e25f0dSDavid C Somayajulu /* 10411e25f0dSDavid C Somayajulu * binary init buffer types 10511e25f0dSDavid C Somayajulu */ 10611e25f0dSDavid C Somayajulu enum bin_init_buffer_type 10711e25f0dSDavid C Somayajulu { 10811e25f0dSDavid C Somayajulu BIN_BUF_INIT_FW_VER_INFO /* fw_ver_info struct */, 10911e25f0dSDavid C Somayajulu BIN_BUF_INIT_CMD /* init commands */, 11011e25f0dSDavid C Somayajulu BIN_BUF_INIT_VAL /* init data */, 11111e25f0dSDavid C Somayajulu BIN_BUF_INIT_MODE_TREE /* init modes tree */, 11211e25f0dSDavid C Somayajulu BIN_BUF_INIT_IRO /* internal RAM offsets */, 11311e25f0dSDavid C Somayajulu MAX_BIN_INIT_BUFFER_TYPE 11411e25f0dSDavid C Somayajulu }; 11511e25f0dSDavid C Somayajulu 11611e25f0dSDavid C Somayajulu /* 11711e25f0dSDavid C Somayajulu * init array header: raw 11811e25f0dSDavid C Somayajulu */ 11911e25f0dSDavid C Somayajulu struct init_array_raw_hdr 12011e25f0dSDavid C Somayajulu { 121217ec208SDavid C Somayajulu u32 data; 12211e25f0dSDavid C Somayajulu #define INIT_ARRAY_RAW_HDR_TYPE_MASK 0xF /* Init array type, from init_array_types enum */ 12311e25f0dSDavid C Somayajulu #define INIT_ARRAY_RAW_HDR_TYPE_SHIFT 0 12411e25f0dSDavid C Somayajulu #define INIT_ARRAY_RAW_HDR_PARAMS_MASK 0xFFFFFFF /* init array params */ 12511e25f0dSDavid C Somayajulu #define INIT_ARRAY_RAW_HDR_PARAMS_SHIFT 4 12611e25f0dSDavid C Somayajulu }; 12711e25f0dSDavid C Somayajulu 12811e25f0dSDavid C Somayajulu /* 12911e25f0dSDavid C Somayajulu * init array header: standard 13011e25f0dSDavid C Somayajulu */ 13111e25f0dSDavid C Somayajulu struct init_array_standard_hdr 13211e25f0dSDavid C Somayajulu { 133217ec208SDavid C Somayajulu u32 data; 13411e25f0dSDavid C Somayajulu #define INIT_ARRAY_STANDARD_HDR_TYPE_MASK 0xF /* Init array type, from init_array_types enum */ 13511e25f0dSDavid C Somayajulu #define INIT_ARRAY_STANDARD_HDR_TYPE_SHIFT 0 13611e25f0dSDavid C Somayajulu #define INIT_ARRAY_STANDARD_HDR_SIZE_MASK 0xFFFFFFF /* Init array size (in dwords) */ 13711e25f0dSDavid C Somayajulu #define INIT_ARRAY_STANDARD_HDR_SIZE_SHIFT 4 13811e25f0dSDavid C Somayajulu }; 13911e25f0dSDavid C Somayajulu 14011e25f0dSDavid C Somayajulu /* 14111e25f0dSDavid C Somayajulu * init array header: zipped 14211e25f0dSDavid C Somayajulu */ 14311e25f0dSDavid C Somayajulu struct init_array_zipped_hdr 14411e25f0dSDavid C Somayajulu { 145217ec208SDavid C Somayajulu u32 data; 14611e25f0dSDavid C Somayajulu #define INIT_ARRAY_ZIPPED_HDR_TYPE_MASK 0xF /* Init array type, from init_array_types enum */ 14711e25f0dSDavid C Somayajulu #define INIT_ARRAY_ZIPPED_HDR_TYPE_SHIFT 0 14811e25f0dSDavid C Somayajulu #define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_MASK 0xFFFFFFF /* Init array zipped size (in bytes) */ 14911e25f0dSDavid C Somayajulu #define INIT_ARRAY_ZIPPED_HDR_ZIPPED_SIZE_SHIFT 4 15011e25f0dSDavid C Somayajulu }; 15111e25f0dSDavid C Somayajulu 15211e25f0dSDavid C Somayajulu /* 15311e25f0dSDavid C Somayajulu * init array header: pattern 15411e25f0dSDavid C Somayajulu */ 15511e25f0dSDavid C Somayajulu struct init_array_pattern_hdr 15611e25f0dSDavid C Somayajulu { 157217ec208SDavid C Somayajulu u32 data; 15811e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_TYPE_MASK 0xF /* Init array type, from init_array_types enum */ 15911e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_TYPE_SHIFT 0 16011e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_MASK 0xF /* pattern size in dword */ 16111e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_PATTERN_SIZE_SHIFT 4 16211e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_REPETITIONS_MASK 0xFFFFFF /* pattern repetitions */ 16311e25f0dSDavid C Somayajulu #define INIT_ARRAY_PATTERN_HDR_REPETITIONS_SHIFT 8 16411e25f0dSDavid C Somayajulu }; 16511e25f0dSDavid C Somayajulu 16611e25f0dSDavid C Somayajulu /* 16711e25f0dSDavid C Somayajulu * init array header union 16811e25f0dSDavid C Somayajulu */ 16911e25f0dSDavid C Somayajulu union init_array_hdr 17011e25f0dSDavid C Somayajulu { 17111e25f0dSDavid C Somayajulu struct init_array_raw_hdr raw /* raw init array header */; 17211e25f0dSDavid C Somayajulu struct init_array_standard_hdr standard /* standard init array header */; 17311e25f0dSDavid C Somayajulu struct init_array_zipped_hdr zipped /* zipped init array header */; 17411e25f0dSDavid C Somayajulu struct init_array_pattern_hdr pattern /* pattern init array header */; 17511e25f0dSDavid C Somayajulu }; 17611e25f0dSDavid C Somayajulu 17711e25f0dSDavid C Somayajulu /* 17811e25f0dSDavid C Somayajulu * init array types 17911e25f0dSDavid C Somayajulu */ 18011e25f0dSDavid C Somayajulu enum init_array_types 18111e25f0dSDavid C Somayajulu { 18211e25f0dSDavid C Somayajulu INIT_ARR_STANDARD /* standard init array */, 18311e25f0dSDavid C Somayajulu INIT_ARR_ZIPPED /* zipped init array */, 18411e25f0dSDavid C Somayajulu INIT_ARR_PATTERN /* a repeated pattern */, 18511e25f0dSDavid C Somayajulu MAX_INIT_ARRAY_TYPES 18611e25f0dSDavid C Somayajulu }; 18711e25f0dSDavid C Somayajulu 18811e25f0dSDavid C Somayajulu /* 18911e25f0dSDavid C Somayajulu * init operation: callback 19011e25f0dSDavid C Somayajulu */ 19111e25f0dSDavid C Somayajulu struct init_callback_op 19211e25f0dSDavid C Somayajulu { 193217ec208SDavid C Somayajulu u32 op_data; 19411e25f0dSDavid C Somayajulu #define INIT_CALLBACK_OP_OP_MASK 0xF /* Init operation, from init_op_types enum */ 19511e25f0dSDavid C Somayajulu #define INIT_CALLBACK_OP_OP_SHIFT 0 19611e25f0dSDavid C Somayajulu #define INIT_CALLBACK_OP_RESERVED_MASK 0xFFFFFFF 19711e25f0dSDavid C Somayajulu #define INIT_CALLBACK_OP_RESERVED_SHIFT 4 198217ec208SDavid C Somayajulu u16 callback_id /* Callback ID */; 199217ec208SDavid C Somayajulu u16 block_id /* Blocks ID */; 20011e25f0dSDavid C Somayajulu }; 20111e25f0dSDavid C Somayajulu 20211e25f0dSDavid C Somayajulu /* 20311e25f0dSDavid C Somayajulu * init operation: delay 20411e25f0dSDavid C Somayajulu */ 20511e25f0dSDavid C Somayajulu struct init_delay_op 20611e25f0dSDavid C Somayajulu { 207217ec208SDavid C Somayajulu u32 op_data; 20811e25f0dSDavid C Somayajulu #define INIT_DELAY_OP_OP_MASK 0xF /* Init operation, from init_op_types enum */ 20911e25f0dSDavid C Somayajulu #define INIT_DELAY_OP_OP_SHIFT 0 21011e25f0dSDavid C Somayajulu #define INIT_DELAY_OP_RESERVED_MASK 0xFFFFFFF 21111e25f0dSDavid C Somayajulu #define INIT_DELAY_OP_RESERVED_SHIFT 4 212217ec208SDavid C Somayajulu u32 delay /* delay in us */; 21311e25f0dSDavid C Somayajulu }; 21411e25f0dSDavid C Somayajulu 21511e25f0dSDavid C Somayajulu /* 21611e25f0dSDavid C Somayajulu * init operation: if_mode 21711e25f0dSDavid C Somayajulu */ 21811e25f0dSDavid C Somayajulu struct init_if_mode_op 21911e25f0dSDavid C Somayajulu { 220217ec208SDavid C Somayajulu u32 op_data; 22111e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_OP_MASK 0xF /* Init operation, from init_op_types enum */ 22211e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_OP_SHIFT 0 22311e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_RESERVED1_MASK 0xFFF 22411e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_RESERVED1_SHIFT 4 22511e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_CMD_OFFSET_MASK 0xFFFF /* Commands to skip if the modes dont match */ 22611e25f0dSDavid C Somayajulu #define INIT_IF_MODE_OP_CMD_OFFSET_SHIFT 16 227217ec208SDavid C Somayajulu u16 reserved2; 228217ec208SDavid C Somayajulu u16 modes_buf_offset /* offset (in bytes) in modes expression buffer */; 22911e25f0dSDavid C Somayajulu }; 23011e25f0dSDavid C Somayajulu 23111e25f0dSDavid C Somayajulu /* 23211e25f0dSDavid C Somayajulu * init operation: if_phase 23311e25f0dSDavid C Somayajulu */ 23411e25f0dSDavid C Somayajulu struct init_if_phase_op 23511e25f0dSDavid C Somayajulu { 236217ec208SDavid C Somayajulu u32 op_data; 23711e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_OP_MASK 0xF /* Init operation, from init_op_types enum */ 23811e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_OP_SHIFT 0 23911e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_DMAE_ENABLE_MASK 0x1 /* Indicates if DMAE is enabled in this phase */ 24011e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_DMAE_ENABLE_SHIFT 4 24111e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_RESERVED1_MASK 0x7FF 24211e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_RESERVED1_SHIFT 5 24311e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_CMD_OFFSET_MASK 0xFFFF /* Commands to skip if the phases dont match */ 24411e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_CMD_OFFSET_SHIFT 16 245217ec208SDavid C Somayajulu u32 phase_data; 24611e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_PHASE_MASK 0xFF /* Init phase */ 24711e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_PHASE_SHIFT 0 24811e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_RESERVED2_MASK 0xFF 24911e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_RESERVED2_SHIFT 8 25011e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_PHASE_ID_MASK 0xFFFF /* Init phase ID */ 25111e25f0dSDavid C Somayajulu #define INIT_IF_PHASE_OP_PHASE_ID_SHIFT 16 25211e25f0dSDavid C Somayajulu }; 25311e25f0dSDavid C Somayajulu 25411e25f0dSDavid C Somayajulu /* 25511e25f0dSDavid C Somayajulu * init mode operators 25611e25f0dSDavid C Somayajulu */ 25711e25f0dSDavid C Somayajulu enum init_mode_ops 25811e25f0dSDavid C Somayajulu { 25911e25f0dSDavid C Somayajulu INIT_MODE_OP_NOT /* init mode not operator */, 26011e25f0dSDavid C Somayajulu INIT_MODE_OP_OR /* init mode or operator */, 26111e25f0dSDavid C Somayajulu INIT_MODE_OP_AND /* init mode and operator */, 26211e25f0dSDavid C Somayajulu MAX_INIT_MODE_OPS 26311e25f0dSDavid C Somayajulu }; 26411e25f0dSDavid C Somayajulu 26511e25f0dSDavid C Somayajulu /* 26611e25f0dSDavid C Somayajulu * init operation: raw 26711e25f0dSDavid C Somayajulu */ 26811e25f0dSDavid C Somayajulu struct init_raw_op 26911e25f0dSDavid C Somayajulu { 270217ec208SDavid C Somayajulu u32 op_data; 27111e25f0dSDavid C Somayajulu #define INIT_RAW_OP_OP_MASK 0xF /* Init operation, from init_op_types enum */ 27211e25f0dSDavid C Somayajulu #define INIT_RAW_OP_OP_SHIFT 0 27311e25f0dSDavid C Somayajulu #define INIT_RAW_OP_PARAM1_MASK 0xFFFFFFF /* init param 1 */ 27411e25f0dSDavid C Somayajulu #define INIT_RAW_OP_PARAM1_SHIFT 4 275217ec208SDavid C Somayajulu u32 param2 /* Init param 2 */; 27611e25f0dSDavid C Somayajulu }; 27711e25f0dSDavid C Somayajulu 27811e25f0dSDavid C Somayajulu /* 27911e25f0dSDavid C Somayajulu * init array params 28011e25f0dSDavid C Somayajulu */ 28111e25f0dSDavid C Somayajulu struct init_op_array_params 28211e25f0dSDavid C Somayajulu { 283217ec208SDavid C Somayajulu u16 size /* array size in dwords */; 284217ec208SDavid C Somayajulu u16 offset /* array start offset in dwords */; 28511e25f0dSDavid C Somayajulu }; 28611e25f0dSDavid C Somayajulu 28711e25f0dSDavid C Somayajulu /* 28811e25f0dSDavid C Somayajulu * Write init operation arguments 28911e25f0dSDavid C Somayajulu */ 29011e25f0dSDavid C Somayajulu union init_write_args 29111e25f0dSDavid C Somayajulu { 292217ec208SDavid C Somayajulu u32 inline_val /* value to write, used when init source is INIT_SRC_INLINE */; 293217ec208SDavid C Somayajulu u32 zeros_count /* number of zeros to write, used when init source is INIT_SRC_ZEROS */; 294217ec208SDavid C Somayajulu u32 array_offset /* array offset to write, used when init source is INIT_SRC_ARRAY */; 29511e25f0dSDavid C Somayajulu struct init_op_array_params runtime /* runtime array params to write, used when init source is INIT_SRC_RUNTIME */; 29611e25f0dSDavid C Somayajulu }; 29711e25f0dSDavid C Somayajulu 29811e25f0dSDavid C Somayajulu /* 29911e25f0dSDavid C Somayajulu * init operation: write 30011e25f0dSDavid C Somayajulu */ 30111e25f0dSDavid C Somayajulu struct init_write_op 30211e25f0dSDavid C Somayajulu { 303217ec208SDavid C Somayajulu u32 data; 30411e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_OP_MASK 0xF /* init operation, from init_op_types enum */ 30511e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_OP_SHIFT 0 30611e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_SOURCE_MASK 0x7 /* init source type, taken from init_source_types enum */ 30711e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_SOURCE_SHIFT 4 30811e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_RESERVED_MASK 0x1 30911e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_RESERVED_SHIFT 7 31011e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_WIDE_BUS_MASK 0x1 /* indicates if the register is wide-bus */ 31111e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_WIDE_BUS_SHIFT 8 31211e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_ADDRESS_MASK 0x7FFFFF /* internal (absolute) GRC address, in dwords */ 31311e25f0dSDavid C Somayajulu #define INIT_WRITE_OP_ADDRESS_SHIFT 9 31411e25f0dSDavid C Somayajulu union init_write_args args /* Write init operation arguments */; 31511e25f0dSDavid C Somayajulu }; 31611e25f0dSDavid C Somayajulu 31711e25f0dSDavid C Somayajulu /* 31811e25f0dSDavid C Somayajulu * init operation: read 31911e25f0dSDavid C Somayajulu */ 32011e25f0dSDavid C Somayajulu struct init_read_op 32111e25f0dSDavid C Somayajulu { 322217ec208SDavid C Somayajulu u32 op_data; 32311e25f0dSDavid C Somayajulu #define INIT_READ_OP_OP_MASK 0xF /* init operation, from init_op_types enum */ 32411e25f0dSDavid C Somayajulu #define INIT_READ_OP_OP_SHIFT 0 32511e25f0dSDavid C Somayajulu #define INIT_READ_OP_POLL_TYPE_MASK 0xF /* polling type, from init_poll_types enum */ 32611e25f0dSDavid C Somayajulu #define INIT_READ_OP_POLL_TYPE_SHIFT 4 32711e25f0dSDavid C Somayajulu #define INIT_READ_OP_RESERVED_MASK 0x1 32811e25f0dSDavid C Somayajulu #define INIT_READ_OP_RESERVED_SHIFT 8 32911e25f0dSDavid C Somayajulu #define INIT_READ_OP_ADDRESS_MASK 0x7FFFFF /* internal (absolute) GRC address, in dwords */ 33011e25f0dSDavid C Somayajulu #define INIT_READ_OP_ADDRESS_SHIFT 9 331217ec208SDavid C Somayajulu u32 expected_val /* expected polling value, used only when polling is done */; 33211e25f0dSDavid C Somayajulu }; 33311e25f0dSDavid C Somayajulu 33411e25f0dSDavid C Somayajulu /* 33511e25f0dSDavid C Somayajulu * Init operations union 33611e25f0dSDavid C Somayajulu */ 33711e25f0dSDavid C Somayajulu union init_op 33811e25f0dSDavid C Somayajulu { 33911e25f0dSDavid C Somayajulu struct init_raw_op raw /* raw init operation */; 34011e25f0dSDavid C Somayajulu struct init_write_op write /* write init operation */; 34111e25f0dSDavid C Somayajulu struct init_read_op read /* read init operation */; 34211e25f0dSDavid C Somayajulu struct init_if_mode_op if_mode /* if_mode init operation */; 34311e25f0dSDavid C Somayajulu struct init_if_phase_op if_phase /* if_phase init operation */; 34411e25f0dSDavid C Somayajulu struct init_callback_op callback /* callback init operation */; 34511e25f0dSDavid C Somayajulu struct init_delay_op delay /* delay init operation */; 34611e25f0dSDavid C Somayajulu }; 34711e25f0dSDavid C Somayajulu 34811e25f0dSDavid C Somayajulu /* 34911e25f0dSDavid C Somayajulu * Init command operation types 35011e25f0dSDavid C Somayajulu */ 35111e25f0dSDavid C Somayajulu enum init_op_types 35211e25f0dSDavid C Somayajulu { 35311e25f0dSDavid C Somayajulu INIT_OP_READ /* GRC read init command */, 35411e25f0dSDavid C Somayajulu INIT_OP_WRITE /* GRC write init command */, 35511e25f0dSDavid C Somayajulu INIT_OP_IF_MODE /* Skip init commands if the init modes expression doesnt match */, 35611e25f0dSDavid C Somayajulu INIT_OP_IF_PHASE /* Skip init commands if the init phase doesnt match */, 35711e25f0dSDavid C Somayajulu INIT_OP_DELAY /* delay init command */, 35811e25f0dSDavid C Somayajulu INIT_OP_CALLBACK /* callback init command */, 35911e25f0dSDavid C Somayajulu MAX_INIT_OP_TYPES 36011e25f0dSDavid C Somayajulu }; 36111e25f0dSDavid C Somayajulu 36211e25f0dSDavid C Somayajulu /* 36311e25f0dSDavid C Somayajulu * init polling types 36411e25f0dSDavid C Somayajulu */ 36511e25f0dSDavid C Somayajulu enum init_poll_types 36611e25f0dSDavid C Somayajulu { 36711e25f0dSDavid C Somayajulu INIT_POLL_NONE /* No polling */, 36811e25f0dSDavid C Somayajulu INIT_POLL_EQ /* init value is included in the init command */, 36911e25f0dSDavid C Somayajulu INIT_POLL_OR /* init value is all zeros */, 37011e25f0dSDavid C Somayajulu INIT_POLL_AND /* init value is an array of values */, 37111e25f0dSDavid C Somayajulu MAX_INIT_POLL_TYPES 37211e25f0dSDavid C Somayajulu }; 37311e25f0dSDavid C Somayajulu 37411e25f0dSDavid C Somayajulu /* 37511e25f0dSDavid C Somayajulu * init source types 37611e25f0dSDavid C Somayajulu */ 37711e25f0dSDavid C Somayajulu enum init_source_types 37811e25f0dSDavid C Somayajulu { 37911e25f0dSDavid C Somayajulu INIT_SRC_INLINE /* init value is included in the init command */, 38011e25f0dSDavid C Somayajulu INIT_SRC_ZEROS /* init value is all zeros */, 38111e25f0dSDavid C Somayajulu INIT_SRC_ARRAY /* init value is an array of values */, 38211e25f0dSDavid C Somayajulu INIT_SRC_RUNTIME /* init value is provided during runtime */, 38311e25f0dSDavid C Somayajulu MAX_INIT_SOURCE_TYPES 38411e25f0dSDavid C Somayajulu }; 38511e25f0dSDavid C Somayajulu 38611e25f0dSDavid C Somayajulu /* 38711e25f0dSDavid C Somayajulu * Internal RAM Offsets macro data 38811e25f0dSDavid C Somayajulu */ 38911e25f0dSDavid C Somayajulu struct iro 39011e25f0dSDavid C Somayajulu { 391217ec208SDavid C Somayajulu u32 base /* RAM field offset */; 392217ec208SDavid C Somayajulu u16 m1 /* multiplier 1 */; 393217ec208SDavid C Somayajulu u16 m2 /* multiplier 2 */; 394217ec208SDavid C Somayajulu u16 m3 /* multiplier 3 */; 395217ec208SDavid C Somayajulu u16 size /* RAM field size */; 39611e25f0dSDavid C Somayajulu }; 39711e25f0dSDavid C Somayajulu 39811e25f0dSDavid C Somayajulu #endif /* __ECORE_HSI_INIT_TOOL__ */ 399