@@ -111,20 +111,69 @@ int sfdp_parse_single_param_header(sfdp_prm_hdr *phdr_ptr, sfdp_hdr_info &hdr_in
111
111
return -1 ;
112
112
}
113
113
114
- if ((phdr_ptr->PID_LSB == 0 ) && (sfdp_get_param_id_msb (phdr_ptr->DWORD2 ) == 0xFF )) {
115
- tr_debug (" Parameter header: Basic Parameter Header" );
116
- hdr_info.bptbl .addr = sfdp_get_param_tbl_ptr (phdr_ptr->DWORD2 );
117
- hdr_info.bptbl .size = std::min ((phdr_ptr->P_LEN * 4 ), SFDP_BASIC_PARAMS_TBL_SIZE);
118
-
119
- } else if ((phdr_ptr->PID_LSB == 0x81 ) && (sfdp_get_param_id_msb (phdr_ptr->DWORD2 ) == 0xFF )) {
120
- tr_debug (" Parameter header: Sector Map Parameter Header" );
121
- hdr_info.smptbl .addr = sfdp_get_param_tbl_ptr (phdr_ptr->DWORD2 );
122
- hdr_info.smptbl .size = phdr_ptr->P_LEN * 4 ;
123
-
124
- } else {
125
- tr_debug (" Parameter header: header vendor specific or unknown. Parameter ID LSB: 0x%" PRIX8 " ; MSB: 0x%" PRIX8 " " ,
114
+ int param_id_msb = sfdp_get_param_id_msb (phdr_ptr->DWORD2 );
115
+
116
+ /* MSB JEDEC ID */
117
+ if (param_id_msb == 0xFF ) {
118
+
119
+ /* LSB JEDEC ID */
120
+ switch (phdr_ptr->PID_LSB ) {
121
+ case 0x0 :
122
+ tr_debug (" Parameter header: JEDEC Basic Flash - Revision %" PRIX8 " .%" PRIX8 " " ,
123
+ phdr_ptr->P_MAJOR ,
124
+ phdr_ptr->P_MINOR );
125
+ hdr_info.bptbl .addr = sfdp_get_param_tbl_ptr (phdr_ptr->DWORD2 );
126
+ hdr_info.bptbl .size = std::min ((phdr_ptr->P_LEN * 4 ), SFDP_BASIC_PARAMS_TBL_SIZE);
127
+ break ;
128
+ case 0x81 :
129
+ tr_info (" Parameter header: Sector Map" );
130
+ hdr_info.smptbl .addr = sfdp_get_param_tbl_ptr (phdr_ptr->DWORD2 );
131
+ hdr_info.smptbl .size = phdr_ptr->P_LEN * 4 ;
132
+ break ;
133
+ /* Unsupported */
134
+ case 0x03 :
135
+ tr_info (" UNSUPPORTED:Parameter header: Replay Protected Monotonic Counters" );
136
+ break ;
137
+ case 0x84 :
138
+ tr_info (" UNSUPPORTED:Parameter header: 4-byte Address Instruction" );
139
+ break ;
140
+ case 0x05 :
141
+ tr_info (" UNSUPPORTED:Parameter header: eXtended Serial Peripheral Interface (xSPI) Profile 1.0" );
142
+ break ;
143
+ case 0x06 :
144
+ tr_info (" UNSUPPORTED:Parameter header: eXtended Serial Peripheral Interface (xSPI) Profile 2.0" );
145
+ break ;
146
+ case 0x87 :
147
+ tr_info (" UNSUPPORTED:Parameter header: SCCR Map for SPI Memory Devices" );
148
+ break ;
149
+ case 0x88 :
150
+ tr_info (" UNSUPPORTED:Parameter header: SCCR Map Offsets for Multi-Chip SPI Memory Devices" );
151
+ break ;
152
+ case 0x09 :
153
+ tr_info (" UNSUPPORTED:Parameter header: SCCR Map for xSPI Profile 2.0 Memory Devices" );
154
+ break ;
155
+ case 0x0A :
156
+ tr_info (" UNSUPPORTED:Parameter header: Command Sequences to Change to Octal DDR (8D-8D-8D) mode" );
157
+ break ;
158
+ case 0x0C :
159
+ tr_info (" UNSUPPORTED:Parameter header: x4 Quad IO with DS" );
160
+ break ;
161
+ case 0x8D :
162
+ tr_info (" UNSUPPORTED:Parameter header: Command Sequences to Change to Quad DDR (4S-4D-4D) mode" );
163
+ break ;
164
+ default :
165
+ tr_debug (" Parameter header: unknown JEDEC header. Parameter ID LSB: 0x%" PRIX8 " ; MSB: 0x%" PRIX8 " " ,
166
+ phdr_ptr->PID_LSB ,
167
+ sfdp_get_param_id_msb (phdr_ptr->DWORD2 ));
168
+ }
169
+ } else if (param_id_msb >= 0x80 ) { // MSB JEDEC ID
170
+ tr_debug (" Parameter header: unknown JEDEC header. Parameter ID LSB: 0x%" PRIX8 " ; MSB: 0x%" PRIX8 " " ,
126
171
phdr_ptr->PID_LSB ,
127
172
sfdp_get_param_id_msb (phdr_ptr->DWORD2 ));
173
+ } else { // MSB Vendor ID
174
+ tr_info (" Parameter header: vendor specific header. Parameter ID LSB: 0x%" PRIX8 " ; MSB: 0x%" PRIX8 " " ,
175
+ phdr_ptr->PID_LSB ,
176
+ sfdp_get_param_id_msb (phdr_ptr->DWORD2 ));
128
177
}
129
178
130
179
return 0 ;
0 commit comments