p4080_serdes.c 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright 2009-2010 Freescale Semiconductor, Inc.
  3. *
  4. * See file CREDITS for list of people who contributed to this
  5. * project.
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License as
  9. * published by the Free Software Foundation; either version 2 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  20. * MA 02111-1307 USA
  21. */
  22. #include <common.h>
  23. #include <asm/io.h>
  24. #include <asm/fsl_serdes.h>
  25. #include <asm/processor.h>
  26. #include <asm/io.h>
  27. #include "fsl_corenet_serdes.h"
  28. static u8 serdes_cfg_tbl[][SRDS_MAX_LANES] = {
  29. [0x2] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1,
  30. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  31. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  32. [0x5] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
  33. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  34. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  35. [0x8] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2,
  36. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  37. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  38. [0xd] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, SGMII_FM2_DTSEC3,
  39. SGMII_FM2_DTSEC4, AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  40. XAUI_FM2, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  41. [0xe] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, SGMII_FM2_DTSEC3,
  42. SGMII_FM2_DTSEC4, AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  43. XAUI_FM2, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  44. [0xf] = {PCIE1, PCIE1, PCIE1, PCIE1, SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
  45. SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4, AURORA, AURORA, XAUI_FM2,
  46. XAUI_FM2, XAUI_FM2, XAUI_FM2, NONE, NONE, NONE, NONE},
  47. [0x10] = {PCIE1, PCIE1, PCIE3, PCIE3, SGMII_FM2_DTSEC1,
  48. SGMII_FM2_DTSEC2, SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4,
  49. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  50. NONE, NONE, NONE, NONE},
  51. [0x13] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
  52. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  53. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  54. [0x16] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
  55. AURORA, AURORA, SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
  56. SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4, SGMII_FM1_DTSEC1,
  57. SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4},
  58. [0x19] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
  59. AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3, SGMII_FM1_DTSEC1,
  60. SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4},
  61. [0x1d] = {PCIE1, PCIE1, PCIE3, PCIE3, NONE, SRIO2, NONE, SRIO1,
  62. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  63. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  64. [0x22] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1,
  65. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  66. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  67. [0x25] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO1, SRIO1, SRIO1, SRIO1,
  68. AURORA, AURORA, XAUI_FM2, XAUI_FM2, XAUI_FM2, XAUI_FM2,
  69. XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1},
  70. };
  71. #ifdef CONFIG_SYS_P4080_ERRATUM_SERDES8
  72. uint16_t srds_lpd_b[SRDS_MAX_BANK];
  73. #endif
  74. enum srds_prtcl serdes_get_prtcl(int cfg, int lane)
  75. {
  76. if (!serdes_lane_enabled(lane))
  77. return NONE;
  78. return serdes_cfg_tbl[cfg][lane];
  79. }
  80. int is_serdes_prtcl_valid(u32 prtcl) {
  81. int i;
  82. if (prtcl > ARRAY_SIZE(serdes_cfg_tbl))
  83. return 0;
  84. for (i = 0; i < SRDS_MAX_LANES; i++) {
  85. if (serdes_cfg_tbl[prtcl][i] != NONE)
  86. return 1;
  87. }
  88. return 0;
  89. }