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:
Tianling Shen
2026-03-27 17:27:08 +08:00
parent 06dc945b2b
commit ae305544c1
2 changed files with 47 additions and 46 deletions
+1 -1
View File
@@ -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)
@@ -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);
+