1 // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
3 * Copyright (C) 2020, STMicroelectronics - All Rights Reserved
9 #include <asm/arch/stm32prog.h>
10 #include "stm32prog.h"
12 struct stm32prog_data *stm32prog_data;
14 static int do_stm32prog(cmd_tbl_t *cmdtp, int flag, int argc,
19 enum stm32prog_link_t link = LINK_UNDEFINED;
21 struct stm32prog_data *data;
23 if (argc < 3 || argc > 5)
26 if (!strcmp(argv[1], "usb"))
29 if (link == LINK_UNDEFINED) {
30 pr_err("not supported link=%s\n", argv[1]);
33 dev = (int)simple_strtoul(argv[2], NULL, 10);
35 addr = STM32_DDR_BASE;
38 addr = simple_strtoul(argv[3], NULL, 16);
40 return CMD_RET_FAILURE;
43 size = simple_strtoul(argv[4], NULL, 16);
45 data = (struct stm32prog_data *)malloc(sizeof(*data));
48 pr_err("Alloc failed.");
49 return CMD_RET_FAILURE;
51 stm32prog_data = data;
53 ret = stm32prog_init(data, addr, size);
55 printf("Invalid or missing layout file.");
57 /* prepare DFU for device read/write */
58 ret = stm32prog_dfu_init(data);
64 reset = stm32prog_usb_loop(data, dev);
70 stm32prog_clean(data);
72 stm32prog_data = NULL;
74 puts("Download done\n");
77 run_command("reset", 0);
80 return CMD_RET_SUCCESS;
83 stm32prog_clean(data);
85 stm32prog_data = NULL;
87 return CMD_RET_FAILURE;
90 U_BOOT_CMD(stm32prog, 5, 0, do_stm32prog,
91 "<link> <dev> [<addr>] [<size>]\n"
92 "start communication with tools STM32Cubeprogrammer on <link> with Flashlayout at <addr>",
94 "<dev> = device instance\n"
95 "<addr> = address of flashlayout\n"
96 "<size> = size of flashlayout\n"
99 bool stm32prog_get_tee_partitions(void)
102 return stm32prog_data->tee_detected;
107 bool stm32prog_get_fsbl_nor(void)
110 return stm32prog_data->fsbl_nor_detected;