diff options
author | Qipeng Zha <qipeng.zha@intel.com> | 2016-02-17 13:03:38 -0500 |
---|---|---|
committer | Darren Hart <dvhart@linux.intel.com> | 2016-03-23 13:05:47 -0400 |
commit | 1f1ae997fd47d058522f32b91059111dbc4a2b54 (patch) | |
tree | 08fad509a111ab984420925405e587ee2aa8a087 /drivers/platform/x86/intel_pmc_ipc.c | |
parent | 1a2f25d5e73f4f1ae985801a05ed37bbe0ea11f3 (diff) |
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: Ananth Krishna R <ananth.krishna.r@intel.com>
Signed-off-by: Bharath K Veera <bharath.k.veera@intel.com>
Signed-off-by: Qipeng Zha <qipeng.zha@intel.com>
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Diffstat (limited to 'drivers/platform/x86/intel_pmc_ipc.c')
-rw-r--r-- | drivers/platform/x86/intel_pmc_ipc.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/platform/x86/intel_pmc_ipc.c b/drivers/platform/x86/intel_pmc_ipc.c index 3b0182c189d6..3fb1d85c70a8 100644 --- a/drivers/platform/x86/intel_pmc_ipc.c +++ b/drivers/platform/x86/intel_pmc_ipc.c | |||
@@ -825,7 +825,8 @@ static int ipc_plat_probe(struct platform_device *pdev) | |||
825 | goto err_device; | 825 | goto err_device; |
826 | } | 826 | } |
827 | 827 | ||
828 | if (request_irq(ipcdev.irq, ioc, 0, "intel_pmc_ipc", &ipcdev)) { | 828 | if (request_irq(ipcdev.irq, ioc, IRQF_NO_SUSPEND, |
829 | "intel_pmc_ipc", &ipcdev)) { | ||
829 | dev_err(&pdev->dev, "Failed to request irq\n"); | 830 | dev_err(&pdev->dev, "Failed to request irq\n"); |
830 | ret = -EBUSY; | 831 | ret = -EBUSY; |
831 | goto err_irq; | 832 | goto err_irq; |