[flashrom] [PATCH 3/3] Enable fwh_idsel parameter for ICH3/4/5 chipsets

Kyösti Mälkki kyosti.malkki at gmail.com
Sat Feb 23 22:12:59 CET 2013


Register locations are different from ICH6, but otherwise appear
to have identical bit specifications and defaults.

Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 chipset_enable.c | 35 +++++++++++++++++++++++------------
 1 file changed, 23 insertions(+), 12 deletions(-)

diff --git a/chipset_enable.c b/chipset_enable.c
index d1e4658..273de81 100644
--- a/chipset_enable.c
+++ b/chipset_enable.c
@@ -320,7 +320,8 @@ static int enable_flash_ich0(struct pci_dev *dev, const char *name)
 	return enable_flash_ich(dev, name, 0x4e);
 }
 
-static int enable_flash_ich_fwh_decode(struct pci_dev *dev, const char *name)
+static int enable_flash_ich_fwh_decode(struct pci_dev *dev, const char *name,
+				       enum ich_chipset ich_generation)
 {
 	uint32_t fwh_conf;
 	uint8_t fwh_sel1, fwh_sel2, fwh_dec_en_lo, fwh_dec_en_hi;
@@ -329,11 +330,20 @@ static int enable_flash_ich_fwh_decode(struct pci_dev *dev, const char *name)
 	int max_decode_fwh_idsel = 0, max_decode_fwh_decode = 0;
 	int contiguous = 1;
 
-	/* Register map from ICH6 onwards. */
-	fwh_sel1 = 0xd0;
-	fwh_sel2 = 0xd4;
-	fwh_dec_en_lo = 0xd8;
-	fwh_dec_en_hi = 0xd9;
+	if (ich_generation >= CHIPSET_ICH6) {
+		fwh_sel1 = 0xd0;
+		fwh_sel2 = 0xd4;
+		fwh_dec_en_lo = 0xd8;
+		fwh_dec_en_hi = 0xd9;
+	} else if (ich_generation >= CHIPSET_ICH3) {
+		fwh_sel1 = 0xe8;
+		fwh_sel2 = 0xee;
+		fwh_dec_en_lo = 0xf0;
+		fwh_dec_en_hi = 0xe3;
+	} else {
+		msg_perr("Error: FWH decode setting not implemented.\n");
+		return ERROR_FATAL;
+	}
 
 	idsel = extract_programmer_param("fwh_idsel");
 	if (idsel && strlen(idsel)) {
@@ -439,11 +449,12 @@ idsel_garbage_out:
 static int enable_flash_ich_4e(struct pci_dev *dev, const char *name,
 			       enum ich_chipset ich_generation)
 {
-	/*
-	 * Note: ICH5 has registers similar to FWH_SEL1, FWH_SEL2 and
-	 * FWH_DEC_EN1, but they are called FB_SEL1, FB_SEL2, FB_DEC_EN1 and
-	 * FB_DEC_EN2.
-	 */
+	int err;
+
+	/* Configure FWH IDSEL decoder maps. */
+	if ((err = enable_flash_ich_fwh_decode(dev, name, ich_generation)) != 0)
+		return err;
+
 	internal_buses_supported = BUS_FWH;
 	return enable_flash_ich(dev, name, 0x4e);
 }
@@ -469,7 +480,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name,
 	int err;
 
 	/* Configure FWH IDSEL decoder maps. */
-	if ((err = enable_flash_ich_fwh_decode(dev, name)) != 0)
+	if ((err = enable_flash_ich_fwh_decode(dev, name, ich_generation)) != 0)
 		return err;
 
 	/* If we're called by enable_flash_ich_dc_spi, it will override
-- 
1.8.1.1







More information about the flashrom mailing list