]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/arm/include/asm/arch-socfpga/scan_manager.h
Merge branch 'karo-tx-uboot' into kc-merge
[karo-tx-uboot.git] / arch / arm / include / asm / arch-socfpga / scan_manager.h
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 /*
63  * Maximum polling loop to wait for IO scan chain engine
64  * becomes idle to prevent infinite loop
65  */
66 #define SCAN_MAX_DELAY                          100
67
68 #define SCANMGR_STAT_ACTIVE_GET(x) (((x) & 0x80000000) >> 31)
69 #define SCANMGR_STAT_WFIFOCNT_GET(x) (((x) & 0x70000000) >> 28)
70
71 /*
72  * Program HPS IO Scan Chain
73  * io_scan_chain_id - IO scan chain ID
74  * io_scan_chain_len_in_bits - IO scan chain length in bits
75  * iocsr_scan_chain - IO scan chain table
76  */
77 uint32_t scan_mgr_io_scan_chain_prg(
78         uint32_t io_scan_chain_id,
79         uint32_t io_scan_chain_len_in_bits,
80         const uint32_t *iocsr_scan_chain);
81
82 extern const uint32_t iocsr_scan_chain0_table[
83         ((CONFIG_HPS_IOCSR_SCANCHAIN0_LENGTH / 32) + 1)];
84 extern const uint32_t iocsr_scan_chain1_table[
85         ((CONFIG_HPS_IOCSR_SCANCHAIN1_LENGTH / 32) + 1)];
86 extern const uint32_t iocsr_scan_chain2_table[
87         ((CONFIG_HPS_IOCSR_SCANCHAIN2_LENGTH / 32) + 1)];
88 extern const uint32_t iocsr_scan_chain3_table[
89         ((CONFIG_HPS_IOCSR_SCANCHAIN3_LENGTH / 32) + 1)];
90
91 int scan_mgr_configure_iocsr(void);
92
93 #endif /* _SCAN_MANAGER_H_ */