summaryrefslogtreecommitdiff
path: root/src/target/arm946e.h
diff options
context:
space:
mode:
authorddraskovic <ddraskovic@sequans.com>2010-11-04 14:33:10 +0100
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-11-04 14:52:47 +0100
commit9e3d43cfe75df7c4f6797d630576f1a02428b218 (patch)
treec331246ddc8cd9b14131ab4f0c5bdb16ee69dae4 /src/target/arm946e.h
parent70b15389962637f13f5f3f10a6beebabed419c69 (diff)
downloadopenocd+libswd-9e3d43cfe75df7c4f6797d630576f1a02428b218.tar.gz
openocd+libswd-9e3d43cfe75df7c4f6797d630576f1a02428b218.tar.bz2
openocd+libswd-9e3d43cfe75df7c4f6797d630576f1a02428b218.tar.xz
openocd+libswd-9e3d43cfe75df7c4f6797d630576f1a02428b218.zip
arm964e: Add support for ARM946E target.
So far most of the people have been using existing ARM966E in the place of ARM946E, because they have practically the same scan chains. However, ARM946E has caches, which further complicates JATG handling via scan-chain. this was preventing single-stepping for ARM946E when SW breakpoints are used. This patch thus introduces : 1) Correct cache handling on memory write 2) Possibility to flush whole cache and turn it off during debug, or just to flush affected lines (faster and better) 3) Correct SW breakpoint handling and correct single-stepping 4) Corrects the bug on CP15 read and write, so CP15 values are now correctly R/W
Diffstat (limited to 'src/target/arm946e.h')
-rw-r--r--src/target/arm946e.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/target/arm946e.h b/src/target/arm946e.h
new file mode 100644
index 00000000..557674e3
--- /dev/null
+++ b/src/target/arm946e.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Dominic Rath *
+ * Dominic.Rath@gmx.de *
+ * *
+ * Copyright (C) 2008 by Spencer Oliver *
+ * spen@spen-soft.co.uk *
+ * *
+ * Copyright (C) 2010 by Drasko DRASKOVIC *
+ * drasko.draskovic@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef ARM946E_H
+#define ARM946E_H
+
+#include "arm9tdmi.h"
+
+#define ARM946E_COMMON_MAGIC 0x20f920f9
+
+struct arm946e_common
+{
+ struct arm7_9_common arm7_9_common;
+ int common_magic;
+ uint32_t cp15_control_reg;
+};
+
+static inline struct arm946e_common *
+target_to_arm946(struct target *target)
+{
+ return container_of(target->arch_info, struct arm946e_common,
+ arm7_9_common.armv4_5_common);
+}
+
+int arm946e_init_arch_info(struct target *target,
+ struct arm946e_common *arm946e, struct jtag_tap *tap);
+int arm946e_write_cp15(struct target *target, int reg_addr, uint32_t value);
+
+extern const struct command_registration arm946e_command_handlers[];
+
+#endif /* ARM946E_H */