board.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2012 Michal Simek <monstr@monstr.eu>
  4. * (C) Copyright 2013 - 2018 Xilinx, Inc.
  5. */
  6. #include <common.h>
  7. #include <init.h>
  8. #include <dm/uclass.h>
  9. #include <env.h>
  10. #include <fdtdec.h>
  11. #include <fpga.h>
  12. #include <malloc.h>
  13. #include <mmc.h>
  14. #include <watchdog.h>
  15. #include <wdt.h>
  16. #include <zynqpl.h>
  17. #include <asm/arch/hardware.h>
  18. #include <asm/arch/sys_proto.h>
  19. #include "../common/board.h"
  20. DECLARE_GLOBAL_DATA_PTR;
  21. int board_init(void)
  22. {
  23. return 0;
  24. }
  25. int board_late_init(void)
  26. {
  27. int env_targets_len = 0;
  28. const char *mode;
  29. char *new_targets;
  30. char *env_targets;
  31. switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
  32. case ZYNQ_BM_QSPI:
  33. mode = "qspi";
  34. env_set("modeboot", "qspiboot");
  35. break;
  36. case ZYNQ_BM_NAND:
  37. mode = "nand";
  38. env_set("modeboot", "nandboot");
  39. break;
  40. case ZYNQ_BM_NOR:
  41. mode = "nor";
  42. env_set("modeboot", "norboot");
  43. break;
  44. case ZYNQ_BM_SD:
  45. mode = "mmc0";
  46. env_set("modeboot", "sdboot");
  47. break;
  48. case ZYNQ_BM_JTAG:
  49. mode = "jtag pxe dhcp";
  50. env_set("modeboot", "jtagboot");
  51. break;
  52. default:
  53. mode = "";
  54. env_set("modeboot", "");
  55. break;
  56. }
  57. /*
  58. * One terminating char + one byte for space between mode
  59. * and default boot_targets
  60. */
  61. env_targets = env_get("boot_targets");
  62. if (env_targets)
  63. env_targets_len = strlen(env_targets);
  64. new_targets = calloc(1, strlen(mode) + env_targets_len + 2);
  65. if (!new_targets)
  66. return -ENOMEM;
  67. sprintf(new_targets, "%s %s", mode,
  68. env_targets ? env_targets : "");
  69. env_set("boot_targets", new_targets);
  70. return board_late_init_xilinx();
  71. }
  72. #if !defined(CONFIG_SYS_SDRAM_BASE) && !defined(CONFIG_SYS_SDRAM_SIZE)
  73. int dram_init_banksize(void)
  74. {
  75. return fdtdec_setup_memory_banksize();
  76. }
  77. int dram_init(void)
  78. {
  79. if (fdtdec_setup_mem_size_base() != 0)
  80. return -EINVAL;
  81. zynq_ddrc_init();
  82. return 0;
  83. }
  84. #else
  85. int dram_init(void)
  86. {
  87. gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
  88. CONFIG_SYS_SDRAM_SIZE);
  89. zynq_ddrc_init();
  90. return 0;
  91. }
  92. #endif