Commit 3c7b4c359d11e65ea262dac283114b72f08d4625
Committed by
Michal Simek
1 parent
90e97ab31e
Exists in
smarc_8mq_lf_v2020.04
and in
12 other branches
arm: zynq: Update boot_targets based on bootmode
Update boot_targets based on bootmode to run corresponding distroboot command first. Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Showing 1 changed file with 29 additions and 0 deletions Side-by-side Diff
board/xilinx/zynq/board.c
... | ... | @@ -8,6 +8,7 @@ |
8 | 8 | #include <dm/uclass.h> |
9 | 9 | #include <fdtdec.h> |
10 | 10 | #include <fpga.h> |
11 | +#include <malloc.h> | |
11 | 12 | #include <mmc.h> |
12 | 13 | #include <watchdog.h> |
13 | 14 | #include <wdt.h> |
14 | 15 | |
15 | 16 | |
16 | 17 | |
17 | 18 | |
18 | 19 | |
19 | 20 | |
20 | 21 | |
... | ... | @@ -53,26 +54,54 @@ |
53 | 54 | |
54 | 55 | int board_late_init(void) |
55 | 56 | { |
57 | + int env_targets_len = 0; | |
58 | + const char *mode; | |
59 | + char *new_targets; | |
60 | + char *env_targets; | |
61 | + | |
56 | 62 | switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) { |
57 | 63 | case ZYNQ_BM_QSPI: |
64 | + mode = "qspi"; | |
58 | 65 | env_set("modeboot", "qspiboot"); |
59 | 66 | break; |
60 | 67 | case ZYNQ_BM_NAND: |
68 | + mode = "nand"; | |
61 | 69 | env_set("modeboot", "nandboot"); |
62 | 70 | break; |
63 | 71 | case ZYNQ_BM_NOR: |
72 | + mode = "nor"; | |
64 | 73 | env_set("modeboot", "norboot"); |
65 | 74 | break; |
66 | 75 | case ZYNQ_BM_SD: |
76 | + mode = "mmc"; | |
67 | 77 | env_set("modeboot", "sdboot"); |
68 | 78 | break; |
69 | 79 | case ZYNQ_BM_JTAG: |
80 | + mode = "pxe dhcp"; | |
70 | 81 | env_set("modeboot", "jtagboot"); |
71 | 82 | break; |
72 | 83 | default: |
84 | + mode = ""; | |
73 | 85 | env_set("modeboot", ""); |
74 | 86 | break; |
75 | 87 | } |
88 | + | |
89 | + /* | |
90 | + * One terminating char + one byte for space between mode | |
91 | + * and default boot_targets | |
92 | + */ | |
93 | + env_targets = env_get("boot_targets"); | |
94 | + if (env_targets) | |
95 | + env_targets_len = strlen(env_targets); | |
96 | + | |
97 | + new_targets = calloc(1, strlen(mode) + env_targets_len + 2); | |
98 | + if (!new_targets) | |
99 | + return -ENOMEM; | |
100 | + | |
101 | + sprintf(new_targets, "%s %s", mode, | |
102 | + env_targets ? env_targets : ""); | |
103 | + | |
104 | + env_set("boot_targets", new_targets); | |
76 | 105 | |
77 | 106 | return 0; |
78 | 107 | } |