o4-imx6ull-nano.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // SPDX-License-Identifier: GPL-2.0+
  2. // Copyright (C) 2021 Oleh Kravchenko <oleg@kaa.org.ua>
  3. #include <asm/arch-mx6/clock.h>
  4. #include <asm/arch/sys_proto.h>
  5. #include <asm/global_data.h>
  6. #include <asm/mach-imx/boot_mode.h>
  7. #include <common.h>
  8. #include <env.h>
  9. DECLARE_GLOBAL_DATA_PTR;
  10. int dram_init(void)
  11. {
  12. gd->ram_size = imx_ddr_size();
  13. return 0;
  14. }
  15. int board_early_init_f(void)
  16. {
  17. return 0;
  18. }
  19. static int setup_fec_clock(void)
  20. {
  21. if (IS_ENABLED(CONFIG_FEC_MXC) && !IS_ENABLED(CONFIG_CLK_IMX6Q)) {
  22. struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
  23. int ret;
  24. /*
  25. * Use 50M anatop loopback REF_CLK1 for ENET1,
  26. * clear gpr1[13], set gpr1[17].
  27. */
  28. clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK,
  29. IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK);
  30. ret = enable_fec_anatop_clock(0, ENET_50MHZ);
  31. if (ret)
  32. return ret;
  33. /*
  34. * Use 50M anatop loopback REF_CLK2 for ENET2,
  35. * clear gpr1[14], set gpr1[18].
  36. */
  37. clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK,
  38. IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK);
  39. ret = enable_fec_anatop_clock(1, ENET_50MHZ);
  40. if (ret)
  41. return ret;
  42. enable_enet_clk(1);
  43. }
  44. return 0;
  45. }
  46. int board_init(void)
  47. {
  48. /* Address of boot parameters */
  49. gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
  50. return setup_fec_clock();
  51. }
  52. int board_late_init(void)
  53. {
  54. if (IS_ENABLED(CONFIG_CMD_BMODE))
  55. add_board_boot_modes(NULL);
  56. if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG)) {
  57. const char *model;
  58. model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
  59. if (model)
  60. env_set("board_name", model);
  61. }
  62. if (is_boot_from_usb()) {
  63. env_set("bootcmd", "run bootcmd_mfg");
  64. env_set("bootdelay", "0");
  65. }
  66. return 0;
  67. }