Exemplo n.º 1
0
static void amt_jtagaccel_runtest(int num_cycles)
{
	int i = 0;
	uint8_t aw_scan_tms_5;
	uint8_t aw_scan_tms_1to4;

	tap_state_t saved_end_state = tap_get_end_state();

	/* only do a state_move when we're not already in IDLE */
	if (tap_get_state() != TAP_IDLE) {
		amt_jtagaccel_end_state(TAP_IDLE);
		amt_jtagaccel_state_move();
	}

	while (num_cycles - i >= 5) {
		aw_scan_tms_5 = 0x40;
		AMT_AW(aw_scan_tms_5);
		i += 5;
	}

	if (num_cycles - i > 0) {
		aw_scan_tms_1to4 = 0x80 | ((num_cycles - i - 1) & 0x3) << 4;
		AMT_AW(aw_scan_tms_1to4);
	}

	amt_jtagaccel_end_state(saved_end_state);
	if (tap_get_state() != tap_get_end_state())
		amt_jtagaccel_state_move();
}
Exemplo n.º 2
0
static void amt_jtagaccel_state_move(void)
{
	uint8_t aw_scan_tms_5;
	uint8_t tms_scan[2];

	tap_state_t cur_state = tap_get_state();
	tap_state_t end_state = tap_get_end_state();

	tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][0];
	tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][1];

	aw_scan_tms_5 = 0x40 | (tms_scan[0] & 0x1f);
	AMT_AW(aw_scan_tms_5);
	int jtag_speed = 0;
	int retval = jtag_get_speed(&jtag_speed);
	assert(retval == ERROR_OK);
	if (jtag_speed > 3 || rtck_enabled)
		amt_wait_scan_busy();

	if (tms_scan[0] & 0x80) {
		aw_scan_tms_5 = 0x40 | (tms_scan[1] & 0x1f);
		AMT_AW(aw_scan_tms_5);
		if (jtag_speed > 3 || rtck_enabled)
			amt_wait_scan_busy();
	}

	tap_set_state(end_state);
}
Exemplo n.º 3
0
void amt_jtagaccel_state_move(void)
{
	u8 aw_scan_tms_5;
	u8 tms_scan[2];

	tap_state_t	cur_state = tap_get_state();
	tap_state_t	end_state = tap_get_end_state();

	tms_scan[0] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][0];
	tms_scan[1] = amt_jtagaccel_tap_move[tap_move_ndx(cur_state)][tap_move_ndx(end_state)][1];

	aw_scan_tms_5 = 0x40 | (tms_scan[0] & 0x1f);
	AMT_AW(aw_scan_tms_5);
	if (jtag_speed > 3 || rtck_enabled)
		amt_wait_scan_busy();

	if (tms_scan[0] & 0x80)
	{
		aw_scan_tms_5 = 0x40 | (tms_scan[1] & 0x1f);
		AMT_AW(aw_scan_tms_5);
		if (jtag_speed > 3 || rtck_enabled)
			amt_wait_scan_busy();
	}

	tap_set_state(end_state);
}
Exemplo n.º 4
0
static int amt_jtagaccel_speed(int speed)
{
	aw_control_baudrate &= 0xf0;
	aw_control_baudrate |= speed & 0x0f;
	AMT_AW(aw_control_baudrate);

	return ERROR_OK;
}
Exemplo n.º 5
0
static void amt_jtagaccel_reset(int trst, int srst)
{
	if (trst == 1)
		aw_control_rst |= 0x4;
	else if (trst == 0)
		aw_control_rst &= ~0x4;

	if (srst == 1)
		aw_control_rst |= 0x1;
	else if (srst == 0)
		aw_control_rst &= ~0x1;

	AMT_AW(aw_control_rst);
}
Exemplo n.º 6
0
static void amt_jtagaccel_scan(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size)
{
	int bits_left = scan_size;
	int bit_count = 0;
	tap_state_t saved_end_state = tap_get_end_state();
	uint8_t aw_tdi_option;
	uint8_t dw_tdi_scan;
	uint8_t dr_tdo;
	uint8_t aw_tms_scan;
	uint8_t tms_scan[2];
	int jtag_speed_var;
	int retval = jtag_get_speed(&jtag_speed_var);
	assert(retval == ERROR_OK);

	if (ir_scan)
		amt_jtagaccel_end_state(TAP_IRSHIFT);
	else
		amt_jtagaccel_end_state(TAP_DRSHIFT);

	/* Only move if we're not already there */
	if (tap_get_state() != tap_get_end_state())
		amt_jtagaccel_state_move();

	amt_jtagaccel_end_state(saved_end_state);

	/* handle unaligned bits at the beginning */
	if ((scan_size - 1) % 8) {
		aw_tdi_option = 0x30 | (((scan_size - 1) % 8) - 1);
		AMT_AW(aw_tdi_option);

		dw_tdi_scan = buf_get_u32(buffer, bit_count, (scan_size - 1) % 8) & 0xff;
		AMT_DW(dw_tdi_scan);
		if (jtag_speed_var > 3 || rtck_enabled)
			amt_wait_scan_busy();

		if ((type == SCAN_IN) || (type == SCAN_IO)) {
			AMT_DR(dr_tdo);
			dr_tdo = dr_tdo >> (8 - ((scan_size - 1) % 8));
			buf_set_u32(buffer, bit_count, (scan_size - 1) % 8, dr_tdo);
		}
Exemplo n.º 7
0
void amt_jtagaccel_scan(int ir_scan, enum scan_type type, u8 *buffer, int scan_size)
{
	int bits_left = scan_size;
	int bit_count = 0;
	tap_state_t saved_end_state = tap_get_end_state();
	u8 aw_tdi_option;
	u8 dw_tdi_scan;
	u8 dr_tdo;
	u8 aw_tms_scan;
	u8 tms_scan[2];

	if (ir_scan)
		amt_jtagaccel_end_state(TAP_IRSHIFT);
	else
		amt_jtagaccel_end_state(TAP_DRSHIFT);

	amt_jtagaccel_state_move();
	amt_jtagaccel_end_state(saved_end_state);

	/* handle unaligned bits at the beginning */
	if ((scan_size - 1) % 8)
	{
		aw_tdi_option = 0x30 | (((scan_size - 1) % 8) - 1);
		AMT_AW(aw_tdi_option);

		dw_tdi_scan = buf_get_u32(buffer, bit_count, (scan_size - 1) % 8) & 0xff;
		AMT_DW(dw_tdi_scan);
		if (jtag_speed > 3 || rtck_enabled)
			amt_wait_scan_busy();

		if ((type == SCAN_IN) || (type == SCAN_IO))
		{
			AMT_DR(dr_tdo);
			dr_tdo = dr_tdo >> (8 - ((scan_size - 1) % 8));
			buf_set_u32(buffer, bit_count, (scan_size - 1) % 8, dr_tdo);
		}