Skip to content

Commit

Permalink
intel_scu_ipc: move error check out of the loop
Browse files Browse the repository at this point in the history
This is small performance optimization of the busy_loop().

While here, use BIT() macro instead of plain integers when check the status.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
  • Loading branch information
Andy Shevchenko authored and Darren Hart committed Jan 29, 2015
1 parent 7c2e3c7 commit f0295a3
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions drivers/platform/x86/intel_scu_ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,21 +176,21 @@ static inline u32 ipc_data_readl(u32 offset) /* Read ipc u32 data */
/* Wait till scu status is busy */
static inline int busy_loop(void)
{
u32 status = 0;
u32 loop_count = 0;
u32 status = ipc_read_status();
u32 loop_count = 100000;

status = ipc_read_status();
while (status & 1) {
/* break if scu doesn't reset busy bit after huge retry */
while ((status & BIT(0)) && --loop_count) {
udelay(1); /* scu processing time is in few u secods */
status = ipc_read_status();
loop_count++;
/* break if scu doesn't reset busy bit after huge retry */
if (loop_count > 100000) {
dev_err(&ipcdev.pdev->dev, "IPC timed out");
return -ETIMEDOUT;
}
}
if ((status >> 1) & 1)

if (status & BIT(0)) {
dev_err(&ipcdev.pdev->dev, "IPC timed out");
return -ETIMEDOUT;
}

if (status & BIT(1))
return -EIO;

return 0;
Expand All @@ -208,8 +208,7 @@ static inline int ipc_wait_for_interrupt(void)
}

status = ipc_read_status();

if ((status >> 1) & 1)
if (status & BIT(1))
return -EIO;

return 0;
Expand Down

0 comments on commit f0295a3

Please sign in to comment.