1 // SPDX-License-Identifier: GPL-2.0+
3 * (C) Copyright 2014 - 2018 Xilinx, Inc.
4 * Michal Simek <michal.simek@xilinx.com>
11 #include <asm/arch/hardware.h>
12 #include <dm/device.h>
13 #include <dm/uclass.h>
15 DECLARE_GLOBAL_DATA_PTR;
19 printf("EL Level:\tEL%d\n", current_el());
24 int board_early_init_r(void)
28 if (current_el() != 3)
31 debug("iou_switch ctrl div0 %x\n",
32 readl(&crlapb_base->iou_switch_ctrl));
34 writel(IOU_SWITCH_CTRL_CLKACT_BIT |
35 (CONFIG_IOU_SWITCH_DIVISOR0 << IOU_SWITCH_CTRL_DIVISOR0_SHIFT),
36 &crlapb_base->iou_switch_ctrl);
38 /* Global timer init - Program time stamp reference clk */
39 val = readl(&crlapb_base->timestamp_ref_ctrl);
40 val |= CRL_APB_TIMESTAMP_REF_CTRL_CLKACT_BIT;
41 writel(val, &crlapb_base->timestamp_ref_ctrl);
43 debug("ref ctrl 0x%x\n",
44 readl(&crlapb_base->timestamp_ref_ctrl));
46 /* Clear reset of timestamp reg */
47 writel(0, &crlapb_base->rst_timestamp);
50 * Program freq register in System counter and
51 * enable system counter.
53 writel(COUNTER_FREQUENCY,
54 &iou_scntr_secure->base_frequency_id_register);
56 debug("counter val 0x%x\n",
57 readl(&iou_scntr_secure->base_frequency_id_register));
59 writel(IOU_SCNTRS_CONTROL_EN,
60 &iou_scntr_secure->counter_control_register);
62 debug("scntrs control 0x%x\n",
63 readl(&iou_scntr_secure->counter_control_register));
64 debug("timer 0x%llx\n", get_ticks());
65 debug("timer 0x%llx\n", get_ticks());
70 int board_late_init(void)
77 int env_targets_len = 0;
82 if (!(gd->flags & GD_FLG_ENV_DEFAULT)) {
83 debug("Saved variables - Skipping\n");
87 reg = readl(&crp_base->boot_mode_usr);
89 if (reg >> BOOT_MODE_ALT_SHIFT)
90 reg >>= BOOT_MODE_ALT_SHIFT;
92 bootmode = reg & BOOT_MODES_MASK;
100 case QSPI_MODE_24BIT:
101 puts("QSPI_MODE_24\n");
104 case QSPI_MODE_32BIT:
105 puts("QSPI_MODE_32\n");
118 if (uclass_get_device_by_name(UCLASS_MMC,
119 "sdhci@f1040000", &dev)) {
120 puts("Boot from SD0 but without SD0 enabled!\n");
123 debug("mmc0 device found at %p, seq %d\n", dev, dev->seq);
133 if (uclass_get_device_by_name(UCLASS_MMC,
134 "sdhci@f1050000", &dev)) {
135 puts("Boot from SD1 but without SD1 enabled!\n");
138 debug("mmc1 device found at %p, seq %d\n", dev, dev->seq);
145 printf("Invalid Boot Mode:0x%x\n", bootmode);
150 bootseq_len = snprintf(NULL, 0, "%i", bootseq);
151 debug("Bootseq len: %x\n", bootseq_len);
155 * One terminating char + one byte for space between mode
156 * and default boot_targets
158 env_targets = env_get("boot_targets");
160 env_targets_len = strlen(env_targets);
162 new_targets = calloc(1, strlen(mode) + env_targets_len + 2 +
168 sprintf(new_targets, "%s%x %s", mode, bootseq,
169 env_targets ? env_targets : "");
171 sprintf(new_targets, "%s %s", mode,
172 env_targets ? env_targets : "");
174 env_set("boot_targets", new_targets);
179 int dram_init_banksize(void)
181 fdtdec_setup_memory_banksize();
188 if (fdtdec_setup_mem_size_base() != 0)
194 void reset_cpu(ulong addr)