Skip to content

Commit

Permalink
fsi: aspeed: Add trace points
Browse files Browse the repository at this point in the history
These trace points help with debugging the FSI master. They show the low
level reads, writes and error states of the master.

Signed-off-by: Joel Stanley <joel@jms.id.au>
Link: https://lore.kernel.org/r/20191108051945.7109-11-joel@jms.id.au
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Joel Stanley authored and Greg Kroah-Hartman committed Nov 8, 2019
1 parent 606397d commit 913b737
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 0 deletions.
22 changes: 22 additions & 0 deletions drivers/fsi/fsi-master-aspeed.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ static const u32 fsi_base = 0xa0000000;
#define XFER_HALFWORD (BIT(0))
#define XFER_BYTE (0)

#define CREATE_TRACE_POINTS
#include <trace/events/fsi_master_aspeed.h>

#define FSI_LINK_ENABLE_SETUP_TIME 10 /* in mS */

#define DEFAULT_DIVISOR 14
Expand All @@ -102,6 +105,8 @@ static int __opb_write(struct fsi_master_aspeed *aspeed, u32 addr,

status = readl(base + OPB0_STATUS);

trace_fsi_master_aspeed_opb_write(addr, val, transfer_size, status, reg);

/* Return error when poll timed out */
if (ret)
return ret;
Expand Down Expand Up @@ -149,6 +154,10 @@ static int __opb_read(struct fsi_master_aspeed *aspeed, uint32_t addr,

result = readl(base + OPB0_FSI_DATA_R);

trace_fsi_master_aspeed_opb_read(addr, transfer_size, result,
readl(base + OPB0_STATUS),
reg);

/* Return error when poll timed out */
if (ret)
return ret;
Expand Down Expand Up @@ -196,6 +205,19 @@ static int check_errors(struct fsi_master_aspeed *aspeed, int err)
{
int ret;

if (trace_fsi_master_aspeed_opb_error_enabled()) {
__be32 mresp0, mstap0, mesrb0;

opb_readl(aspeed, ctrl_base + FSI_MRESP0, &mresp0);
opb_readl(aspeed, ctrl_base + FSI_MSTAP0, &mstap0);
opb_readl(aspeed, ctrl_base + FSI_MESRB0, &mesrb0);

trace_fsi_master_aspeed_opb_error(
be32_to_cpu(mresp0),
be32_to_cpu(mstap0),
be32_to_cpu(mesrb0));
}

if (err == -EIO) {
/* Check MAEB (0x70) ? */

Expand Down
77 changes: 77 additions & 0 deletions include/trace/events/fsi_master_aspeed.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */

#undef TRACE_SYSTEM
#define TRACE_SYSTEM fsi_master_aspeed

#if !defined(_TRACE_FSI_MASTER_ASPEED_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_FSI_MASTER_ASPEED_H

#include <linux/tracepoint.h>

TRACE_EVENT(fsi_master_aspeed_opb_read,
TP_PROTO(uint32_t addr, size_t size, uint32_t result, uint32_t status, uint32_t irq_status),
TP_ARGS(addr, size, result, status, irq_status),
TP_STRUCT__entry(
__field(uint32_t, addr)
__field(size_t, size)
__field(uint32_t, result)
__field(uint32_t, status)
__field(uint32_t, irq_status)
),
TP_fast_assign(
__entry->addr = addr;
__entry->size = size;
__entry->result = result;
__entry->status = status;
__entry->irq_status = irq_status;
),
TP_printk("addr %08x size %zu: result %08x sts: %08x irq_sts: %08x",
__entry->addr, __entry->size, __entry->result,
__entry->status, __entry->irq_status
)
);

TRACE_EVENT(fsi_master_aspeed_opb_write,
TP_PROTO(uint32_t addr, uint32_t val, size_t size, uint32_t status, uint32_t irq_status),
TP_ARGS(addr, val, size, status, irq_status),
TP_STRUCT__entry(
__field(uint32_t, addr)
__field(uint32_t, val)
__field(size_t, size)
__field(uint32_t, status)
__field(uint32_t, irq_status)
),
TP_fast_assign(
__entry->addr = addr;
__entry->val = val;
__entry->size = size;
__entry->status = status;
__entry->irq_status = irq_status;
),
TP_printk("addr %08x val %08x size %zu status: %08x irq_sts: %08x",
__entry->addr, __entry->val, __entry->size,
__entry->status, __entry->irq_status
)
);

TRACE_EVENT(fsi_master_aspeed_opb_error,
TP_PROTO(uint32_t mresp0, uint32_t mstap0, uint32_t mesrb0),
TP_ARGS(mresp0, mstap0, mesrb0),
TP_STRUCT__entry(
__field(uint32_t, mresp0)
__field(uint32_t, mstap0)
__field(uint32_t, mesrb0)
),
TP_fast_assign(
__entry->mresp0 = mresp0;
__entry->mstap0 = mstap0;
__entry->mesrb0 = mesrb0;
),
TP_printk("mresp0 %08x mstap0 %08x mesrb0 %08x",
__entry->mresp0, __entry->mstap0, __entry->mesrb0
)
);

#endif

#include <trace/define_trace.h>

0 comments on commit 913b737

Please sign in to comment.