kernel: fix build YT6801 driver for x86
Adapt suspend/resume functions for kernel 6.12 and add missing
kmod-stmmac-core dependency.
Fixes: 75d3612b5b ("kernel: backport YT6801 PCIe ethernet driver support")
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
@@ -641,7 +641,7 @@ $(eval $(call KernelPackage,phy-motorcomm))
|
||||
define KernelPackage/dwmac-motorcomm
|
||||
SUBMENU:=$(NETWORK_DEVICES_MENU)
|
||||
TITLE:=Motorcomm PCI DWMAC support
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-phy-motorcomm
|
||||
DEPENDS:=@PCI_SUPPORT +kmod-phy-motorcomm +kmod-stmmac-core
|
||||
KCONFIG:=CONFIG_DWMAC_MOTORCOMM
|
||||
FILES:=$(LINUX_DIR)/drivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.ko
|
||||
AUTOLOAD:=$(call AutoProbe,dwmac-motorcomm,1)
|
||||
|
||||
+46
-45
@@ -55,7 +55,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
stmmac-pci-objs:= stmmac_pci.o
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-motorcomm.c
|
||||
@@ -0,0 +1,414 @@
|
||||
@@ -0,0 +1,415 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only
|
||||
+/*
|
||||
+ * DWMAC glue driver for Motorcomm PCI Ethernet controllers
|
||||
@@ -241,50 +241,6 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
+ writel(OOB_WOL_CTRL_DIS, priv->base + OOB_WOL_CTRL);
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused motorcomm_dwmac_suspend(struct device *dev, void *bsp_priv)
|
||||
+{
|
||||
+ struct pci_dev *pdev = to_pci_dev(dev);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = stmmac_suspend(dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = pci_save_state(pdev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pci_disable_device(pdev);
|
||||
+ pci_wake_from_d3(pdev, true);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused motorcomm_dwmac_resume(struct device *dev, void *bsp_priv)
|
||||
+{
|
||||
+ struct dwmac_motorcomm_priv *priv = bsp_priv;
|
||||
+ struct pci_dev *pdev = to_pci_dev(dev);
|
||||
+ int ret;
|
||||
+
|
||||
+ pci_restore_state(pdev);
|
||||
+ pci_set_power_state(pdev, PCI_D0);
|
||||
+
|
||||
+ ret = pcim_enable_device(pdev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pci_set_master(pdev);
|
||||
+
|
||||
+ /*
|
||||
+ * When recovering from D3hot, EPHY_MDIO_PHY_RESET is automatically
|
||||
+ * asserted, and must be deasserted for normal operation.
|
||||
+ */
|
||||
+ motorcomm_deassert_mdio_phy_reset(priv);
|
||||
+ motorcomm_init(priv);
|
||||
+
|
||||
+ return stmmac_resume(dev);
|
||||
+}
|
||||
+
|
||||
+static struct plat_stmmacenet_data *
|
||||
+motorcomm_default_plat_data(struct pci_dev *pdev)
|
||||
+{
|
||||
@@ -446,6 +402,51 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
+ stmmac_dvr_remove(&pdev->dev);
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused motorcomm_dwmac_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct pci_dev *pdev = to_pci_dev(dev);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = stmmac_suspend(dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = pci_save_state(pdev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pci_disable_device(pdev);
|
||||
+ pci_wake_from_d3(pdev, true);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __maybe_unused motorcomm_dwmac_resume(struct device *dev)
|
||||
+{
|
||||
+ struct net_device *ndev = dev_get_drvdata(dev);
|
||||
+ struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
+ struct pci_dev *pdev = to_pci_dev(dev);
|
||||
+ int ret;
|
||||
+
|
||||
+ pci_restore_state(pdev);
|
||||
+ pci_set_power_state(pdev, PCI_D0);
|
||||
+
|
||||
+ ret = pcim_enable_device(pdev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pci_set_master(pdev);
|
||||
+
|
||||
+ /*
|
||||
+ * When recovering from D3hot, EPHY_MDIO_PHY_RESET is automatically
|
||||
+ * asserted, and must be deasserted for normal operation.
|
||||
+ */
|
||||
+ motorcomm_deassert_mdio_phy_reset(priv->plat->bsp_priv);
|
||||
+ motorcomm_init(priv->plat->bsp_priv);
|
||||
+
|
||||
+ return stmmac_resume(dev);
|
||||
+}
|
||||
+
|
||||
+static SIMPLE_DEV_PM_OPS(motorcomm_dwmac_pm_ops, motorcomm_dwmac_suspend,
|
||||
+ motorcomm_dwmac_resume);
|
||||
+
|
||||
|
||||
Reference in New Issue
Block a user