summaryrefslogtreecommitdiffstats
path: root/ich_descriptors.h
diff options
context:
space:
mode:
authorStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2014-08-20 15:39:19 +0000
committerStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2014-08-20 15:39:19 +0000
commit2ba9f6ebe56b208a1fb0b0ce5edf81097a0158be (patch)
tree06741544f702c84fa5fcbc5edb8a888530917481 /ich_descriptors.h
parent9e3a6984da1bb38af37ce4bb54af8f7475b7c766 (diff)
downloadast2050-flashrom-2ba9f6ebe56b208a1fb0b0ce5edf81097a0158be.zip
ast2050-flashrom-2ba9f6ebe56b208a1fb0b0ce5edf81097a0158be.tar.gz
Refine Flash Component descriptor handling
Possible values as well as encodings have changed in newer chipsets as follows. - Pre-PCH (i.e. ICH) chipsets had a maximum frequency of 33 MHz for all operations - Since Cougar Point the chipsets support dual output fast reads (encoded in bit 30). - Flash component density encoding has changed from 3 to 4 bits with Lynx Point, currently allowing for up to 64 MB chips. Corresponding to flashrom svn r1843. Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Diffstat (limited to 'ich_descriptors.h')
-rw-r--r--ich_descriptors.h41
1 files changed, 34 insertions, 7 deletions
diff --git a/ich_descriptors.h b/ich_descriptors.h
index 3a44740..208e640 100644
--- a/ich_descriptors.h
+++ b/ich_descriptors.h
@@ -64,7 +64,7 @@
#define ICH_FREG_BASE(flreg) (((flreg) << 12) & 0x01fff000)
#define ICH_FREG_LIMIT(flreg) (((flreg) >> 4) & 0x01fff000)
-void prettyprint_ich_reg_vscc(uint32_t reg_val, int verbosity);
+void prettyprint_ich_reg_vscc(uint32_t reg_val, int verbosity, bool print_vcl);
struct ich_desc_content {
uint32_t FLVALSIG; /* 0x00 */
@@ -102,17 +102,44 @@ struct ich_desc_content {
struct ich_desc_component {
union { /* 0x00 */
uint32_t FLCOMP; /* Flash Components Register */
+ /* FLCOMP encoding on various generations:
+ *
+ * Chipset/Generation max_speed dual_output density
+ * [MHz] bits max. bits
+ * ICH8: 33 N/A 5 0:2, 3:5
+ * ICH9: 33 N/A 5 0:2, 3:5
+ * ICH10: 33 N/A 5 0:2, 3:5
+ * Ibex Peak/5: 50 N/A 5 0:2, 3:5
+ * Cougar Point/6: 50 30 5 0:2, 3:5
+ * Patsburg: 50 30 5 0:2, 3:5
+ * Panther Point/7 50 30 5 0:2, 3:5
+ * Lynx Point/8: 50 30 7 0:3, 4:7
+ * Wildcat Point/9: 50 ?? (multi I/O) ? ?:?, ?:?
+ */
struct {
- uint32_t comp1_density :3,
- comp2_density :3,
- :11,
+ uint32_t :17,
freq_read :3,
fastread :1,
freq_fastread :3,
freq_write :3,
freq_read_id :3,
:2;
- };
+ } common;
+ struct {
+ uint32_t comp1_density :3,
+ comp2_density :3,
+ :11,
+ :13,
+ :2;
+ } 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;
};
union { /* 0x04 */
uint32_t FLILL; /* Flash Invalid Instructions Register */
@@ -555,7 +582,7 @@ struct ich_descriptors {
void prettyprint_ich_descriptors(enum ich_chipset cs, const struct ich_descriptors *desc);
void prettyprint_ich_descriptor_content(const struct ich_desc_content *content);
-void prettyprint_ich_descriptor_component(const struct ich_descriptors *desc);
+void prettyprint_ich_descriptor_component(enum ich_chipset cs, const struct ich_descriptors *desc);
void prettyprint_ich_descriptor_region(const struct ich_descriptors *desc);
void prettyprint_ich_descriptor_master(const struct ich_desc_master *master);
@@ -568,7 +595,7 @@ int read_ich_descriptors_from_dump(const uint32_t *dump, unsigned int len, struc
#else /* ICH_DESCRIPTORS_FROM_DUMP */
int read_ich_descriptors_via_fdo(void *spibar, struct ich_descriptors *desc);
-int getFCBA_component_density(const struct ich_descriptors *desc, uint8_t idx);
+int getFCBA_component_density(enum ich_chipset cs, const struct ich_descriptors *desc, uint8_t idx);
#endif /* ICH_DESCRIPTORS_FROM_DUMP */
#endif /* __ICH_DESCRIPTORS_H__ */
OpenPOWER on IntegriCloud