772-net-dsa-b53-add-support-for-BCM63xx-RGMIIs.patch 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. From patchwork Sun Mar 19 22:08:05 2023
  2. Content-Type: text/plain; charset="utf-8"
  3. MIME-Version: 1.0
  4. Content-Transfer-Encoding: 8bit
  5. X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?=
  6. <[email protected]>
  7. X-Patchwork-Id: 13180645
  8. X-Patchwork-Delegate: [email protected]
  9. Return-Path: <[email protected]>
  10. X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
  11. aws-us-west-2-korg-lkml-1.web.codeaurora.org
  12. Received: from vger.kernel.org (vger.kernel.org [23.128.96.18])
  13. by smtp.lore.kernel.org (Postfix) with ESMTP id A7A46C6FD1F
  14. for <[email protected]>; Sun, 19 Mar 2023 22:08:15 +0000 (UTC)
  15. Received: ([email protected]) by vger.kernel.org via listexpand
  16. id S230223AbjCSWIN (ORCPT <rfc822;[email protected]>);
  17. Sun, 19 Mar 2023 18:08:13 -0400
  18. Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32878 "EHLO
  19. lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
  20. with ESMTP id S229565AbjCSWIM (ORCPT
  21. <rfc822;[email protected]>); Sun, 19 Mar 2023 18:08:12 -0400
  22. Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com
  23. [IPv6:2a00:1450:4864:20::42e])
  24. by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 605D3E062;
  25. Sun, 19 Mar 2023 15:08:10 -0700 (PDT)
  26. Received: by mail-wr1-x42e.google.com with SMTP id h17so8695188wrt.8;
  27. Sun, 19 Mar 2023 15:08:10 -0700 (PDT)
  28. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  29. d=gmail.com; s=20210112; t=1679263689;
  30. h=content-transfer-encoding:mime-version:references:in-reply-to
  31. :message-id:date:subject:cc:to:from:from:to:cc:subject:date
  32. :message-id:reply-to;
  33. bh=GmPK75Q9ZD3h3IYflWYuDwS99V2e532KgDlnNucAoJg=;
  34. b=PSdrywW48P4Lq8z9wOSPXFB/ZdO/JfuyiGlw3Gz1Iriy+Smo/cBnJ0Ve9zKkX3AKTO
  35. Tr7/g8xhSQX8sU5WAOEPC13uVjKpO4VZsamXHTmMKL4mmfII3K/piAsQcMQkkNpgouab
  36. Ci9yr+7ASSmqEUHIbYTM6sl6a47rPwqk3b3DcTIE2CwJsPPNXnpQ/aSVbJAcEdhcZICc
  37. X4rAmjrYjcsl8coFIGHHPlrMH9ShekQWxB84vEb6bO1nXOORNPizOHuY1vJ3wa3WgXsx
  38. YwlvutMFVIUXfgL2ZwCmQAKWJPiAaFk+CCk3oxSeOYoAzkjcbMyapz9VnooStfvR2aV3
  39. k+2g==
  40. X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
  41. d=1e100.net; s=20210112; t=1679263689;
  42. h=content-transfer-encoding:mime-version:references:in-reply-to
  43. :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
  44. :subject:date:message-id:reply-to;
  45. bh=GmPK75Q9ZD3h3IYflWYuDwS99V2e532KgDlnNucAoJg=;
  46. b=NGjqrGERyaxRwINtevHaY97h9X9W+1UY62YYwotqwv5+cfvB8myjBbD3WH2WzaqMes
  47. o9MMER9RE8/arW3jIVlBv4ORDUuEZ7AeGgy5UbFyQZIPHlp+hJ/sxFrGvYUwamg4Qrr9
  48. ojargh8ORsEiMeqaf+5AkmEagNhrrV3ax0pUuWDzbJ3vXGoHjfCetHz5xyNL46dvXBfb
  49. l/OZqjv9IYob552uUoUmCy/TbEQDqvmjkFrROFK9gtBNxgxUJkwbyiWIOVsf6RR8OarP
  50. f7bbvSJYkvTvzx2u/g0Up7NW5ZyihMGBmDs377M3yW6AnSxW6jlfl30QmMU1aEigYXvy
  51. v3mA==
  52. X-Gm-Message-State: AO0yUKUm1PYmYa4xlHuVD23mZcZm83a+xbhcbs0Xryi3yF/+UnjM4Cho
  53. GAfqSh5MZ/rlOAm3Vnpn//9hOG5Lc8vLYg==
  54. X-Google-Smtp-Source:
  55. AK7set+5pTahGGgk1hF/mHGkGBhsMf0//oQjZd4QFHx+HaeSgP5f6q7g0bRUcTX8kRtgHH0T7l1/hQ==
  56. X-Received: by 2002:a5d:474f:0:b0:2d6:2ae8:70d with SMTP id
  57. o15-20020a5d474f000000b002d62ae8070dmr2382593wrs.39.1679263688549;
  58. Sun, 19 Mar 2023 15:08:08 -0700 (PDT)
  59. Received: from atlantis.lan (255.red-79-146-124.dynamicip.rima-tde.net.
  60. [79.146.124.255])
  61. by smtp.gmail.com with ESMTPSA id
  62. d6-20020a5d6dc6000000b002c53f6c7599sm7354727wrz.29.2023.03.19.15.08.07
  63. (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
  64. Sun, 19 Mar 2023 15:08:07 -0700 (PDT)
  65. From: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= <[email protected]>
  66. To: [email protected], [email protected], [email protected],
  67. [email protected], [email protected], [email protected],
  68. [email protected], [email protected], [email protected],
  69. [email protected]
  70. Cc: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= <[email protected]>
  71. Subject: [PATCH v2] net: dsa: b53: add support for BCM63xx RGMIIs
  72. Date: Sun, 19 Mar 2023 23:08:05 +0100
  73. Message-Id: <[email protected]>
  74. X-Mailer: git-send-email 2.30.2
  75. In-Reply-To: <[email protected]>
  76. References: <[email protected]>
  77. MIME-Version: 1.0
  78. Precedence: bulk
  79. List-ID: <netdev.vger.kernel.org>
  80. X-Mailing-List: [email protected]
  81. X-Patchwork-Delegate: [email protected]
  82. BCM63xx RGMII ports require additional configuration in order to work.
  83. Signed-off-by: Álvaro Fernández Rojas <[email protected]>
  84. Reviewed-by: Andrew Lunn <[email protected]>
  85. ---
  86. v2: add changes suggested by Andrew:
  87. - Use a switch statement.
  88. - Use dev_dbg() instead of dev_info().
  89. drivers/net/dsa/b53/b53_common.c | 46 ++++++++++++++++++++++++++++++++
  90. drivers/net/dsa/b53/b53_priv.h | 1 +
  91. 2 files changed, 47 insertions(+)
  92. --- a/drivers/net/dsa/b53/b53_common.c
  93. +++ b/drivers/net/dsa/b53/b53_common.c
  94. @@ -1209,6 +1209,46 @@ static void b53_force_port_config(struct
  95. b53_write8(dev, B53_CTRL_PAGE, off, reg);
  96. }
  97. +static void b53_adjust_63xx_rgmii(struct dsa_switch *ds, int port,
  98. + phy_interface_t interface)
  99. +{
  100. + struct b53_device *dev = ds->priv;
  101. + u8 rgmii_ctrl = 0, off;
  102. +
  103. + if (port == dev->imp_port)
  104. + off = B53_RGMII_CTRL_IMP;
  105. + else
  106. + off = B53_RGMII_CTRL_P(port);
  107. +
  108. + b53_read8(dev, B53_CTRL_PAGE, off, &rgmii_ctrl);
  109. +
  110. + switch (interface) {
  111. + case PHY_INTERFACE_MODE_RGMII_ID:
  112. + rgmii_ctrl |= (RGMII_CTRL_DLL_RXC | RGMII_CTRL_DLL_TXC);
  113. + break;
  114. + case PHY_INTERFACE_MODE_RGMII_RXID:
  115. + rgmii_ctrl &= ~(RGMII_CTRL_DLL_TXC);
  116. + rgmii_ctrl |= RGMII_CTRL_DLL_RXC;
  117. + break;
  118. + case PHY_INTERFACE_MODE_RGMII_TXID:
  119. + rgmii_ctrl &= ~(RGMII_CTRL_DLL_RXC);
  120. + rgmii_ctrl |= RGMII_CTRL_DLL_TXC;
  121. + break;
  122. + case PHY_INTERFACE_MODE_RGMII:
  123. + default:
  124. + rgmii_ctrl &= ~(RGMII_CTRL_DLL_RXC | RGMII_CTRL_DLL_TXC);
  125. + break;
  126. + }
  127. +
  128. + if (port != dev->imp_port)
  129. + rgmii_ctrl |= RGMII_CTRL_ENABLE_GMII;
  130. +
  131. + b53_write8(dev, B53_CTRL_PAGE, off, rgmii_ctrl);
  132. +
  133. + dev_dbg(ds->dev, "Configured port %d for %s\n", port,
  134. + phy_modes(interface));
  135. +}
  136. +
  137. static void b53_adjust_link(struct dsa_switch *ds, int port,
  138. struct phy_device *phydev)
  139. {
  140. @@ -1235,6 +1275,9 @@ static void b53_adjust_link(struct dsa_s
  141. tx_pause, rx_pause);
  142. b53_force_link(dev, port, phydev->link);
  143. + if (is63xx(dev) && port >= B53_63XX_RGMII0)
  144. + b53_adjust_63xx_rgmii(ds, port, phydev->interface);
  145. +
  146. if (is531x5(dev) && phy_interface_is_rgmii(phydev)) {
  147. if (port == dev->imp_port)
  148. off = B53_RGMII_CTRL_IMP;
  149. @@ -1419,6 +1462,9 @@ void b53_phylink_mac_link_up(struct dsa_
  150. {
  151. struct b53_device *dev = ds->priv;
  152. + if (is63xx(dev) && port >= B53_63XX_RGMII0)
  153. + b53_adjust_63xx_rgmii(ds, port, interface);
  154. +
  155. if (mode == MLO_AN_PHY)
  156. return;
  157. --- a/drivers/net/dsa/b53/b53_priv.h
  158. +++ b/drivers/net/dsa/b53/b53_priv.h
  159. @@ -206,6 +206,7 @@ static inline int is58xx(struct b53_devi
  160. dev->chip_id == BCM7278_DEVICE_ID;
  161. }
  162. +#define B53_63XX_RGMII0 4
  163. #define B53_CPU_PORT_25 5
  164. #define B53_CPU_PORT 8