ich_descriptors: Refactor read_ich_descriptors_from_dump()

Process the "upper map" early as it doesn't depend on the descriptor
generation. This way, we can use it to guess the generation.

Change-Id: Ia2786b762ccefdce31b63397119bd89879e887ff
Signed-off-by: Nico Huber <nico.h@gmx.de>
Original-Reviewed-on: https://review.coreboot.org/c/flashrom/+/55646
Original-Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom-stable/+/71386
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/ich_descriptors.c b/ich_descriptors.c
index f664f77..5d08717 100644
--- a/ich_descriptors.c
+++ b/ich_descriptors.c
@@ -1031,6 +1031,23 @@
 	desc->component.FLILL	= dump[(getFCBA(&desc->content) >> 2) + 1];
 	desc->component.FLPB	= dump[(getFCBA(&desc->content) >> 2) + 2];
 
+	/* upper map */
+	desc->upper.FLUMAP1 = dump[(UPPER_MAP_OFFSET >> 2) + 0];
+
+	/* VTL is 8 bits long. Quote from the Ibex Peak SPI programming guide:
+	 * "Identifies the 1s based number of DWORDS contained in the VSCC
+	 * Table. Each SPI component entry in the table is 2 DWORDS long." So
+	 * the maximum of 255 gives us 127.5 SPI components(!?) 8 bytes each. A
+	 * check ensures that the maximum offset actually accessed is available.
+	 */
+	if (len < getVTBA(&desc->upper) + (desc->upper.VTL / 2 * 8))
+		return ICH_RET_OOB;
+
+	for (i = 0; i < desc->upper.VTL/2; i++) {
+		desc->upper.vscc_table[i].JID  = dump[(getVTBA(&desc->upper) >> 2) + i * 2 + 0];
+		desc->upper.vscc_table[i].VSCC = dump[(getVTBA(&desc->upper) >> 2) + i * 2 + 1];
+	}
+
 	if (*cs == CHIPSET_ICH_UNKNOWN) {
 		*cs = guess_ich_chipset(&desc->content, &desc->component);
 		prettyprint_ich_chipset(*cs);
@@ -1050,23 +1067,6 @@
 	for (i = 0; i < nm; i++)
 		desc->master.FLMSTRs[i] = dump[(getFMBA(&desc->content) >> 2) + i];
 
-	/* upper map */
-	desc->upper.FLUMAP1 = dump[(UPPER_MAP_OFFSET >> 2) + 0];
-
-	/* VTL is 8 bits long. Quote from the Ibex Peak SPI programming guide:
-	 * "Identifies the 1s based number of DWORDS contained in the VSCC
-	 * Table. Each SPI component entry in the table is 2 DWORDS long." So
-	 * the maximum of 255 gives us 127.5 SPI components(!?) 8 bytes each. A
-	 * check ensures that the maximum offset actually accessed is available.
-	 */
-	if (len < getVTBA(&desc->upper) + (desc->upper.VTL / 2 * 8))
-		return ICH_RET_OOB;
-
-	for (i = 0; i < desc->upper.VTL/2; i++) {
-		desc->upper.vscc_table[i].JID  = dump[(getVTBA(&desc->upper) >> 2) + i * 2 + 0];
-		desc->upper.vscc_table[i].VSCC = dump[(getVTBA(&desc->upper) >> 2) + i * 2 + 1];
-	}
-
 	/* MCH/PROC (aka. North) straps */
 	if (len < getFMSBA(&desc->content) + desc->content.MSL * 4)
 		return ICH_RET_OOB;