780-v6.6-03-net-dsa-qca8k-move-qca8xxx-hol-fixup-to-separate-fun.patch 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. From a9108b0712bf018dc69020864b21485b71b17dfc Mon Sep 17 00:00:00 2001
  2. From: Christian Marangi <[email protected]>
  3. Date: Sun, 30 Jul 2023 09:41:12 +0200
  4. Subject: [PATCH 3/4] net: dsa: qca8k: move qca8xxx hol fixup to separate
  5. function
  6. Move qca8xxx hol fixup to separate function to tidy things up and to
  7. permit using a more efficent loop in future patch.
  8. Signed-off-by: Christian Marangi <[email protected]>
  9. Reviewed-by: Florian Fainelli <[email protected]>
  10. Link: https://lore.kernel.org/r/[email protected]
  11. Signed-off-by: Paolo Abeni <[email protected]>
  12. ---
  13. drivers/net/dsa/qca/qca8k-8xxx.c | 78 +++++++++++++++++---------------
  14. 1 file changed, 42 insertions(+), 36 deletions(-)
  15. --- a/drivers/net/dsa/qca/qca8k-8xxx.c
  16. +++ b/drivers/net/dsa/qca/qca8k-8xxx.c
  17. @@ -1795,6 +1795,46 @@ static int qca8k_connect_tag_protocol(st
  18. return 0;
  19. }
  20. +static void qca8k_setup_hol_fixup(struct qca8k_priv *priv, int port)
  21. +{
  22. + u32 mask;
  23. +
  24. + switch (port) {
  25. + /* The 2 CPU port and port 5 requires some different
  26. + * priority than any other ports.
  27. + */
  28. + case 0:
  29. + case 5:
  30. + case 6:
  31. + mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) |
  32. + QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) |
  33. + QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x4) |
  34. + QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x4) |
  35. + QCA8K_PORT_HOL_CTRL0_EG_PRI4(0x6) |
  36. + QCA8K_PORT_HOL_CTRL0_EG_PRI5(0x8) |
  37. + QCA8K_PORT_HOL_CTRL0_EG_PORT(0x1e);
  38. + break;
  39. + default:
  40. + mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) |
  41. + QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) |
  42. + QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x6) |
  43. + QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x8) |
  44. + QCA8K_PORT_HOL_CTRL0_EG_PORT(0x19);
  45. + }
  46. + regmap_write(priv->regmap, QCA8K_REG_PORT_HOL_CTRL0(port), mask);
  47. +
  48. + mask = QCA8K_PORT_HOL_CTRL1_ING(0x6) |
  49. + QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN |
  50. + QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN |
  51. + QCA8K_PORT_HOL_CTRL1_WRED_EN;
  52. + regmap_update_bits(priv->regmap, QCA8K_REG_PORT_HOL_CTRL1(port),
  53. + QCA8K_PORT_HOL_CTRL1_ING_BUF_MASK |
  54. + QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN |
  55. + QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN |
  56. + QCA8K_PORT_HOL_CTRL1_WRED_EN,
  57. + mask);
  58. +}
  59. +
  60. static int
  61. qca8k_setup(struct dsa_switch *ds)
  62. {
  63. @@ -1930,42 +1970,8 @@ qca8k_setup(struct dsa_switch *ds)
  64. * missing settings to improve switch stability under load condition.
  65. * This problem is limited to qca8337 and other qca8k switch are not affected.
  66. */
  67. - if (priv->switch_id == QCA8K_ID_QCA8337) {
  68. - switch (i) {
  69. - /* The 2 CPU port and port 5 requires some different
  70. - * priority than any other ports.
  71. - */
  72. - case 0:
  73. - case 5:
  74. - case 6:
  75. - mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) |
  76. - QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) |
  77. - QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x4) |
  78. - QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x4) |
  79. - QCA8K_PORT_HOL_CTRL0_EG_PRI4(0x6) |
  80. - QCA8K_PORT_HOL_CTRL0_EG_PRI5(0x8) |
  81. - QCA8K_PORT_HOL_CTRL0_EG_PORT(0x1e);
  82. - break;
  83. - default:
  84. - mask = QCA8K_PORT_HOL_CTRL0_EG_PRI0(0x3) |
  85. - QCA8K_PORT_HOL_CTRL0_EG_PRI1(0x4) |
  86. - QCA8K_PORT_HOL_CTRL0_EG_PRI2(0x6) |
  87. - QCA8K_PORT_HOL_CTRL0_EG_PRI3(0x8) |
  88. - QCA8K_PORT_HOL_CTRL0_EG_PORT(0x19);
  89. - }
  90. - qca8k_write(priv, QCA8K_REG_PORT_HOL_CTRL0(i), mask);
  91. -
  92. - mask = QCA8K_PORT_HOL_CTRL1_ING(0x6) |
  93. - QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN |
  94. - QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN |
  95. - QCA8K_PORT_HOL_CTRL1_WRED_EN;
  96. - qca8k_rmw(priv, QCA8K_REG_PORT_HOL_CTRL1(i),
  97. - QCA8K_PORT_HOL_CTRL1_ING_BUF_MASK |
  98. - QCA8K_PORT_HOL_CTRL1_EG_PRI_BUF_EN |
  99. - QCA8K_PORT_HOL_CTRL1_EG_PORT_BUF_EN |
  100. - QCA8K_PORT_HOL_CTRL1_WRED_EN,
  101. - mask);
  102. - }
  103. + if (priv->switch_id == QCA8K_ID_QCA8337)
  104. + qca8k_setup_hol_fixup(priv, i);
  105. }
  106. /* Special GLOBAL_FC_THRESH value are needed for ar8327 switch */