Loading drivers/mailbox/qti-tcs.c +9 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,9 @@ #include "mailbox.h" #define CREATE_TRACE_POINTS #include <trace/events/rpmh.h> #define MAX_CMDS_PER_TCS 16 #define MAX_TCS_PER_TYPE 3 #define MAX_TCS_SLOTS (MAX_CMDS_PER_TCS * MAX_TCS_PER_TYPE) Loading Loading @@ -383,6 +386,8 @@ static irqreturn_t tcs_irq_handler(int irq, void *p) mbox_chan_received_data(resp->chan, resp->msg); } trace_rpmh_notify_irq(m, resp->msg->payload[0].addr, resp->err); /* Notify the client that this request is completed. */ send_tcs_response(resp); irq_clear |= BIT(m); Loading @@ -397,6 +402,7 @@ static irqreturn_t tcs_irq_handler(int irq, void *p) static inline void mbox_notify_tx_done(struct mbox_chan *chan, struct tcs_mbox_msg *msg, int m, int err) { trace_rpmh_notify(m, msg->payload[0].addr, err); mbox_chan_txdone(chan, err); } Loading Loading @@ -487,6 +493,8 @@ static void __tcs_buffer_write(void __iomem *base, int d, int m, int n, write_tcs_reg(base, TCS_DRV_CMD_MSGID, m, n + i, cmd_msgid); write_tcs_reg(base, TCS_DRV_CMD_ADDR, m, n + i, cmd->addr); write_tcs_reg(base, TCS_DRV_CMD_DATA, m, n + i, cmd->data); trace_rpmh_send_msg(base, m, n + i, cmd_msgid, cmd->addr, cmd->data, cmd->complete); } /* Write the send-after-prev completion bits for the batch */ Loading Loading @@ -830,6 +838,7 @@ static void __tcs_write_hidden(void *base, int d, struct tcs_mbox_msg *msg) /* Only data is write capable */ writel_relaxed(cpu_to_le32(msg->payload[i].data), addr + offset); trace_rpmh_control_msg(addr + offset, msg->payload[i].data); addr += TCS_HIDDEN_CMD_SHIFT; } } Loading include/trace/events/rpmh.h 0 → 100644 +108 −0 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM rpmh #if !defined(_TRACE_RPMH_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_RPMH_H #include <linux/tracepoint.h> DECLARE_EVENT_CLASS(rpmh_ack_recvd, TP_PROTO(int m, u32 addr, int errno), TP_ARGS(m, addr, errno), TP_STRUCT__entry( __field(int, m) __field(u32, addr) __field(int, errno) ), TP_fast_assign( __entry->m = m; __entry->addr = addr; __entry->errno = errno; ), TP_printk("ack: tcs-m:%d addr: 0x%08x errno: %d", __entry->m, __entry->addr, __entry->errno) ); DEFINE_EVENT(rpmh_ack_recvd, rpmh_notify_irq, TP_PROTO(int m, u32 addr, int err), TP_ARGS(m, addr, err) ); DEFINE_EVENT(rpmh_ack_recvd, rpmh_notify, TP_PROTO(int m, u32 addr, int err), TP_ARGS(m, addr, err) ); TRACE_EVENT(rpmh_send_msg, TP_PROTO(void *b, int m, int n, u32 h, u32 a, u32 v, bool c), TP_ARGS(b, m, n, h, a, v, c), TP_STRUCT__entry( __field(void *, base) __field(int, m) __field(int, n) __field(u32, hdr) __field(u32, addr) __field(u32, data) __field(bool, complete) ), TP_fast_assign( __entry->base = b; __entry->m = m; __entry->n = n; __entry->hdr = h; __entry->addr = a; __entry->data = v; __entry->complete = c; ), TP_printk("msg: base: 0x%p tcs(m): %d cmd(n): %d msgid: 0x%08x addr: 0x%08x data: 0x%08x complete: %d", __entry->base + (672 * __entry->m) + (20 * __entry->n), __entry->m, __entry->n, __entry->hdr, __entry->addr, __entry->data, __entry->complete) ); TRACE_EVENT(rpmh_control_msg, TP_PROTO(void *r, u32 v), TP_ARGS(r, v), TP_STRUCT__entry( __field(void *, reg) __field(u32, data) ), TP_fast_assign( __entry->reg = r; __entry->data = v; ), TP_printk("ctrl-msg: reg: 0x%p data: 0x%08x", __entry->reg, __entry->data) ); #endif /* _TRACE_RPMH_H */ #define TRACE_INCLUDE_FILE rpmh #include <trace/define_trace.h> Loading
drivers/mailbox/qti-tcs.c +9 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,9 @@ #include "mailbox.h" #define CREATE_TRACE_POINTS #include <trace/events/rpmh.h> #define MAX_CMDS_PER_TCS 16 #define MAX_TCS_PER_TYPE 3 #define MAX_TCS_SLOTS (MAX_CMDS_PER_TCS * MAX_TCS_PER_TYPE) Loading Loading @@ -383,6 +386,8 @@ static irqreturn_t tcs_irq_handler(int irq, void *p) mbox_chan_received_data(resp->chan, resp->msg); } trace_rpmh_notify_irq(m, resp->msg->payload[0].addr, resp->err); /* Notify the client that this request is completed. */ send_tcs_response(resp); irq_clear |= BIT(m); Loading @@ -397,6 +402,7 @@ static irqreturn_t tcs_irq_handler(int irq, void *p) static inline void mbox_notify_tx_done(struct mbox_chan *chan, struct tcs_mbox_msg *msg, int m, int err) { trace_rpmh_notify(m, msg->payload[0].addr, err); mbox_chan_txdone(chan, err); } Loading Loading @@ -487,6 +493,8 @@ static void __tcs_buffer_write(void __iomem *base, int d, int m, int n, write_tcs_reg(base, TCS_DRV_CMD_MSGID, m, n + i, cmd_msgid); write_tcs_reg(base, TCS_DRV_CMD_ADDR, m, n + i, cmd->addr); write_tcs_reg(base, TCS_DRV_CMD_DATA, m, n + i, cmd->data); trace_rpmh_send_msg(base, m, n + i, cmd_msgid, cmd->addr, cmd->data, cmd->complete); } /* Write the send-after-prev completion bits for the batch */ Loading Loading @@ -830,6 +838,7 @@ static void __tcs_write_hidden(void *base, int d, struct tcs_mbox_msg *msg) /* Only data is write capable */ writel_relaxed(cpu_to_le32(msg->payload[i].data), addr + offset); trace_rpmh_control_msg(addr + offset, msg->payload[i].data); addr += TCS_HIDDEN_CMD_SHIFT; } } Loading
include/trace/events/rpmh.h 0 → 100644 +108 −0 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #undef TRACE_SYSTEM #define TRACE_SYSTEM rpmh #if !defined(_TRACE_RPMH_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_RPMH_H #include <linux/tracepoint.h> DECLARE_EVENT_CLASS(rpmh_ack_recvd, TP_PROTO(int m, u32 addr, int errno), TP_ARGS(m, addr, errno), TP_STRUCT__entry( __field(int, m) __field(u32, addr) __field(int, errno) ), TP_fast_assign( __entry->m = m; __entry->addr = addr; __entry->errno = errno; ), TP_printk("ack: tcs-m:%d addr: 0x%08x errno: %d", __entry->m, __entry->addr, __entry->errno) ); DEFINE_EVENT(rpmh_ack_recvd, rpmh_notify_irq, TP_PROTO(int m, u32 addr, int err), TP_ARGS(m, addr, err) ); DEFINE_EVENT(rpmh_ack_recvd, rpmh_notify, TP_PROTO(int m, u32 addr, int err), TP_ARGS(m, addr, err) ); TRACE_EVENT(rpmh_send_msg, TP_PROTO(void *b, int m, int n, u32 h, u32 a, u32 v, bool c), TP_ARGS(b, m, n, h, a, v, c), TP_STRUCT__entry( __field(void *, base) __field(int, m) __field(int, n) __field(u32, hdr) __field(u32, addr) __field(u32, data) __field(bool, complete) ), TP_fast_assign( __entry->base = b; __entry->m = m; __entry->n = n; __entry->hdr = h; __entry->addr = a; __entry->data = v; __entry->complete = c; ), TP_printk("msg: base: 0x%p tcs(m): %d cmd(n): %d msgid: 0x%08x addr: 0x%08x data: 0x%08x complete: %d", __entry->base + (672 * __entry->m) + (20 * __entry->n), __entry->m, __entry->n, __entry->hdr, __entry->addr, __entry->data, __entry->complete) ); TRACE_EVENT(rpmh_control_msg, TP_PROTO(void *r, u32 v), TP_ARGS(r, v), TP_STRUCT__entry( __field(void *, reg) __field(u32, data) ), TP_fast_assign( __entry->reg = r; __entry->data = v; ), TP_printk("ctrl-msg: reg: 0x%p data: 0x%08x", __entry->reg, __entry->data) ); #endif /* _TRACE_RPMH_H */ #define TRACE_INCLUDE_FILE rpmh #include <trace/define_trace.h>