Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers: qcom: rpmh-rsc: log RPMH requests in FTRACE

Log sent RPMH requests and interrupt responses in FTRACE.

Signed-off-by: Lina Iyer <ilina@codeaurora.org>
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
[rplsssn@codeaurora.org: rebase to v4.18-rc1 & fix merge conflict]
Signed-off-by: Raju P.L.S.S.S.N <rplsssn@codeaurora.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>

authored by

Lina Iyer and committed by
Andy Gross
fc087fe5 2e4690a0

+93 -1
+1
drivers/soc/qcom/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 + CFLAGS_rpmh-rsc.o := -I$(src) 2 3 obj-$(CONFIG_QCOM_GENI_SE) += qcom-geni-se.o 3 4 obj-$(CONFIG_QCOM_COMMAND_DB) += cmd-db.o 4 5 obj-$(CONFIG_QCOM_GLINK_SSR) += glink_ssr.o
+10 -1
drivers/soc/qcom/rpmh-rsc.c
··· 23 23 24 24 #include "rpmh-internal.h" 25 25 26 + #define CREATE_TRACE_POINTS 27 + #include "trace-rpmh.h" 28 + 26 29 #define RSC_DRV_TCS_OFFSET 672 27 30 #define RSC_DRV_CMD_OFFSET 20 28 31 ··· 138 135 static irqreturn_t tcs_tx_done(int irq, void *p) 139 136 { 140 137 struct rsc_drv *drv = p; 141 - int i, j; 138 + int i, j, err; 142 139 unsigned long irq_status; 143 140 const struct tcs_request *req; 144 141 struct tcs_cmd *cmd; ··· 152 149 goto skip; 153 150 } 154 151 152 + err = 0; 155 153 for (j = 0; j < req->num_cmds; j++) { 156 154 u32 sts; 157 155 ··· 163 159 !(sts & CMD_STATUS_COMPL))) { 164 160 pr_err("Incomplete request: %s: addr=%#x data=%#x", 165 161 drv->name, cmd->addr, cmd->data); 162 + err = -EIO; 166 163 } 167 164 } 165 + 166 + trace_rpmh_tx_done(drv, i, req, err); 168 167 skip: 169 168 /* Reclaim the TCS */ 170 169 write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0); ··· 201 194 cmd_complete |= cmd->wait << j; 202 195 msgid = cmd_msgid; 203 196 msgid |= cmd->wait ? CMD_MSGID_RESP_REQ : 0; 197 + 204 198 write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid); 205 199 write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); 206 200 write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); 201 + trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); 207 202 } 208 203 209 204 write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete);
+82
drivers/soc/qcom/trace-rpmh.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. 4 + */ 5 + 6 + #if !defined(_TRACE_RPMH_H) || defined(TRACE_HEADER_MULTI_READ) 7 + #define _TRACE_RPMH_H 8 + 9 + #undef TRACE_SYSTEM 10 + #define TRACE_SYSTEM rpmh 11 + 12 + #include <linux/tracepoint.h> 13 + #include "rpmh-internal.h" 14 + 15 + TRACE_EVENT(rpmh_tx_done, 16 + 17 + TP_PROTO(struct rsc_drv *d, int m, const struct tcs_request *r, int e), 18 + 19 + TP_ARGS(d, m, r, e), 20 + 21 + TP_STRUCT__entry( 22 + __string(name, d->name) 23 + __field(int, m) 24 + __field(u32, addr) 25 + __field(u32, data) 26 + __field(int, err) 27 + ), 28 + 29 + TP_fast_assign( 30 + __assign_str(name, d->name); 31 + __entry->m = m; 32 + __entry->addr = r->cmds[0].addr; 33 + __entry->data = r->cmds[0].data; 34 + __entry->err = e; 35 + ), 36 + 37 + TP_printk("%s: ack: tcs-m: %d addr: %#x data: %#x errno: %d", 38 + __get_str(name), __entry->m, __entry->addr, __entry->data, 39 + __entry->err) 40 + ); 41 + 42 + TRACE_EVENT(rpmh_send_msg, 43 + 44 + TP_PROTO(struct rsc_drv *d, int m, int n, u32 h, 45 + const struct tcs_cmd *c), 46 + 47 + TP_ARGS(d, m, n, h, c), 48 + 49 + TP_STRUCT__entry( 50 + __string(name, d->name) 51 + __field(int, m) 52 + __field(int, n) 53 + __field(u32, hdr) 54 + __field(u32, addr) 55 + __field(u32, data) 56 + __field(bool, wait) 57 + ), 58 + 59 + TP_fast_assign( 60 + __assign_str(name, d->name); 61 + __entry->m = m; 62 + __entry->n = n; 63 + __entry->hdr = h; 64 + __entry->addr = c->addr; 65 + __entry->data = c->data; 66 + __entry->wait = c->wait; 67 + ), 68 + 69 + TP_printk("%s: send-msg: tcs(m): %d cmd(n): %d msgid: %#x addr: %#x data: %#x complete: %d", 70 + __get_str(name), __entry->m, __entry->n, __entry->hdr, 71 + __entry->addr, __entry->data, __entry->wait) 72 + ); 73 + 74 + #endif /* _TRACE_RPMH_H */ 75 + 76 + #undef TRACE_INCLUDE_PATH 77 + #define TRACE_INCLUDE_PATH . 78 + 79 + #undef TRACE_INCLUDE_FILE 80 + #define TRACE_INCLUDE_FILE trace-rpmh 81 + 82 + #include <trace/define_trace.h>