qcom.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #define AT803X_SPECIFIC_FUNCTION_CONTROL 0x10
  3. #define AT803X_SFC_ASSERT_CRS BIT(11)
  4. #define AT803X_SFC_FORCE_LINK BIT(10)
  5. #define AT803X_SFC_MDI_CROSSOVER_MODE_M GENMASK(6, 5)
  6. #define AT803X_SFC_AUTOMATIC_CROSSOVER 0x3
  7. #define AT803X_SFC_MANUAL_MDIX 0x1
  8. #define AT803X_SFC_MANUAL_MDI 0x0
  9. #define AT803X_SFC_SQE_TEST BIT(2)
  10. #define AT803X_SFC_POLARITY_REVERSAL BIT(1)
  11. #define AT803X_SFC_DISABLE_JABBER BIT(0)
  12. #define AT803X_SPECIFIC_STATUS 0x11
  13. #define AT803X_SS_SPEED_MASK GENMASK(15, 14)
  14. #define AT803X_SS_SPEED_1000 2
  15. #define AT803X_SS_SPEED_100 1
  16. #define AT803X_SS_SPEED_10 0
  17. #define AT803X_SS_DUPLEX BIT(13)
  18. #define AT803X_SS_SPEED_DUPLEX_RESOLVED BIT(11)
  19. #define AT803X_SS_MDIX BIT(6)
  20. #define QCA808X_SS_SPEED_MASK GENMASK(9, 7)
  21. #define QCA808X_SS_SPEED_2500 4
  22. #define AT803X_INTR_ENABLE 0x12
  23. #define AT803X_INTR_ENABLE_AUTONEG_ERR BIT(15)
  24. #define AT803X_INTR_ENABLE_SPEED_CHANGED BIT(14)
  25. #define AT803X_INTR_ENABLE_DUPLEX_CHANGED BIT(13)
  26. #define AT803X_INTR_ENABLE_PAGE_RECEIVED BIT(12)
  27. #define AT803X_INTR_ENABLE_LINK_FAIL BIT(11)
  28. #define AT803X_INTR_ENABLE_LINK_SUCCESS BIT(10)
  29. #define AT803X_INTR_ENABLE_LINK_FAIL_BX BIT(8)
  30. #define AT803X_INTR_ENABLE_LINK_SUCCESS_BX BIT(7)
  31. #define AT803X_INTR_ENABLE_WIRESPEED_DOWNGRADE BIT(5)
  32. #define AT803X_INTR_ENABLE_POLARITY_CHANGED BIT(1)
  33. #define AT803X_INTR_ENABLE_WOL BIT(0)
  34. #define AT803X_INTR_STATUS 0x13
  35. #define AT803X_SMART_SPEED 0x14
  36. #define AT803X_SMART_SPEED_ENABLE BIT(5)
  37. #define AT803X_SMART_SPEED_RETRY_LIMIT_MASK GENMASK(4, 2)
  38. #define AT803X_SMART_SPEED_BYPASS_TIMER BIT(1)
  39. #define AT803X_CDT 0x16
  40. #define AT803X_CDT_MDI_PAIR_MASK GENMASK(9, 8)
  41. #define AT803X_CDT_ENABLE_TEST BIT(0)
  42. #define AT803X_CDT_STATUS 0x1c
  43. #define AT803X_CDT_STATUS_STAT_NORMAL 0
  44. #define AT803X_CDT_STATUS_STAT_SHORT 1
  45. #define AT803X_CDT_STATUS_STAT_OPEN 2
  46. #define AT803X_CDT_STATUS_STAT_FAIL 3
  47. #define AT803X_CDT_STATUS_STAT_MASK GENMASK(9, 8)
  48. #define AT803X_CDT_STATUS_DELTA_TIME_MASK GENMASK(7, 0)
  49. #define QCA808X_CDT_ENABLE_TEST BIT(15)
  50. #define QCA808X_CDT_INTER_CHECK_DIS BIT(13)
  51. #define QCA808X_CDT_STATUS BIT(11)
  52. #define QCA808X_CDT_LENGTH_UNIT BIT(10)
  53. #define QCA808X_MMD3_CDT_STATUS 0x8064
  54. #define QCA808X_MMD3_CDT_DIAG_PAIR_A 0x8065
  55. #define QCA808X_MMD3_CDT_DIAG_PAIR_B 0x8066
  56. #define QCA808X_MMD3_CDT_DIAG_PAIR_C 0x8067
  57. #define QCA808X_MMD3_CDT_DIAG_PAIR_D 0x8068
  58. #define QCA808X_CDT_DIAG_LENGTH_SAME_SHORT GENMASK(15, 8)
  59. #define QCA808X_CDT_DIAG_LENGTH_CROSS_SHORT GENMASK(7, 0)
  60. #define QCA808X_CDT_CODE_PAIR_A GENMASK(15, 12)
  61. #define QCA808X_CDT_CODE_PAIR_B GENMASK(11, 8)
  62. #define QCA808X_CDT_CODE_PAIR_C GENMASK(7, 4)
  63. #define QCA808X_CDT_CODE_PAIR_D GENMASK(3, 0)
  64. #define QCA808X_CDT_STATUS_STAT_TYPE GENMASK(1, 0)
  65. #define QCA808X_CDT_STATUS_STAT_FAIL FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_TYPE, 0)
  66. #define QCA808X_CDT_STATUS_STAT_NORMAL FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_TYPE, 1)
  67. #define QCA808X_CDT_STATUS_STAT_SAME_OPEN FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_TYPE, 2)
  68. #define QCA808X_CDT_STATUS_STAT_SAME_SHORT FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_TYPE, 3)
  69. #define QCA808X_CDT_STATUS_STAT_MDI GENMASK(3, 2)
  70. #define QCA808X_CDT_STATUS_STAT_MDI1 FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_MDI, 1)
  71. #define QCA808X_CDT_STATUS_STAT_MDI2 FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_MDI, 2)
  72. #define QCA808X_CDT_STATUS_STAT_MDI3 FIELD_PREP_CONST(QCA808X_CDT_STATUS_STAT_MDI, 3)
  73. /* NORMAL are MDI with type set to 0 */
  74. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI1_SAME_NORMAL QCA808X_CDT_STATUS_STAT_MDI1
  75. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI1_SAME_OPEN (QCA808X_CDT_STATUS_STAT_SAME_OPEN |\
  76. QCA808X_CDT_STATUS_STAT_MDI1)
  77. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI1_SAME_SHORT (QCA808X_CDT_STATUS_STAT_SAME_SHORT |\
  78. QCA808X_CDT_STATUS_STAT_MDI1)
  79. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI2_SAME_NORMAL QCA808X_CDT_STATUS_STAT_MDI2
  80. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI2_SAME_OPEN (QCA808X_CDT_STATUS_STAT_SAME_OPEN |\
  81. QCA808X_CDT_STATUS_STAT_MDI2)
  82. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI2_SAME_SHORT (QCA808X_CDT_STATUS_STAT_SAME_SHORT |\
  83. QCA808X_CDT_STATUS_STAT_MDI2)
  84. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI3_SAME_NORMAL QCA808X_CDT_STATUS_STAT_MDI3
  85. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI3_SAME_OPEN (QCA808X_CDT_STATUS_STAT_SAME_OPEN |\
  86. QCA808X_CDT_STATUS_STAT_MDI3)
  87. #define QCA808X_CDT_STATUS_STAT_CROSS_SHORT_WITH_MDI3_SAME_SHORT (QCA808X_CDT_STATUS_STAT_SAME_SHORT |\
  88. QCA808X_CDT_STATUS_STAT_MDI3)
  89. /* Added for reference of existence but should be handled by wait_for_completion already */
  90. #define QCA808X_CDT_STATUS_STAT_BUSY (BIT(1) | BIT(3))
  91. #define QCA808X_MMD7_LED_GLOBAL 0x8073
  92. #define QCA808X_LED_BLINK_1 GENMASK(11, 6)
  93. #define QCA808X_LED_BLINK_2 GENMASK(5, 0)
  94. /* Values are the same for both BLINK_1 and BLINK_2 */
  95. #define QCA808X_LED_BLINK_FREQ_MASK GENMASK(5, 3)
  96. #define QCA808X_LED_BLINK_FREQ_2HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x0)
  97. #define QCA808X_LED_BLINK_FREQ_4HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x1)
  98. #define QCA808X_LED_BLINK_FREQ_8HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x2)
  99. #define QCA808X_LED_BLINK_FREQ_16HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x3)
  100. #define QCA808X_LED_BLINK_FREQ_32HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x4)
  101. #define QCA808X_LED_BLINK_FREQ_64HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x5)
  102. #define QCA808X_LED_BLINK_FREQ_128HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x6)
  103. #define QCA808X_LED_BLINK_FREQ_256HZ FIELD_PREP(QCA808X_LED_BLINK_FREQ_MASK, 0x7)
  104. #define QCA808X_LED_BLINK_DUTY_MASK GENMASK(2, 0)
  105. #define QCA808X_LED_BLINK_DUTY_50_50 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x0)
  106. #define QCA808X_LED_BLINK_DUTY_75_25 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x1)
  107. #define QCA808X_LED_BLINK_DUTY_25_75 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x2)
  108. #define QCA808X_LED_BLINK_DUTY_33_67 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x3)
  109. #define QCA808X_LED_BLINK_DUTY_67_33 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x4)
  110. #define QCA808X_LED_BLINK_DUTY_17_83 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x5)
  111. #define QCA808X_LED_BLINK_DUTY_83_17 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x6)
  112. #define QCA808X_LED_BLINK_DUTY_8_92 FIELD_PREP(QCA808X_LED_BLINK_DUTY_MASK, 0x7)
  113. /* LED hw control pattern is the same for every LED */
  114. #define QCA808X_LED_PATTERN_MASK GENMASK(15, 0)
  115. #define QCA808X_LED_SPEED2500_ON BIT(15)
  116. #define QCA808X_LED_SPEED2500_BLINK BIT(14)
  117. /* Follow blink trigger even if duplex or speed condition doesn't match */
  118. #define QCA808X_LED_BLINK_CHECK_BYPASS BIT(13)
  119. #define QCA808X_LED_FULL_DUPLEX_ON BIT(12)
  120. #define QCA808X_LED_HALF_DUPLEX_ON BIT(11)
  121. #define QCA808X_LED_TX_BLINK BIT(10)
  122. #define QCA808X_LED_RX_BLINK BIT(9)
  123. #define QCA808X_LED_TX_ON_10MS BIT(8)
  124. #define QCA808X_LED_RX_ON_10MS BIT(7)
  125. #define QCA808X_LED_SPEED1000_ON BIT(6)
  126. #define QCA808X_LED_SPEED100_ON BIT(5)
  127. #define QCA808X_LED_SPEED10_ON BIT(4)
  128. #define QCA808X_LED_COLLISION_BLINK BIT(3)
  129. #define QCA808X_LED_SPEED1000_BLINK BIT(2)
  130. #define QCA808X_LED_SPEED100_BLINK BIT(1)
  131. #define QCA808X_LED_SPEED10_BLINK BIT(0)
  132. /* LED force ctrl is the same for every LED
  133. * No documentation exist for this, not even internal one
  134. * with NDA as QCOM gives only info about configuring
  135. * hw control pattern rules and doesn't indicate any way
  136. * to force the LED to specific mode.
  137. * These define comes from reverse and testing and maybe
  138. * lack of some info or some info are not entirely correct.
  139. * For the basic LED control and hw control these finding
  140. * are enough to support LED control in all the required APIs.
  141. *
  142. * On doing some comparison with implementation with qca807x,
  143. * it was found that it's 1:1 equal to it and confirms all the
  144. * reverse done. It was also found further specification with the
  145. * force mode and the blink modes.
  146. */
  147. #define QCA808X_LED_FORCE_EN BIT(15)
  148. #define QCA808X_LED_FORCE_MODE_MASK GENMASK(14, 13)
  149. #define QCA808X_LED_FORCE_BLINK_1 FIELD_PREP(QCA808X_LED_FORCE_MODE_MASK, 0x3)
  150. #define QCA808X_LED_FORCE_BLINK_2 FIELD_PREP(QCA808X_LED_FORCE_MODE_MASK, 0x2)
  151. #define QCA808X_LED_FORCE_ON FIELD_PREP(QCA808X_LED_FORCE_MODE_MASK, 0x1)
  152. #define QCA808X_LED_FORCE_OFF FIELD_PREP(QCA808X_LED_FORCE_MODE_MASK, 0x0)
  153. #define AT803X_LOC_MAC_ADDR_0_15_OFFSET 0x804C
  154. #define AT803X_LOC_MAC_ADDR_16_31_OFFSET 0x804B
  155. #define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A
  156. #define AT803X_PHY_MMD3_WOL_CTRL 0x8012
  157. #define AT803X_WOL_EN BIT(5)
  158. #define AT803X_DEBUG_ADDR 0x1D
  159. #define AT803X_DEBUG_DATA 0x1E
  160. #define AT803X_DEBUG_ANALOG_TEST_CTRL 0x00
  161. #define QCA8327_DEBUG_MANU_CTRL_EN BIT(2)
  162. #define QCA8337_DEBUG_MANU_CTRL_EN GENMASK(3, 2)
  163. #define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
  164. #define AT803X_DEBUG_SYSTEM_CTRL_MODE 0x05
  165. #define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
  166. #define AT803X_DEBUG_REG_HIB_CTRL 0x0b
  167. #define AT803X_DEBUG_HIB_CTRL_SEL_RST_80U BIT(10)
  168. #define AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE BIT(13)
  169. #define AT803X_DEBUG_HIB_CTRL_PS_HIB_EN BIT(15)
  170. #define AT803X_DEFAULT_DOWNSHIFT 5
  171. #define AT803X_MIN_DOWNSHIFT 2
  172. #define AT803X_MAX_DOWNSHIFT 9
  173. enum stat_access_type {
  174. PHY,
  175. MMD
  176. };
  177. struct at803x_hw_stat {
  178. const char *string;
  179. u8 reg;
  180. u32 mask;
  181. enum stat_access_type access_type;
  182. };
  183. struct at803x_ss_mask {
  184. u16 speed_mask;
  185. u8 speed_shift;
  186. };
  187. int at803x_debug_reg_read(struct phy_device *phydev, u16 reg);
  188. int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
  189. u16 clear, u16 set);
  190. int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);
  191. int at803x_set_wol(struct phy_device *phydev,
  192. struct ethtool_wolinfo *wol);
  193. int at8031_set_wol(struct phy_device *phydev,
  194. struct ethtool_wolinfo *wol);
  195. void at803x_get_wol(struct phy_device *phydev,
  196. struct ethtool_wolinfo *wol);
  197. int at803x_ack_interrupt(struct phy_device *phydev);
  198. int at803x_config_intr(struct phy_device *phydev);
  199. irqreturn_t at803x_handle_interrupt(struct phy_device *phydev);
  200. int at803x_read_specific_status(struct phy_device *phydev,
  201. struct at803x_ss_mask ss_mask);
  202. int at803x_config_mdix(struct phy_device *phydev, u8 ctrl);
  203. int at803x_prepare_config_aneg(struct phy_device *phydev);
  204. int at803x_read_status(struct phy_device *phydev);
  205. int at803x_get_tunable(struct phy_device *phydev,
  206. struct ethtool_tunable *tuna, void *data);
  207. int at803x_set_tunable(struct phy_device *phydev,
  208. struct ethtool_tunable *tuna, const void *data);
  209. int at803x_cdt_fault_length(int dt);
  210. int at803x_cdt_start(struct phy_device *phydev, u32 cdt_start);
  211. int at803x_cdt_wait_for_completion(struct phy_device *phydev,
  212. u32 cdt_en);
  213. int qca808x_cable_test_get_status(struct phy_device *phydev, bool *finished);
  214. int qca808x_led_reg_hw_control_enable(struct phy_device *phydev, u16 reg);
  215. bool qca808x_led_reg_hw_control_status(struct phy_device *phydev, u16 reg);
  216. int qca808x_led_reg_brightness_set(struct phy_device *phydev,
  217. u16 reg, enum led_brightness value);
  218. int qca808x_led_reg_blink_set(struct phy_device *phydev, u16 reg,
  219. unsigned long *delay_on,
  220. unsigned long *delay_off);