713-v6.9-02-net-phy-qcom-create-and-move-functions-to-shared-lib.patch 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. From 6fb760972c49490b03f3db2ad64cf30bdd28c54a Mon Sep 17 00:00:00 2001
  2. From: Christian Marangi <[email protected]>
  3. Date: Mon, 29 Jan 2024 15:15:20 +0100
  4. Subject: [PATCH 2/5] net: phy: qcom: create and move functions to shared
  5. library
  6. Create and move functions to shared library in preparation for qca83xx
  7. PHY Family to be detached from at803x driver.
  8. Only the shared defines are moved to the shared qcom.h header.
  9. Signed-off-by: Christian Marangi <[email protected]>
  10. Reviewed-by: Andrew Lunn <[email protected]>
  11. Link: https://lore.kernel.org/r/[email protected]
  12. Signed-off-by: Jakub Kicinski <[email protected]>
  13. ---
  14. drivers/net/phy/qcom/Kconfig | 4 ++
  15. drivers/net/phy/qcom/Makefile | 1 +
  16. drivers/net/phy/qcom/at803x.c | 69 +----------------------------
  17. drivers/net/phy/qcom/qcom-phy-lib.c | 53 ++++++++++++++++++++++
  18. drivers/net/phy/qcom/qcom.h | 34 ++++++++++++++
  19. 5 files changed, 94 insertions(+), 67 deletions(-)
  20. create mode 100644 drivers/net/phy/qcom/qcom-phy-lib.c
  21. create mode 100644 drivers/net/phy/qcom/qcom.h
  22. --- a/drivers/net/phy/qcom/Kconfig
  23. +++ b/drivers/net/phy/qcom/Kconfig
  24. @@ -1,6 +1,10 @@
  25. # SPDX-License-Identifier: GPL-2.0-only
  26. +config QCOM_NET_PHYLIB
  27. + tristate
  28. +
  29. config AT803X_PHY
  30. tristate "Qualcomm Atheros AR803X PHYs and QCA833x PHYs"
  31. + select QCOM_NET_PHYLIB
  32. depends on REGULATOR
  33. help
  34. Currently supports the AR8030, AR8031, AR8033, AR8035 and internal
  35. --- a/drivers/net/phy/qcom/Makefile
  36. +++ b/drivers/net/phy/qcom/Makefile
  37. @@ -1,2 +1,3 @@
  38. # SPDX-License-Identifier: GPL-2.0
  39. +obj-$(CONFIG_QCOM_NET_PHYLIB) += qcom-phy-lib.o
  40. obj-$(CONFIG_AT803X_PHY) += at803x.o
  41. --- a/drivers/net/phy/qcom/at803x.c
  42. +++ b/drivers/net/phy/qcom/at803x.c
  43. @@ -22,6 +22,8 @@
  44. #include <linux/sfp.h>
  45. #include <dt-bindings/net/qca-ar803x.h>
  46. +#include "qcom.h"
  47. +
  48. #define AT803X_SPECIFIC_FUNCTION_CONTROL 0x10
  49. #define AT803X_SFC_ASSERT_CRS BIT(11)
  50. #define AT803X_SFC_FORCE_LINK BIT(10)
  51. @@ -84,9 +86,6 @@
  52. #define AT803X_REG_CHIP_CONFIG 0x1f
  53. #define AT803X_BT_BX_REG_SEL 0x8000
  54. -#define AT803X_DEBUG_ADDR 0x1D
  55. -#define AT803X_DEBUG_DATA 0x1E
  56. -
  57. #define AT803X_MODE_CFG_MASK 0x0F
  58. #define AT803X_MODE_CFG_BASET_RGMII 0x00
  59. #define AT803X_MODE_CFG_BASET_SGMII 0x01
  60. @@ -103,19 +102,6 @@
  61. #define AT803X_PSSR 0x11 /*PHY-Specific Status Register*/
  62. #define AT803X_PSSR_MR_AN_COMPLETE 0x0200
  63. -#define AT803X_DEBUG_ANALOG_TEST_CTRL 0x00
  64. -#define QCA8327_DEBUG_MANU_CTRL_EN BIT(2)
  65. -#define QCA8337_DEBUG_MANU_CTRL_EN GENMASK(3, 2)
  66. -#define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
  67. -
  68. -#define AT803X_DEBUG_SYSTEM_CTRL_MODE 0x05
  69. -#define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
  70. -
  71. -#define AT803X_DEBUG_REG_HIB_CTRL 0x0b
  72. -#define AT803X_DEBUG_HIB_CTRL_SEL_RST_80U BIT(10)
  73. -#define AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE BIT(13)
  74. -#define AT803X_DEBUG_HIB_CTRL_PS_HIB_EN BIT(15)
  75. -
  76. #define AT803X_DEBUG_REG_3C 0x3C
  77. #define AT803X_DEBUG_REG_GREEN 0x3D
  78. @@ -393,18 +379,6 @@ MODULE_DESCRIPTION("Qualcomm Atheros AR8
  79. MODULE_AUTHOR("Matus Ujhelyi");
  80. MODULE_LICENSE("GPL");
  81. -enum stat_access_type {
  82. - PHY,
  83. - MMD
  84. -};
  85. -
  86. -struct at803x_hw_stat {
  87. - const char *string;
  88. - u8 reg;
  89. - u32 mask;
  90. - enum stat_access_type access_type;
  91. -};
  92. -
  93. static struct at803x_hw_stat qca83xx_hw_stats[] = {
  94. { "phy_idle_errors", 0xa, GENMASK(7, 0), PHY},
  95. { "phy_receive_errors", 0x15, GENMASK(15, 0), PHY},
  96. @@ -439,45 +413,6 @@ struct at803x_context {
  97. u16 led_control;
  98. };
  99. -static int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
  100. -{
  101. - int ret;
  102. -
  103. - ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
  104. - if (ret < 0)
  105. - return ret;
  106. -
  107. - return phy_write(phydev, AT803X_DEBUG_DATA, data);
  108. -}
  109. -
  110. -static int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
  111. -{
  112. - int ret;
  113. -
  114. - ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
  115. - if (ret < 0)
  116. - return ret;
  117. -
  118. - return phy_read(phydev, AT803X_DEBUG_DATA);
  119. -}
  120. -
  121. -static int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
  122. - u16 clear, u16 set)
  123. -{
  124. - u16 val;
  125. - int ret;
  126. -
  127. - ret = at803x_debug_reg_read(phydev, reg);
  128. - if (ret < 0)
  129. - return ret;
  130. -
  131. - val = ret & 0xffff;
  132. - val &= ~clear;
  133. - val |= set;
  134. -
  135. - return phy_write(phydev, AT803X_DEBUG_DATA, val);
  136. -}
  137. -
  138. static int at803x_write_page(struct phy_device *phydev, int page)
  139. {
  140. int mask;
  141. --- /dev/null
  142. +++ b/drivers/net/phy/qcom/qcom-phy-lib.c
  143. @@ -0,0 +1,53 @@
  144. +// SPDX-License-Identifier: GPL-2.0
  145. +
  146. +#include <linux/phy.h>
  147. +#include <linux/module.h>
  148. +
  149. +#include "qcom.h"
  150. +
  151. +MODULE_DESCRIPTION("Qualcomm PHY driver Common Functions");
  152. +MODULE_AUTHOR("Matus Ujhelyi");
  153. +MODULE_AUTHOR("Christian Marangi <[email protected]>");
  154. +MODULE_LICENSE("GPL");
  155. +
  156. +int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
  157. +{
  158. + int ret;
  159. +
  160. + ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
  161. + if (ret < 0)
  162. + return ret;
  163. +
  164. + return phy_read(phydev, AT803X_DEBUG_DATA);
  165. +}
  166. +EXPORT_SYMBOL_GPL(at803x_debug_reg_read);
  167. +
  168. +int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
  169. + u16 clear, u16 set)
  170. +{
  171. + u16 val;
  172. + int ret;
  173. +
  174. + ret = at803x_debug_reg_read(phydev, reg);
  175. + if (ret < 0)
  176. + return ret;
  177. +
  178. + val = ret & 0xffff;
  179. + val &= ~clear;
  180. + val |= set;
  181. +
  182. + return phy_write(phydev, AT803X_DEBUG_DATA, val);
  183. +}
  184. +EXPORT_SYMBOL_GPL(at803x_debug_reg_mask);
  185. +
  186. +int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
  187. +{
  188. + int ret;
  189. +
  190. + ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
  191. + if (ret < 0)
  192. + return ret;
  193. +
  194. + return phy_write(phydev, AT803X_DEBUG_DATA, data);
  195. +}
  196. +EXPORT_SYMBOL_GPL(at803x_debug_reg_write);
  197. --- /dev/null
  198. +++ b/drivers/net/phy/qcom/qcom.h
  199. @@ -0,0 +1,34 @@
  200. +/* SPDX-License-Identifier: GPL-2.0 */
  201. +
  202. +#define AT803X_DEBUG_ADDR 0x1D
  203. +#define AT803X_DEBUG_DATA 0x1E
  204. +
  205. +#define AT803X_DEBUG_ANALOG_TEST_CTRL 0x00
  206. +#define QCA8327_DEBUG_MANU_CTRL_EN BIT(2)
  207. +#define QCA8337_DEBUG_MANU_CTRL_EN GENMASK(3, 2)
  208. +#define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
  209. +
  210. +#define AT803X_DEBUG_SYSTEM_CTRL_MODE 0x05
  211. +#define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
  212. +
  213. +#define AT803X_DEBUG_REG_HIB_CTRL 0x0b
  214. +#define AT803X_DEBUG_HIB_CTRL_SEL_RST_80U BIT(10)
  215. +#define AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE BIT(13)
  216. +#define AT803X_DEBUG_HIB_CTRL_PS_HIB_EN BIT(15)
  217. +
  218. +enum stat_access_type {
  219. + PHY,
  220. + MMD
  221. +};
  222. +
  223. +struct at803x_hw_stat {
  224. + const char *string;
  225. + u8 reg;
  226. + u32 mask;
  227. + enum stat_access_type access_type;
  228. +};
  229. +
  230. +int at803x_debug_reg_read(struct phy_device *phydev, u16 reg);
  231. +int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
  232. + u16 clear, u16 set);
  233. +int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);