summaryrefslogtreecommitdiffstats
path: root/ichspi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ichspi.c')
-rw-r--r--ichspi.c79
1 files changed, 35 insertions, 44 deletions
diff --git a/ichspi.c b/ichspi.c
index 35b9dbd..fbe9092 100644
--- a/ichspi.c
+++ b/ichspi.c
@@ -38,17 +38,6 @@
#include "chipdrivers.h"
#include "spi.h"
-/* Change this to #define if you want lowlevel debugging of commands
- * sent to the ICH/VIA SPI controller.
- */
-#undef COMM_DEBUG
-
-#ifdef COMM_DEBUG
-#define msg_comm_debug printf_debug
-#else
-#define msg_comm_debug(...) do {} while (0)
-#endif
-
/* ICH9 controller register definition */
#define ICH9_REG_FADDR 0x08 /* 32 Bits */
#define ICH9_REG_FDATA0 0x10 /* 64 Bytes */
@@ -237,7 +226,7 @@ static int generate_opcodes(OPCODES * op)
uint32_t opmenu[2];
if (op == NULL) {
- printf_debug("\n%s: null OPCODES pointer!\n", __func__);
+ msg_perr("\n%s: null OPCODES pointer!\n", __func__);
return -1;
}
@@ -256,7 +245,7 @@ static int generate_opcodes(OPCODES * op)
opmenu[1] = REGREAD32(ICH9_REG_OPMENU + 4);
break;
default:
- printf_debug("%s: unsupported chipset\n", __func__);
+ msg_perr("%s: unsupported chipset\n", __func__);
return -1;
}
@@ -315,7 +304,7 @@ int program_opcodes(OPCODES * op)
opmenu[1] |= ((uint32_t) op->opcode[a].opcode) << ((a - 4) * 8);
}
- printf_debug("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]);
+ msg_pdbg("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]);
switch (spi_controller) {
case SPI_CONTROLLER_ICH7:
case SPI_CONTROLLER_VIA:
@@ -331,7 +320,7 @@ int program_opcodes(OPCODES * op)
REGWRITE32(ICH9_REG_OPMENU + 4, opmenu[1]);
break;
default:
- printf_debug("%s: unsupported chipset\n", __func__);
+ msg_perr("%s: unsupported chipset\n", __func__);
return -1;
}
@@ -352,22 +341,22 @@ int ich_init_opcodes(void)
return 0;
if (ichspi_lock) {
- printf_debug("Generating OPCODES... ");
+ msg_pdbg("Generating OPCODES... ");
curopcodes_done = &O_EXISTING;
rc = generate_opcodes(curopcodes_done);
} else {
- printf_debug("Programming OPCODES... ");
+ msg_pdbg("Programming OPCODES... ");
curopcodes_done = &O_ST_M25P;
rc = program_opcodes(curopcodes_done);
}
if (rc) {
curopcodes = NULL;
- printf_debug("failed\n");
+ msg_perr("failed\n");
return 1;
} else {
curopcodes = curopcodes_done;
- printf_debug("done\n");
+ msg_pdbg("done\n");
return 0;
}
}
@@ -439,7 +428,7 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset,
opmenu >>= 8;
}
if (opcode_index == 8) {
- printf_debug("Opcode %x not found.\n", op.opcode);
+ msg_pdbg("Opcode %x not found.\n", op.opcode);
return 1;
}
temp16 |= ((uint16_t) (opcode_index & 0x07)) << 4;
@@ -468,11 +457,12 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset,
programmer_delay(10);
}
if (!timeout) {
- printf_debug("timeout\n");
+ msg_perr("timeout\n");
}
+ /* FIXME: make sure we do not needlessly cause transaction errors. */
if ((REGREAD16(ICH7_REG_SPIS) & SPIS_FCERR) != 0) {
- printf_debug("Transaction error!\n");
+ msg_pdbg("Transaction error!\n");
return 1;
}
@@ -557,7 +547,7 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
opmenu >>= 8;
}
if (opcode_index == 8) {
- printf_debug("Opcode %x not found.\n", op.opcode);
+ msg_pdbg("Opcode %x not found.\n", op.opcode);
return 1;
}
temp32 |= ((uint32_t) (opcode_index & 0x07)) << (8 + 4);
@@ -586,11 +576,12 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
programmer_delay(10);
}
if (!timeout) {
- printf_debug("timeout\n");
+ msg_perr("timeout\n");
}
+ /* FIXME make sure we do not needlessly cause transaction errors. */
if ((REGREAD32(ICH9_REG_SSFS) & SSFS_FCERR) != 0) {
- printf_debug("Transaction error!\n");
+ msg_pdbg("Transaction error!\n");
return 1;
}
@@ -615,7 +606,7 @@ static int run_opcode(OPCODE op, uint32_t offset,
switch (spi_controller) {
case SPI_CONTROLLER_VIA:
if (datalength > 16) {
- fprintf(stderr, "%s: Internal command size error for "
+ msg_perr("%s: Internal command size error for "
"opcode 0x%02x, got datalength=%i, want <=16\n",
__func__, op.opcode, datalength);
return SPI_INVALID_LENGTH;
@@ -623,7 +614,7 @@ static int run_opcode(OPCODE op, uint32_t offset,
return ich7_run_opcode(op, offset, datalength, data, 16);
case SPI_CONTROLLER_ICH7:
if (datalength > 64) {
- fprintf(stderr, "%s: Internal command size error for "
+ msg_perr("%s: Internal command size error for "
"opcode 0x%02x, got datalength=%i, want <=16\n",
__func__, op.opcode, datalength);
return SPI_INVALID_LENGTH;
@@ -631,14 +622,14 @@ static int run_opcode(OPCODE op, uint32_t offset,
return ich7_run_opcode(op, offset, datalength, data, 64);
case SPI_CONTROLLER_ICH9:
if (datalength > 64) {
- fprintf(stderr, "%s: Internal command size error for "
+ msg_perr("%s: Internal command size error for "
"opcode 0x%02x, got datalength=%i, want <=16\n",
__func__, op.opcode, datalength);
return SPI_INVALID_LENGTH;
}
return ich9_run_opcode(op, offset, datalength, data);
default:
- printf_debug("%s: unsupported chipset\n", __func__);
+ msg_perr("%s: unsupported chipset\n", __func__);
}
/* If we ever get here, something really weird happened */
@@ -652,14 +643,14 @@ static int ich_spi_write_page(struct flashchip *flash, uint8_t * bytes,
uint32_t remaining = page_size;
int towrite;
- msg_comm_debug("ich_spi_write_page: offset=%d, number=%d, buf=%p\n",
+ msg_pspew("ich_spi_write_page: offset=%d, number=%d, buf=%p\n",
offset, page_size, bytes);
for (; remaining > 0; remaining -= towrite) {
towrite = min(remaining, maxdata);
if (spi_nbyte_program(offset + (page_size - remaining),
&bytes[page_size - remaining], towrite)) {
- printf_debug("Error writing");
+ msg_perr("Error writing");
return 1;
}
}
@@ -687,14 +678,14 @@ int ich_spi_write_256(struct flashchip *flash, uint8_t * buf)
spi_disable_blockprotect();
/* Erase first */
- printf("Erasing flash before programming... ");
+ msg_pinfo("Erasing flash before programming... ");
if (erase_flash(flash)) {
- fprintf(stderr, "ERASE FAILED!\n");
+ msg_perr("ERASE FAILED!\n");
return -1;
}
- printf("done.\n");
+ msg_pinfo("done.\n");
- printf("Programming page: \n");
+ msg_pinfo("Programming page: \n");
for (i = 0; i < total_size / erase_size; i++) {
if (spi_controller == SPI_CONTROLLER_VIA)
maxdata = 16;
@@ -706,7 +697,7 @@ int ich_spi_write_256(struct flashchip *flash, uint8_t * buf)
}
}
- printf("\n");
+ msg_pinfo("\n");
return rc;
}
@@ -728,7 +719,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
/* FIXME: Reprogram opcodes if possible. Autodetect type of
* opcode by checking readcnt/writecnt.
*/
- printf_debug("Invalid OPCODE 0x%02x\n", cmd);
+ msg_pdbg("Invalid OPCODE 0x%02x\n", cmd);
return SPI_INVALID_OPCODE;
}
@@ -743,21 +734,21 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
*/
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_WITH_ADDRESS) &&
(writecnt != 4)) {
- fprintf(stderr, "%s: Internal command size error for opcode "
+ msg_perr("%s: Internal command size error for opcode "
"0x%02x, got writecnt=%i, want =4\n", __func__, cmd,
writecnt);
return SPI_INVALID_LENGTH;
}
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_NO_ADDRESS) &&
(writecnt != 1)) {
- fprintf(stderr, "%s: Internal command size error for opcode "
+ msg_perr("%s: Internal command size error for opcode "
"0x%02x, got writecnt=%i, want =1\n", __func__, cmd,
writecnt);
return SPI_INVALID_LENGTH;
}
if ((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) &&
(writecnt < 4)) {
- fprintf(stderr, "%s: Internal command size error for opcode "
+ msg_perr("%s: Internal command size error for opcode "
"0x%02x, got writecnt=%i, want >=4\n", __func__, cmd,
writecnt);
return SPI_INVALID_LENGTH;
@@ -765,7 +756,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
if (((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) ||
(opcode->spi_type == SPI_OPCODE_TYPE_WRITE_NO_ADDRESS)) &&
(readcnt)) {
- fprintf(stderr, "%s: Internal command size error for opcode "
+ msg_perr("%s: Internal command size error for opcode "
"0x%02x, got readcnt=%i, want =0\n", __func__, cmd,
readcnt);
return SPI_INVALID_LENGTH;
@@ -792,7 +783,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
result = run_opcode(*opcode, addr, count, data);
if (result) {
- printf_debug("run OPCODE 0x%02x failed\n", opcode->opcode);
+ msg_pdbg("run OPCODE 0x%02x failed\n", opcode->opcode);
}
return result;
@@ -817,7 +808,7 @@ int ich_spi_send_multicommand(struct spi_command *cmds)
*/
if (find_preop(curopcodes,
(cmds + 1)->writearr[0]) != -1) {
- fprintf(stderr, "%s: Two subsequent "
+ msg_perr("%s: Two subsequent "
"preopcodes 0x%02x and 0x%02x, "
"ignoring the first.\n",
__func__, cmds->writearr[0],
@@ -829,7 +820,7 @@ int ich_spi_send_multicommand(struct spi_command *cmds)
* No need to bother with fixups.
*/
if (!ichspi_lock) {
- printf_debug("%s: FIXME: Add on-the-fly"
+ msg_pdbg("%s: FIXME: Add on-the-fly"
" reprogramming of the "
"chipset opcode list.\n",
__func__);
OpenPOWER on IntegriCloud