board.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * (C) Copyright 2012 Michal Simek <monstr@monstr.eu>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <netdev.h>
  8. #include <zynqpl.h>
  9. #include <asm/arch/hardware.h>
  10. #include <asm/arch/sys_proto.h>
  11. DECLARE_GLOBAL_DATA_PTR;
  12. /* Bootmode setting values */
  13. #define ZYNQ_BM_MASK 0x0F
  14. #define ZYNQ_BM_NOR 0x02
  15. #define ZYNQ_BM_SD 0x05
  16. #define ZYNQ_BM_JTAG 0x0
  17. #ifdef CONFIG_FPGA
  18. Xilinx_desc fpga;
  19. /* It can be done differently */
  20. Xilinx_desc fpga010 = XILINX_XC7Z010_DESC(0x10);
  21. Xilinx_desc fpga020 = XILINX_XC7Z020_DESC(0x20);
  22. Xilinx_desc fpga030 = XILINX_XC7Z030_DESC(0x30);
  23. Xilinx_desc fpga045 = XILINX_XC7Z045_DESC(0x45);
  24. Xilinx_desc fpga100 = XILINX_XC7Z100_DESC(0x100);
  25. #endif
  26. int board_init(void)
  27. {
  28. #ifdef CONFIG_FPGA
  29. u32 idcode;
  30. idcode = zynq_slcr_get_idcode();
  31. switch (idcode) {
  32. case XILINX_ZYNQ_7010:
  33. fpga = fpga010;
  34. break;
  35. case XILINX_ZYNQ_7020:
  36. fpga = fpga020;
  37. break;
  38. case XILINX_ZYNQ_7030:
  39. fpga = fpga030;
  40. break;
  41. case XILINX_ZYNQ_7045:
  42. fpga = fpga045;
  43. break;
  44. case XILINX_ZYNQ_7100:
  45. fpga = fpga100;
  46. break;
  47. }
  48. #endif
  49. icache_enable();
  50. #ifdef CONFIG_FPGA
  51. fpga_init();
  52. fpga_add(fpga_xilinx, &fpga);
  53. #endif
  54. return 0;
  55. }
  56. int board_late_init(void)
  57. {
  58. switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
  59. case ZYNQ_BM_NOR:
  60. setenv("modeboot", "norboot");
  61. break;
  62. case ZYNQ_BM_SD:
  63. setenv("modeboot", "sdboot");
  64. break;
  65. case ZYNQ_BM_JTAG:
  66. setenv("modeboot", "jtagboot");
  67. break;
  68. default:
  69. setenv("modeboot", "");
  70. break;
  71. }
  72. return 0;
  73. }
  74. #ifdef CONFIG_CMD_NET
  75. int board_eth_init(bd_t *bis)
  76. {
  77. u32 ret = 0;
  78. #ifdef CONFIG_XILINX_AXIEMAC
  79. ret |= xilinx_axiemac_initialize(bis, XILINX_AXIEMAC_BASEADDR,
  80. XILINX_AXIDMA_BASEADDR);
  81. #endif
  82. #ifdef CONFIG_XILINX_EMACLITE
  83. u32 txpp = 0;
  84. u32 rxpp = 0;
  85. # ifdef CONFIG_XILINX_EMACLITE_TX_PING_PONG
  86. txpp = 1;
  87. # endif
  88. # ifdef CONFIG_XILINX_EMACLITE_RX_PING_PONG
  89. rxpp = 1;
  90. # endif
  91. ret |= xilinx_emaclite_initialize(bis, XILINX_EMACLITE_BASEADDR,
  92. txpp, rxpp);
  93. #endif
  94. #if defined(CONFIG_ZYNQ_GEM)
  95. # if defined(CONFIG_ZYNQ_GEM0)
  96. ret |= zynq_gem_initialize(bis, ZYNQ_GEM_BASEADDR0,
  97. CONFIG_ZYNQ_GEM_PHY_ADDR0, 0);
  98. # endif
  99. # if defined(CONFIG_ZYNQ_GEM1)
  100. ret |= zynq_gem_initialize(bis, ZYNQ_GEM_BASEADDR1,
  101. CONFIG_ZYNQ_GEM_PHY_ADDR1, 0);
  102. # endif
  103. #endif
  104. return ret;
  105. }
  106. #endif
  107. #ifdef CONFIG_CMD_MMC
  108. int board_mmc_init(bd_t *bd)
  109. {
  110. int ret = 0;
  111. #if defined(CONFIG_ZYNQ_SDHCI)
  112. # if defined(CONFIG_ZYNQ_SDHCI0)
  113. ret = zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR0);
  114. # endif
  115. # if defined(CONFIG_ZYNQ_SDHCI1)
  116. ret |= zynq_sdhci_init(ZYNQ_SDHCI_BASEADDR1);
  117. # endif
  118. #endif
  119. return ret;
  120. }
  121. #endif
  122. int dram_init(void)
  123. {
  124. gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
  125. zynq_ddrc_init();
  126. return 0;
  127. }