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