mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
qede: fix firmware halt over suspend and resume
[ Upstream commit2eb9625a3a] While performing certain power-off sequences, PCI drivers are called to suspend and resume their underlying devices through PCI PM (power management) interface. However this NIC hardware does not support PCI PM suspend/resume operations so system wide suspend/resume leads to bad MFW (management firmware) state which causes various follow-up errors in driver when communicating with the device/firmware afterwards. To fix this driver implements PCI PM suspend handler to indicate unsupported operation to the PCI subsystem explicitly, thus avoiding system to go into suspended/standby mode. Without this fix device/firmware does not recover unless system is power cycled. Fixes:2950219d87("qede: Add basic network device support") Signed-off-by: Manish Chopra <manishc@marvell.com> Signed-off-by: Alok Prasad <palok@marvell.com> Reviewed-by: John Meneghini <jmeneghi@redhat.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://lore.kernel.org/r/20230816150711.59035-1-manishc@marvell.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2e03a92b24
commit
fbc7b1dad8
@@ -177,6 +177,15 @@ static int qede_sriov_configure(struct pci_dev *pdev, int num_vfs_param)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int __maybe_unused qede_suspend(struct device *dev)
|
||||||
|
{
|
||||||
|
dev_info(dev, "Device does not support suspend operation\n");
|
||||||
|
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DEFINE_SIMPLE_DEV_PM_OPS(qede_pm_ops, qede_suspend, NULL);
|
||||||
|
|
||||||
static const struct pci_error_handlers qede_err_handler = {
|
static const struct pci_error_handlers qede_err_handler = {
|
||||||
.error_detected = qede_io_error_detected,
|
.error_detected = qede_io_error_detected,
|
||||||
};
|
};
|
||||||
@@ -191,6 +200,7 @@ static struct pci_driver qede_pci_driver = {
|
|||||||
.sriov_configure = qede_sriov_configure,
|
.sriov_configure = qede_sriov_configure,
|
||||||
#endif
|
#endif
|
||||||
.err_handler = &qede_err_handler,
|
.err_handler = &qede_err_handler,
|
||||||
|
.driver.pm = &qede_pm_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct qed_eth_cb_ops qede_ll_ops = {
|
static struct qed_eth_cb_ops qede_ll_ops = {
|
||||||
|
|||||||
Reference in New Issue
Block a user