Advertisement
bnasko

Untitled

Oct 20th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1. diff --git a/sys/dev/bxe/bxe_elink.c b/sys/dev/bxe/bxe_elink.c
  2. index e3ad174c43f..181ab187c51 100644
  3. --- a/sys/dev/bxe/bxe_elink.c
  4. +++ b/sys/dev/bxe/bxe_elink.c
  5. @@ -383,7 +383,15 @@ Theotherbitsarereservedandshouldbezero*/
  6. #define MDIO_PMA_REG_8727_TWO_WIRE_SLAVE_ADDR 0x8005
  7. #define MDIO_PMA_REG_8727_TWO_WIRE_DATA_BUF 0x8007
  8. #define MDIO_PMA_REG_8727_TWO_WIRE_DATA_MASK 0xff
  9. -#define MDIO_PMA_REG_8727_MISC_CTRL 0x8309
  10. +#define MDIO_PMA_REG_8727_MISC_CTRL1 0x8308
  11. +#define MDIO_PMA_REG_8727_MISC_CTRL2 0x8309
  12. #define MDIO_PMA_REG_8727_TX_CTRL1 0xca02
  13. #define MDIO_PMA_REG_8727_TX_CTRL2 0xca05
  14. #define MDIO_PMA_REG_8727_PCS_OPT_CTRL 0xc808
  15. #define MDIO_PMA_REG_8727_GPIO_CTRL 0xc80e
  16. #define MDIO_PMA_REG_8727_PCS_GP 0xc842
  17. #define MDIO_PMA_REG_8727_OPT_CFG_REG 0xc8e4
  18.  
  19. #define MDIO_AN_REG_8727_MISC_CTRL 0x8309
  20. -#define MDIO_AN_REG_8727_MISC_CTRL 0x8309
  21. +#define MDIO_AN_REG_8727_MISC_CTRL1 0x8308
  22. +#define MDIO_AN_REG_8727_MISC_CTRL2 0x8309
  23. @@ -882,6 +883,7 @@ typedef elink_status_t (*read_sfp_module_eeprom_func_p)(struct elink_phy *phy,
  24.  
  25. #define ELINK_SFP_EEPROM_CON_TYPE_ADDR 0x2
  26. #define ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN 0x0
  27. + #define ELINK_SFP_EEPROM_CON_TYPE_VAL_SC 0x1
  28. #define ELINK_SFP_EEPROM_CON_TYPE_VAL_LC 0x7
  29. #define ELINK_SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21
  30. #define ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22
  31. @@ -9069,6 +9071,7 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  32. break;
  33. }
  34. case ELINK_SFP_EEPROM_CON_TYPE_VAL_UNKNOWN:
  35. + case ELINK_SFP_EEPROM_CON_TYPE_VAL_SC:
  36. case ELINK_SFP_EEPROM_CON_TYPE_VAL_LC:
  37. case ELINK_SFP_EEPROM_CON_TYPE_VAL_RJ45:
  38. check_limiting_mode = 1;
  39. @@ -9082,7 +9085,8 @@ static elink_status_t elink_get_edc_mode(struct elink_phy *phy,
  40. (val[ELINK_SFP_EEPROM_1G_COMP_CODE_ADDR] != 0)) {
  41. ELINK_DEBUG_P0(sc, "1G SFP module detected\n");
  42. phy->media_type = ELINK_ETH_PHY_SFP_1G_FIBER;
  43. - if (phy->req_line_speed != ELINK_SPEED_1000) {
  44. + if ((phy->req_line_speed != ELINK_SPEED_1000) &&
  45. + (phy->req_line_speed != ELINK_SPEED_2500)) {
  46. uint8_t gport = params->port;
  47. phy->req_line_speed = ELINK_SPEED_1000;
  48. if (!CHIP_IS_E1x(sc)) {
  49. @@ -10146,6 +10150,7 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  50. uint16_t tmp1, val;
  51. /* Set option 1G speed */
  52. if ((phy->req_line_speed == ELINK_SPEED_1000) ||
  53. + (phy->req_line_speed == ELINK_SPEED_2500) ||
  54. (phy->media_type == ELINK_ETH_PHY_SFP_1G_FIBER)) {
  55. ELINK_DEBUG_P0(sc, "Setting 1G force\n");
  56. elink_cl45_write(sc, phy,
  57. @@ -10155,6 +10160,22 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  58. elink_cl45_read(sc, phy,
  59. MDIO_PMA_DEVAD, MDIO_PMA_REG_10G_CTRL2, &tmp1);
  60. ELINK_DEBUG_P1(sc, "1.7 = 0x%x\n", tmp1);
  61. + if ((phy->req_line_speed == ELINK_SPEED_2500) &&
  62. + (phy->speed_cap_mask &
  63. + (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G |
  64. + PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))) {
  65. + elink_cl45_read_and_write(sc, phy,
  66. + MDIO_AN_DEVAD,
  67. + MDIO_AN_REG_8727_MISC_CTRL2,
  68. + ~(1<<5));
  69. + elink_cl45_write(sc, phy,
  70. + MDIO_AN_DEVAD,
  71. + MDIO_AN_REG_8727_MISC_CTRL1, 0x0010);
  72. + } else {
  73. + elink_cl45_write(sc, phy,
  74. + MDIO_AN_DEVAD,
  75. + MDIO_AN_REG_8727_MISC_CTRL1, 0x001C);
  76. + }
  77. /* Power down the XAUI until link is up in case of dual-media
  78. * and 1G
  79. */
  80. @@ -10176,7 +10197,7 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  81.  
  82. ELINK_DEBUG_P0(sc, "Setting 1G clause37\n");
  83. elink_cl45_write(sc, phy,
  84. - MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL, 0);
  85. + MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL2, 0);
  86. elink_cl45_write(sc, phy,
  87. MDIO_AN_DEVAD, MDIO_AN_REG_CL37_AN, 0x1300);
  88. } else {
  89. @@ -10184,8 +10205,11 @@ static void elink_8727_config_speed(struct elink_phy *phy,
  90. * registers although it is default
  91. */
  92. elink_cl45_write(sc, phy,
  93. - MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL,
  94. + MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL2,
  95. 0x0020);
  96. + elink_cl45_write(sc, phy,
  97. + MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL1,
  98. + 0x001C);
  99. elink_cl45_write(sc, phy,
  100. MDIO_AN_DEVAD, MDIO_AN_REG_CL37_AN, 0x0100);
  101. elink_cl45_write(sc, phy,
  102. @@ -10477,6 +10501,11 @@ static uint8_t elink_8727_read_status(struct elink_phy *phy,
  103. vars->line_speed = ELINK_SPEED_10000;
  104. ELINK_DEBUG_P1(sc, "port %x: External link up in 10G\n",
  105. params->port);
  106. + } else if ((link_status & (1<<1)) && (!(link_status & (1<<14)))) {
  107. + link_up = 1;
  108. + vars->line_speed = ELINK_SPEED_2500;
  109. + ELINK_DEBUG_P1(sc, "port %x: External link up in 2.5G\n",
  110. + params->port);
  111. } else if ((link_status & (1<<0)) && (!(link_status & (1<<13)))) {
  112. link_up = 1;
  113. vars->line_speed = ELINK_SPEED_1000;
  114. @@ -12716,6 +12745,7 @@ static const struct elink_phy phy_8727 = {
  115. .tx_preemphasis = {0xffff, 0xffff, 0xffff, 0xffff},
  116. .mdio_ctrl = 0,
  117. .supported = (ELINK_SUPPORTED_10000baseT_Full |
  118. + ELINK_SUPPORTED_2500baseX_Full |
  119. ELINK_SUPPORTED_1000baseT_Full |
  120. ELINK_SUPPORTED_FIBRE |
  121. ELINK_SUPPORTED_Pause |
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement