[flashrom] [commit] r1861 - trunk

repository service svn at flashrom.org
Tue Jan 6 00:00:15 CET 2015


Author: stefanct
Date: Tue Jan  6 00:00:14 2015
New Revision: 1861
URL: http://flashrom.org/trac/flashrom/changeset/1861

Log:
Fix wrong density encoding on Intel Silvermont.

Silvermont (Bay Trail, Rangeley, Avoton) seems to still use the old
density encoding with 3 bits per chip. Documentation is unavailable
(held concealed by Intel) but thanks to the efforts of Tai-Hong
(Type) Wu the layout is clear now. This patch is based on his one
but solves the issue differently thus reducing the code complexity.

Signed-off-by: Tai-Hong Wu <thwu at lunartoday.com>
Signed-off-by: Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at>

Modified:
   trunk/ich_descriptors.c
   trunk/ich_descriptors.h

Modified: trunk/ich_descriptors.c
==============================================================================
--- trunk/ich_descriptors.c	Sat Dec 20 21:25:19 2014	(r1860)
+++ trunk/ich_descriptors.c	Tue Jan  6 00:00:14 2015	(r1861)
@@ -127,27 +127,27 @@
 	case CHIPSET_ICH10:
 	case CHIPSET_5_SERIES_IBEX_PEAK:
 	case CHIPSET_6_SERIES_COUGAR_POINT:
-	case CHIPSET_7_SERIES_PANTHER_POINT: {
+	case CHIPSET_7_SERIES_PANTHER_POINT:
+	case CHIPSET_BAYTRAIL: {
 		uint8_t size_enc;
 		if (idx == 0) {
-			size_enc = desc->component.old.comp1_density;
+			size_enc = desc->component.dens_old.comp1_density;
 		} else {
-			size_enc = desc->component.old.comp2_density;
+			size_enc = desc->component.dens_old.comp2_density;
 		}
 		if (size_enc > 5)
 			return "reserved";
 		return size_str[size_enc];
 	}
 	case CHIPSET_8_SERIES_LYNX_POINT:
-	case CHIPSET_BAYTRAIL:
 	case CHIPSET_8_SERIES_LYNX_POINT_LP:
 	case CHIPSET_8_SERIES_WELLSBURG:
 	case CHIPSET_9_SERIES_WILDCAT_POINT: {
 		uint8_t size_enc;
 		if (idx == 0) {
-			size_enc = desc->component.new.comp1_density;
+			size_enc = desc->component.dens_new.comp1_density;
 		} else {
-			size_enc = desc->component.new.comp2_density;
+			size_enc = desc->component.dens_new.comp2_density;
 		}
 		if (size_enc > 7)
 			return "reserved";
@@ -207,16 +207,16 @@
 		msg_pdbg2("Component 2 density:            %s\n", pprint_density(cs, desc, 1));
 	else
 		msg_pdbg2("Component 2 is not used.\n");
-	msg_pdbg2("Read Clock Frequency:           %s\n", pprint_freq(cs, desc->component.common.freq_read));
-	msg_pdbg2("Read ID and Status Clock Freq.: %s\n", pprint_freq(cs, desc->component.common.freq_read_id));
-	msg_pdbg2("Write and Erase Clock Freq.:    %s\n", pprint_freq(cs, desc->component.common.freq_write));
-	msg_pdbg2("Fast Read is %ssupported.\n", desc->component.common.fastread ? "" : "not ");
-	if (desc->component.common.fastread)
+	msg_pdbg2("Read Clock Frequency:           %s\n", pprint_freq(cs, desc->component.modes.freq_read));
+	msg_pdbg2("Read ID and Status Clock Freq.: %s\n", pprint_freq(cs, desc->component.modes.freq_read_id));
+	msg_pdbg2("Write and Erase Clock Freq.:    %s\n", pprint_freq(cs, desc->component.modes.freq_write));
+	msg_pdbg2("Fast Read is %ssupported.\n", desc->component.modes.fastread ? "" : "not ");
+	if (desc->component.modes.fastread)
 		msg_pdbg2("Fast Read Clock Frequency:      %s\n",
-			  pprint_freq(cs, desc->component.common.freq_fastread));
+			  pprint_freq(cs, desc->component.modes.freq_fastread));
 	if (cs > CHIPSET_6_SERIES_COUGAR_POINT)
 		msg_pdbg2("Dual Output Fast Read Support:  %sabled\n",
-			  desc->component.new.dual_output ? "dis" : "en");
+			  desc->component.modes.dual_output ? "dis" : "en");
 	if (desc->component.FLILL == 0)
 		msg_pdbg2("No forbidden opcodes.\n");
 	else {
@@ -816,22 +816,22 @@
 	case CHIPSET_5_SERIES_IBEX_PEAK:
 	case CHIPSET_6_SERIES_COUGAR_POINT:
 	case CHIPSET_7_SERIES_PANTHER_POINT:
+	case CHIPSET_BAYTRAIL:
 		if (idx == 0) {
-			size_enc = desc->component.old.comp1_density;
+			size_enc = desc->component.dens_old.comp1_density;
 		} else {
-			size_enc = desc->component.old.comp2_density;
+			size_enc = desc->component.dens_old.comp2_density;
 		}
 		size_max = 5;
 		break;
 	case CHIPSET_8_SERIES_LYNX_POINT:
-	case CHIPSET_BAYTRAIL:
 	case CHIPSET_8_SERIES_LYNX_POINT_LP:
 	case CHIPSET_8_SERIES_WELLSBURG:
 	case CHIPSET_9_SERIES_WILDCAT_POINT:
 		if (idx == 0) {
-			size_enc = desc->component.new.comp1_density;
+			size_enc = desc->component.dens_new.comp1_density;
 		} else {
-			size_enc = desc->component.new.comp2_density;
+			size_enc = desc->component.dens_new.comp2_density;
 		}
 		size_max = 7;
 		break;
@@ -842,7 +842,7 @@
 	}
 
 	if (size_enc > size_max) {
-		msg_perr("Density of ICH SPI component with index %d is invalid."
+		msg_perr("Density of ICH SPI component with index %d is invalid.\n"
 			 "Encoded density is 0x%x while maximum allowed is 0x%x.\n",
 			 idx, size_enc, size_max);
 		return -1;

Modified: trunk/ich_descriptors.h
==============================================================================
--- trunk/ich_descriptors.h	Sat Dec 20 21:25:19 2014	(r1860)
+++ trunk/ich_descriptors.h	Tue Jan  6 00:00:14 2015	(r1861)
@@ -123,23 +123,19 @@
 				 freq_fastread	:3,
 				 freq_write	:3,
 				 freq_read_id	:3,
-						:2;
-		} common;
+				 dual_output	:1, /* new since Cougar Point/6 */
+						:1;
+		} modes;
 		struct {
 			uint32_t comp1_density	:3,
 				 comp2_density	:3,
-						:11,
-						:13,
-						:2;
-		} old;
+						:26;
+		} dens_old;
 		struct {
 			uint32_t comp1_density	:4, /* new since Lynx Point/8 */
 				 comp2_density	:4,
-						:9,
-						:13,
-				 dual_output	:1, /* new since Cougar Point/6 */
-						:1;
-		} new;
+						:24;
+		} dens_new;
 	};
 	union {			/* 0x04 */
 		uint32_t FLILL; /* Flash Invalid Instructions Register */




More information about the flashrom mailing list