From: Javen Xu The driver is for the #fun which DID is 0x816e. The kernel could set correct power state for #fun through the driver when suspending. Signed-off-by: Javen Xu --- drivers/net/ethernet/realtek/r816e/r816e.c | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 drivers/net/ethernet/realtek/r816e/r816e.c diff --git a/drivers/net/ethernet/realtek/r816e/r816e.c b/drivers/net/ethernet/realtek/r816e/r816e.c new file mode 100644 index 000000000000..71674019de2c --- /dev/null +++ b/drivers/net/ethernet/realtek/r816e/r816e.c @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * r816e is the Linux device driver released for Realtek RTL8116AF nic + * with PCI-Express interface, which is used for power management. + * + * Copyright(c) 2026 Realtek Semiconductor Corp. + */ + +#include +#include +#include +#include + +static struct pci_device_id rtl816e_pci_tbl[] = { + { PCI_VDEVICE(REALTEK, 0x816e), }, + { 0, }, +}; + +MODULE_DEVICE_TABLE(pci, rtl816e_pci_tbl); + +static int rtl816e_probe(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + int rc; + + /* enable device (incl. PCI PM wakeup and hotplug setup) */ + rc = pcim_enable_device(pdev); + if (rc < 0) + return dev_err_probe(&pdev->dev, rc, "enable failure\n"); + + dev_info(&pdev->dev, "enable device\n"); + + return rc; +} + +static void rtl816e_remove(struct pci_dev *pdev) {} + +static int rtl816e_pm_suspend(struct device *device) +{ + return 0; +} + +static int rtl816e_pm_resume(struct device *device) +{ + return 0; +} + +static const struct dev_pm_ops rtl816e_pm_ops = { + SYSTEM_SLEEP_PM_OPS(rtl816e_pm_suspend, rtl816e_pm_resume) +}; + +static struct pci_driver rtl816e_pci_driver = { + .name = "r816e", + .id_table = rtl816e_pci_tbl, + .probe = rtl816e_probe, + .remove = rtl816e_remove, +#ifdef CONFIG_PM + .driver.pm = pm_ptr(&rtl816e_pm_ops), +#endif +}; + +static int __init rtl816e_init_module(void) +{ + return pci_register_driver(&rtl816e_pci_driver); +} + +static void __exit rtl816e_cleanup_module(void) +{ + pci_unregister_driver(&rtl816e_pci_driver); +} + +module_init(rtl816e_init_module); +module_exit(rtl816e_cleanup_module); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("RealTek RTL816E driver"); -- 2.43.0 From: Javen Xu Add a Makefile in the r816e folder to build r816e driver. Signed-off-by: Javen Xu --- drivers/net/ethernet/realtek/r816e/Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 drivers/net/ethernet/realtek/r816e/Makefile diff --git a/drivers/net/ethernet/realtek/r816e/Makefile b/drivers/net/ethernet/realtek/r816e/Makefile new file mode 100644 index 000000000000..0f028c7ce7bf --- /dev/null +++ b/drivers/net/ethernet/realtek/r816e/Makefile @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +# Copyright(c) 2026 Realtek Semiconductor Corp. All rights reserved. + +# +# Makefile for the Realtek R816E power management driver +# + +obj-$(CONFIG_R816E) += r816e.o -- 2.43.0 From: Javen Xu This patch adds the R816E entry in the Kconfig and adds the CONFIG_R816E entry in the Makefile. Signed-off-by: Javen Xu --- drivers/net/ethernet/realtek/Kconfig | 7 +++++++ drivers/net/ethernet/realtek/Makefile | 1 + 2 files changed, 8 insertions(+) diff --git a/drivers/net/ethernet/realtek/Kconfig b/drivers/net/ethernet/realtek/Kconfig index 9b0f4f9631db..f2d7edaf299d 100644 --- a/drivers/net/ethernet/realtek/Kconfig +++ b/drivers/net/ethernet/realtek/Kconfig @@ -126,4 +126,11 @@ config RTASE To compile this driver as a module, choose M here: the module will be called rtase. This is recommended. +config R816E + tristate "Realtek RTL8116AF power management support" + depends on PCI + help + Say Y here and it will be complied to ensure the device enters correct + power state if you have Realtek PCIe nic RTL8116AF. + endif # NET_VENDOR_REALTEK diff --git a/drivers/net/ethernet/realtek/Makefile b/drivers/net/ethernet/realtek/Makefile index 12a9c399f40c..c027667df74f 100644 --- a/drivers/net/ethernet/realtek/Makefile +++ b/drivers/net/ethernet/realtek/Makefile @@ -9,3 +9,4 @@ r8169-y += r8169_main.o r8169_firmware.o r8169_phy_config.o r8169-$(CONFIG_R8169_LEDS) += r8169_leds.o obj-$(CONFIG_R8169) += r8169.o obj-$(CONFIG_RTASE) += rtase/ +obj-$(CONFIG_R816E) += r816e/ -- 2.43.0