[PATCH 1/1][SRU][U] UBUNTU: SAUCE: r8169: Add quirks to enable ASPM on Dell platforms
Koba Ko
koba.ko at canonical.com
Mon Nov 20 16:27:54 UTC 2023
BugLink: https://bugs.launchpad.net/bugs/2042385
Some non-Dell platforms equipped with r8168h/r8111 have issue on ASPM,
It's very hard to fix all known issues in a short time and
r8168h/r8111 is not a brand new NIC chip,
so introduce the quirk for Dell platfroms.
It's also easier to track the Dell platform and ask Realtek's effort.
Ref. https://bugzilla.kernel.org/show_bug.cgi?id=217814
Signed-off-by: Koba Ko <koba.ko at canonical.com>
Signed-off-by: Timo Aaltonen <timo.aaltonen at canonical.com>
---
drivers/net/ethernet/realtek/r8169_main.c | 79 ++++++++++++++++++++++-
1 file changed, 78 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 361b90007148..99e1bcce4e4f 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -15,6 +15,7 @@
#include <linux/etherdevice.h>
#include <linux/clk.h>
#include <linux/delay.h>
+#include <linux/dmi.h>
#include <linux/ethtool.h>
#include <linux/phy.h>
#include <linux/if_vlan.h>
@@ -5158,11 +5159,87 @@ static void rtl_init_mac_address(struct rtl8169_private *tp)
rtl_rar_set(tp, mac_addr);
}
+static bool rtl_aspm_dell_workaround(struct rtl8169_private *tp)
+{
+ static const struct dmi_system_id sysids[] = {
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 16 5640"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0CA0"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 14 3440"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0CA5"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 14 3440"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0CA6"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Latitude 3450"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0C99"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Latitude 3450"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0C97"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Latitude 3550"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0C9A"),
+ },
+ },
+ {
+ .ident = "Dell",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Latitude 3550"),
+ DMI_MATCH(DMI_PRODUCT_SKU, "0C98"),
+ },
+ },
+ {}
+ };
+
+ if (tp->mac_version == RTL_GIGA_MAC_VER_46 && dmi_check_system(sysids))
+ return true;
+
+ return false;
+}
+
/* register is set if system vendor successfully tested ASPM 1.2 */
static bool rtl_aspm_is_safe(struct rtl8169_private *tp)
{
+ /* definition of 0xc0b2,
+ * 0: L1
+ * 1: ASPM L1.0
+ * 2: ASPM L0s
+ * 3: CLKEREQ
+ * 4-7: Reserved
+ */
if (tp->mac_version >= RTL_GIGA_MAC_VER_61 &&
- r8168_mac_ocp_read(tp, 0xc0b2) & 0xf)
+ r8168_mac_ocp_read(tp, 0xc0b2) & 0xf ||
+ rtl_aspm_dell_workaround(tp))
return true;
return false;
--
2.34.1
More information about the kernel-team
mailing list