Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mei: recover after errors in runtime pm flow

Schedule link reset if failed to perform runtime suspend or resume.
Set active runtime pm stte on link reset
to clean runtimr pm error, if present.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Alexander Usyskin and committed by
Greg Kroah-Hartman
77537ad2 aab3b1a3

+19
+3
drivers/misc/mei/hw-me.c
··· 18 18 19 19 #include <linux/kthread.h> 20 20 #include <linux/interrupt.h> 21 + #include <linux/pm_runtime.h> 21 22 22 23 #include "mei_dev.h" 23 24 #include "hbm.h" ··· 1063 1062 return ret; 1064 1063 } 1065 1064 } 1065 + 1066 + pm_runtime_set_active(dev->dev); 1066 1067 1067 1068 hcsr = mei_hcsr_read(dev); 1068 1069 /* H_RST may be found lit before reset is started,
+3
drivers/misc/mei/hw-txe.c
··· 20 20 #include <linux/delay.h> 21 21 #include <linux/kthread.h> 22 22 #include <linux/irqreturn.h> 23 + #include <linux/pm_runtime.h> 23 24 24 25 #include <linux/mei.h> 25 26 ··· 935 934 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n"); 936 935 return ret; 937 936 } 937 + 938 + pm_runtime_set_active(dev->dev); 938 939 939 940 /* enable input ready interrupts: 940 941 * SEC_IPC_HOST_INT_MASK.IPC_INPUT_READY_INT_MASK
+6
drivers/misc/mei/pci-me.c
··· 400 400 401 401 dev_dbg(&pdev->dev, "rpm: me: runtime suspend ret=%d\n", ret); 402 402 403 + if (ret && ret != -EAGAIN) 404 + schedule_work(&dev->reset_work); 405 + 403 406 return ret; 404 407 } 405 408 ··· 425 422 mutex_unlock(&dev->device_lock); 426 423 427 424 dev_dbg(&pdev->dev, "rpm: me: runtime resume ret = %d\n", ret); 425 + 426 + if (ret) 427 + schedule_work(&dev->reset_work); 428 428 429 429 return ret; 430 430 }
+7
drivers/misc/mei/pci-txe.c
··· 347 347 dev_dbg(&pdev->dev, "rpm: txe: runtime suspend ret=%d\n", ret); 348 348 349 349 mutex_unlock(&dev->device_lock); 350 + 351 + if (ret && ret != -EAGAIN) 352 + schedule_work(&dev->reset_work); 353 + 350 354 return ret; 351 355 } 352 356 ··· 375 371 mutex_unlock(&dev->device_lock); 376 372 377 373 dev_dbg(&pdev->dev, "rpm: txe: runtime resume ret = %d\n", ret); 374 + 375 + if (ret) 376 + schedule_work(&dev->reset_work); 378 377 379 378 return ret; 380 379 }