mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-02 06:23:18 +02:00
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>
This commit is contained in:
@ -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__ */
|
||||
|
Reference in New Issue
Block a user