summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-04 13:47:38 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-04 13:47:38 +0000
commit35b3c95299a97c05078f7dd662d66c89a356869d (patch)
treeb908855a11539228608f57c61d46e06ae208f544 /src/target
parent7abe97565e77d5a9c34099ea15ad1608567b1581 (diff)
downloadopenocd+libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.gz
openocd+libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.bz2
openocd+libswd-35b3c95299a97c05078f7dd662d66c89a356869d.tar.xz
openocd+libswd-35b3c95299a97c05078f7dd662d66c89a356869d.zip
- reverted some of the changes that possibly broke arm926ejs. Waiting
for a bit more info before I can tell with confidence whether or not this would have any effect. - worked on error propagation and output for flash git-svn-id: svn://svn.berlios.de/openocd/trunk@539 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target')
-rw-r--r--src/target/Makefile.am3
-rw-r--r--src/target/arm11.c4
-rw-r--r--src/target/arm7_9_common.c47
-rw-r--r--src/target/cortex_m3.c2
-rw-r--r--src/target/ecos/at91eb40a.elfbin0 -> 36832 bytes
-rw-r--r--src/target/target.c9
-rw-r--r--src/target/target/at91eb40a.cfg4
-rw-r--r--src/target/target/zy1000.cfg3
-rw-r--r--src/target/xscale.c2
9 files changed, 47 insertions, 27 deletions
diff --git a/src/target/Makefile.am b/src/target/Makefile.am
index 83379381..3f003525 100644
--- a/src/target/Makefile.am
+++ b/src/target/Makefile.am
@@ -23,7 +23,8 @@ nobase_dist_pkglib_DATA = xscale/debug_handler.bin event/at91eb40a_reset.script
target/at91r40008.cfg target/lpc2148.cfg target/lpc2294.cfg target/sam7s256.cfg \
target/sam7x256.cfg target/str710.cfg target/str912.cfg target/nslu2.cfg target/pxa255_sst.cfg \
target/pxa255.cfg target/zy1000.cfg event/zy1000_reset.script event/at91sam9260_reset.script target/at91sam9260.cfg \
- target/wi-9c.cfg event/wi-9c_reset.script event/pxa255_reset.script target/stm32.cfg target/xba_revA3.cfg event/xba_revA3.script
+ target/wi-9c.cfg event/wi-9c_reset.script event/pxa255_reset.script target/stm32.cfg target/xba_revA3.cfg event/xba_revA3.script \
+ ecos/at91eb40a.elf
diff --git a/src/target/arm11.c b/src/target/arm11.c
index adcbe749..ea88d5c0 100644
--- a/src/target/arm11.c
+++ b/src/target/arm11.c
@@ -732,8 +732,8 @@ int arm11_halt(struct target_s *target)
if (target->state == TARGET_HALTED)
{
- LOG_WARNING("target was already halted");
- return ERROR_OK;
+ LOG_DEBUG("target was already halted");
+ return ERROR_OK;
}
if (arm11->trst_active)
diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index 63767ae3..4e14497d 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -733,8 +733,18 @@ int arm7_9_poll(target_t *target)
return ERROR_OK;
}
+/*
+ Some -S targets (ARM966E-S in the STR912 isn't affected, ARM926EJ-S
+ in the LPC3180 and AT91SAM9260 is affected) completely stop the JTAG clock
+ while the core is held in reset. It isn't possible to program the halt
+ condition once reset was asserted, hence a hook that allows the target to set
+ up its reset-halt condition prior to asserting reset.
+*/
+
int arm7_9_assert_reset(target_t *target)
{
+ armv4_5_common_t *armv4_5 = target->arch_info;
+ arm7_9_common_t *arm7_9 = armv4_5->arch_info;
LOG_DEBUG("target->state: %s", target_state_strings[target->state]);
if (!(jtag_reset_config & RESET_HAS_SRST))
@@ -743,10 +753,32 @@ int arm7_9_assert_reset(target_t *target)
return ERROR_FAIL;
}
+ /*
+ * Some targets do not support communication while TRST is asserted. We need to
+ * set up the reset vector catch here.
+ *
+ * If TRST is in use, then these settings will be reset anyway, so setting them
+ * here is harmless.
+ */
+ if (arm7_9->has_vector_catch)
+ {
+ /* program vector catch register to catch reset vector */
+ embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_VEC_CATCH], 0x1);
+ }
+ else
+ {
+ /* program watchpoint unit to match on reset vector address */
+ embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_ADDR_MASK], 0x3);
+ embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_DATA_MASK], 0x0);
+ embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_VALUE], 0x100);
+ embeddedice_write_reg(&arm7_9->eice_cache->reg_list[EICE_W0_CONTROL_MASK], 0xf7);
+ }
+
/* we can't know what state the target is in as we might e.g.
* be resetting after a power dropout, so we need to issue a tms/srst
*/
+
/* assert SRST and TRST */
/* system would get ouf sync if we didn't reset test-logic, too */
jtag_add_reset(1, 1);
@@ -766,10 +798,6 @@ int arm7_9_assert_reset(target_t *target)
target->state = TARGET_RESET;
jtag_add_sleep(50000);
- /* at this point we TRST *may* be deasserted */
- arm7_9_prepare_reset_halt(target);
-
-
armv4_5_invalidate_core_regs(target);
return ERROR_OK;
@@ -909,15 +937,6 @@ int arm7_9_soft_reset_halt(struct target_s *target)
return ERROR_OK;
}
-int arm7_9_prepare_reset_halt(target_t *target)
-{
- if ((target->reset_mode!=RESET_HALT)&&(target->reset_mode!=RESET_INIT))
- {
- return ERROR_OK;
- }
- return arm7_9_halt(target);
-}
-
int arm7_9_halt(target_t *target)
{
armv4_5_common_t *armv4_5 = target->arch_info;
@@ -928,7 +947,7 @@ int arm7_9_halt(target_t *target)
if (target->state == TARGET_HALTED)
{
- LOG_WARNING("target was already halted");
+ LOG_DEBUG("target was already halted");
return ERROR_OK;
}
diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c
index 406a00af..19b0a758 100644
--- a/src/target/cortex_m3.c
+++ b/src/target/cortex_m3.c
@@ -429,7 +429,7 @@ int cortex_m3_halt(target_t *target)
if (target->state == TARGET_HALTED)
{
- LOG_WARNING("target was already halted");
+ LOG_DEBUG("target was already halted");
return ERROR_OK;
}
diff --git a/src/target/ecos/at91eb40a.elf b/src/target/ecos/at91eb40a.elf
new file mode 100644
index 00000000..451657a5
--- /dev/null
+++ b/src/target/ecos/at91eb40a.elf
Binary files differ
diff --git a/src/target/target.c b/src/target/target.c
index f90834d1..7673f5d2 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2053,14 +2053,13 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
if (argc < 1)
{
- command_print(cmd_ctx, "usage: verify_image <file> [offset] [type]");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (!target)
{
LOG_ERROR("no target selected");
- return ERROR_OK;
+ return ERROR_FAIL;
}
duration_start_measure(&duration);
@@ -2078,9 +2077,9 @@ int handle_verify_image_command(struct command_context_s *cmd_ctx, char *cmd, ch
image.start_address_set = 0;
- if (image_open(&image, args[0], (argc == 3) ? args[2] : NULL) != ERROR_OK)
+ if ((retval=image_open(&image, args[0], (argc == 3) ? args[2] : NULL)) != ERROR_OK)
{
- return ERROR_OK;
+ return retval;
}
image_size = 0x0;
diff --git a/src/target/target/at91eb40a.cfg b/src/target/target/at91eb40a.cfg
index 3d5eb14e..658c6d0c 100644
--- a/src/target/target/at91eb40a.cfg
+++ b/src/target/target/at91eb40a.cfg
@@ -14,7 +14,6 @@ reset_config srst_only srst_pulls_trst
jtag_device 4 0x1 0xf 0xe
#target configuration
-#target arm7tdmi <endianness> <reset mode> <chainpos> <variant>
target arm7tdmi little reset_init 0 arm7tdmi-s_r4
# speed up memory downloads
@@ -24,6 +23,9 @@ arm7_9 dcc_downloads enable
# OpenOCD does not have a flash driver for for AT91FR40162S
target_script 0 reset event/at91eb40a_reset.script
+#flash driver
+flash bank ecosflash 0x01000000 0x200000 2 2 0 ecos/at91eb40a.elf
+
# required for usable performance. Used for lots of
# other things than flash programming.
working_area 0 0x00000000 0x20000 nobackup
diff --git a/src/target/target/zy1000.cfg b/src/target/target/zy1000.cfg
index 5a2fab68..b082ca24 100644
--- a/src/target/target/zy1000.cfg
+++ b/src/target/target/zy1000.cfg
@@ -14,7 +14,6 @@ reset_config srst_only srst_pulls_trst
jtag_device 4 0x1 0xf 0xe
#target configuration
-#target arm7tdmi <endianness> <reset mode> <chainpos> <variant>
target arm7tdmi little reset_init 0 arm7tdmi-s_r4
# at CPU CLK <32kHz this must be disabled
@@ -22,7 +21,7 @@ arm7 fast_memory_access enable
arm7_9 dcc_downloads enable
-flash bank ecosflash 0x01000000 0x200000 2 2 0 /rom/at91eb40a.elf
+flash bank ecosflash 0x01000000 0x200000 2 2 0 ecos/at91eb40a.elf
target_script 0 reset event/zy1000_reset.script
# required for usable performance. Used for lots of
diff --git a/src/target/xscale.c b/src/target/xscale.c
index 1d379f59..b9a367ad 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -1263,7 +1263,7 @@ int xscale_halt(target_t *target)
if (target->state == TARGET_HALTED)
{
- LOG_WARNING("target was already halted");
+ LOG_DEBUG("target was already halted");
return ERROR_OK;
}
else if (target->state == TARGET_UNKNOWN)