2 * Copyright (C) 2013 Altera Corporation <www.altera.com>
4 * SPDX-License-Identifier: GPL-2.0+
7 #ifndef _SCAN_MANAGER_H_
8 #define _SCAN_MANAGER_H_
10 struct socfpga_scan_manager {
21 * Shift count to get number of IO scan chain data in granularity
22 * of 128-bit ( N / 128 )
24 #define IO_SCAN_CHAIN_128BIT_SHIFT 7
27 * Mask to get residual IO scan chain data in
28 * granularity of 128-bit ( N mod 128 )
30 #define IO_SCAN_CHAIN_128BIT_MASK 0x7F
33 * Shift count to get number of IO scan chain
34 * data in granularity of 32-bit ( N / 32 )
36 #define IO_SCAN_CHAIN_32BIT_SHIFT 5
39 * Mask to get residual IO scan chain data in
40 * granularity of 32-bit ( N mod 32 )
42 #define IO_SCAN_CHAIN_32BIT_MASK 0x1F
45 #define IO_SCAN_CHAIN_BYTE_MASK 0xFF
47 /* 24-bits (3 bytes) IO scan chain payload definition */
48 #define IO_SCAN_CHAIN_PAYLOAD_24BIT 24
51 * Maximum length of TDI_TDO packet payload is 128 bits,
52 * represented by (length - 1) in TDI_TDO header
54 #define TDI_TDO_MAX_PAYLOAD 127
56 /* TDI_TDO packet header for IO scan chain program */
57 #define TDI_TDO_HEADER_FIRST_BYTE 0x80
59 /* Position of second command byte for TDI_TDO packet */
60 #define TDI_TDO_HEADER_SECOND_BYTE_SHIFT 8
63 * Maximum polling loop to wait for IO scan chain engine
64 * becomes idle to prevent infinite loop
66 #define SCAN_MAX_DELAY 100
68 #define SCANMGR_STAT_ACTIVE_GET(x) (((x) & 0x80000000) >> 31)
69 #define SCANMGR_STAT_WFIFOCNT_GET(x) (((x) & 0x70000000) >> 28)
71 extern const uint32_t iocsr_scan_chain0_table[
72 ((CONFIG_HPS_IOCSR_SCANCHAIN0_LENGTH / 32) + 1)];
73 extern const uint32_t iocsr_scan_chain1_table[
74 ((CONFIG_HPS_IOCSR_SCANCHAIN1_LENGTH / 32) + 1)];
75 extern const uint32_t iocsr_scan_chain2_table[
76 ((CONFIG_HPS_IOCSR_SCANCHAIN2_LENGTH / 32) + 1)];
77 extern const uint32_t iocsr_scan_chain3_table[
78 ((CONFIG_HPS_IOCSR_SCANCHAIN3_LENGTH / 32) + 1)];
80 int scan_mgr_configure_iocsr(void);
82 #endif /* _SCAN_MANAGER_H_ */