ARM: use <target/arm.h> not armv4_5.h
authorDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 7 Dec 2009 22:54:13 +0000 (14:54 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 7 Dec 2009 22:57:44 +0000 (14:57 -0800)
Move most declarations in <target/armv4_5.h> to <target/arm.h>
and update users.

What's left in the older file is stuff that I think should be
removed ... the old register cache access stuff, which makes it
awkward to support microcontroller profile (Cortex-M) cores.

The armv4_5_run_algorithm() declaration was moved too, even
though it's not yet as generic as it probably ought to be.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
24 files changed:
src/flash/nand/arm_io.c
src/flash/nand/orion.c
src/flash/nor/aduc702x.c
src/flash/nor/cfi.c
src/flash/nor/lpc2900.c
src/flash/nor/str7x.c
src/target/Makefile.am
src/target/arm.h [new file with mode: 0644]
src/target/arm11.h
src/target/arm7_9_common.c
src/target/arm7_9_common.h
src/target/arm_dpm.c
src/target/arm_semihosting.c
src/target/arm_simulator.c
src/target/armv4_5.c
src/target/armv4_5.h
src/target/armv7a.h
src/target/armv7m.h
src/target/etb.c
src/target/etm.c
src/target/etm_dummy.c
src/target/oocd_trace.c
src/target/xscale.c
src/target/xscale.h

index 4c746757cf841b6311411766d4e61f1744aafe94..0cd39c00ee70c9ed5a5b3b2fb3502c3b8d93897c 100644 (file)
@@ -27,7 +27,7 @@
 #include "core.h"
 #include "arm_io.h"
 #include <helper/binarybuffer.h>
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/algorithm.h>
 
 
index 01d4a082b31f42dfa95809a72620ce21dc0b4bee..b46ffaed1fb8a9bf3baeee8608f995d5301c2c92 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "imp.h"
 #include "arm_io.h"
-#include <target/armv4_5.h>
+#include <target/arm.h>
 
 
 struct orion_nand_controller
index 57018bb1dfef53e69df639500f5827d72a81baab..211b54e7598485bdff00d15393f5fce8bead94bb 100644 (file)
@@ -27,7 +27,7 @@
 #include <helper/binarybuffer.h>
 #include <helper/time_support.h>
 #include <target/algorithm.h>
-#include <target/armv4_5.h>
+#include <target/arm.h>
 
 
 static int aduc702x_build_sector_list(struct flash_bank *bank);
index 1ab93418818219059d3cc5f579b186eb0c79318b..71270b99a944d338defbcac7239312ff5d076483 100644 (file)
@@ -26,7 +26,7 @@
 #include "imp.h"
 #include "cfi.h"
 #include "non_cfi.h"
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <helper/binarybuffer.h>
 #include <target/algorithm.h>
 
index ce74bbbac4eef15c010eb12ea27221eb65985394..13dd731c786e1777f09d981e0d8d1cc8915d6255 100644 (file)
@@ -26,7 +26,7 @@
 #include "imp.h"
 #include <helper/binarybuffer.h>
 #include <target/algorithm.h>
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/image.h>
 
 
index ef693e95844a2dcf21157bb4c8a0854654a23867..040097a0131a5caf9bfeae1b1fdaafad8cc63179 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "imp.h"
 #include "str7x.h"
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <helper/binarybuffer.h>
 #include <target/algorithm.h>
 
index bd7bf7ae252b66aeb6fb8a11c3309d7fc4bb2e44..f1d5d15c67ec141ea7aad7ff72a272e6ed999268 100644 (file)
@@ -97,6 +97,7 @@ MIPS32_SRC = \
 
 noinst_HEADERS = \
        algorithm.h \
+       arm.h \
        arm_dpm.h \
        arm_jtag.h \
        arm_adi_v5.h \
diff --git a/src/target/arm.h b/src/target/arm.h
new file mode 100644 (file)
index 0000000..00dbe2d
--- /dev/null
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2005 by Dominic Rath
+ * Dominic.Rath@gmx.de
+ *
+ * Copyright (C) 2008 by Spencer Oliver
+ * spen@spen-soft.co.uk
+ *
+ * Copyright (C) 2009 by Ã˜yvind Harboe
+ * oyvind.harboe@zylin.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 ARM_H
+#define ARM_H
+
+#include <target/target.h>
+#include <helper/command.h>
+
+
+/**
+ * @file
+ * Holds the interface to ARM cores.
+ *
+ * At this writing, only "classic ARM" cores built on the ARMv4 register
+ * and mode model are supported.  The Thumb2-only microcontroller profile
+ * support has not yet been integrated, affecting Cortex-M parts.
+ */
+
+/**
+ * These numbers match the five low bits of the *PSR registers on
+ * "classic ARM" processors, which build on the ARMv4 processor
+ * modes and register set.
+ */
+enum arm_mode {
+       ARM_MODE_USR = 16,
+       ARM_MODE_FIQ = 17,
+       ARM_MODE_IRQ = 18,
+       ARM_MODE_SVC = 19,
+       ARM_MODE_ABT = 23,
+       ARM_MODE_MON = 26,
+       ARM_MODE_UND = 27,
+       ARM_MODE_SYS = 31,
+       ARM_MODE_ANY = -1
+};
+
+const char *arm_mode_name(unsigned psr_mode);
+bool is_arm_mode(unsigned psr_mode);
+
+/** The PSR "T" and "J" bits define the mode of "classic ARM" cores. */
+enum arm_state {
+       ARM_STATE_ARM,
+       ARM_STATE_THUMB,
+       ARM_STATE_JAZELLE,
+       ARM_STATE_THUMB_EE,
+};
+
+extern const char *arm_state_strings[];
+
+#define ARM_COMMON_MAGIC 0x0A450A45
+
+/**
+ * Represents a generic ARM core, with standard application registers.
+ *
+ * There are sixteen application registers (including PC, SP, LR) and a PSR.
+ * Cortex-M series cores do not support as many core states or shadowed
+ * registers as traditional ARM cores, and only support Thumb2 instructions.
+ */
+struct arm {
+       int common_magic;
+       struct reg_cache *core_cache;
+
+       /** Handle to the CPSR; valid in all core modes. */
+       struct reg *cpsr;
+
+       /** Handle to the SPSR; valid only in core modes with an SPSR. */
+       struct reg *spsr;
+
+       /** Support for arm_reg_current() */
+       const int *map;
+
+       /**
+        * Indicates what registers are in the ARM state core register set.
+        * ARM_MODE_ANY indicates the standard set of 37 registers,
+        * seen on for example ARM7TDMI cores.  ARM_MODE_MON indicates three
+        * more registers are shadowed, for "Secure Monitor" mode.
+        */
+       enum arm_mode core_type;
+
+       /** Record the current core mode: SVC, USR, or some other mode. */
+       enum arm_mode core_mode;
+
+       /** Record the current core state: ARM, Thumb, or otherwise. */
+       enum arm_state core_state;
+
+       /** Flag reporting unavailability of the BKPT instruction. */
+       bool is_armv4;
+
+       /** Flag reporting whether semihosting is active. */
+       bool is_semihosting;
+
+       /** Value to be returned by semihosting SYS_ERRNO request. */
+       int semihosting_errno;
+
+       /** Backpointer to the target. */
+       struct target *target;
+
+       /** Handle for the debug module, if one is present. */
+       struct arm_dpm *dpm;
+
+       /** Handle for the Embedded Trace Module, if one is present. */
+       struct etm_context *etm;
+
+       /* FIXME all these methods should take "struct arm *" not target */
+
+       /** Retrieve all core registers, for display. */
+       int (*full_context)(struct target *target);
+
+       /** Retrieve a single core register. */
+       int (*read_core_reg)(struct target *target, struct reg *reg,
+                       int num, enum arm_mode mode);
+       int (*write_core_reg)(struct target *target, struct reg *reg,
+                       int num, enum arm_mode mode, uint32_t value);
+
+       /** Read coprocessor register.  */
+       int (*mrc)(struct target *target, int cpnum,
+                       uint32_t op1, uint32_t op2,
+                       uint32_t CRn, uint32_t CRm,
+                       uint32_t *value);
+
+       /** Write coprocessor register.  */
+       int (*mcr)(struct target *target, int cpnum,
+                       uint32_t op1, uint32_t op2,
+                       uint32_t CRn, uint32_t CRm,
+                       uint32_t value);
+
+       void *arch_info;
+};
+
+/** Convert target handle to generic ARM target state handle. */
+static inline struct arm *target_to_arm(struct target *target)
+{
+       return target->arch_info;
+}
+
+static inline bool is_arm(struct arm *arm)
+{
+       return arm && arm->common_magic == ARM_COMMON_MAGIC;
+}
+
+struct arm_algorithm {
+       int common_magic;
+
+       enum arm_mode core_mode;
+       enum arm_state core_state;
+};
+
+struct arm_reg {
+       int num;
+       enum arm_mode mode;
+       struct target *target;
+       struct arm *armv4_5_common;
+       uint32_t value;
+};
+
+struct reg_cache *arm_build_reg_cache(struct target *target, struct arm *arm);
+
+extern const struct command_registration arm_command_handlers[];
+
+int arm_arch_state(struct target *target);
+int arm_get_gdb_reg_list(struct target *target,
+               struct reg **reg_list[], int *reg_list_size);
+
+int arm_init_arch_info(struct target *target, struct arm *arm);
+
+/* REVISIT rename this once it's usable by ARMv7-M */
+int armv4_5_run_algorithm(struct target *target,
+               int num_mem_params, struct mem_param *mem_params,
+               int num_reg_params, struct reg_param *reg_params,
+               uint32_t entry_point, uint32_t exit_point,
+               int timeout_ms, void *arch_info);
+
+int arm_checksum_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *checksum);
+int arm_blank_check_memory(struct target *target,
+               uint32_t address, uint32_t count, uint32_t *blank);
+
+void arm_set_cpsr(struct arm *arm, uint32_t cpsr);
+struct reg *arm_reg_current(struct arm *arm, unsigned regnum);
+
+extern struct reg arm_gdb_dummy_fp_reg;
+extern struct reg arm_gdb_dummy_fps_reg;
+
+#endif /* ARM_H */
index 421f8d185c699997cb64ca7b641aa31570c60a7b..bce5bd9cd36b00139e2ec55fd6745868eaac2881 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef ARM11_H
 #define ARM11_H
 
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/arm_dpm.h>
 
 #define ARM11_TAP_DEFAULT                      TAP_INVALID
index 03071dfd7ba394823d74b516d4f5be25e248a6e1..64a99fb4b8a0ce46c9bef9339a436b513f282fac 100644 (file)
@@ -39,6 +39,7 @@
 #include "arm_semihosting.h"
 #include "algorithm.h"
 #include "register.h"
+#include "armv4_5.h"
 
 
 /**
index 7555bec21fa5398e8bc8ddd74f45170545e98c93..bce17ef694245e996376ba5ee02bef0094209c5d 100644 (file)
@@ -29,7 +29,7 @@
 #ifndef ARM7_9_COMMON_H
 #define ARM7_9_COMMON_H
 
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/arm_jtag.h>
 
 #define        ARM7_9_COMMON_MAGIC 0x0a790a79 /**< */
index 406e30a289f5f4a4c995e60b64a676ef1eadd476..bd9c5d1613c7c08257d7131b532c362cd645c823 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include "armv4_5.h"           /* REVISIT to become arm.h */
+#include "arm.h"
 #include "arm_dpm.h"
 #include <jtag/jtag.h>
 #include "register.h"
index d448d54e8050aa3eed6c0b0c1dbf335d078e8482..f4244c84d11c15985590e2abda59317f1db34fb3 100644 (file)
@@ -34,6 +34,7 @@
 #include "config.h"
 #endif
 
+#include "arm.h"
 #include "armv4_5.h"
 #include "register.h"
 #include "arm_semihosting.h"
index 443f29bf230f4b67e563890dd6914115b9344996..908c61331365a1b123680261c19cb8bb016ebc63 100644 (file)
@@ -24,6 +24,7 @@
 #include "config.h"
 #endif
 
+#include "arm.h"
 #include "armv4_5.h"
 #include "arm_disassembler.h"
 #include "arm_simulator.h"
index 7fec97b58fbe1ebec3f1a9fd200cdd7df4baf81a..dce6d6a638136721642997c3d893e2d0e488bc25 100644 (file)
@@ -27,6 +27,7 @@
 #include "config.h"
 #endif
 
+#include "arm.h"
 #include "armv4_5.h"
 #include "arm_jtag.h"
 #include "breakpoints.h"
index c8882ed75856331c761dc71721226ccff6e33ee4..bacdb72e656a36cb89cdb33a0b34aed68a656add 100644 (file)
 #ifndef ARMV4_5_H
 #define ARMV4_5_H
 
-#include <target/target.h>
-#include <helper/command.h>
-
-
-/**
- * These numbers match the five low bits of the *PSR registers on
- * "classic ARM" processors, which build on the ARMv4 processor
- * modes and register set.
+/* This stuff "knows" that its callers aren't talking
+ * to microcontroller profile (current Cortex-M) parts.
+ * We want to phase it out so core code can be shared.
  */
-enum arm_mode {
-       ARM_MODE_USR = 16,
-       ARM_MODE_FIQ = 17,
-       ARM_MODE_IRQ = 18,
-       ARM_MODE_SVC = 19,
-       ARM_MODE_ABT = 23,
-       ARM_MODE_MON = 26,
-       ARM_MODE_UND = 27,
-       ARM_MODE_SYS = 31,
-       ARM_MODE_ANY = -1
-};
-
-const char *arm_mode_name(unsigned psr_mode);
-bool is_arm_mode(unsigned psr_mode);
-
-/** The PSR "T" and "J" bits define the mode of "classic ARM" cores. */
-enum arm_state {
-       ARM_STATE_ARM,
-       ARM_STATE_THUMB,
-       ARM_STATE_JAZELLE,
-       ARM_STATE_THUMB_EE,
-};
-
-extern const char *arm_state_strings[];
 
 /* OBSOLETE, DO NOT USE IN NEW CODE!  The "number" of an arm_mode is an
  * index into the armv4_5_core_reg_map array.  Its remaining users are
@@ -76,140 +47,4 @@ extern const int armv4_5_core_reg_map[8][17];
 /* offset into armv4_5 core register cache -- OBSOLETE, DO NOT USE! */
 enum { ARMV4_5_CPSR = 31, };
 
-#define ARM_COMMON_MAGIC 0x0A450A45
-
-/**
- * Represents a generic ARM core, with standard application registers.
- *
- * There are sixteen application registers (including PC, SP, LR) and a PSR.
- * Cortex-M series cores do not support as many core states or shadowed
- * registers as traditional ARM cores, and only support Thumb2 instructions.
- */
-struct arm
-{
-       int common_magic;
-       struct reg_cache *core_cache;
-
-       /** Handle to the CPSR; valid in all core modes. */
-       struct reg *cpsr;
-
-       /** Handle to the SPSR; valid only in core modes with an SPSR. */
-       struct reg *spsr;
-
-       /** Support for arm_reg_current() */
-       const int *map;
-
-       /**
-        * Indicates what registers are in the ARM state core register set.
-        * ARM_MODE_ANY indicates the standard set of 37 registers,
-        * seen on for example ARM7TDMI cores.  ARM_MODE_MON indicates three
-        * more registers are shadowed, for "Secure Monitor" mode.
-        */
-       enum arm_mode core_type;
-
-       /** Record the current core mode: SVC, USR, or some other mode. */
-       enum arm_mode core_mode;
-
-       /** Record the current core state: ARM, Thumb, or otherwise. */
-       enum arm_state core_state;
-
-       /** Flag reporting unavailability of the BKPT instruction. */
-       bool is_armv4;
-
-       /** Flag reporting whether semihosting is active. */
-       bool is_semihosting;
-
-       /** Value to be returned by semihosting SYS_ERRNO request. */
-       int semihosting_errno;
-
-       /** Backpointer to the target. */
-       struct target *target;
-
-       /** Handle for the debug module, if one is present. */
-       struct arm_dpm *dpm;
-
-       /** Handle for the Embedded Trace Module, if one is present. */
-       struct etm_context *etm;
-
-       /* FIXME all these methods should take "struct arm *" not target */
-
-       /** Retrieve all core registers, for display. */
-       int (*full_context)(struct target *target);
-
-       /** Retrieve a single core register. */
-       int (*read_core_reg)(struct target *target, struct reg *reg,
-                       int num, enum arm_mode mode);
-       int (*write_core_reg)(struct target *target, struct reg *reg,
-                       int num, enum arm_mode mode, uint32_t value);
-
-       /** Read coprocessor register.  */
-       int (*mrc)(struct target *target, int cpnum,
-                       uint32_t op1, uint32_t op2,
-                       uint32_t CRn, uint32_t CRm,
-                       uint32_t *value);
-
-       /** Write coprocessor register.  */
-       int (*mcr)(struct target *target, int cpnum,
-                       uint32_t op1, uint32_t op2,
-                       uint32_t CRn, uint32_t CRm,
-                       uint32_t value);
-
-       void *arch_info;
-};
-
-/** Convert target handle to generic ARM target state handle. */
-static inline struct arm *target_to_arm(struct target *target)
-{
-       return target->arch_info;
-}
-
-static inline bool is_arm(struct arm *arm)
-{
-       return arm && arm->common_magic == ARM_COMMON_MAGIC;
-}
-
-struct arm_algorithm
-{
-       int common_magic;
-
-       enum arm_mode core_mode;
-       enum arm_state core_state;
-};
-
-struct arm_reg
-{
-       int num;
-       enum arm_mode mode;
-       struct target *target;
-       struct arm *armv4_5_common;
-       uint32_t value;
-};
-
-struct reg_cache *arm_build_reg_cache(struct target *target, struct arm *arm);
-
-int arm_arch_state(struct target *target);
-int arm_get_gdb_reg_list(struct target *target,
-               struct reg **reg_list[], int *reg_list_size);
-
-extern const struct command_registration arm_command_handlers[];
-
-int arm_init_arch_info(struct target *target, struct arm *arm);
-
-int armv4_5_run_algorithm(struct target *target,
-               int num_mem_params, struct mem_param *mem_params,
-               int num_reg_params, struct reg_param *reg_params,
-               uint32_t entry_point, uint32_t exit_point,
-               int timeout_ms, void *arch_info);
-
-int arm_checksum_memory(struct target *target,
-               uint32_t address, uint32_t count, uint32_t *checksum);
-int arm_blank_check_memory(struct target *target,
-               uint32_t address, uint32_t count, uint32_t *blank);
-
-void arm_set_cpsr(struct arm *arm, uint32_t cpsr);
-struct reg *arm_reg_current(struct arm *arm, unsigned regnum);
-
-extern struct reg arm_gdb_dummy_fp_reg;
-extern struct reg arm_gdb_dummy_fps_reg;
-
 #endif /* ARMV4_5_H */
index 24ec8198588adb4048f888d516bb1f7f21c619db..663e5d92d14237eeca437fd5c6646e7da99ef0d7 100644 (file)
@@ -20,7 +20,7 @@
 #define ARMV7A_H
 
 #include <target/arm_adi_v5.h>
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/armv4_5_mmu.h>
 #include <target/armv4_5_cache.h>
 #include <target/arm_dpm.h>
@@ -114,22 +114,6 @@ target_to_armv7a(struct target *target)
 /* See ARMv7a arch spec section C10.8 */
 #define CPUDBG_AUTHSTATUS      0xFB8
 
-struct armv7a_algorithm
-{
-       int common_magic;
-
-       enum arm_mode core_mode;
-       enum arm_state core_state;
-};
-
-struct armv7a_core_reg
-{
-       int num;
-       enum arm_mode mode;
-       struct target *target;
-       struct armv7a_common *armv7a_common;
-};
-
 int armv7a_arch_state(struct target *target);
 struct reg_cache *armv7a_build_reg_cache(struct target *target,
                struct armv7a_common *armv7a_common);
index c60ab8cfff7bca3e5967a1a881b2194c6595be42..f662e16266fe37f6baf624476990e7c3cf131898 100644 (file)
@@ -27,7 +27,7 @@
 #define ARMV7M_COMMON_H
 
 #include <target/arm_adi_v5.h>
-#include <target/armv4_5.h>
+#include <target/arm.h>
 
 /* define for enabling armv7 gdb workarounds */
 #if 1
index bc0e1bf2c714d7bfd7b720df41005125dde90ac7..3113eca0651c70750436b71cb2a255b86586b511 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include "armv4_5.h"
+#include "arm.h"
 #include "etm.h"
 #include "etb.h"
 #include "register.h"
index b45fcf507a9043952de2a9168874ee03046c320c..3aace81ecd1a3c521539b86097f18dd468aab70c 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include "armv4_5.h"
+#include "arm.h"
 #include "etm.h"
 #include "etb.h"
 #include "image.h"
index 647774f24de170bb5424c32e5f7d3b17565da649..19a078f13cf9a93672d18d1f7c74ea0796363acf 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include "armv4_5.h"
+#include "arm.h"
 #include "etm_dummy.h"
 
 
index ac79f18d980be3158ed3f66a4bb806a490799457..ae3a5dff767ae93ff005c025d642ef57570ce937 100644 (file)
@@ -21,7 +21,7 @@
 #include "config.h"
 #endif
 
-#include "armv4_5.h"
+#include "arm.h"
 #include "oocd_trace.h"
 
 /*
index 816579ad8e0d44ee6452cb69bce7d31a59787b85..61994dcb7b25a7d0a5395d023e82c37e40d8f475 100644 (file)
@@ -37,6 +37,7 @@
 #include "register.h"
 #include "image.h"
 #include "arm_opcodes.h"
+#include "armv4_5.h"
 
 
 /*
index 43edeecd0cacd45afa00e35af916f34befa99a83..97038d8c6e8e256eef1ddd8fe8cfdd0d43232d40 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef XSCALE_H
 #define XSCALE_H
 
-#include <target/armv4_5.h>
+#include <target/arm.h>
 #include <target/armv4_5_mmu.h>
 #include <target/trace.h>
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)