diff options
Diffstat (limited to 'arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c')
-rw-r--r-- | arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c index 0967bbc11a..cc303214cf 100644 --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c @@ -272,6 +272,9 @@ static int parse_ip(struct stm32prog_data *data, } else if (!strncmp(p, "spi-nand", 8)) { part->target = STM32PROG_SPI_NAND; len = 8; + } else if (!strncmp(p, "ram", 3)) { + part->target = STM32PROG_RAM; + len = 0; } else { result = -EINVAL; } @@ -610,6 +613,11 @@ static int init_device(struct stm32prog_data *data, dev->mtd = mtd; break; #endif + case STM32PROG_RAM: + first_addr = gd->bd->bi_dram[0].start; + last_addr = first_addr + gd->bd->bi_dram[0].size; + dev->erase_size = 1; + break; default: stm32prog_err("unknown device type = %d", dev->target); return -ENODEV; @@ -1022,7 +1030,11 @@ static int stm32prog_alt_add(struct stm32prog_data *data, part->name, part->id, size, multiplier, type); - if (part->part_type == RAW_IMAGE) { + if (part->target == STM32PROG_RAM) { + offset += snprintf(buf + offset, ALT_BUF_LEN - offset, + "ram 0x%llx 0x%llx", + part->addr, part->size); + } else if (part->part_type == RAW_IMAGE) { u64 dfu_size; if (part->dev->target == STM32PROG_MMC) @@ -1073,6 +1085,10 @@ static int stm32prog_alt_add(struct stm32prog_data *data, get_mtd_by_target(devstr, part->target, part->dev_id); break; #endif + case STM32PROG_RAM: + sprintf(dfustr, "ram"); + sprintf(devstr, "0"); + break; default: stm32prog_err("invalid target: %d", part->target); return -ENODEV; @@ -1440,6 +1456,13 @@ static void stm32prog_end_phase(struct stm32prog_data *data) if (!data->cur_part) return; + if (data->cur_part->target == STM32PROG_RAM) { + if (data->cur_part->part_type == PART_SYSTEM) + data->uimage = data->cur_part->addr; + if (data->cur_part->part_type == PART_FILESYSTEM) + data->dtb = data->cur_part->addr; + } + if (CONFIG_IS_ENABLED(MMC) && data->cur_part->part_id < 0) { char cmdbuf[60]; @@ -1569,6 +1592,10 @@ static int part_delete(struct stm32prog_data *data, } break; #endif + case STM32PROG_RAM: + printf("on ram: "); + memset((void *)(uintptr_t)part->addr, 0, (size_t)part->size); + break; default: ret = -1; stm32prog_err("%s (0x%x): erase invalid", part->name, part->id); |