From 456737b08bbc37d13e4e08fa625413f8b91a6458 Mon Sep 17 00:00:00 2001
From: drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Mon, 23 Oct 2006 14:02:34 +0000
Subject: - several small fixes (thanks to Magnus Lundin and Spencer Oliver) -
 added support for using Luminary Micro development board 'evb_lm3s811' as a
 JTAG interface (thanks to Magnus Lundin)

git-svn-id: svn://svn.berlios.de/openocd/trunk@106 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/flash/str9x.c          |  6 +++---
 src/jtag/ft2232.c          | 10 ++++++++++
 src/jtag/jtag.c            |  1 -
 src/target/arm7_9_common.c |  8 ++++----
 src/target/arm7tdmi.c      |  2 +-
 5 files changed, 18 insertions(+), 9 deletions(-)

(limited to 'src')

diff --git a/src/flash/str9x.c b/src/flash/str9x.c
index 054f5d0a..c07bc757 100644
--- a/src/flash/str9x.c
+++ b/src/flash/str9x.c
@@ -107,7 +107,7 @@ int str9x_build_block_list(struct flash_bank_s *bank)
 			exit(-1);
 	}
 	
-	num_sectors = b0_sectors + 2;
+	num_sectors = b0_sectors + 4;
 	
 	bank->num_sectors = num_sectors;
 	bank->sectors = malloc(sizeof(flash_sector_t) * num_sectors);
@@ -510,7 +510,7 @@ int str9x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
 
 	while (words_remaining > 0)
 	{
-		bank_adr = address & 0x03;
+		bank_adr = address & ~0x03;
 		
 		/* write data command */
 		target_write_u16(target, bank_adr, 0x40);
@@ -552,7 +552,7 @@ int str9x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
 			bytes_written++;
 		}
 		
-		bank_adr = address & 0x03;
+		bank_adr = address & ~0x03;
 		
 		/* write data comamnd */
 		target_write_u16(target, bank_adr, 0x40);
diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c
index 06b419a0..e681b3e5 100644
--- a/src/jtag/ft2232.c
+++ b/src/jtag/ft2232.c
@@ -109,6 +109,7 @@ ft2232_layout_t ft2232_layouts[] =
 	{"jtagkey", jtagkey_init, jtagkey_reset, NULL},
 	{"jtagkey_prototype_v1", jtagkey_init, jtagkey_reset, NULL},
 	{"signalyzer", usbjtag_init, usbjtag_reset, NULL},
+	{"evb_lm3s811", usbjtag_init, usbjtag_reset, NULL},
 	{"olimex-jtag", olimex_jtag_init, olimex_jtag_reset, olimex_jtag_blink},
 	{"m5960", m5960_init, m5960_reset, NULL},
 	{NULL, NULL, NULL},
@@ -1169,6 +1170,15 @@ int usbjtag_init(void)
 		nSRST = 0x20;
 		nSRSTnOE = 0x20;
 	}
+	else if (strcmp(ft2232_layout, "evb_lm3s811") == 0)
+	{
+		nTRST = 0x0;
+		nTRSTnOE = 0x00;
+		nSRST = 0x20;
+		nSRSTnOE = 0x20;
+		low_output = 0x88;
+		low_direction = 0x8b;
+	}
 	else
 	{
 		ERROR("BUG: usbjtag_init called for unknown layout '%s'", ft2232_layout);
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index 5ae74621..4ba227c0 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -1028,7 +1028,6 @@ int jtag_read_buffer(u8 *buffer, scan_command_t *cmd)
 
 			if (cmd->fields[i].in_check_value)
 			{
-				u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits);
 				if ((cmd->fields[i].in_check_mask && buf_cmp_mask(captured, cmd->fields[i].in_check_value, cmd->fields[i].in_check_mask, num_bits))
 					|| (!cmd->fields[i].in_check_mask && buf_cmp(captured, cmd->fields[i].in_check_mask, num_bits)))
 				{
diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index b793ba51..c298c904 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -281,15 +281,15 @@ int arm7_9_add_breakpoint(struct target_s *target, u32 address, u32 length, enum
 		return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 	}
 	
-	if (type == BKPT_HARD)
-		arm7_9->wp_available--;
-	
 	if ((length != 2) && (length != 4))
 	{
 		INFO("only breakpoints of two (Thumb) or four (ARM) bytes length supported");
 		return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
 	}
 	
+	if (type == BKPT_HARD)
+		arm7_9->wp_available--;
+	
 	return ERROR_OK;
 }
 
@@ -1448,7 +1448,7 @@ int arm7_9_step(struct target_s *target, int current, u32 address, int handle_br
 {
 	armv4_5_common_t *armv4_5 = target->arch_info;
 	arm7_9_common_t *arm7_9 = armv4_5->arch_info;
-	breakpoint_t *breakpoint = target->breakpoints;
+	breakpoint_t *breakpoint = NULL;
 
 	if (target->state != TARGET_HALTED)
 	{
diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c
index 11595244..a1fde037 100644
--- a/src/target/arm7tdmi.c
+++ b/src/target/arm7tdmi.c
@@ -869,7 +869,7 @@ int arm7tdmi_target_command(struct command_context_s *cmd_ctx, char *cmd, char *
 		exit(-1);
 	}
 	
-	chain_pos = strtoul(args[2], NULL, 0);
+	chain_pos = strtoul(args[3], NULL, 0);
 	
 	if (argc >= 5)
 		variant = args[4];
-- 
cgit v1.2.3