]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
f22651cf MS |
2 | /* |
3 | * (C) Copyright 2012 Michal Simek <[email protected]> | |
3e1b61de | 4 | * (C) Copyright 2013 - 2018 Xilinx, Inc. |
f22651cf MS |
5 | */ |
6 | ||
7 | #include <common.h> | |
5255932f | 8 | #include <init.h> |
e6cc3b25 | 9 | #include <dm/uclass.h> |
9fb625ce | 10 | #include <env.h> |
9e0e37ac | 11 | #include <fdtdec.h> |
5b73caff | 12 | #include <fpga.h> |
3c7b4c35 | 13 | #include <malloc.h> |
5b73caff | 14 | #include <mmc.h> |
0ecd14e6 | 15 | #include <watchdog.h> |
e6cc3b25 | 16 | #include <wdt.h> |
d5dae85f | 17 | #include <zynqpl.h> |
7193653e MS |
18 | #include <asm/arch/hardware.h> |
19 | #include <asm/arch/sys_proto.h> | |
80fdef12 | 20 | #include "../common/board.h" |
f22651cf MS |
21 | |
22 | DECLARE_GLOBAL_DATA_PTR; | |
23 | ||
24 | int board_init(void) | |
25 | { | |
f22651cf MS |
26 | return 0; |
27 | } | |
28 | ||
b3de9249 JT |
29 | int board_late_init(void) |
30 | { | |
3c7b4c35 SDPP |
31 | int env_targets_len = 0; |
32 | const char *mode; | |
33 | char *new_targets; | |
34 | char *env_targets; | |
35 | ||
b3de9249 | 36 | switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) { |
085b2b82 | 37 | case ZYNQ_BM_QSPI: |
3c7b4c35 | 38 | mode = "qspi"; |
382bee57 | 39 | env_set("modeboot", "qspiboot"); |
085b2b82 MS |
40 | break; |
41 | case ZYNQ_BM_NAND: | |
3c7b4c35 | 42 | mode = "nand"; |
382bee57 | 43 | env_set("modeboot", "nandboot"); |
085b2b82 | 44 | break; |
b3de9249 | 45 | case ZYNQ_BM_NOR: |
3c7b4c35 | 46 | mode = "nor"; |
382bee57 | 47 | env_set("modeboot", "norboot"); |
b3de9249 JT |
48 | break; |
49 | case ZYNQ_BM_SD: | |
7712fb1f | 50 | mode = "mmc0"; |
382bee57 | 51 | env_set("modeboot", "sdboot"); |
b3de9249 JT |
52 | break; |
53 | case ZYNQ_BM_JTAG: | |
c352f1e1 | 54 | mode = "jtag pxe dhcp"; |
382bee57 | 55 | env_set("modeboot", "jtagboot"); |
b3de9249 JT |
56 | break; |
57 | default: | |
3c7b4c35 | 58 | mode = ""; |
382bee57 | 59 | env_set("modeboot", ""); |
b3de9249 JT |
60 | break; |
61 | } | |
62 | ||
3c7b4c35 SDPP |
63 | /* |
64 | * One terminating char + one byte for space between mode | |
65 | * and default boot_targets | |
66 | */ | |
67 | env_targets = env_get("boot_targets"); | |
68 | if (env_targets) | |
69 | env_targets_len = strlen(env_targets); | |
70 | ||
71 | new_targets = calloc(1, strlen(mode) + env_targets_len + 2); | |
72 | if (!new_targets) | |
73 | return -ENOMEM; | |
74 | ||
75 | sprintf(new_targets, "%s %s", mode, | |
76 | env_targets ? env_targets : ""); | |
77 | ||
78 | env_set("boot_targets", new_targets); | |
79 | ||
80fdef12 | 80 | return board_late_init_xilinx(); |
b3de9249 | 81 | } |
f22651cf | 82 | |
758f29d0 | 83 | #if !defined(CONFIG_SYS_SDRAM_BASE) && !defined(CONFIG_SYS_SDRAM_SIZE) |
76b00aca | 84 | int dram_init_banksize(void) |
361a8799 | 85 | { |
da3f003b | 86 | return fdtdec_setup_memory_banksize(); |
361a8799 | 87 | } |
8a5db0ab | 88 | |
361a8799 TR |
89 | int dram_init(void) |
90 | { | |
12308b12 | 91 | if (fdtdec_setup_mem_size_base() != 0) |
de9bf1b5 | 92 | return -EINVAL; |
64b67fb2 | 93 | |
361a8799 | 94 | zynq_ddrc_init(); |
64b67fb2 | 95 | |
361a8799 | 96 | return 0; |
758f29d0 | 97 | } |
758f29d0 MS |
98 | #else |
99 | int dram_init(void) | |
100 | { | |
61dc92a2 MS |
101 | gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, |
102 | CONFIG_SYS_SDRAM_SIZE); | |
758f29d0 | 103 | |
148ba55c MS |
104 | zynq_ddrc_init(); |
105 | ||
f22651cf MS |
106 | return 0; |
107 | } | |
758f29d0 | 108 | #endif |