summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpdbg/adu.c29
-rw-r--r--libpdbg/operations.h2
2 files changed, 17 insertions, 14 deletions
diff --git a/libpdbg/adu.c b/libpdbg/adu.c
index e956b71..b67a43e 100644
--- a/libpdbg/adu.c
+++ b/libpdbg/adu.c
@@ -237,6 +237,7 @@ static int adu_reset(struct adu *adu)
static int p8_adu_getmem(struct adu *adu, uint64_t addr, uint64_t *data, int ci)
{
uint64_t ctrl_reg, cmd_reg, val;
+ int rc = 0;
CHECK_ERR(adu_lock(adu));
@@ -248,25 +249,25 @@ static int p8_adu_getmem(struct adu *adu, uint64_t addr, uint64_t *data, int ci)
ctrl_reg = SETFIELD(P8_FBC_ALTD_TTYPE, ctrl_reg, P8_TTYPE_DMA_PARTIAL_READ);
ctrl_reg = SETFIELD(P8_FBC_ALTD_TSIZE, ctrl_reg, 8);
- CHECK_ERR(pib_read(&adu->target, P8_ALTD_CMD_REG, &cmd_reg));
+ CHECK_ERR_GOTO(out, rc = pib_read(&adu->target, P8_ALTD_CMD_REG, &cmd_reg));
cmd_reg |= FBC_ALTD_START_OP;
cmd_reg = SETFIELD(FBC_ALTD_SCOPE, cmd_reg, SCOPE_SYSTEM);
cmd_reg = SETFIELD(FBC_ALTD_DROP_PRIORITY, cmd_reg, DROP_PRIORITY_MEDIUM);
retry:
/* Clear status bits */
- CHECK_ERR(adu_reset(adu));
+ CHECK_ERR_GOTO(out, rc = adu_reset(adu));
/* Set the address */
ctrl_reg = SETFIELD(P8_FBC_ALTD_ADDRESS, ctrl_reg, addr);
- CHECK_ERR(pib_write(&adu->target, P8_ALTD_CONTROL_REG, ctrl_reg));
+ CHECK_ERR_GOTO(out, rc = pib_write(&adu->target, P8_ALTD_CONTROL_REG, ctrl_reg));
/* Start the command */
- CHECK_ERR(pib_write(&adu->target, P8_ALTD_CMD_REG, cmd_reg));
+ CHECK_ERR_GOTO(out, rc = pib_write(&adu->target, P8_ALTD_CMD_REG, cmd_reg));
/* Wait for completion */
do {
- CHECK_ERR(pib_read(&adu->target, P8_ALTD_STATUS_REG, &val));
+ CHECK_ERR_GOTO(out, rc = pib_read(&adu->target, P8_ALTD_STATUS_REG, &val));
} while (!val);
if( !(val & FBC_ALTD_ADDR_DONE) ||
@@ -283,11 +284,12 @@ retry:
}
/* Read data */
- CHECK_ERR(pib_read(&adu->target, P8_ALTD_DATA_REG, data));
+ CHECK_ERR_GOTO(out, rc = pib_read(&adu->target, P8_ALTD_DATA_REG, data));
+out:
adu_unlock(adu);
+ return rc;
- return 0;
}
int p8_adu_putmem(struct adu *adu, uint64_t addr, uint64_t data, int size, int ci)
@@ -304,29 +306,29 @@ int p8_adu_putmem(struct adu *adu, uint64_t addr, uint64_t data, int size, int c
ctrl_reg = SETFIELD(P8_FBC_ALTD_TTYPE, ctrl_reg, P8_TTYPE_DMA_PARTIAL_WRITE);
ctrl_reg = SETFIELD(P8_FBC_ALTD_TSIZE, ctrl_reg, size);
- CHECK_ERR(pib_read(&adu->target, P8_ALTD_CMD_REG, &cmd_reg));
+ CHECK_ERR_GOTO(out, rc = pib_read(&adu->target, P8_ALTD_CMD_REG, &cmd_reg));
cmd_reg |= FBC_ALTD_START_OP;
cmd_reg = SETFIELD(FBC_ALTD_SCOPE, cmd_reg, SCOPE_SYSTEM);
cmd_reg = SETFIELD(FBC_ALTD_DROP_PRIORITY, cmd_reg, DROP_PRIORITY_MEDIUM);
/* Clear status bits */
- CHECK_ERR(adu_reset(adu));
+ CHECK_ERR_GOTO(out, rc = adu_reset(adu));
/* Set the address */
ctrl_reg = SETFIELD(P8_FBC_ALTD_ADDRESS, ctrl_reg, addr);
retry:
- CHECK_ERR(pib_write(&adu->target, P8_ALTD_CONTROL_REG, ctrl_reg));
+ CHECK_ERR_GOTO(out, rc = pib_write(&adu->target, P8_ALTD_CONTROL_REG, ctrl_reg));
/* Write the data */
- CHECK_ERR(pib_write(&adu->target, P8_ALTD_DATA_REG, data));
+ CHECK_ERR_GOTO(out, rc = pib_write(&adu->target, P8_ALTD_DATA_REG, data));
/* Start the command */
- CHECK_ERR(pib_write(&adu->target, P8_ALTD_CMD_REG, cmd_reg));
+ CHECK_ERR_GOTO(out, rc = pib_write(&adu->target, P8_ALTD_CMD_REG, cmd_reg));
/* Wait for completion */
do {
- CHECK_ERR(pib_read(&adu->target, P8_ALTD_STATUS_REG, &val));
+ CHECK_ERR_GOTO(out, rc = pib_read(&adu->target, P8_ALTD_STATUS_REG, &val));
} while (!val);
if( !(val & FBC_ALTD_ADDR_DONE) ||
@@ -341,6 +343,7 @@ retry:
}
}
+out:
adu_unlock(adu);
return rc;
diff --git a/libpdbg/operations.h b/libpdbg/operations.h
index 93e5df5..4a6db2f 100644
--- a/libpdbg/operations.h
+++ b/libpdbg/operations.h
@@ -29,7 +29,7 @@
} while(0)
#define CHECK_ERR_GOTO(label, x) do { \
- if (x) { \
+ if ((x)) { \
PRINT_ERR; \
goto label; \
} \
OpenPOWER on IntegriCloud