blob: 94ad50bd6b34ab898a27f9583c5a41c517377360 [file] [log] [blame]
Chin Liang See63550242014-06-10 01:17:42 -05001/*
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
10struct socfpga_scan_manager {
11 u32 stat;
12 u32 en;
13 u32 padding[2];
14 u32 fifo_single_byte;
15 u32 fifo_double_byte;
Dinh Nguyencd9440b2014-11-26 12:14:32 -060016 u32 fifo_triple_byte;
Chin Liang See63550242014-06-10 01:17:42 -050017 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
Chin Liang See112cb0d2014-07-22 04:28:35 -050071int scan_mgr_configure_iocsr(void);
Marek Vasut9c3e0062015-07-25 09:53:23 +020072int iocsr_get_config_table(const unsigned int chain_id,
73 const unsigned long **table,
74 unsigned int *table_len);
Chin Liang See112cb0d2014-07-22 04:28:35 -050075
Chin Liang See63550242014-06-10 01:17:42 -050076#endif /* _SCAN_MANAGER_H_ */