Message ID | 20200217131446.32818-3-mika.westerberg@linux.intel.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | platform/x86: Rework intel_scu_ipc and intel_pmc_ipc drivers | expand |
On Mon, Feb 17, 2020 at 04:14:29PM +0300, Mika Westerberg wrote: > Currently we only log an error if the command times out which makes it > hard to figure out the failing command. This changes the driver to log > command and subcommand with the error code which should make debugging > easier. This also allows us to simplify the callers as they don't need > to log these errors themselves. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > > Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> > --- > drivers/platform/x86/intel_scu_ipc.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c > index 19c2cc41fb05..7512d550b375 100644 > --- a/drivers/platform/x86/intel_scu_ipc.c > +++ b/drivers/platform/x86/intel_scu_ipc.c > @@ -147,7 +147,6 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu) > usleep_range(50, 100); > } while (time_before(jiffies, end)); > > - dev_err(&scu->dev, "IPC timed out"); > return -ETIMEDOUT; > } > > @@ -156,10 +155,8 @@ static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) > { > int status; > > - if (!wait_for_completion_timeout(&scu->cmd_complete, IPC_TIMEOUT)) { > - dev_err(&scu->dev, "IPC timed out\n"); > + if (!wait_for_completion_timeout(&scu->cmd_complete, IPC_TIMEOUT)) > return -ETIMEDOUT; > - } > > status = ipc_read_status(scu); > if (status & IPC_STATUS_ERR) > @@ -331,6 +328,7 @@ EXPORT_SYMBOL(intel_scu_ipc_update_register); > int intel_scu_ipc_simple_command(int cmd, int sub) > { > struct intel_scu_ipc_dev *scu; > + u32 cmdval; > int err; > > mutex_lock(&ipclock); > @@ -339,9 +337,12 @@ int intel_scu_ipc_simple_command(int cmd, int sub) > return -ENODEV; > } > scu = ipcdev; > - ipc_command(scu, sub << 12 | cmd); > + cmdval = sub << 12 | cmd; > + ipc_command(scu, cmdval); > err = intel_scu_ipc_check_status(scu); > mutex_unlock(&ipclock); > + if (err) > + dev_err(&scu->dev, "IPC command %#x failed with %d\n", cmdval, err); > return err; > } > EXPORT_SYMBOL(intel_scu_ipc_simple_command); > @@ -362,6 +363,7 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, > u32 *out, int outlen) > { > struct intel_scu_ipc_dev *scu; > + u32 cmdval; > int i, err; > > mutex_lock(&ipclock); > @@ -374,7 +376,8 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, > for (i = 0; i < inlen; i++) > ipc_data_writel(scu, *in++, 4 * i); > > - ipc_command(scu, (inlen << 16) | (sub << 12) | cmd); > + cmdval = (inlen << 16) | (sub << 12) | cmd; > + ipc_command(scu, cmdval); > err = intel_scu_ipc_check_status(scu); > > if (!err) { > @@ -383,6 +386,8 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, > } > > mutex_unlock(&ipclock); > + if (err) > + dev_err(&scu->dev, "IPC command %#x failed with %d\n", cmdval, err); > return err; > } > EXPORT_SYMBOL(intel_scu_ipc_command); > -- > 2.25.0 >
diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c index 19c2cc41fb05..7512d550b375 100644 --- a/drivers/platform/x86/intel_scu_ipc.c +++ b/drivers/platform/x86/intel_scu_ipc.c @@ -147,7 +147,6 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu) usleep_range(50, 100); } while (time_before(jiffies, end)); - dev_err(&scu->dev, "IPC timed out"); return -ETIMEDOUT; } @@ -156,10 +155,8 @@ static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu) { int status; - if (!wait_for_completion_timeout(&scu->cmd_complete, IPC_TIMEOUT)) { - dev_err(&scu->dev, "IPC timed out\n"); + if (!wait_for_completion_timeout(&scu->cmd_complete, IPC_TIMEOUT)) return -ETIMEDOUT; - } status = ipc_read_status(scu); if (status & IPC_STATUS_ERR) @@ -331,6 +328,7 @@ EXPORT_SYMBOL(intel_scu_ipc_update_register); int intel_scu_ipc_simple_command(int cmd, int sub) { struct intel_scu_ipc_dev *scu; + u32 cmdval; int err; mutex_lock(&ipclock); @@ -339,9 +337,12 @@ int intel_scu_ipc_simple_command(int cmd, int sub) return -ENODEV; } scu = ipcdev; - ipc_command(scu, sub << 12 | cmd); + cmdval = sub << 12 | cmd; + ipc_command(scu, cmdval); err = intel_scu_ipc_check_status(scu); mutex_unlock(&ipclock); + if (err) + dev_err(&scu->dev, "IPC command %#x failed with %d\n", cmdval, err); return err; } EXPORT_SYMBOL(intel_scu_ipc_simple_command); @@ -362,6 +363,7 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, u32 *out, int outlen) { struct intel_scu_ipc_dev *scu; + u32 cmdval; int i, err; mutex_lock(&ipclock); @@ -374,7 +376,8 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, for (i = 0; i < inlen; i++) ipc_data_writel(scu, *in++, 4 * i); - ipc_command(scu, (inlen << 16) | (sub << 12) | cmd); + cmdval = (inlen << 16) | (sub << 12) | cmd; + ipc_command(scu, cmdval); err = intel_scu_ipc_check_status(scu); if (!err) { @@ -383,6 +386,8 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen, } mutex_unlock(&ipclock); + if (err) + dev_err(&scu->dev, "IPC command %#x failed with %d\n", cmdval, err); return err; } EXPORT_SYMBOL(intel_scu_ipc_command);
Currently we only log an error if the command times out which makes it hard to figure out the failing command. This changes the driver to log command and subcommand with the error code which should make debugging easier. This also allows us to simplify the callers as they don't need to log these errors themselves. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> --- drivers/platform/x86/intel_scu_ipc.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-)