* [PATCH linux dev-5.14] spi: fsi: Print status on error
@ 2021-10-21 16:10 Eddie James
2021-10-21 22:49 ` Joel Stanley
0 siblings, 1 reply; 2+ messages in thread
From: Eddie James @ 2021-10-21 16:10 UTC (permalink / raw)
To: openbmc
Print the SPI engine status register when an error is detected. This
will aid tremendously in debugging failed transactions.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
Link: https://lore.kernel.org/r/20211004195149.29759-1-eajames@linux.ibm.com
Signed-off-by: Mark Brown <broonie@kernel.org>
---
drivers/spi/spi-fsi.c | 48 ++++++++++++++++++++++++-------------------
1 file changed, 27 insertions(+), 21 deletions(-)
diff --git a/drivers/spi/spi-fsi.c b/drivers/spi/spi-fsi.c
index 829770b8ec74..9be18db03722 100644
--- a/drivers/spi/spi-fsi.c
+++ b/drivers/spi/spi-fsi.c
@@ -234,6 +234,26 @@ static int fsi_spi_reset(struct fsi_spi *ctx)
return fsi_spi_write_reg(ctx, SPI_FSI_STATUS, 0ULL);
}
+static int fsi_spi_status(struct fsi_spi *ctx, u64 *status, const char *dir)
+{
+ int rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS, status);
+
+ if (rc)
+ return rc;
+
+ if (*status & SPI_FSI_STATUS_ANY_ERROR) {
+ dev_err(ctx->dev, "%s error: %08llx\n", dir, *status);
+
+ rc = fsi_spi_reset(ctx);
+ if (rc)
+ return rc;
+
+ return -EREMOTEIO;
+ }
+
+ return 0;
+}
+
static void fsi_spi_sequence_add(struct fsi_spi_sequence *seq, u8 val)
{
/*
@@ -273,18 +293,9 @@ static int fsi_spi_transfer_data(struct fsi_spi *ctx,
return rc;
do {
- rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS,
- &status);
+ rc = fsi_spi_status(ctx, &status, "TX");
if (rc)
return rc;
-
- if (status & SPI_FSI_STATUS_ANY_ERROR) {
- rc = fsi_spi_reset(ctx);
- if (rc)
- return rc;
-
- return -EREMOTEIO;
- }
} while (status & SPI_FSI_STATUS_TDR_FULL);
sent += nb;
@@ -296,18 +307,9 @@ static int fsi_spi_transfer_data(struct fsi_spi *ctx,
while (transfer->len > recv) {
do {
- rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS,
- &status);
+ rc = fsi_spi_status(ctx, &status, "RX");
if (rc)
return rc;
-
- if (status & SPI_FSI_STATUS_ANY_ERROR) {
- rc = fsi_spi_reset(ctx);
- if (rc)
- return rc;
-
- return -EREMOTEIO;
- }
} while (!(status & SPI_FSI_STATUS_RDR_FULL));
rc = fsi_spi_read_reg(ctx, SPI_FSI_DATA_RX, &in);
@@ -348,8 +350,12 @@ static int fsi_spi_transfer_init(struct fsi_spi *ctx)
if (status & (SPI_FSI_STATUS_ANY_ERROR |
SPI_FSI_STATUS_TDR_FULL |
SPI_FSI_STATUS_RDR_FULL)) {
- if (reset)
+ if (reset) {
+ dev_err(ctx->dev,
+ "Initialization error: %08llx\n",
+ status);
return -EIO;
+ }
rc = fsi_spi_reset(ctx);
if (rc)
--
2.27.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH linux dev-5.14] spi: fsi: Print status on error
2021-10-21 16:10 [PATCH linux dev-5.14] spi: fsi: Print status on error Eddie James
@ 2021-10-21 22:49 ` Joel Stanley
0 siblings, 0 replies; 2+ messages in thread
From: Joel Stanley @ 2021-10-21 22:49 UTC (permalink / raw)
To: Eddie James; +Cc: OpenBMC Maillist
On Thu, 21 Oct 2021 at 16:10, Eddie James <eajames@linux.ibm.com> wrote:
>
> Print the SPI engine status register when an error is detected. This
> will aid tremendously in debugging failed transactions.
>
> Signed-off-by: Eddie James <eajames@linux.ibm.com>
> Link: https://lore.kernel.org/r/20211004195149.29759-1-eajames@linux.ibm.com
> Signed-off-by: Mark Brown <broonie@kernel.org>
> ---
> drivers/spi/spi-fsi.c | 48 ++++++++++++++++++++++++-------------------
Thanks, applied.
> 1 file changed, 27 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/spi/spi-fsi.c b/drivers/spi/spi-fsi.c
> index 829770b8ec74..9be18db03722 100644
> --- a/drivers/spi/spi-fsi.c
> +++ b/drivers/spi/spi-fsi.c
> @@ -234,6 +234,26 @@ static int fsi_spi_reset(struct fsi_spi *ctx)
> return fsi_spi_write_reg(ctx, SPI_FSI_STATUS, 0ULL);
> }
>
> +static int fsi_spi_status(struct fsi_spi *ctx, u64 *status, const char *dir)
> +{
> + int rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS, status);
> +
> + if (rc)
> + return rc;
> +
> + if (*status & SPI_FSI_STATUS_ANY_ERROR) {
> + dev_err(ctx->dev, "%s error: %08llx\n", dir, *status);
> +
> + rc = fsi_spi_reset(ctx);
> + if (rc)
> + return rc;
> +
> + return -EREMOTEIO;
> + }
> +
> + return 0;
> +}
> +
> static void fsi_spi_sequence_add(struct fsi_spi_sequence *seq, u8 val)
> {
> /*
> @@ -273,18 +293,9 @@ static int fsi_spi_transfer_data(struct fsi_spi *ctx,
> return rc;
>
> do {
> - rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS,
> - &status);
> + rc = fsi_spi_status(ctx, &status, "TX");
> if (rc)
> return rc;
> -
> - if (status & SPI_FSI_STATUS_ANY_ERROR) {
> - rc = fsi_spi_reset(ctx);
> - if (rc)
> - return rc;
> -
> - return -EREMOTEIO;
> - }
> } while (status & SPI_FSI_STATUS_TDR_FULL);
>
> sent += nb;
> @@ -296,18 +307,9 @@ static int fsi_spi_transfer_data(struct fsi_spi *ctx,
>
> while (transfer->len > recv) {
> do {
> - rc = fsi_spi_read_reg(ctx, SPI_FSI_STATUS,
> - &status);
> + rc = fsi_spi_status(ctx, &status, "RX");
> if (rc)
> return rc;
> -
> - if (status & SPI_FSI_STATUS_ANY_ERROR) {
> - rc = fsi_spi_reset(ctx);
> - if (rc)
> - return rc;
> -
> - return -EREMOTEIO;
> - }
> } while (!(status & SPI_FSI_STATUS_RDR_FULL));
>
> rc = fsi_spi_read_reg(ctx, SPI_FSI_DATA_RX, &in);
> @@ -348,8 +350,12 @@ static int fsi_spi_transfer_init(struct fsi_spi *ctx)
> if (status & (SPI_FSI_STATUS_ANY_ERROR |
> SPI_FSI_STATUS_TDR_FULL |
> SPI_FSI_STATUS_RDR_FULL)) {
> - if (reset)
> + if (reset) {
> + dev_err(ctx->dev,
> + "Initialization error: %08llx\n",
> + status);
> return -EIO;
> + }
>
> rc = fsi_spi_reset(ctx);
> if (rc)
> --
> 2.27.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-10-21 22:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-21 16:10 [PATCH linux dev-5.14] spi: fsi: Print status on error Eddie James
2021-10-21 22:49 ` Joel Stanley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).