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_ */ 94