board.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2016 Amarula Solutions B.V.
  4. * Copyright (C) 2016 Engicam S.r.l.
  5. * Author: Jagan Teki <jagan@amarulasolutions.com>
  6. */
  7. #include <common.h>
  8. #include <command.h>
  9. #include <env.h>
  10. #include <init.h>
  11. #include <mmc.h>
  12. #include <asm/arch/sys_proto.h>
  13. #include <watchdog.h>
  14. #include "board.h"
  15. DECLARE_GLOBAL_DATA_PTR;
  16. #ifdef CONFIG_ENV_IS_IN_MMC
  17. static void mmc_late_init(void)
  18. {
  19. char cmd[32];
  20. char mmcblk[32];
  21. u32 dev_no = mmc_get_env_dev();
  22. env_set_ulong("mmcdev", dev_no);
  23. /* Set mmcblk env */
  24. sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", dev_no);
  25. env_set("mmcroot", mmcblk);
  26. sprintf(cmd, "mmc dev %d", dev_no);
  27. run_command(cmd, 0);
  28. }
  29. #endif
  30. static void setenv_fdt_file(void)
  31. {
  32. const char *cmp_dtb = CONFIG_DEFAULT_DEVICE_TREE;
  33. if (!strcmp(cmp_dtb, "imx6q-icore")) {
  34. if (is_mx6dq())
  35. env_set("fdt_file", "imx6q-icore.dtb");
  36. else if (is_mx6dl() || is_mx6solo())
  37. env_set("fdt_file", "imx6dl-icore.dtb");
  38. } else if (!strcmp(cmp_dtb, "imx6q-icore-mipi")) {
  39. if (is_mx6dq())
  40. env_set("fdt_file", "imx6q-icore-mipi.dtb");
  41. else if (is_mx6dl() || is_mx6solo())
  42. env_set("fdt_file", "imx6dl-icore-mipi.dtb");
  43. } else if (!strcmp(cmp_dtb, "imx6q-icore-rqs")) {
  44. if (is_mx6dq())
  45. env_set("fdt_file", "imx6q-icore-rqs.dtb");
  46. else if (is_mx6dl() || is_mx6solo())
  47. env_set("fdt_file", "imx6dl-icore-rqs.dtb");
  48. } else if (!strcmp(cmp_dtb, "imx6ul-geam"))
  49. env_set("fdt_file", "imx6ul-geam.dtb");
  50. else if (!strcmp(cmp_dtb, "imx6ul-isiot-emmc"))
  51. env_set("fdt_file", "imx6ul-isiot-emmc.dtb");
  52. else if (!strcmp(cmp_dtb, "imx6ul-isiot-nand"))
  53. env_set("fdt_file", "imx6ul-isiot-nand.dtb");
  54. }
  55. int board_late_init(void)
  56. {
  57. switch ((imx6_src_get_boot_mode() & IMX6_BMODE_MASK) >>
  58. IMX6_BMODE_SHIFT) {
  59. case IMX6_BMODE_SD:
  60. case IMX6_BMODE_ESD:
  61. case IMX6_BMODE_MMC:
  62. case IMX6_BMODE_EMMC:
  63. #ifdef CONFIG_ENV_IS_IN_MMC
  64. mmc_late_init();
  65. #endif
  66. env_set("modeboot", "mmcboot");
  67. break;
  68. case IMX6_BMODE_NAND_MIN ... IMX6_BMODE_NAND_MAX:
  69. env_set("modeboot", "nandboot");
  70. break;
  71. default:
  72. env_set("modeboot", "");
  73. break;
  74. }
  75. if (is_mx6ul())
  76. env_set("console", "ttymxc0");
  77. else
  78. env_set("console", "ttymxc3");
  79. setenv_fdt_file();
  80. #ifdef CONFIG_HW_WATCHDOG
  81. hw_watchdog_init();
  82. #endif
  83. return 0;
  84. }
  85. int board_init(void)
  86. {
  87. /* Address of boot parameters */
  88. gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
  89. #ifdef CONFIG_NAND_MXS
  90. setup_gpmi_nand();
  91. #endif
  92. #ifdef CONFIG_VIDEO_IPUV3
  93. setup_display();
  94. #endif
  95. return 0;
  96. }
  97. int dram_init(void)
  98. {
  99. gd->ram_size = imx_ddr_size();
  100. return 0;
  101. }