X-Git-Url: https://git.karo-electronics.de/?p=karo-tx-redboot.git;a=blobdiff_plain;f=packages%2Fhal%2Farm%2Fmx31%2Fads%2Fv2_0%2Fsrc%2Fredboot_cmds.c;h=04035eead95e9a9d7346fe3f9473ebe6801dbe27;hp=35fd13c7b7cbefbb07d7aedf35ee50e7fd821b67;hb=7a4ea0a4d67744fd3f6b5f207d857005fc707b46;hpb=f0c1bd5d9f8457be4a43912a28ca2df207a7f5a4 diff --git a/packages/hal/arm/mx31/ads/v2_0/src/redboot_cmds.c b/packages/hal/arm/mx31/ads/v2_0/src/redboot_cmds.c index 35fd13c7..04035eea 100644 --- a/packages/hal/arm/mx31/ads/v2_0/src/redboot_cmds.c +++ b/packages/hal/arm/mx31/ads/v2_0/src/redboot_cmds.c @@ -49,17 +49,19 @@ #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", @@ -279,10 +281,10 @@ static void eefun(int argc,char *argv[]) #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); @@ -295,38 +297,46 @@ void romupdate(int argc, char *argv[]) { 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[]) @@ -351,6 +361,13 @@ 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]);