xref: /linux/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c (revision 24f171c7e145f43b9f187578e89b0982ce87e54c)
1*4440bf5fSYao Zi // SPDX-License-Identifier: GPL-2.0-only
2*4440bf5fSYao Zi /*
3*4440bf5fSYao Zi  * PCI bus helpers for STMMAC driver
4*4440bf5fSYao Zi  * Copyright (C) 2025 Yao Zi <ziyao@disroot.org>
5*4440bf5fSYao Zi  */
6*4440bf5fSYao Zi 
7*4440bf5fSYao Zi #include <linux/device.h>
8*4440bf5fSYao Zi #include <linux/pci.h>
9*4440bf5fSYao Zi 
10*4440bf5fSYao Zi #include "stmmac_libpci.h"
11*4440bf5fSYao Zi 
12*4440bf5fSYao Zi int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv)
13*4440bf5fSYao Zi {
14*4440bf5fSYao Zi 	struct pci_dev *pdev = to_pci_dev(dev);
15*4440bf5fSYao Zi 	int ret;
16*4440bf5fSYao Zi 
17*4440bf5fSYao Zi 	ret = pci_save_state(pdev);
18*4440bf5fSYao Zi 	if (ret)
19*4440bf5fSYao Zi 		return ret;
20*4440bf5fSYao Zi 
21*4440bf5fSYao Zi 	pci_disable_device(pdev);
22*4440bf5fSYao Zi 	pci_wake_from_d3(pdev, true);
23*4440bf5fSYao Zi 
24*4440bf5fSYao Zi 	return 0;
25*4440bf5fSYao Zi }
26*4440bf5fSYao Zi EXPORT_SYMBOL_GPL(stmmac_pci_plat_suspend);
27*4440bf5fSYao Zi 
28*4440bf5fSYao Zi int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv)
29*4440bf5fSYao Zi {
30*4440bf5fSYao Zi 	struct pci_dev *pdev = to_pci_dev(dev);
31*4440bf5fSYao Zi 	int ret;
32*4440bf5fSYao Zi 
33*4440bf5fSYao Zi 	pci_restore_state(pdev);
34*4440bf5fSYao Zi 	pci_set_power_state(pdev, PCI_D0);
35*4440bf5fSYao Zi 
36*4440bf5fSYao Zi 	ret = pci_enable_device(pdev);
37*4440bf5fSYao Zi 	if (ret)
38*4440bf5fSYao Zi 		return ret;
39*4440bf5fSYao Zi 
40*4440bf5fSYao Zi 	pci_set_master(pdev);
41*4440bf5fSYao Zi 
42*4440bf5fSYao Zi 	return 0;
43*4440bf5fSYao Zi }
44*4440bf5fSYao Zi EXPORT_SYMBOL_GPL(stmmac_pci_plat_resume);
45*4440bf5fSYao Zi 
46*4440bf5fSYao Zi MODULE_DESCRIPTION("STMMAC PCI helper library");
47*4440bf5fSYao Zi MODULE_AUTHOR("Yao Zi <ziyao@disroot.org>");
48*4440bf5fSYao Zi MODULE_LICENSE("GPL");
49