aboutsummaryrefslogtreecommitdiff
path: root/src/helper
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2021-08-08 13:51:33 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2021-08-22 20:26:06 +0000
commit7a61a006decf828f0f75e0602cc17d6efb897f57 (patch)
tree67feda4a4983cd9c04e92b82d7af95b0e7327450 /src/helper
parent66175577e1f5b89470bafa1e613e10307996a3fb (diff)
downloadriscv-openocd-7a61a006decf828f0f75e0602cc17d6efb897f57.zip
riscv-openocd-7a61a006decf828f0f75e0602cc17d6efb897f57.tar.gz
riscv-openocd-7a61a006decf828f0f75e0602cc17d6efb897f57.tar.bz2
jep106: use packed jedec manufacturer code
JEP106 encodes JEDEC-assigned manufacture code as: a) a sequence of zero or more escape codes 0x7f; b) an odd-parity bit of the next 7 bits; c) 7 bits. The same code is often represented as a single value composed by the logical OR between: - the number of escape codes in a), shifted left by 7 positions; - the 7 bits in c). This is the preferred packed representation used by this change. Currently there are only two uses of JEP106 in openocd to get the manufacturer name: - to decode the JTAG IDCODE of each TAP, where the JEP106 code is already packed as in the preferred representation above in bits IDCODE[11:1]; - to decode the ARM CoreSight PIDR register, where the JEP106 code is split in 3 parts: = PIDR3[3:0], corresponding to bits [10:7] of the packed code; = PIDR2[2:0], corresponding to bits [6:4] of the packed code; = PIDR1[7:4], corresponding to bits [3:0] of the packed code. Wrap the existing JEP106 decode function in a simpler API using the packed code. Simplify the callers by skipping the bit unpacking. Change the manufacturer code in CoreSight table dap_partnums[] to match the packed representation, by removing the always-one bit 7 erroneously taken from PIDR bit JEDEC and included in the former table. Change-Id: I63eb4da9e6801fab25e330f1f6b792d2fd619493 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6418 Tested-by: jenkins
Diffstat (limited to 'src/helper')
-rw-r--r--src/helper/jep106.c2
-rw-r--r--src/helper/jep106.h7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/helper/jep106.c b/src/helper/jep106.c
index 33dc61c..5cf769a 100644
--- a/src/helper/jep106.c
+++ b/src/helper/jep106.c
@@ -27,7 +27,7 @@ static const char * const jep106[][126] = {
#include "jep106.inc"
};
-const char *jep106_manufacturer(unsigned bank, unsigned id)
+const char *jep106_table_manufacturer(unsigned int bank, unsigned int id)
{
if (id < 1 || id > 126) {
LOG_DEBUG("BUG: Caller passed out-of-range JEP106 ID!");
diff --git a/src/helper/jep106.h b/src/helper/jep106.h
index 0844580..61b177a 100644
--- a/src/helper/jep106.h
+++ b/src/helper/jep106.h
@@ -27,6 +27,11 @@
* manufacturer associated with bank and id, or one of the strings
* "<invalid>" and "<unknown>".
*/
-const char *jep106_manufacturer(unsigned bank, unsigned id);
+const char *jep106_table_manufacturer(unsigned int bank, unsigned int id);
+
+static inline const char *jep106_manufacturer(unsigned int manufacturer)
+{
+ return jep106_table_manufacturer(manufacturer >> 7, manufacturer & 0x7f);
+}
#endif /* OPENOCD_HELPER_JEP106_H */