diff mbox series

[linux,dev-5.3,2/2] fsi: aspeed: Add trace when error occurs

Message ID 20191014132140.7618-3-joel@jms.id.au
State Changes Requested, archived
Headers show
Series FSI master tracepoints | expand

Commit Message

Joel Stanley Oct. 14, 2019, 1:21 p.m. UTC
This prints out three registers in the FSI master when an error occurs.

Signed-off-by: Joel Stanley <joel@jms.id.au>
---
 drivers/fsi/fsi-master-aspeed.c          |  7 +++++++
 include/trace/events/fsi_master_aspeed.h | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+)

Comments

Eddie James Oct. 14, 2019, 6:38 p.m. UTC | #1
On 10/14/19 8:21 AM, Joel Stanley wrote:
> This prints out three registers in the FSI master when an error occurs.


Reviewed-by: Eddie James <eajames@linux.ibm.com>

Tested-by: Eddie James <eajames@linux.ibm.com>


>
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
>   drivers/fsi/fsi-master-aspeed.c          |  7 +++++++
>   include/trace/events/fsi_master_aspeed.h | 18 ++++++++++++++++++
>   2 files changed, 25 insertions(+)
>
> diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
> index d796c4012875..66657b7848de 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -251,6 +251,13 @@ static int opb_read(void __iomem *base, uint32_t addr, size_t size, u32 *out)
>   static int check_errors(struct fsi_master_aspeed *aspeed, int err)
>   {
>   	int ret;
> +	u32 mresp0, mstap0, mesrb0;
> +
> +	opb_read(aspeed->base, ctrl_base + FSI_MRESP0, 4, &mresp0);
> +	opb_read(aspeed->base, ctrl_base + FSI_MSTAP0, 4, &mstap0);
> +	opb_read(aspeed->base, ctrl_base + FSI_MESRB0, 4, &mesrb0);
> +
> +	trace_fsi_master_aspeed_opb_error(mresp0, mstap0, mesrb0);
>   
>   	if (err == -EIO) {
>   		/* Check MAEB (0x70) ? */
> diff --git a/include/trace/events/fsi_master_aspeed.h b/include/trace/events/fsi_master_aspeed.h
> index 63b9ce7f0de6..8e47637c5fb7 100644
> --- a/include/trace/events/fsi_master_aspeed.h
> +++ b/include/trace/events/fsi_master_aspeed.h
> @@ -54,6 +54,24 @@ TRACE_EVENT(fsi_master_aspeed_opb_write,
>   		)
>   	);
>   
> +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>
Andrew Jeffery Oct. 14, 2019, 11:42 p.m. UTC | #2
On Mon, 14 Oct 2019, at 23:51, Joel Stanley wrote:
> This prints out three registers in the FSI master when an error occurs.
> 
> Signed-off-by: Joel Stanley <joel@jms.id.au>
> ---
>  drivers/fsi/fsi-master-aspeed.c          |  7 +++++++
>  include/trace/events/fsi_master_aspeed.h | 18 ++++++++++++++++++
>  2 files changed, 25 insertions(+)
> 
> diff --git a/drivers/fsi/fsi-master-aspeed.c 
> b/drivers/fsi/fsi-master-aspeed.c
> index d796c4012875..66657b7848de 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -251,6 +251,13 @@ static int opb_read(void __iomem *base, uint32_t 
> addr, size_t size, u32 *out)
>  static int check_errors(struct fsi_master_aspeed *aspeed, int err)
>  {
>  	int ret;
> +	u32 mresp0, mstap0, mesrb0;
> +
> +	opb_read(aspeed->base, ctrl_base + FSI_MRESP0, 4, &mresp0);
> +	opb_read(aspeed->base, ctrl_base + FSI_MSTAP0, 4, &mstap0);
> +	opb_read(aspeed->base, ctrl_base + FSI_MESRB0, 4, &mesrb0);

check_errors() is done unconditionally in the read and write paths, and these
reads are unconditionally done on calls to check_error(). Really we only need
them if an error has occurred, so I think we should do:

if (trace_fsi_master_aspeed_opb_error_enabled()) {
    u32 mresp0, mstap0, mesrb0;
    opb_read(aspeed->base, ctrl_base + FSI_MRESP0, 4, &mresp0);
    ...
    trace_fsi_master_aspeed_opb_error(mresp0, mstap0, mesrb0);
}
diff mbox series

Patch

diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
index d796c4012875..66657b7848de 100644
--- a/drivers/fsi/fsi-master-aspeed.c
+++ b/drivers/fsi/fsi-master-aspeed.c
@@ -251,6 +251,13 @@  static int opb_read(void __iomem *base, uint32_t addr, size_t size, u32 *out)
 static int check_errors(struct fsi_master_aspeed *aspeed, int err)
 {
 	int ret;
+	u32 mresp0, mstap0, mesrb0;
+
+	opb_read(aspeed->base, ctrl_base + FSI_MRESP0, 4, &mresp0);
+	opb_read(aspeed->base, ctrl_base + FSI_MSTAP0, 4, &mstap0);
+	opb_read(aspeed->base, ctrl_base + FSI_MESRB0, 4, &mesrb0);
+
+	trace_fsi_master_aspeed_opb_error(mresp0, mstap0, mesrb0);
 
 	if (err == -EIO) {
 		/* Check MAEB (0x70) ? */
diff --git a/include/trace/events/fsi_master_aspeed.h b/include/trace/events/fsi_master_aspeed.h
index 63b9ce7f0de6..8e47637c5fb7 100644
--- a/include/trace/events/fsi_master_aspeed.h
+++ b/include/trace/events/fsi_master_aspeed.h
@@ -54,6 +54,24 @@  TRACE_EVENT(fsi_master_aspeed_opb_write,
 		)
 	);
 
+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>