#include <common.h>
#include <command.h>
#include <dfu.h>
+#include <asm/arch/stm32prog.h>
#include "stm32prog.h"
struct stm32prog_data *stm32prog_data;
"<addr> = address of flashlayout\n"
"<size> = size of flashlayout\n"
);
+
+bool stm32prog_get_tee_partitions(void)
+{
+ if (stm32prog_data)
+ return stm32prog_data->tee_detected;
+
+ return false;
+}
+
+bool stm32prog_get_fsbl_nor(void)
+{
+ if (stm32prog_data)
+ return stm32prog_data->fsbl_nor_detected;
+
+ return false;
+}
INIT_LIST_HEAD(&data->dev[j].part_list);
}
+ data->tee_detected = false;
+ data->fsbl_nor_detected = false;
for (i = 0; i < data->part_nb; i++) {
part = &data->part_array[i];
part->alt_id = -1;
stm32prog_err("Layout: too many device");
return -EINVAL;
}
+ switch (part->target) {
+ case STM32PROG_NOR:
+ if (!data->fsbl_nor_detected &&
+ !strncmp(part->name, "fsbl", 4))
+ data->fsbl_nor_detected = true;
+ /* fallthrough */
+ case STM32PROG_NAND:
+ case STM32PROG_SPI_NAND:
+ if (!data->tee_detected &&
+ !strncmp(part->name, "tee", 3))
+ data->tee_detected = true;
+ break;
+ default:
+ break;
+ }
part->dev = &data->dev[j];
if (!IS_SELECT(part))
part->dev->full_update = false;
struct stm32prog_dev_t dev[STM32PROG_MAX_DEV]; /* array of device */
int part_nb; /* nb of partition */
struct stm32prog_part_t *part_array; /* array of partition */
+ bool tee_detected;
+ bool fsbl_nor_detected;
/* command internal information */
unsigned int phase;
int stm32prog_read_medium_virt(struct dfu_entity *dfu, u64 offset,
void *buf, long *len);
int stm32prog_get_medium_size_virt(struct dfu_entity *dfu, u64 *size);
+
+bool stm32prog_get_tee_partitions(void);
+
+bool stm32prog_get_fsbl_nor(void);
*/
#include <common.h>
+#include <dfu.h>
#include <dm.h>
#include <env.h>
#include <env_internal.h>
#include <mtd.h>
#include <mtd_node.h>
#include <tee.h>
+#include <asm/arch/stm32prog.h>
#include <asm/arch/sys_proto.h>
#define MTDPARTS_LEN 256
static char parts[3 * MTDPARTS_LEN + 1];
static char ids[MTDIDS_LEN + 1];
static bool mtd_initialized;
- bool tee, nor, nand, spinand;
+ bool tee, nor, nand, spinand, serial;
if (mtd_initialized) {
*mtdids = ids;
nor = false;
nand = false;
spinand = false;
+ serial = false;
switch (get_bootmode() & TAMP_BOOT_DEVICE_MASK) {
case BOOT_SERIAL_UART:
case BOOT_SERIAL_USB:
+ serial = true;
+ if (CONFIG_IS_ENABLED(CMD_STM32PROG)) {
+ tee = stm32prog_get_tee_partitions();
+ nor = stm32prog_get_fsbl_nor();
+ }
+ nand = true;
+ spinand = true;
break;
case BOOT_FLASH_NAND:
nand = true;
break;
}
- if (CONFIG_IS_ENABLED(OPTEE) &&
+ if (!serial && CONFIG_IS_ENABLED(OPTEE) &&
tee_find_device(NULL, NULL, NULL, NULL))
tee = true;