Commit 3c7b4c359d11e65ea262dac283114b72f08d4625

Authored by Siva Durga Prasad Paladugu
Committed by Michal Simek
1 parent 90e97ab31e

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 }