115-net-macb-add-userio-bits-as-platform-configuration.patch 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. From 89f37ac2780d113d3c17d329726c0e92a1400744 Mon Sep 17 00:00:00 2001
  2. From: Claudiu Beznea <[email protected]>
  3. Date: Wed, 9 Dec 2020 15:03:32 +0200
  4. Subject: [PATCH 115/247] net: macb: add userio bits as platform configuration
  5. This is necessary for SAMA7G5 as it uses different values for
  6. PHY interface and also introduces hdfctlen bit.
  7. Signed-off-by: Claudiu Beznea <[email protected]>
  8. Reviewed-by: Andrew Lunn <[email protected]>
  9. Signed-off-by: David S. Miller <[email protected]>
  10. ---
  11. drivers/net/ethernet/cadence/macb.h | 10 +++++++++
  12. drivers/net/ethernet/cadence/macb_main.c | 28 ++++++++++++++++++++----
  13. 2 files changed, 34 insertions(+), 4 deletions(-)
  14. diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
  15. index 5de47f6fde5a..e9385a1390a9 100644
  16. --- a/drivers/net/ethernet/cadence/macb.h
  17. +++ b/drivers/net/ethernet/cadence/macb.h
  18. @@ -1104,6 +1104,14 @@ struct macb_pm_data {
  19. u32 usrio;
  20. };
  21. +struct macb_usrio_config {
  22. + u32 mii;
  23. + u32 rmii;
  24. + u32 rgmii;
  25. + u32 refclk;
  26. + u32 hdfctlen;
  27. +};
  28. +
  29. struct macb_config {
  30. u32 caps;
  31. unsigned int dma_burst_length;
  32. @@ -1112,6 +1120,7 @@ struct macb_config {
  33. struct clk **rx_clk, struct clk **tsu_clk);
  34. int (*init)(struct platform_device *pdev);
  35. int jumbo_max_len;
  36. + const struct macb_usrio_config *usrio;
  37. };
  38. struct tsu_incr {
  39. @@ -1244,6 +1253,7 @@ struct macb {
  40. u32 rx_intr_mask;
  41. struct macb_pm_data pm_data;
  42. + const struct macb_usrio_config *usrio;
  43. };
  44. #ifdef CONFIG_MACB_USE_HWSTAMP
  45. diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
  46. index 1e8bf6b9834b..a8326b75eca8 100644
  47. --- a/drivers/net/ethernet/cadence/macb_main.c
  48. +++ b/drivers/net/ethernet/cadence/macb_main.c
  49. @@ -3800,15 +3800,15 @@ static int macb_init(struct platform_device *pdev)
  50. if (!(bp->caps & MACB_CAPS_USRIO_DISABLED)) {
  51. val = 0;
  52. if (phy_interface_mode_is_rgmii(bp->phy_interface))
  53. - val = GEM_BIT(RGMII);
  54. + val = bp->usrio->rgmii;
  55. else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII &&
  56. (bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
  57. - val = MACB_BIT(RMII);
  58. + val = bp->usrio->rmii;
  59. else if (!(bp->caps & MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII))
  60. - val = MACB_BIT(MII);
  61. + val = bp->usrio->mii;
  62. if (bp->caps & MACB_CAPS_USRIO_HAS_CLKEN)
  63. - val |= MACB_BIT(CLKEN);
  64. + val |= bp->usrio->refclk;
  65. macb_or_gem_writel(bp, USRIO, val);
  66. }
  67. @@ -4326,6 +4326,13 @@ static int fu540_c000_init(struct platform_device *pdev)
  68. return macb_init(pdev);
  69. }
  70. +static const struct macb_usrio_config macb_default_usrio = {
  71. + .mii = MACB_BIT(MII),
  72. + .rmii = MACB_BIT(RMII),
  73. + .rgmii = GEM_BIT(RGMII),
  74. + .refclk = MACB_BIT(CLKEN),
  75. +};
  76. +
  77. static const struct macb_config fu540_c000_config = {
  78. .caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE | MACB_CAPS_JUMBO |
  79. MACB_CAPS_GEM_HAS_PTP,
  80. @@ -4333,12 +4340,14 @@ static const struct macb_config fu540_c000_config = {
  81. .clk_init = fu540_c000_clk_init,
  82. .init = fu540_c000_init,
  83. .jumbo_max_len = 10240,
  84. + .usrio = &macb_default_usrio,
  85. };
  86. static const struct macb_config at91sam9260_config = {
  87. .caps = MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
  88. .clk_init = macb_clk_init,
  89. .init = macb_init,
  90. + .usrio = &macb_default_usrio,
  91. };
  92. static const struct macb_config sama5d3macb_config = {
  93. @@ -4346,6 +4355,7 @@ static const struct macb_config sama5d3macb_config = {
  94. | MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
  95. .clk_init = macb_clk_init,
  96. .init = macb_init,
  97. + .usrio = &macb_default_usrio,
  98. };
  99. static const struct macb_config pc302gem_config = {
  100. @@ -4353,6 +4363,7 @@ static const struct macb_config pc302gem_config = {
  101. .dma_burst_length = 16,
  102. .clk_init = macb_clk_init,
  103. .init = macb_init,
  104. + .usrio = &macb_default_usrio,
  105. };
  106. static const struct macb_config sama5d2_config = {
  107. @@ -4360,6 +4371,7 @@ static const struct macb_config sama5d2_config = {
  108. .dma_burst_length = 16,
  109. .clk_init = macb_clk_init,
  110. .init = macb_init,
  111. + .usrio = &macb_default_usrio,
  112. };
  113. static const struct macb_config sama5d3_config = {
  114. @@ -4369,6 +4381,7 @@ static const struct macb_config sama5d3_config = {
  115. .clk_init = macb_clk_init,
  116. .init = macb_init,
  117. .jumbo_max_len = 10240,
  118. + .usrio = &macb_default_usrio,
  119. };
  120. static const struct macb_config sama5d4_config = {
  121. @@ -4376,18 +4389,21 @@ static const struct macb_config sama5d4_config = {
  122. .dma_burst_length = 4,
  123. .clk_init = macb_clk_init,
  124. .init = macb_init,
  125. + .usrio = &macb_default_usrio,
  126. };
  127. static const struct macb_config emac_config = {
  128. .caps = MACB_CAPS_NEEDS_RSTONUBR | MACB_CAPS_MACB_IS_EMAC,
  129. .clk_init = at91ether_clk_init,
  130. .init = at91ether_init,
  131. + .usrio = &macb_default_usrio,
  132. };
  133. static const struct macb_config np4_config = {
  134. .caps = MACB_CAPS_USRIO_DISABLED,
  135. .clk_init = macb_clk_init,
  136. .init = macb_init,
  137. + .usrio = &macb_default_usrio,
  138. };
  139. static const struct macb_config zynqmp_config = {
  140. @@ -4398,6 +4414,7 @@ static const struct macb_config zynqmp_config = {
  141. .clk_init = macb_clk_init,
  142. .init = macb_init,
  143. .jumbo_max_len = 10240,
  144. + .usrio = &macb_default_usrio,
  145. };
  146. static const struct macb_config zynq_config = {
  147. @@ -4406,6 +4423,7 @@ static const struct macb_config zynq_config = {
  148. .dma_burst_length = 16,
  149. .clk_init = macb_clk_init,
  150. .init = macb_init,
  151. + .usrio = &macb_default_usrio,
  152. };
  153. static const struct of_device_id macb_dt_ids[] = {
  154. @@ -4527,6 +4545,8 @@ static int macb_probe(struct platform_device *pdev)
  155. bp->wol |= MACB_WOL_HAS_MAGIC_PACKET;
  156. device_set_wakeup_capable(&pdev->dev, bp->wol & MACB_WOL_HAS_MAGIC_PACKET);
  157. + bp->usrio = macb_config->usrio;
  158. +
  159. spin_lock_init(&bp->lock);
  160. /* setup capabilities */
  161. --
  162. 2.32.0