Commit 1f1ae997 authored by Qipeng Zha's avatar Qipeng Zha Committed by Darren Hart

intel_pmc_ipc: Avoid pending IPC1 command during legacy suspend

During legacy suspend flow, IPC1 commands are being requested
from opregion driver. But the PMC_IPC1 command will timeout as example:

[  281.444600] ipc_debug##: ipc_send_command: cmd=0x201ff,
[  281.444648] wbuf[0]=0x4ea6
[  281.444668] wbuf[1]=0x0
[  281.444674] wbuf[2]=0x0
[  281.444676] wbuf[3]=0x0
[  284.446467] pmc-ipc-plat INT34D2:00: IPC timed out, TS=0x4, CMD=0x200ff

This is because before the opregion driver could send IPC1 commands,
the PMC_IPC irq is already suspended. Which makes the IPC command to
timeout.

Solution: register pmc_ipc irq as IRQF_NO_SUSPEND
Signed-off-by: default avatarAnanth Krishna R <ananth.krishna.r@intel.com>
Signed-off-by: default avatarBharath K Veera <bharath.k.veera@intel.com>
Signed-off-by: default avatarQipeng Zha <qipeng.zha@intel.com>
Acked-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarDarren Hart <dvhart@linux.intel.com>
parent 1a2f25d5
...@@ -825,7 +825,8 @@ static int ipc_plat_probe(struct platform_device *pdev) ...@@ -825,7 +825,8 @@ static int ipc_plat_probe(struct platform_device *pdev)
goto err_device; goto err_device;
} }
if (request_irq(ipcdev.irq, ioc, 0, "intel_pmc_ipc", &ipcdev)) { if (request_irq(ipcdev.irq, ioc, IRQF_NO_SUSPEND,
"intel_pmc_ipc", &ipcdev)) {
dev_err(&pdev->dev, "Failed to request irq\n"); dev_err(&pdev->dev, "Failed to request irq\n");
ret = -EBUSY; ret = -EBUSY;
goto err_irq; goto err_irq;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment