Nick: stefanct E-mail: none Board: unknown Contents: From c89ad0ff6e41c2d476aeeb1686a811046ff808d8 Mon Sep 17 00:00:00 2001 From: Stefan Tauner Date: Wed, 15 Mar 2017 23:08:50 +0100 Subject: [PATCH 2/2] ichspi: do SPIS clearing even on SCIP timeouts Signed-off-by: Stefan Tauner --- ichspi.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ichspi.c b/ichspi.c index 809d007..748a0af 100644 --- a/ichspi.c +++ b/ichspi.c @@ -739,6 +739,15 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset, while ((REGREAD16(ICH7_REG_SPIS) & SPIS_SCIP) && --timeout) { programmer_delay(10); } + + /* Assemble SPIS */ + temp16 = REGREAD16(ICH7_REG_SPIS); + /* keep reserved bits only */ + temp16 &= SPIS_RESERVED_MASK; + /* clear error status registers (by writing 1 to them) */ + temp16 |= (SPIS_CDS | SPIS_FCERR); + REGWRITE16(ICH7_REG_SPIS, temp16); + if (!timeout) { msg_perr("Error: SCIP never cleared!\n"); return 1; @@ -752,14 +761,6 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset, if (write_cmd && (datalength != 0)) ich_fill_data(data, datalength, ICH7_REG_SPID0); - /* Assemble SPIS */ - temp16 = REGREAD16(ICH7_REG_SPIS); - /* keep reserved bits only */ - temp16 &= SPIS_RESERVED_MASK; - /* clear error status registers (by writing 1 to them) */ - temp16 |= (SPIS_CDS | SPIS_FCERR); - REGWRITE16(ICH7_REG_SPIS, temp16); - /* Assemble SPIC */ temp16 = 0; -- Kind regards, Stefan Tauner