1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) Marvell International Ltd. and its affiliates 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _SEQ_EXEC_H 8*4882a593Smuzhiyun #define _SEQ_EXEC_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define NA 0xff 11*4882a593Smuzhiyun #define DEFAULT_PARAM 0 12*4882a593Smuzhiyun #define MV_BOARD_TCLK_ERROR 0xffffffff 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define NO_DATA 0xffffffff 15*4882a593Smuzhiyun #define MAX_DATA_ARRAY 5 16*4882a593Smuzhiyun #define FIRST_CELL 0 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* Operation types */ 19*4882a593Smuzhiyun enum mv_op { 20*4882a593Smuzhiyun WRITE_OP, 21*4882a593Smuzhiyun DELAY_OP, 22*4882a593Smuzhiyun POLL_OP, 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Operation parameters */ 26*4882a593Smuzhiyun struct op_params { 27*4882a593Smuzhiyun u32 unit_base_reg; 28*4882a593Smuzhiyun u32 unit_offset; 29*4882a593Smuzhiyun u32 mask; 30*4882a593Smuzhiyun u32 data[MAX_DATA_ARRAY]; /* data array */ 31*4882a593Smuzhiyun u8 wait_time; /* msec */ 32*4882a593Smuzhiyun u16 num_of_loops; /* for polling only */ 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* 36*4882a593Smuzhiyun * Sequence parameters. Each sequence contains: 37*4882a593Smuzhiyun * 1. Sequence id. 38*4882a593Smuzhiyun * 2. Sequence size (total amount of operations during the sequence) 39*4882a593Smuzhiyun * 3. a series of operations. operations can be write, poll or delay 40*4882a593Smuzhiyun * 4. index in the data array (the entry where the relevant data sits) 41*4882a593Smuzhiyun */ 42*4882a593Smuzhiyun struct cfg_seq { 43*4882a593Smuzhiyun struct op_params *op_params_ptr; 44*4882a593Smuzhiyun u8 cfg_seq_size; 45*4882a593Smuzhiyun u8 data_arr_idx; 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun extern struct cfg_seq serdes_seq_db[]; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* 51*4882a593Smuzhiyun * A generic function type for executing an operation (write, poll or delay) 52*4882a593Smuzhiyun */ 53*4882a593Smuzhiyun typedef int (*op_execute_func_ptr)(u32 serdes_num, struct op_params *params, 54*4882a593Smuzhiyun u32 data_arr_idx); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* Specific functions for executing each operation */ 57*4882a593Smuzhiyun int write_op_execute(u32 serdes_num, struct op_params *params, 58*4882a593Smuzhiyun u32 data_arr_idx); 59*4882a593Smuzhiyun int delay_op_execute(u32 serdes_num, struct op_params *params, 60*4882a593Smuzhiyun u32 data_arr_idx); 61*4882a593Smuzhiyun int poll_op_execute(u32 serdes_num, struct op_params *params, u32 data_arr_idx); 62*4882a593Smuzhiyun enum mv_op get_cfg_seq_op(struct op_params *params); 63*4882a593Smuzhiyun int mv_seq_exec(u32 serdes_num, u32 seq_id); 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun #endif /*_SEQ_EXEC_H*/ 66