altera.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. * (C) Copyright 2003
  3. * Steven Scholz, imc Measurement & Control, steven.scholz@imc-berlin.de
  4. *
  5. * (C) Copyright 2002
  6. * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
  7. *
  8. * SPDX-License-Identifier: GPL-2.0+
  9. */
  10. /*
  11. * Altera FPGA support
  12. */
  13. #include <common.h>
  14. #include <ACEX1K.h>
  15. #include <stratixII.h>
  16. /* Define FPGA_DEBUG to 1 to get debug printf's */
  17. #define FPGA_DEBUG 0
  18. /* Local Static Functions */
  19. static int altera_validate (Altera_desc * desc, const char *fn);
  20. /* ------------------------------------------------------------------------- */
  21. int altera_load(Altera_desc *desc, const void *buf, size_t bsize)
  22. {
  23. int ret_val = FPGA_FAIL; /* assume a failure */
  24. if (!altera_validate (desc, (char *)__func__)) {
  25. printf("%s: Invalid device descriptor\n", __func__);
  26. } else {
  27. switch (desc->family) {
  28. case Altera_ACEX1K:
  29. case Altera_CYC2:
  30. #if defined(CONFIG_FPGA_ACEX1K)
  31. debug_cond(FPGA_DEBUG,
  32. "%s: Launching the ACEX1K Loader...\n",
  33. __func__);
  34. ret_val = ACEX1K_load (desc, buf, bsize);
  35. #elif defined(CONFIG_FPGA_CYCLON2)
  36. debug_cond(FPGA_DEBUG,
  37. "%s: Launching the CYCLONE II Loader...\n",
  38. __func__);
  39. ret_val = CYC2_load (desc, buf, bsize);
  40. #else
  41. printf("%s: No support for ACEX1K devices.\n",
  42. __func__);
  43. #endif
  44. break;
  45. #if defined(CONFIG_FPGA_STRATIX_II)
  46. case Altera_StratixII:
  47. debug_cond(FPGA_DEBUG,
  48. "%s: Launching the Stratix II Loader...\n",
  49. __func__);
  50. ret_val = StratixII_load (desc, buf, bsize);
  51. break;
  52. #endif
  53. default:
  54. printf("%s: Unsupported family type, %d\n",
  55. __func__, desc->family);
  56. }
  57. }
  58. return ret_val;
  59. }
  60. int altera_dump(Altera_desc *desc, const void *buf, size_t bsize)
  61. {
  62. int ret_val = FPGA_FAIL; /* assume a failure */
  63. if (!altera_validate (desc, (char *)__func__)) {
  64. printf("%s: Invalid device descriptor\n", __func__);
  65. } else {
  66. switch (desc->family) {
  67. case Altera_ACEX1K:
  68. #if defined(CONFIG_FPGA_ACEX)
  69. debug_cond(FPGA_DEBUG,
  70. "%s: Launching the ACEX1K Reader...\n",
  71. __func__);
  72. ret_val = ACEX1K_dump (desc, buf, bsize);
  73. #else
  74. printf("%s: No support for ACEX1K devices.\n",
  75. __func__);
  76. #endif
  77. break;
  78. #if defined(CONFIG_FPGA_STRATIX_II)
  79. case Altera_StratixII:
  80. debug_cond(FPGA_DEBUG,
  81. "%s: Launching the Stratix II Reader...\n",
  82. __func__);
  83. ret_val = StratixII_dump (desc, buf, bsize);
  84. break;
  85. #endif
  86. default:
  87. printf("%s: Unsupported family type, %d\n",
  88. __func__, desc->family);
  89. }
  90. }
  91. return ret_val;
  92. }
  93. int altera_info( Altera_desc *desc )
  94. {
  95. int ret_val = FPGA_FAIL;
  96. if (altera_validate (desc, (char *)__func__)) {
  97. printf("Family: \t");
  98. switch (desc->family) {
  99. case Altera_ACEX1K:
  100. printf("ACEX1K\n");
  101. break;
  102. case Altera_CYC2:
  103. printf("CYCLON II\n");
  104. break;
  105. case Altera_StratixII:
  106. printf("Stratix II\n");
  107. break;
  108. /* Add new family types here */
  109. default:
  110. printf("Unknown family type, %d\n", desc->family);
  111. }
  112. printf("Interface type:\t");
  113. switch (desc->iface) {
  114. case passive_serial:
  115. printf("Passive Serial (PS)\n");
  116. break;
  117. case passive_parallel_synchronous:
  118. printf("Passive Parallel Synchronous (PPS)\n");
  119. break;
  120. case passive_parallel_asynchronous:
  121. printf("Passive Parallel Asynchronous (PPA)\n");
  122. break;
  123. case passive_serial_asynchronous:
  124. printf("Passive Serial Asynchronous (PSA)\n");
  125. break;
  126. case altera_jtag_mode: /* Not used */
  127. printf("JTAG Mode\n");
  128. break;
  129. case fast_passive_parallel:
  130. printf("Fast Passive Parallel (FPP)\n");
  131. break;
  132. case fast_passive_parallel_security:
  133. printf
  134. ("Fast Passive Parallel with Security (FPPS) \n");
  135. break;
  136. /* Add new interface types here */
  137. default:
  138. printf("Unsupported interface type, %d\n", desc->iface);
  139. }
  140. printf("Device Size: \t%zd bytes\n"
  141. "Cookie: \t0x%x (%d)\n",
  142. desc->size, desc->cookie, desc->cookie);
  143. if (desc->iface_fns) {
  144. printf("Device Function Table @ 0x%p\n", desc->iface_fns);
  145. switch (desc->family) {
  146. case Altera_ACEX1K:
  147. case Altera_CYC2:
  148. #if defined(CONFIG_FPGA_ACEX1K)
  149. ACEX1K_info(desc);
  150. #elif defined(CONFIG_FPGA_CYCLON2)
  151. CYC2_info(desc);
  152. #else
  153. /* just in case */
  154. printf("%s: No support for ACEX1K devices.\n",
  155. __func__);
  156. #endif
  157. break;
  158. #if defined(CONFIG_FPGA_STRATIX_II)
  159. case Altera_StratixII:
  160. StratixII_info(desc);
  161. break;
  162. #endif
  163. /* Add new family types here */
  164. default:
  165. /* we don't need a message here - we give one up above */
  166. break;
  167. }
  168. } else {
  169. printf("No Device Function Table.\n");
  170. }
  171. ret_val = FPGA_SUCCESS;
  172. } else {
  173. printf("%s: Invalid device descriptor\n", __func__);
  174. }
  175. return ret_val;
  176. }
  177. /* ------------------------------------------------------------------------- */
  178. static int altera_validate(Altera_desc *desc, const char *fn)
  179. {
  180. if (!desc) {
  181. printf("%s: NULL descriptor!\n", fn);
  182. return false;
  183. }
  184. if ((desc->family < min_altera_type) ||
  185. (desc->family > max_altera_type)) {
  186. printf("%s: Invalid family type, %d\n", fn, desc->family);
  187. return false;
  188. }
  189. if ((desc->iface < min_altera_iface_type) ||
  190. (desc->iface > max_altera_iface_type)) {
  191. printf("%s: Invalid Interface type, %d\n", fn, desc->iface);
  192. return false;
  193. }
  194. if (!desc->size) {
  195. printf("%s: NULL part size\n", fn);
  196. return false;
  197. }
  198. return true;
  199. }
  200. /* ------------------------------------------------------------------------- */