diff options
Diffstat (limited to 'drivers/misc/mei/pci-txe.c')
| -rw-r--r-- | drivers/misc/mei/pci-txe.c | 30 | 
1 files changed, 11 insertions, 19 deletions
| diff --git a/drivers/misc/mei/pci-txe.c b/drivers/misc/mei/pci-txe.c index e38a5f144373..0566f9bfa7de 100644 --- a/drivers/misc/mei/pci-txe.c +++ b/drivers/misc/mei/pci-txe.c @@ -144,12 +144,14 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME;  	/* -	* For not wake-able HW runtime pm framework -	* can't be used on pci device level. -	* Use domain runtime pm callbacks instead. -	*/ -	if (!pci_dev_run_wake(pdev)) -		mei_txe_set_pm_domain(dev); +	 * TXE maps runtime suspend/resume to own power gating states, +	 * hence we need to go around native PCI runtime service which +	 * eventually brings the device into D3cold/hot state. +	 * But the TXE device cannot wake up from D3 unlike from own +	 * power gating. To get around PCI device native runtime pm, +	 * TXE uses runtime pm domain handlers which take precedence. +	 */ +	mei_txe_set_pm_domain(dev);  	pm_runtime_put_noidle(&pdev->dev); @@ -186,8 +188,7 @@ static void mei_txe_shutdown(struct pci_dev *pdev)  	dev_dbg(&pdev->dev, "shutdown\n");  	mei_stop(dev); -	if (!pci_dev_run_wake(pdev)) -		mei_txe_unset_pm_domain(dev); +	mei_txe_unset_pm_domain(dev);  	mei_disable_interrupts(dev);  	free_irq(pdev->irq, dev); @@ -215,8 +216,7 @@ static void mei_txe_remove(struct pci_dev *pdev)  	mei_stop(dev); -	if (!pci_dev_run_wake(pdev)) -		mei_txe_unset_pm_domain(dev); +	mei_txe_unset_pm_domain(dev);  	mei_disable_interrupts(dev);  	free_irq(pdev->irq, dev); @@ -318,15 +318,7 @@ static int mei_txe_pm_runtime_suspend(struct device *device)  	else  		ret = -EAGAIN; -	/* -	 * If everything is okay we're about to enter PCI low -	 * power state (D3) therefor we need to disable the -	 * interrupts towards host. -	 * However if device is not wakeable we do not enter -	 * D-low state and we need to keep the interrupt kicking -	 */ -	if (!ret && pci_dev_run_wake(pdev)) -		mei_disable_interrupts(dev); +	/* keep irq on we are staying in D0 */  	dev_dbg(&pdev->dev, "rpm: txe: runtime suspend ret=%d\n", ret); |