|
@@ -23,6 +23,9 @@
|
|
|
|
|
|
#include "rpmh-internal.h"
|
|
#include "rpmh-internal.h"
|
|
|
|
|
|
|
|
+#define CREATE_TRACE_POINTS
|
|
|
|
+#include "trace-rpmh.h"
|
|
|
|
+
|
|
#define RSC_DRV_TCS_OFFSET 672
|
|
#define RSC_DRV_TCS_OFFSET 672
|
|
#define RSC_DRV_CMD_OFFSET 20
|
|
#define RSC_DRV_CMD_OFFSET 20
|
|
|
|
|
|
@@ -135,7 +138,7 @@ static const struct tcs_request *get_req_from_tcs(struct rsc_drv *drv,
|
|
static irqreturn_t tcs_tx_done(int irq, void *p)
|
|
static irqreturn_t tcs_tx_done(int irq, void *p)
|
|
{
|
|
{
|
|
struct rsc_drv *drv = p;
|
|
struct rsc_drv *drv = p;
|
|
- int i, j;
|
|
|
|
|
|
+ int i, j, err;
|
|
unsigned long irq_status;
|
|
unsigned long irq_status;
|
|
const struct tcs_request *req;
|
|
const struct tcs_request *req;
|
|
struct tcs_cmd *cmd;
|
|
struct tcs_cmd *cmd;
|
|
@@ -149,6 +152,7 @@ static irqreturn_t tcs_tx_done(int irq, void *p)
|
|
goto skip;
|
|
goto skip;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ err = 0;
|
|
for (j = 0; j < req->num_cmds; j++) {
|
|
for (j = 0; j < req->num_cmds; j++) {
|
|
u32 sts;
|
|
u32 sts;
|
|
|
|
|
|
@@ -159,8 +163,11 @@ static irqreturn_t tcs_tx_done(int irq, void *p)
|
|
!(sts & CMD_STATUS_COMPL))) {
|
|
!(sts & CMD_STATUS_COMPL))) {
|
|
pr_err("Incomplete request: %s: addr=%#x data=%#x",
|
|
pr_err("Incomplete request: %s: addr=%#x data=%#x",
|
|
drv->name, cmd->addr, cmd->data);
|
|
drv->name, cmd->addr, cmd->data);
|
|
|
|
+ err = -EIO;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ trace_rpmh_tx_done(drv, i, req, err);
|
|
skip:
|
|
skip:
|
|
/* Reclaim the TCS */
|
|
/* Reclaim the TCS */
|
|
write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0);
|
|
write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0);
|
|
@@ -194,9 +201,11 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id,
|
|
cmd_complete |= cmd->wait << j;
|
|
cmd_complete |= cmd->wait << j;
|
|
msgid = cmd_msgid;
|
|
msgid = cmd_msgid;
|
|
msgid |= cmd->wait ? CMD_MSGID_RESP_REQ : 0;
|
|
msgid |= cmd->wait ? CMD_MSGID_RESP_REQ : 0;
|
|
|
|
+
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid);
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid);
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr);
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr);
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data);
|
|
write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data);
|
|
|
|
+ trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd);
|
|
}
|
|
}
|
|
|
|
|
|
write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete);
|
|
write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete);
|