Skip to content
This repository was archived by the owner on Mar 7, 2026. It is now read-only.

Commit 56055aa

Browse files
committed
mspm0: Compress the FACTORY/BCR register description table
1 parent b88658c commit 56055aa

1 file changed

Lines changed: 58 additions & 52 deletions

File tree

src/target/mspm0.c

Lines changed: 58 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -110,63 +110,69 @@ static command_s mspm0_cmds_list[] = {
110110
#endif
111111

112112
#if MSPM0_CONFIG_FLASH_DUMP_SUPPORT
113-
typedef struct conf_register {
114-
uint16_t reg_offset;
115-
uint16_t size_words;
116-
const char *id;
117-
} conf_register_s;
118-
119-
static conf_register_s mspm0_factory_regs[] = {
120-
{0x00U, 1U, "TRACEID"},
121-
{0x04U, 1U, "DEVICEID"},
122-
{0x08U, 1U, "USERID"},
123-
{0x0cU, 1U, "BSLPIN_UART"},
124-
{0x10U, 1U, "BSLPIN_I2C"},
125-
{0x14U, 1U, "BSLPIN_INVOKE"},
126-
{0x18U, 1U, "SRAMFLASH"},
127-
{0x3cU, 1U, "TEMP_SENSE0"},
128-
{0x7cU, 1U, "BOOTCRC"},
129-
{0U, 0U, NULL},
113+
#define MSPM0_ASSERT_PACKED_OFFSET(x) sizeof(char[((x) >> 2) >= 0x100 || (((x) & 0x3U) != 0) ? -1 : 1])
114+
#define MSPM0_PACKED_ENTRY(offset, len, ...) \
115+
len, (uint8_t)((offset) >> (2 * MSPM0_ASSERT_PACKED_OFFSET(offset))), __VA_ARGS__,
116+
117+
/* clang-format off */
118+
static uint8_t const mspm0_factory_regs[] = {
119+
MSPM0_PACKED_ENTRY(0x00U, 1U, 'T','R','A','C','E','I','D')
120+
MSPM0_PACKED_ENTRY(0x04U, 1U, 'D','E','V','I','C','E','I','D')
121+
MSPM0_PACKED_ENTRY(0x08U, 1U, 'U','S','E','R','I','D')
122+
MSPM0_PACKED_ENTRY(0x0cU, 1U, 'B','S','L','P','I','N','_','U','A','R','T')
123+
MSPM0_PACKED_ENTRY(0x10U, 1U, 'B','S','L','P','I','N','_','I','2','C')
124+
MSPM0_PACKED_ENTRY(0x14U, 1U, 'B','S','L','P','I','N','_','I','N','V','O','K','E')
125+
MSPM0_PACKED_ENTRY(0x18U, 1U, 'S','R','A','M','F','L','A','S','H')
126+
MSPM0_PACKED_ENTRY(0x3cU, 1U, 'T','E','M','P','_','S','E','N','S','E','0')
127+
MSPM0_PACKED_ENTRY(0x7cU, 1U, 'B','O','O','T','C','R','C')
128+
0U
130129
};
131130

132-
static conf_register_s mspm0_bcr_regs[] = {
133-
{0x00U, 1U, "BCRCONFIGID"},
134-
{0x04U, 1U, "BOOTCFG0"},
135-
{0x08U, 1U, "BOOTCFG1"},
136-
{0x0cU, 4U, "PWDDEBUGLOCK"},
137-
{0x1cU, 4U, "BOOTCFG2"},
138-
{0x20U, 1U, "BOOTCFG3"},
139-
{0x24U, 4U, "PWDMASSERASE"},
140-
{0x34U, 4U, "PWDFACTORYRESET"},
141-
{0x44U, 1U, "FLASHSWP0"},
142-
{0x48U, 1U, "FLASHSWP1"},
143-
{0x4cU, 1U, "BOOTCFG4"},
144-
{0x50U, 1U, "APPCRCSTART"},
145-
{0x54U, 1U, "APPCRCLENGTH"},
146-
{0x58U, 1U, "APPCRC"},
147-
{0x5cU, 1U, "BOOTCRC"},
148-
{0x100U, 1U, "BSLCONFIGID"},
149-
{0x104U, 1U, "BSLPINCFG0"},
150-
{0x108U, 1U, "BSLPINCFG1"},
151-
{0x10cU, 1U, "BSLCONFIG0"},
152-
{0x110U, 8U, "BSLPW"},
153-
{0x130U, 1U, "BSLPLUGINCFG"},
154-
{0x134U, 4U, "BSLPLUGINHOOK"},
155-
{0x144U, 1U, "PATCHHOOKID"},
156-
{0x148U, 1U, "SBLADDRESS"},
157-
{0x14cU, 1U, "BSLAPPVER"},
158-
{0x150U, 1U, "BSLCONFIG1"},
159-
{0x154U, 1U, "BSLCRC"},
160-
{0U, 0U, NULL},
131+
static uint8_t const mspm0_bcr_regs[] = {
132+
MSPM0_PACKED_ENTRY(0x00U, 1U, 'B','C','R','C','O','N','F','I','G','I','D')
133+
MSPM0_PACKED_ENTRY(0x04U, 1U, 'B','O','O','T','C','F','G','0')
134+
MSPM0_PACKED_ENTRY(0x08U, 1U, 'B','O','O','T','C','F','G','1')
135+
MSPM0_PACKED_ENTRY(0x0cU, 4U, 'P','W','D','D','E','B','U','G','L','O','C','K')
136+
MSPM0_PACKED_ENTRY(0x1cU, 4U, 'B','O','O','T','C','F','G','2')
137+
MSPM0_PACKED_ENTRY(0x20U, 1U, 'B','O','O','T','C','F','G','3')
138+
MSPM0_PACKED_ENTRY(0x24U, 4U, 'P','W','D','M','A','S','S','E','R','A','S','E')
139+
MSPM0_PACKED_ENTRY(0x34U, 4U, 'P','W','D','F','A','C','T','O','R','Y','R','E','S','E','T')
140+
MSPM0_PACKED_ENTRY(0x44U, 1U, 'F','L','A','S','H','S','W','P','0')
141+
MSPM0_PACKED_ENTRY(0x48U, 1U, 'F','L','A','S','H','S','W','P','1')
142+
MSPM0_PACKED_ENTRY(0x4cU, 1U, 'B','O','O','T','C','F','G','4')
143+
MSPM0_PACKED_ENTRY(0x50U, 1U, 'A','P','P','C','R','C','S','T','A','R','T')
144+
MSPM0_PACKED_ENTRY(0x54U, 1U, 'A','P','P','C','R','C','L','E','N','G','T','H')
145+
MSPM0_PACKED_ENTRY(0x58U, 1U, 'A','P','P','C','R','C')
146+
MSPM0_PACKED_ENTRY(0x5cU, 1U, 'B','O','O','T','C','R','C')
147+
MSPM0_PACKED_ENTRY(0x100U, 1U, 'B','S','L','C','O','N','F','I','G','I','D')
148+
MSPM0_PACKED_ENTRY(0x104U, 1U, 'B','S','L','P','I','N','C','F','G','0')
149+
MSPM0_PACKED_ENTRY(0x108U, 1U, 'B','S','L','P','I','N','C','F','G','1')
150+
MSPM0_PACKED_ENTRY(0x10cU, 1U, 'B','S','L','C','O','N','F','I','G','0')
151+
MSPM0_PACKED_ENTRY(0x110U, 8U, 'P','W','D','B','S','L')
152+
MSPM0_PACKED_ENTRY(0x130U, 1U, 'B','S','L','P','L','U','G','I','N','C','F','G')
153+
MSPM0_PACKED_ENTRY(0x134U, 4U, 'B','S','L','P','L','U','G','I','N','H','O','O','K')
154+
MSPM0_PACKED_ENTRY(0x144U, 1U, 'B','S','L','C','O','N','F','I','G','1')
155+
MSPM0_PACKED_ENTRY(0x148U, 1U, 'S','B','L','A','D','D','R','E','S','S')
156+
MSPM0_PACKED_ENTRY(0x14cU, 1U, 'B','S','L','A','P','P','V','E','R')
157+
MSPM0_PACKED_ENTRY(0x150U, 1U, 'B','S','L','C','O','N','F','I','G','1')
158+
MSPM0_PACKED_ENTRY(0x154U, 1U, 'B','S','L','C','R','C')
159+
0U
161160
};
161+
/* clang-format on */
162162

163-
static void mspm0_dump_regs(target_s *const target, const conf_register_s *const regs, const uint32_t base)
163+
static void mspm0_dump_regs(target_s *const target, uint8_t const *regs, const uint32_t base)
164164
{
165-
for (const conf_register_s *reg = regs; reg->id; ++reg) {
166-
tc_printf(target, "%15s: ", reg->id);
167-
for (size_t i = 0; i < reg->size_words; ++i) {
168-
uint32_t value = target_mem32_read32(target, base + reg->reg_offset + (uint32_t)(i * 4U));
169-
tc_printf(target, "0x%08" PRIx32 "%s", value, i == reg->size_words - 1U ? "\n" : " ");
165+
while (*regs != 0) {
166+
uint32_t words = *regs++;
167+
uint32_t reg_offset = (uint32_t)*regs++ << 2;
168+
char const *reg_name = (char const *)regs;
169+
while (*regs >= ' ')
170+
regs++;
171+
int name_len = (char const *)regs - reg_name;
172+
tc_printf(target, "%15.*s: ", name_len, reg_name);
173+
for (size_t i = 0; i < words; ++i) {
174+
uint32_t value = target_mem32_read32(target, base + reg_offset + (uint32_t)(i * 4U));
175+
tc_printf(target, "0x%08" PRIx32 "%s", value, i == words - 1U ? "\n" : " ");
170176
}
171177
}
172178
}

0 commit comments

Comments
 (0)