Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea92144d authored by Lina Iyer's avatar Lina Iyer
Browse files

drivers: mailbox: tcs: log key events using ftrace



Log RPMH send and ack events using ftrace.

Change-Id: I5542f40aed946f1288001989ac1d3159e6ed6fb1
Signed-off-by: default avatarLina Iyer <ilina@codeaurora.org>
parent c8564ffe
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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);
@@ -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);
}

@@ -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 */
@@ -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;
	}
}
+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>