[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