@@ -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