Chin Liang See | 6355024 | 2014-06-10 01:17:42 -0500 | [diff] [blame] | 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_quad_byte; |
| 17 | }; |
| 18 | |
| 19 | /* |
| 20 | * Shift count to get number of IO scan chain data in granularity |
| 21 | * of 128-bit ( N / 128 ) |
| 22 | */ |
| 23 | #define IO_SCAN_CHAIN_128BIT_SHIFT 7 |
| 24 | |
| 25 | /* |
| 26 | * Mask to get residual IO scan chain data in |
| 27 | * granularity of 128-bit ( N mod 128 ) |
| 28 | */ |
| 29 | #define IO_SCAN_CHAIN_128BIT_MASK 0x7F |
| 30 | |
| 31 | /* |
| 32 | * Shift count to get number of IO scan chain |
| 33 | * data in granularity of 32-bit ( N / 32 ) |
| 34 | */ |
| 35 | #define IO_SCAN_CHAIN_32BIT_SHIFT 5 |
| 36 | |
| 37 | /* |
| 38 | * Mask to get residual IO scan chain data in |
| 39 | * granularity of 32-bit ( N mod 32 ) |
| 40 | */ |
| 41 | #define IO_SCAN_CHAIN_32BIT_MASK 0x1F |
| 42 | |
| 43 | /* Byte mask */ |
| 44 | #define IO_SCAN_CHAIN_BYTE_MASK 0xFF |
| 45 | |
| 46 | /* 24-bits (3 bytes) IO scan chain payload definition */ |
| 47 | #define IO_SCAN_CHAIN_PAYLOAD_24BIT 24 |
| 48 | |
| 49 | /* |
| 50 | * Maximum length of TDI_TDO packet payload is 128 bits, |
| 51 | * represented by (length - 1) in TDI_TDO header |
| 52 | */ |
| 53 | #define TDI_TDO_MAX_PAYLOAD 127 |
| 54 | |
| 55 | /* TDI_TDO packet header for IO scan chain program */ |
| 56 | #define TDI_TDO_HEADER_FIRST_BYTE 0x80 |
| 57 | |
| 58 | /* Position of second command byte for TDI_TDO packet */ |
| 59 | #define TDI_TDO_HEADER_SECOND_BYTE_SHIFT 8 |
| 60 | |
| 61 | /* |
| 62 | * Maximum polling loop to wait for IO scan chain engine |
| 63 | * becomes idle to prevent infinite loop |
| 64 | */ |
| 65 | #define SCAN_MAX_DELAY 100 |
| 66 | |
| 67 | #define SCANMGR_STAT_ACTIVE_GET(x) (((x) & 0x80000000) >> 31) |
| 68 | #define SCANMGR_STAT_WFIFOCNT_GET(x) (((x) & 0x70000000) >> 28) |
| 69 | |
| 70 | /* |
| 71 | * Program HPS IO Scan Chain |
| 72 | * io_scan_chain_id - IO scan chain ID |
| 73 | * io_scan_chain_len_in_bits - IO scan chain length in bits |
| 74 | * iocsr_scan_chain - IO scan chain table |
| 75 | */ |
| 76 | uint32_t scan_mgr_io_scan_chain_prg( |
| 77 | uint32_t io_scan_chain_id, |
| 78 | uint32_t io_scan_chain_len_in_bits, |
| 79 | const uint32_t *iocsr_scan_chain); |
| 80 | |
| 81 | extern const uint32_t iocsr_scan_chain0_table[ |
| 82 | ((CONFIG_HPS_IOCSR_SCANCHAIN0_LENGTH / 32) + 1)]; |
| 83 | extern const uint32_t iocsr_scan_chain1_table[ |
| 84 | ((CONFIG_HPS_IOCSR_SCANCHAIN1_LENGTH / 32) + 1)]; |
| 85 | extern const uint32_t iocsr_scan_chain2_table[ |
| 86 | ((CONFIG_HPS_IOCSR_SCANCHAIN2_LENGTH / 32) + 1)]; |
| 87 | extern const uint32_t iocsr_scan_chain3_table[ |
| 88 | ((CONFIG_HPS_IOCSR_SCANCHAIN3_LENGTH / 32) + 1)]; |
| 89 | |
| 90 | #endif /* _SCAN_MANAGER_H_ */ |