Lines Matching +full:data +full:- +full:bits
1 // SPDX-License-Identifier: GPL-2.0+
22 * Maximum length of TDI_TDO packet payload is 128 bits,
23 * represented by (length - 1) in TDI_TDO header.
38 * scan_chain_engine_is_idle() - Check if the JTAG scan chain is idle
51 status = readl(&scan_manager_base->stat); in scan_chain_engine_is_idle()
54 } while (max_iter--); in scan_chain_engine_is_idle()
56 return -ETIMEDOUT; in scan_chain_engine_is_idle()
66 * scan_mgr_jtag_io() - Access the JTAG chain
69 * @parg: Payload argument or data
75 u32 data = parg; in scan_mgr_jtag_io() local
82 data <<= 8; in scan_mgr_jtag_io()
84 data |= (0 << 7); /* TMS instruction. */ in scan_mgr_jtag_io()
85 data |= iarg & 0x3f; /* TMS arg is 6 bits. */ in scan_mgr_jtag_io()
87 data |= (1 << 6); in scan_mgr_jtag_io()
89 data |= (1 << 7); /* TDI/TDO instruction. */ in scan_mgr_jtag_io()
90 data |= iarg & 0xf; /* TDI/TDO arg is 4 bits. */ in scan_mgr_jtag_io()
92 data |= (1 << 4); in scan_mgr_jtag_io()
97 writel(data, &scan_manager_base->fifo_quad_byte); in scan_mgr_jtag_io()
99 writel(data & 0xffff, &scan_manager_base->fifo_double_byte); in scan_mgr_jtag_io()
101 writel(data & 0xff, &scan_manager_base->fifo_single_byte); in scan_mgr_jtag_io()
105 * scan_mgr_jtag_insn_data() - Send JTAG instruction and data
107 * @data: Associated data
108 * @dlen: Length of data in bits
114 scan_mgr_jtag_insn_data(const u8 iarg, const unsigned long *data, in scan_mgr_jtag_insn_data() argument
119 scan_mgr_jtag_io(JTAG_BP_INSN | JTAG_BP_2BYTE, iarg, dlen - 1); in scan_mgr_jtag_insn_data()
121 /* 32 bits or more remain */ in scan_mgr_jtag_insn_data()
123 scan_mgr_jtag_io(JTAG_BP_4BYTE, 0x0, data[i]); in scan_mgr_jtag_insn_data()
125 if ((dlen % 32) > 24) { /* 31...24 bits remain */ in scan_mgr_jtag_insn_data()
126 scan_mgr_jtag_io(JTAG_BP_4BYTE, 0x0, data[i]); in scan_mgr_jtag_insn_data()
129 scan_mgr_jtag_io(0, 0x0, data[i] >> j); in scan_mgr_jtag_insn_data()
136 * scan_mgr_io_scan_chain_prg() - Program HPS IO Scan Chain
152 * De-assert reinit if the IO scan chain is intended for HIO. In in scan_mgr_io_scan_chain_prg()
156 clrbits_le32(&freeze_controller_base->hioctrl, in scan_mgr_io_scan_chain_prg()
171 setbits_le32(&scan_manager_base->en, 1 << io_scan_chain_id); in scan_mgr_io_scan_chain_prg()
183 io_scan_chain_len_in_bits -= rem; in scan_mgr_io_scan_chain_prg()
188 clrbits_le32(&scan_manager_base->en, 1 << io_scan_chain_id); in scan_mgr_io_scan_chain_prg()
193 clrbits_le32(&scan_manager_base->en, 1 << io_scan_chain_id); in scan_mgr_io_scan_chain_prg()
210 * scan_mgr_get_fpga_id() - Obtain FPGA JTAG ID
216 const unsigned long data = 0; in scan_mgr_get_fpga_id() local
221 writel(0x1, &sys_mgr_base->scanmgrgrp_ctrl); in scan_mgr_get_fpga_id()
224 writel(0x80, &scan_manager_base->en); in scan_mgr_get_fpga_id()
226 writel(0x02, &scan_manager_base->stat); in scan_mgr_get_fpga_id()
232 writel(0, &scan_manager_base->stat); in scan_mgr_get_fpga_id()
235 * Go to Test-Logic-Reset state. in scan_mgr_get_fpga_id()
240 /* Go to Run-Test/Idle -> DR-Scan -> Capture-DR -> Shift-DR state. */ in scan_mgr_get_fpga_id()
244 * Push 4 bytes of data through TDI->DR->TDO. in scan_mgr_get_fpga_id()
246 * Length of TDI data is 32bits (length - 1) and they are only in scan_mgr_get_fpga_id()
247 * zeroes as we care only for TDO data. in scan_mgr_get_fpga_id()
249 ret = scan_mgr_jtag_insn_data(0x4, &data, 32); in scan_mgr_get_fpga_id()
250 /* Read 32 bit from captured JTAG data. */ in scan_mgr_get_fpga_id()
252 id = readl(&scan_manager_base->fifo_quad_byte); in scan_mgr_get_fpga_id()
255 writel(0, &scan_manager_base->en); in scan_mgr_get_fpga_id()
256 writel(0, &sys_mgr_base->scanmgrgrp_ctrl); in scan_mgr_get_fpga_id()