brcm2708: update to latest patches from RPi Foundation
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.19 / 950-0474-phy-broadcom-split-out-the-BCM54213PE-from-the-BCM54.patch
diff --git a/target/linux/brcm2708/patches-4.19/950-0474-phy-broadcom-split-out-the-BCM54213PE-from-the-BCM54.patch b/target/linux/brcm2708/patches-4.19/950-0474-phy-broadcom-split-out-the-BCM54213PE-from-the-BCM54.patch
new file mode 100644 (file)
index 0000000..354cd08
--- /dev/null
@@ -0,0 +1,73 @@
+From 8eb54bbd5e6ebb929d390432163589f4c3dc0c14 Mon Sep 17 00:00:00 2001
+From: Jonathan Bell <jonathan@raspberrypi.org>
+Date: Tue, 14 May 2019 17:00:41 +0100
+Subject: [PATCH] phy: broadcom: split out the BCM54213PE from the
+ BCM54210E IDs
+
+The last nibble is a revision ID, and the 54213pe is a later rev
+than the 54210e. Running the 54210e setup code on a 54213pe results
+in a broken RGMII interface.
+
+Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
+---
+ drivers/net/phy/broadcom.c | 17 ++++++++++++++---
+ include/linux/brcmphy.h    |  1 +
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/phy/broadcom.c
++++ b/drivers/net/phy/broadcom.c
+@@ -222,7 +222,8 @@ static void bcm54xx_adjust_rxrefclk(stru
+       /* Abort if we are using an untested phy. */
+       if (BRCM_PHY_MODEL(phydev) != PHY_ID_BCM57780 &&
+           BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610 &&
+-          BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610M)
++          BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610M &&
++          BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54213PE)
+               return;
+       val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
+@@ -604,7 +605,7 @@ static struct phy_driver broadcom_driver
+       .config_intr    = bcm_phy_config_intr,
+ }, {
+       .phy_id         = PHY_ID_BCM54210E,
+-      .phy_id_mask    = 0xfffffff0,
++      .phy_id_mask    = 0xffffffff,
+       .name           = "Broadcom BCM54210E",
+       .features       = PHY_GBIT_FEATURES,
+       .flags          = PHY_HAS_INTERRUPT,
+@@ -612,6 +613,15 @@ static struct phy_driver broadcom_driver
+       .ack_interrupt  = bcm_phy_ack_intr,
+       .config_intr    = bcm_phy_config_intr,
+ }, {
++      .phy_id         = PHY_ID_BCM54213PE,
++      .phy_id_mask    = 0xffffffff,
++      .name           = "Broadcom BCM54213PE",
++      .features       = PHY_GBIT_FEATURES,
++      .flags          = PHY_HAS_INTERRUPT,
++      .config_init    = bcm54xx_config_init,
++      .ack_interrupt  = bcm_phy_ack_intr,
++      .config_intr    = bcm_phy_config_intr,
++}, {
+       .phy_id         = PHY_ID_BCM5461,
+       .phy_id_mask    = 0xfffffff0,
+       .name           = "Broadcom BCM5461",
+@@ -748,7 +758,8 @@ module_phy_driver(broadcom_drivers);
+ static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
+       { PHY_ID_BCM5411, 0xfffffff0 },
+       { PHY_ID_BCM5421, 0xfffffff0 },
+-      { PHY_ID_BCM54210E, 0xfffffff0 },
++      { PHY_ID_BCM54210E, 0xffffffff },
++      { PHY_ID_BCM54213PE, 0xffffffff },
+       { PHY_ID_BCM5461, 0xfffffff0 },
+       { PHY_ID_BCM54612E, 0xfffffff0 },
+       { PHY_ID_BCM54616S, 0xfffffff0 },
+--- a/include/linux/brcmphy.h
++++ b/include/linux/brcmphy.h
+@@ -20,6 +20,7 @@
+ #define PHY_ID_BCM5411                        0x00206070
+ #define PHY_ID_BCM5421                        0x002060e0
+ #define PHY_ID_BCM54210E              0x600d84a0
++#define PHY_ID_BCM54213PE             0x600d84a2
+ #define PHY_ID_BCM5464                        0x002060b0
+ #define PHY_ID_BCM5461                        0x002060c0
+ #define PHY_ID_BCM54612E              0x03625e60