|
@@ -3125,7 +3125,7 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
|
|
|
if (err)
|
|
|
goto exit;
|
|
|
|
|
|
- /* Parse other parameter headers. */
|
|
|
+ /* Parse optional parameter tables. */
|
|
|
for (i = 0; i < header.nph; i++) {
|
|
|
param_header = ¶m_headers[i];
|
|
|
|
|
@@ -3138,8 +3138,17 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (err)
|
|
|
- goto exit;
|
|
|
+ if (err) {
|
|
|
+ dev_warn(dev, "Failed to parse optional parameter table: %04x\n",
|
|
|
+ SFDP_PARAM_HEADER_ID(param_header));
|
|
|
+ /*
|
|
|
+ * Let's not drop all information we extracted so far
|
|
|
+ * if optional table parsers fail. In case of failing,
|
|
|
+ * each optional parser is responsible to roll back to
|
|
|
+ * the previously known spi_nor data.
|
|
|
+ */
|
|
|
+ err = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
exit:
|