From f8a117258a7f8df85a37b64ea687fa3dfdc48f1c Mon Sep 17 00:00:00 2001 From: ntfreak Date: Wed, 30 Apr 2008 18:33:21 +0000 Subject: - added new device to luminary flash driver - only use SYSRESETREQ on affected luminary parts git-svn-id: svn://svn.berlios.de/openocd/trunk@630 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/target/cortex_m3.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'src/target/cortex_m3.c') diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c index ec385166..fb3b36b4 100644 --- a/src/target/cortex_m3.c +++ b/src/target/cortex_m3.c @@ -673,6 +673,7 @@ int cortex_m3_assert_reset(target_t *target) armv7m_common_t *armv7m = target->arch_info; cortex_m3_common_t *cortex_m3 = armv7m->arch_info; swjdp_common_t *swjdp = &cortex_m3->swjdp_info; + int assert_srst = TRUE; LOG_DEBUG("target->state: %s", target_state_strings[target->state]); @@ -712,12 +713,33 @@ int cortex_m3_assert_reset(target_t *target) if (strcmp(cortex_m3->variant, "lm3s") == 0) { - /* this causes the luminary device to reset using the watchdog */ - ahbap_write_system_atomic_u32(swjdp, NVIC_AIRCR, AIRCR_VECTKEY | AIRCR_SYSRESETREQ ); - LOG_DEBUG("Using Luminary Reset: SYSRESETREQ"); + /* get revision of lm3s target, only early silicon has this issue + * Fury Rev B, DustDevil Rev B, Tempest all ok */ + + u32 did0; + + if (target_read_u32(target, 0x400fe000, &did0) == ERROR_OK) + { + switch ((did0 >> 16) & 0xff) + { + case 0: + /* all Sandstorm suffer issue */ + assert_srst = FALSE; + break; + + case 1: + case 3: + /* only Fury/DustDevil rev A suffer reset problems */ + if (((did0 >> 8) & 0xff) == 0) + assert_srst = FALSE; + break; + } + } } - else + + if (assert_srst == TRUE) { + /* default to asserting srst */ if (jtag_reset_config & RESET_SRST_PULLS_TRST) { jtag_add_reset(1, 1); @@ -727,6 +749,12 @@ int cortex_m3_assert_reset(target_t *target) jtag_add_reset(0, 1); } } + else + { + /* this causes the luminary device to reset using the watchdog */ + ahbap_write_system_atomic_u32(swjdp, NVIC_AIRCR, AIRCR_VECTKEY | AIRCR_SYSRESETREQ ); + LOG_DEBUG("Using Luminary Reset: SYSRESETREQ"); + } target->state = TARGET_RESET; jtag_add_sleep(50000); -- cgit v1.2.3