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"))
28 else if (!strcmp(argv[1], "serial"))
31 if (link == LINK_UNDEFINED) {
32 pr_err("not supported link=%s\n", argv[1]);
36 dev = (int)simple_strtoul(argv[2], NULL, 10);
38 addr = STM32_DDR_BASE;
41 addr = simple_strtoul(argv[3], NULL, 16);
43 return CMD_RET_FAILURE;
46 size = simple_strtoul(argv[4], NULL, 16);
48 data = (struct stm32prog_data *)malloc(sizeof(*data));
51 pr_err("Alloc failed.");
52 return CMD_RET_FAILURE;
54 stm32prog_data = data;
56 ret = stm32prog_init(data, addr, size);
58 printf("Invalid or missing layout file.");
60 /* prepare DFU for device read/write */
61 ret = stm32prog_dfu_init(data);
67 ret = stm32prog_serial_init(data, dev);
70 reset = stm32prog_serial_loop(data);
73 reset = stm32prog_usb_loop(data, dev);
79 stm32prog_clean(data);
81 stm32prog_data = NULL;
83 puts("Download done\n");
86 run_command("reset", 0);
89 return CMD_RET_SUCCESS;
92 stm32prog_clean(data);
94 stm32prog_data = NULL;
96 return CMD_RET_FAILURE;
99 U_BOOT_CMD(stm32prog, 5, 0, do_stm32prog,
100 "<link> <dev> [<addr>] [<size>]\n"
101 "start communication with tools STM32Cubeprogrammer on <link> with Flashlayout at <addr>",
102 "<link> = serial|usb\n"
103 "<dev> = device instance\n"
104 "<addr> = address of flashlayout\n"
105 "<size> = size of flashlayout\n"
108 bool stm32prog_get_tee_partitions(void)
111 return stm32prog_data->tee_detected;
116 bool stm32prog_get_fsbl_nor(void)
119 return stm32prog_data->fsbl_nor_detected;