@@ -111,20 +111,69 @@ int sfdp_parse_single_param_header(sfdp_prm_hdr *phdr_ptr, sfdp_hdr_info &hdr_in
111111 return -1 ;
112112 }
113113
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 " " ,
126171 phdr_ptr->PID_LSB ,
127172 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 ));
128177 }
129178
130179 return 0 ;
0 commit comments