ls102xa_serdes.c 977 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2014 Freescale Semiconductor, Inc.
  4. */
  5. #include <common.h>
  6. #include <asm/arch/fsl_serdes.h>
  7. #include <asm/arch/immap_ls102xa.h>
  8. static u8 serdes_cfg_tbl[][SRDS_MAX_LANES] = {
  9. [0x00] = {PCIE1, PCIE1, PCIE1, PCIE1},
  10. [0x10] = {PCIE1, SATA1, PCIE2, PCIE2},
  11. [0x20] = {PCIE1, SGMII_TSEC1, PCIE2, SGMII_TSEC2},
  12. [0x30] = {PCIE1, SATA1, SGMII_TSEC1, SGMII_TSEC2},
  13. [0x40] = {PCIE1, PCIE1, SATA1, SGMII_TSEC2},
  14. [0x50] = {PCIE1, PCIE1, PCIE2, SGMII_TSEC2},
  15. [0x60] = {PCIE1, PCIE1, SGMII_TSEC1, SGMII_TSEC2},
  16. [0x70] = {PCIE1, SATA1, PCIE2, SGMII_TSEC2},
  17. [0x80] = {PCIE2, PCIE2, PCIE2, PCIE2},
  18. };
  19. enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
  20. {
  21. return serdes_cfg_tbl[cfg][lane];
  22. }
  23. int is_serdes_prtcl_valid(int serdes, u32 prtcl)
  24. {
  25. int i;
  26. if (prtcl >= ARRAY_SIZE(serdes_cfg_tbl))
  27. return 0;
  28. for (i = 0; i < SRDS_MAX_LANES; i++) {
  29. if (serdes_cfg_tbl[prtcl][i] != NONE)
  30. return 1;
  31. }
  32. return 0;
  33. }