jep106: use packed jedec manufacturer code 18/6418/2
authorAntonio Borneo <borneo.antonio@gmail.com>
Sun, 8 Aug 2021 11:51:33 +0000 (13:51 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sun, 22 Aug 2021 20:26:06 +0000 (20:26 +0000)
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
src/helper/jep106.c
src/helper/jep106.h
src/jtag/core.c
src/target/arm_adi_v5.c

index 33dc61c91b7d7f2c50d0994e2f9087845d030691..5cf769aabd293f5380215a1acc4ce1e11b5b22aa 100644 (file)
@@ -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!");
index 08445803e75b1889d93e009d20564bac20e8ea9d..61b177a2f93d75c864a8bc165ecd354dcf4271ce 100644 (file)
  *         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 */
index 13366e01bdebb69f45b068b2b559c302a279b917..7da2a6c35fdbc396e6752bd4c377cfbbb4346353 100644 (file)
@@ -1072,8 +1072,6 @@ void jtag_sleep(uint32_t us)
 
 #define JTAG_MAX_AUTO_TAPS 20
 
-#define EXTRACT_JEP106_BANK(X) (((X) & 0xf00) >> 8)
-#define EXTRACT_JEP106_ID(X)   (((X) & 0xfe) >> 1)
 #define EXTRACT_MFG(X)  (((X) & 0xffe) >> 1)
 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
 #define EXTRACT_VER(X)  (((X) & 0xf0000000) >> 28)
@@ -1141,7 +1139,7 @@ static void jtag_examine_chain_display(enum log_levels level, const char *msg,
                name, msg,
                (unsigned int)idcode,
                (unsigned int)EXTRACT_MFG(idcode),
-               jep106_manufacturer(EXTRACT_JEP106_BANK(idcode), EXTRACT_JEP106_ID(idcode)),
+               jep106_manufacturer(EXTRACT_MFG(idcode)),
                (unsigned int)EXTRACT_PART(idcode),
                (unsigned int)EXTRACT_VER(idcode));
 }
index 65a8bc4c7c55d6cd71454615b7812c4a83f1a276..c29554239b9d6cbbb2eeae05b358ea0b677eec75 100644 (file)
@@ -1123,7 +1123,7 @@ static int dap_read_part_id(struct adiv5_ap *ap, target_addr_t component_base, u
 
 #define ANY_ID 0x1000
 
-#define ARM_ID 0x4BB
+#define ARM_ID 0x23B
 
 static const struct {
        uint16_t designer_id;
@@ -1216,22 +1216,22 @@ static const struct {
        { ARM_ID, 0xd07, "Cortex-A57 Debug",           "(Debug Unit)", },
        { ARM_ID, 0xd08, "Cortex-A72 Debug",           "(Debug Unit)", },
        { ARM_ID, 0xd0b, "Cortex-A76 Debug",           "(Debug Unit)", },
-       { 0x097,  0x9af, "MSP432 ROM",                 "(ROM Table)" },
-       { 0x09f,  0xcd0, "Atmel CPU with DSU",         "(CPU)" },
-       { 0x0c1,  0x1db, "XMC4500 ROM",                "(ROM Table)" },
-       { 0x0c1,  0x1df, "XMC4700/4800 ROM",           "(ROM Table)" },
-       { 0x0c1,  0x1ed, "XMC1000 ROM",                "(ROM Table)" },
-       { 0x0E5,  0x000, "SHARC+/Blackfin+",           "", },
-       { 0x0F0,  0x440, "Qualcomm QDSS Component v1", "(Qualcomm Designed CoreSight Component v1)", },
-       { 0x1bf,  0x100, "Brahma-B53 Debug",           "(Debug Unit)", },
-       { 0x1bf,  0x9d3, "Brahma-B53 PMU",             "(Performance Monitor Unit)", },
-       { 0x1bf,  0x4a1, "Brahma-B53 ROM",             "(ROM Table)", },
-       { 0x1bf,  0x721, "Brahma-B53 ROM",             "(ROM Table)", },
-       { 0x3eb,  0x181, "Tegra 186 ROM",              "(ROM Table)", },
-       { 0x3eb,  0x202, "Denver ETM",                 "(Denver Embedded Trace)", },
-       { 0x3eb,  0x211, "Tegra 210 ROM",              "(ROM Table)", },
-       { 0x3eb,  0x302, "Denver Debug",               "(Debug Unit)", },
-       { 0x3eb,  0x402, "Denver PMU",                 "(Performance Monitor Unit)", },
+       { 0x017,  0x9af, "MSP432 ROM",                 "(ROM Table)" },
+       { 0x01f,  0xcd0, "Atmel CPU with DSU",         "(CPU)" },
+       { 0x041,  0x1db, "XMC4500 ROM",                "(ROM Table)" },
+       { 0x041,  0x1df, "XMC4700/4800 ROM",           "(ROM Table)" },
+       { 0x041,  0x1ed, "XMC1000 ROM",                "(ROM Table)" },
+       { 0x065,  0x000, "SHARC+/Blackfin+",           "", },
+       { 0x070,  0x440, "Qualcomm QDSS Component v1", "(Qualcomm Designed CoreSight Component v1)", },
+       { 0x0bf,  0x100, "Brahma-B53 Debug",           "(Debug Unit)", },
+       { 0x0bf,  0x9d3, "Brahma-B53 PMU",             "(Performance Monitor Unit)", },
+       { 0x0bf,  0x4a1, "Brahma-B53 ROM",             "(ROM Table)", },
+       { 0x0bf,  0x721, "Brahma-B53 ROM",             "(ROM Table)", },
+       { 0x1eb,  0x181, "Tegra 186 ROM",              "(ROM Table)", },
+       { 0x1eb,  0x202, "Denver ETM",                 "(Denver Embedded Trace)", },
+       { 0x1eb,  0x211, "Tegra 210 ROM",              "(ROM Table)", },
+       { 0x1eb,  0x302, "Denver Debug",               "(Debug Unit)", },
+       { 0x1eb,  0x402, "Denver PMU",                 "(Performance Monitor Unit)", },
        /* legacy comment: 0x113: what? */
        { ANY_ID, 0x120, "TI SDTI",                    "(System Debug Trace Interface)", }, /* from OMAP3 memmap */
        { ANY_ID, 0x343, "TI DAPCTL",                  "", }, /* from OMAP3 memmap */
@@ -1276,12 +1276,12 @@ static int dap_rom_display(struct command_invocation *cmd,
 
        uint8_t class = (cid >> 12) & 0xf;
        uint16_t part_num = pid & 0xfff;
-       uint16_t designer_id = ((pid >> 32) & 0xf) << 8 | ((pid >> 12) & 0xff);
+       uint16_t designer_id = ((pid >> 32) & 0xf) << 7 | ((pid >> 12) & 0x7f);
 
-       if (designer_id & 0x80) {
+       if (pid & 0x00080000) {
                /* JEP106 code */
                command_print(cmd, "\t\tDesigner is 0x%03" PRIx16 ", %s",
-                               designer_id, jep106_manufacturer(designer_id >> 8, designer_id & 0x7f));
+                               designer_id, jep106_manufacturer(designer_id));
        } else {
                /* Legacy ASCII ID, clear invalid bits */
                designer_id &= 0x7f;

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)