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