[flashrom] [PATCH 4/6] add pretty printing functions for SSFS+SSFC and the OPCODE struct and use them

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Fri Apr 1 14:33:18 CEST 2011


Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---
 ichspi.c |   47 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/ichspi.c b/ichspi.c
index 9491604..b24b6a0 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -242,6 +242,41 @@ static OPCODE POSSIBLE_OPCODES[] = {
 
 static OPCODES O_EXISTING = {};
 
+/* pretty printing functions */
+static void pretty_print_opcodes(OPCODES *ops){
+	if(ops == NULL)
+		return;
+
+	msg_pspew("preop0=0x%02x, preop1=0x%02x\n", ops->preop[0], ops->preop[1]);
+
+	OPCODE oc;
+	uint8_t i;
+	for (i = 0; i < 8; i++) {
+		oc = ops->opcode[i];
+		msg_pspew("op[%d]=0x%02x, %d, %d\n", i, oc.opcode, oc.spi_type, oc.atomic);
+	}
+}
+
+#define pprint_reg(reg, bit, sep) msg_pspew("%s=%d" sep, #bit, (reg##_##bit & reg##_##bit)>>reg##_##bit##_OFF)
+static void prettyprint_ich9_reg_ssfs(uint32_t reg){
+	msg_pspew("SSFS: ");
+	pprint_reg(SSFS, SCIP,	", ");
+	pprint_reg(SSFS, FDONE,	", ");
+	pprint_reg(SSFS, FCERR,	", ");
+	pprint_reg(SSFS, AEL,	"\n");
+}
+
+static void prettyprint_ich9_reg_ssfc(uint32_t reg){
+	msg_pspew("SSFC: ");
+	pprint_reg(SSFC, SCGO,	", ");
+	pprint_reg(SSFC, ACS,	", ");
+	pprint_reg(SSFC, SPOP,	", ");
+	pprint_reg(SSFC, COP,	", ");
+	pprint_reg(SSFC, DBC,	", ");
+	pprint_reg(SSFC, SME,	", ");
+	pprint_reg(SSFC, SCF,	"\n");
+}
+
 static uint8_t lookup_spi_type(uint8_t opcode)
 {
 	int a;
@@ -500,6 +535,7 @@ static int ich_init_opcodes(void)
 	} else {
 		curopcodes = curopcodes_done;
 		msg_pdbg("done\n");
+		pretty_print_opcodes(curopcodes);
 		return 0;
 	}
 }
@@ -762,6 +798,8 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
 	if (temp32 & SSFS_FCERR) {
 		msg_perr("Transaction error for opcode 0x%02x!\n",
 			 op.opcode);
+		prettyprint_ich9_reg_ssfs(temp32);
+		prettyprint_ich9_reg_ssfc(temp32);
 		/* keep reserved bits */
 		temp32 &= SSFS_RESERVED_MASK | SSFC_RESERVED_MASK;
 		/* Clear the transaction error. */
@@ -1147,16 +1185,13 @@ int ich_init_spi(struct pci_dev *dev, uint32_t base, void *rcrb,
 
 		tmp = mmio_readl(ich_spibar + 0x90);
 		msg_pdbg("0x90: 0x%02x (SSFS)\n", tmp & 0xff);
-		msg_pdbg("AEL %i, ", (tmp >> 4) & 1);
-		msg_pdbg("FCERR %i, ", (tmp >> 3) & 1);
-		msg_pdbg("FDONE %i, ", (tmp >> 2) & 1);
-		msg_pdbg("SCIP %i\n", (tmp >> 0) & 1);
+		prettyprint_ich9_reg_ssfs(tmp);
 		if (tmp & (1 << 3)) {
 			msg_pdbg("Clearing SSFS.FCERR\n");
 			mmio_writeb(1 << 3, ich_spibar + 0x90);
 		}
-		tmp >>= 8;
-		msg_pdbg("0x91: 0x%06x (SSFC)\n", tmp);
+		msg_pdbg("0x91: 0x%06x (SSFC)\n", tmp >> 8);
+		prettyprint_ich9_reg_ssfc(tmp);
 
 		msg_pdbg("0x94: 0x%04x     (PREOP)\n",
 			     mmio_readw(ich_spibar + 0x94));
-- 
1.7.1





More information about the flashrom mailing list