diff mbox series

[SRU,Unstable,1/1] UBUNTU: SAUCE: net: phy: marvell: Skip setting LED on Dell EMC board

Message ID 20220505062014.1895607-3-kai.heng.feng@canonical.com
State New
Headers show
Series Skip setting ethernet LED on Dell EMC board | expand

Commit Message

Kai-Heng Feng May 5, 2022, 6:20 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/1971667

The board in question requires certain LED config, which is already
configured by BIOS, to correctly show its networking status. However,
Marvell PHY driver hardcodes LED value so we need a way to preserve the
default set by BIOS.

PHY maintainer asked for a "generic" approach which goes no where [1],
so let's move on and use a quirk to handle it.

[1] https://lore.kernel.org/lkml/20220420124053.853891-2-kai.heng.feng@canonical.com/

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 drivers/net/phy/marvell.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
diff mbox series

Patch

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 2702faf7b0f60..135c4ae45c044 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -33,6 +33,7 @@ 
 #include <linux/bitfield.h>
 #include <linux/of.h>
 #include <linux/sfp.h>
+#include <linux/dmi.h>
 
 #include <linux/io.h>
 #include <asm/irq.h>
@@ -308,6 +309,16 @@  struct marvell_priv {
 	s8 pair;
 };
 
+static const struct dmi_system_id skip_config_led_tbl[] = {
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "Dell EMC"),
+			DMI_MATCH(DMI_BOARD_NAME, "0d370eed-89ca-4dc0-a365-e9904c4c62bb"),
+		},
+	},
+	{}
+};
+
 static int marvell_read_page(struct phy_device *phydev)
 {
 	return __phy_read(phydev, MII_MARVELL_PHY_PAGE);
@@ -755,6 +766,9 @@  static void marvell_config_led(struct phy_device *phydev)
 	u16 def_config;
 	int err;
 
+	if (dmi_check_system(skip_config_led_tbl))
+		return;
+
 	switch (MARVELL_PHY_FAMILY_ID(phydev->phy_id)) {
 	/* Default PHY LED config: LED[0] .. Link, LED[1] .. Activity */
 	case MARVELL_PHY_FAMILY_ID(MARVELL_PHY_ID_88E1121R):