1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2010 by Oleksandr Tymoshenko <gonzo@bluezbox.com> *
5 ***************************************************************************/
12 #include "jtag/jtag.h"
13 #include "avr32_jtag.h"
15 static int avr32_jtag_set_instr(struct avr32_jtag *jtag_info, int new_instr)
24 if (buf_get_u32(tap->cur_instr, 0, tap->ir_length) != (uint32_t)new_instr) {
26 struct scan_field field;
30 field.num_bits = tap->ir_length;
32 buf_set_u32(t, 0, field.num_bits, new_instr);
35 jtag_add_ir_scan(tap, &field, TAP_IDLE);
36 if (jtag_execute_queue() != ERROR_OK) {
37 LOG_ERROR("%s: setting address failed", __func__);
40 busy = buf_get_u32(ret, 2, 1);
41 } while (busy); /* check for busy bit */
47 static int avr32_jtag_nexus_set_address(struct avr32_jtag *jtag_info,
48 uint32_t addr, int mode)
50 struct scan_field fields[2];
55 memset(fields, 0, sizeof(fields));
58 memset(addr_buf, 0, sizeof(addr_buf));
59 memset(busy_buf, 0, sizeof(busy_buf));
61 buf_set_u32(addr_buf, 0, 1, mode);
62 buf_set_u32(addr_buf, 1, 7, addr);
64 fields[0].num_bits = 26;
65 fields[0].in_value = NULL;
66 fields[0].out_value = NULL;
68 fields[1].num_bits = 8;
69 fields[1].in_value = busy_buf;
70 fields[1].out_value = addr_buf;
72 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
73 if (jtag_execute_queue() != ERROR_OK) {
74 LOG_ERROR("%s: setting address failed", __func__);
77 busy = buf_get_u32(busy_buf, 6, 1);
84 static int avr32_jtag_nexus_read_data(struct avr32_jtag *jtag_info,
88 struct scan_field fields[2];
94 memset(data_buf, 0, sizeof(data_buf));
95 memset(busy_buf, 0, sizeof(busy_buf));
97 fields[0].num_bits = 32;
98 fields[0].out_value = NULL;
99 fields[0].in_value = data_buf;
102 fields[1].num_bits = 2;
103 fields[1].in_value = busy_buf;
104 fields[1].out_value = NULL;
106 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
108 if (jtag_execute_queue() != ERROR_OK) {
109 LOG_ERROR("%s: reading data failed", __func__);
113 busy = buf_get_u32(busy_buf, 0, 1);
116 *pdata = buf_get_u32(data_buf, 0, 32);
121 static int avr32_jtag_nexus_write_data(struct avr32_jtag *jtag_info,
125 struct scan_field fields[2];
128 uint8_t dummy_buf[4];
132 memset(data_buf, 0, sizeof(data_buf));
133 memset(busy_buf, 0, sizeof(busy_buf));
134 memset(dummy_buf, 0, sizeof(dummy_buf));
136 fields[0].num_bits = 2;
137 fields[0].in_value = busy_buf;
138 fields[0].out_value = dummy_buf;
141 buf_set_u32(data_buf, 0, 32, data);
142 fields[1].num_bits = 32;
143 fields[1].in_value = NULL;
144 fields[1].out_value = data_buf;
146 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
148 if (jtag_execute_queue() != ERROR_OK) {
149 LOG_ERROR("%s: reading data failed", __func__);
153 busy = buf_get_u32(busy_buf, 0, 0);
160 int avr32_jtag_nexus_read(struct avr32_jtag *jtag_info,
161 uint32_t addr, uint32_t *value)
163 avr32_jtag_set_instr(jtag_info, AVR32_INST_NEXUS_ACCESS);
164 avr32_jtag_nexus_set_address(jtag_info, addr, MODE_READ);
165 return avr32_jtag_nexus_read_data(jtag_info, value);
168 int avr32_jtag_nexus_write(struct avr32_jtag *jtag_info,
169 uint32_t addr, uint32_t value)
171 avr32_jtag_set_instr(jtag_info, AVR32_INST_NEXUS_ACCESS);
172 avr32_jtag_nexus_set_address(jtag_info, addr, MODE_WRITE);
173 return avr32_jtag_nexus_write_data(jtag_info, value);
176 static int avr32_jtag_mwa_set_address(struct avr32_jtag *jtag_info, int slave,
177 uint32_t addr, int mode)
179 struct scan_field fields[2];
181 uint8_t slave_buf[4];
185 memset(fields, 0, sizeof(fields));
188 memset(addr_buf, 0, sizeof(addr_buf));
189 memset(busy_buf, 0, sizeof(busy_buf));
190 memset(slave_buf, 0, sizeof(slave_buf));
192 buf_set_u32(slave_buf, 0, 4, slave);
193 buf_set_u32(addr_buf, 0, 1, mode);
194 buf_set_u32(addr_buf, 1, 30, addr >> 2);
196 fields[0].num_bits = 31;
197 fields[0].in_value = NULL;
198 fields[0].out_value = addr_buf;
200 fields[1].num_bits = 4;
201 fields[1].in_value = busy_buf;
202 fields[1].out_value = slave_buf;
204 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
205 if (jtag_execute_queue() != ERROR_OK) {
206 LOG_ERROR("%s: setting address failed", __func__);
209 busy = buf_get_u32(busy_buf, 1, 1);
215 static int avr32_jtag_mwa_read_data(struct avr32_jtag *jtag_info,
219 struct scan_field fields[2];
225 memset(data_buf, 0, sizeof(data_buf));
226 memset(busy_buf, 0, sizeof(busy_buf));
228 fields[0].num_bits = 32;
229 fields[0].out_value = NULL;
230 fields[0].in_value = data_buf;
233 fields[1].num_bits = 3;
234 fields[1].in_value = busy_buf;
235 fields[1].out_value = NULL;
237 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
239 if (jtag_execute_queue() != ERROR_OK) {
240 LOG_ERROR("%s: reading data failed", __func__);
244 busy = buf_get_u32(busy_buf, 0, 1);
247 *pdata = buf_get_u32(data_buf, 0, 32);
252 static int avr32_jtag_mwa_write_data(struct avr32_jtag *jtag_info,
256 struct scan_field fields[2];
263 memset(data_buf, 0, sizeof(data_buf));
264 memset(busy_buf, 0, sizeof(busy_buf));
265 memset(zero_buf, 0, sizeof(zero_buf));
267 buf_set_u32(data_buf, 0, 32, data);
268 fields[0].num_bits = 3;
269 fields[0].in_value = busy_buf;
270 fields[0].out_value = zero_buf;
272 fields[1].num_bits = 32;
273 fields[1].out_value = data_buf;
274 fields[1].in_value = NULL;
277 jtag_add_dr_scan(jtag_info->tap, 2, fields, TAP_IDLE);
279 if (jtag_execute_queue() != ERROR_OK) {
280 LOG_ERROR("%s: reading data failed", __func__);
284 busy = buf_get_u32(busy_buf, 0, 1);
290 int avr32_jtag_mwa_read(struct avr32_jtag *jtag_info, int slave,
291 uint32_t addr, uint32_t *value)
293 avr32_jtag_set_instr(jtag_info, AVR32_INST_MW_ACCESS);
294 avr32_jtag_mwa_set_address(jtag_info, slave, addr, MODE_READ);
295 avr32_jtag_mwa_read_data(jtag_info, value);
300 int avr32_jtag_mwa_write(struct avr32_jtag *jtag_info, int slave,
301 uint32_t addr, uint32_t value)
303 avr32_jtag_set_instr(jtag_info, AVR32_INST_MW_ACCESS);
304 avr32_jtag_mwa_set_address(jtag_info, slave, addr, MODE_WRITE);
305 avr32_jtag_mwa_write_data(jtag_info, value);
310 int avr32_jtag_exec(struct avr32_jtag *jtag_info, uint32_t inst)
315 retval = avr32_jtag_nexus_write(jtag_info, AVR32_OCDREG_DINST, inst);
316 if (retval != ERROR_OK)
320 retval = avr32_jtag_nexus_read(jtag_info, AVR32_OCDREG_DS, &ds);
321 if (retval != ERROR_OK)
323 } while ((ds & OCDREG_DS_DBA) && !(ds & OCDREG_DS_INC));
328 int avr32_ocd_setbits(struct avr32_jtag *jtag, int reg, uint32_t bits)
333 res = avr32_jtag_nexus_read(jtag, reg, &value);
338 res = avr32_jtag_nexus_write(jtag, reg, value);
345 int avr32_ocd_clearbits(struct avr32_jtag *jtag, int reg, uint32_t bits)
350 res = avr32_jtag_nexus_read(jtag, reg, &value);
355 res = avr32_jtag_nexus_write(jtag, reg, value);