#if (REDBOOT_IMAGE_SIZE != CYGBLD_REDBOOT_MIN_IMAGE_SIZE)
#error REDBOOT_IMAGE_SIZE != CYGBLD_REDBOOT_MIN_IMAGE_SIZE
-#endif
+#endif
RedBoot_config_option("Board specifics",
brd_specs,
- ALWAYS_ENABLED,
+ ALWAYS_ENABLED,
true,
CONFIG_INT,
0
);
#endif //CYGSEM_REDBOOT_FLASH_CONFIG
+char HAL_PLATFORM_EXTRA[60] = "MX31 ADS (Freescale i.MX31 based) PASS 1.0 [x32 DDR]";
+
static void runImg(int argc, char *argv[]);
RedBoot_cmd("run",
#if defined(CYGSEM_REDBOOT_FLASH_CONFIG) && defined(CYG_HAL_STARTUP_ROMRAM)
-RedBoot_cmd("romupdate",
- "Update Redboot with currently running image",
+RedBoot_cmd("romupdate",
+ "Update Redboot with currently running image",
"",
- romupdate
+ romupdate
);
extern int flash_program(void *_addr, void *_data, int len, void **err_addr);
{
void *err_addr, *base_addr;
int stat;
-
- if (IS_FIS_FROM_NAND()) {
- base_addr = (void*)MXC_NAND_BASE_DUMMY;
+ if (IS_FIS_FROM_MMC()) {
+ diag_printf("Updating ROM in MMC/SD flash\n");
+ base_addr = (void*)MXC_MMC_BASE_DUMMY;
+ /* Read the MBR from the card to RAM */
+ mmc_data_read((cyg_uint32*)(ram_end + 0x4), 0x3FC, base_addr);
+ diag_printf("Programming Redboot to MMC/SD flash\n");
+ mmc_data_write((cyg_uint32*)ram_end, CYGBLD_REDBOOT_MIN_IMAGE_SIZE, (cyg_uint32)base_addr);
+ return;
+ } else if (IS_FIS_FROM_NAND()) {
+ base_addr = (void*)0;
diag_printf("Updating ROM in NAND flash\n");
} else if (IS_FIS_FROM_NOR()) {
base_addr = (void*)BOARD_FLASH_START;
diag_printf("Updating ROM in NOR flash\n");
} else {
diag_printf("romupdate not supported\n");
- diag_printf("Use \"factive [NOR|NAND]\" to select either NOR or NAND flash\n");
+ diag_printf("Use \"factive [NOR|NAND|MMC]\" to select either MMC, NOR, NAND flash\n");
return;
}
// Erase area to be programmed
if ((stat = flash_erase((void *)base_addr,
CYGBLD_REDBOOT_MIN_IMAGE_SIZE,
(void **)&err_addr)) != 0) {
- diag_printf("Can't erase region at %p: %s\n",
+ diag_printf("Can't erase region at %p: %s\n",
err_addr, flash_errmsg(stat));
return;
}
// Now program it
if ((stat = flash_program((void *)base_addr, (void *)ram_end,
- CYGBLD_REDBOOT_MIN_IMAGE_SIZE,
+ CYGBLD_REDBOOT_MIN_IMAGE_SIZE,
(void **)&err_addr)) != 0) {
- diag_printf("Can't program region at %p: %s\n",
+ diag_printf("Can't program region at %p: %s\n",
err_addr, flash_errmsg(stat));
}
}
-RedBoot_cmd("factive",
- "Enable one flash media for Redboot",
- "[NOR | NAND]",
- factive
+
+RedBoot_cmd("factive",
+ "Enable one flash media for Redboot",
+ "[NOR | NAND | MMC]",
+ factive
);
void factive(int argc, char *argv[])
return;
#else
MXC_ASSERT_NAND_BOOT();
+#endif
+ } else if (strcasecmp(argv[1], "MMC") == 0) {
+#ifndef MXCFLASH_SELECT_MMC
+ diag_printf("Not supported\n");
+ return;
+#else
+ MXC_ASSERT_MMC_BOOT();
#endif
} else {
diag_printf("Invalid command: %s\n", argv[1]);