1 /*
2  *  Copyright (C) 2013 Altera Corporation <www.altera.com>
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #ifndef	_SCAN_MANAGER_H_
8 #define	_SCAN_MANAGER_H_
9 
10 struct socfpga_scan_manager {
11 	u32	stat;
12 	u32	en;
13 	u32	padding[2];
14 	u32	fifo_single_byte;
15 	u32	fifo_double_byte;
16 	u32	fifo_triple_byte;
17 	u32	fifo_quad_byte;
18 };
19 
20 /*
21  * Shift count to get number of IO scan chain data in granularity
22  * of 128-bit ( N / 128 )
23  */
24 #define IO_SCAN_CHAIN_128BIT_SHIFT		7
25 
26 /*
27  * Mask to get residual IO scan chain data in
28  * granularity of 128-bit ( N mod 128 )
29  */
30 #define IO_SCAN_CHAIN_128BIT_MASK		0x7F
31 
32 /*
33  * Shift count to get number of IO scan chain
34  * data in granularity of 32-bit ( N / 32 )
35  */
36 #define IO_SCAN_CHAIN_32BIT_SHIFT		5
37 
38 /*
39  * Mask to get residual IO scan chain data in
40  * granularity of 32-bit ( N mod 32 )
41  */
42 #define IO_SCAN_CHAIN_32BIT_MASK		0x1F
43 
44 /* Byte mask */
45 #define IO_SCAN_CHAIN_BYTE_MASK			0xFF
46 
47 /* 24-bits (3 bytes) IO scan chain payload definition */
48 #define IO_SCAN_CHAIN_PAYLOAD_24BIT		24
49 
50 /*
51  * Maximum length of TDI_TDO packet payload is 128 bits,
52  * represented by (length - 1) in TDI_TDO header
53  */
54 #define TDI_TDO_MAX_PAYLOAD			127
55 
56 /* TDI_TDO packet header for IO scan chain program */
57 #define TDI_TDO_HEADER_FIRST_BYTE		0x80
58 
59 /* Position of second command byte for TDI_TDO packet */
60 #define TDI_TDO_HEADER_SECOND_BYTE_SHIFT	8
61 
62 int scan_mgr_configure_iocsr(void);
63 int iocsr_get_config_table(const unsigned int chain_id,
64 			   const unsigned long **table,
65 			   unsigned int *table_len);
66 
67 #endif /* _SCAN_MANAGER_H_ */
68