X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=blobdiff_plain;f=common%2Fcmd_bootce.c;h=7103b7f898a238888810eb160991859db770a36b;hp=725992e38cdc2c6d1a043c7eda1e26a624faa377;hb=061e8774d10136f9291e743bbd923e73bda7e95e;hpb=bb2f8e9d9b632c3f8f4b65c7669ef1626cc03154 diff --git a/common/cmd_bootce.c b/common/cmd_bootce.c index 725992e38c..7103b7f898 100644 --- a/common/cmd_bootce.c +++ b/common/cmd_bootce.c @@ -52,7 +52,7 @@ DECLARE_GLOBAL_DATA_PTR; static ce_bin __attribute__ ((aligned (32))) g_bin; static ce_net __attribute__ ((aligned (32))) g_net; -static IPaddr_t server_ip; +static struct in_addr server_ip; static void ce_init_bin(ce_bin *bin, unsigned char *dataBuffer) { @@ -133,33 +133,24 @@ static void ce_setup_std_drv_globals(ce_std_driver_globals *std_drv_glb) snprintf(std_drv_glb->deviceId, sizeof(std_drv_glb->deviceId), "Triton%02X", eth_get_dev()->enetaddr[5]); - NetCopyIP(&std_drv_glb->kitl.ipAddress, &NetOurIP); - std_drv_glb->kitl.ipMask = getenv_IPaddr("netmask"); - std_drv_glb->kitl.ipRoute = getenv_IPaddr("gatewayip"); + net_copy_ip(&std_drv_glb->kitl.ipAddress, &net_ip); + std_drv_glb->kitl.ipMask = getenv_ip("netmask").s_addr; + std_drv_glb->kitl.ipRoute = getenv_ip("gatewayip").s_addr; if (mtdparts) { strncpy(std_drv_glb->mtdparts, mtdparts, max_len); std_drv_glb->mtdparts[max_len - 1] = '\0'; } else { - printf("Failed to get mtdparts environment variable\n"); + if (CONFIG_IS_ENABLED(CMD_MTDPARTS)) + printf("Failed to get mtdparts environment variable\n"); } } -static void ce_prepare_run_bin(ce_bin *bin) +static void ce_init_drv_globals(void) { struct ce_magic *ce_magic = (void *)CONFIG_SYS_SDRAM_BASE + 0x160; ce_std_driver_globals *std_drv_glb = &ce_magic->drv_glb; - /* Clear os RAM area (if needed) */ - if (bin->edbgConfig.flags & EDBG_FL_CLEANBOOT) { - debug("cleaning memory from %p to %p\n", - bin->eRamStart, bin->eRamStart + bin->eRamLen); - - printf("Preparing clean boot ... "); - memset(bin->eRamStart, 0, bin->eRamLen); - printf("ok\n"); - } - debug("Copying CE MAGIC from %p to %p..%p\n", &ce_magic_template, ce_magic, (void *)ce_magic + sizeof(*ce_magic) - 1); @@ -170,6 +161,21 @@ static void ce_prepare_run_bin(ce_bin *bin) strlen(std_drv_glb->mtdparts) + 1; ce_dump_block(ce_magic, offsetof(struct ce_magic, drv_glb) + ce_magic->size); +} + +static void ce_prepare_run_bin(ce_bin *bin) +{ + /* Clear os RAM area (if needed) */ + if (bin->edbgConfig.flags & EDBG_FL_CLEANBOOT) { + debug("cleaning memory from %p to %p\n", + bin->eRamStart, bin->eRamStart + bin->eRamLen); + + printf("Preparing clean boot ... "); + memset(bin->eRamStart, 0, bin->eRamLen); + printf("ok\n"); + } + + ce_init_drv_globals(); /* * Make sure, all the above makes it into SDRAM because @@ -372,6 +378,10 @@ static int do_bootce(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) size_t image_size; if (argc > 1) { + if (strcmp(argv[1], "-i") == 0) { + ce_init_drv_globals(); + return CMD_RET_SUCCESS; + } addr = (void *)simple_strtoul(argv[1], NULL, 16); image_size = INT_MAX; /* actually we do not know the image size */ } else if (getenv("fileaddr") != NULL) { @@ -410,9 +420,12 @@ U_BOOT_CMD( bootce, 2, 0, do_bootce, "Boot a Windows CE image from RAM", "[addr]\n" - "\taddr\t\tboot image from address addr (default ${fileaddr})" + "\taddr\t\tboot image from address addr (default ${fileaddr})\n" + "or\n" + "\t-i\t\tinitialize the WinCE globals data structure (before loading a .nb0 image)" ); +#ifdef CONFIG_CMD_NAND static int ce_nand_load(ce_bin *bin, loff_t *offset, void *buf, size_t max_len) { int ret; @@ -540,6 +553,7 @@ U_BOOT_CMD( "\toff\t\t- flash offset (hex)\n" "\tpartition\t- partition name" ); +#endif static int ce_send_write_ack(ce_net *net) { @@ -604,9 +618,9 @@ static enum bootme_state ce_process_download(ce_net *net, ce_bin *bin) // Some diag output if (net->verbose) { printf("Locked Down download link, IP: %pI4\n", - &NetServerIP); + &net_server_ip); printf("Sending BOOTME request [%d] to %pI4\n", - net->seqNum, &NetServerIP); + net->seqNum, &net_server_ip); } // Lock down EShell download link @@ -692,7 +706,7 @@ static enum bootme_state ce_process_edbg(ce_net *net, ce_bin *bin) /* Some diag output */ if (net->verbose) { printf("Locked Down EDBG service link, IP: %pI4\n", - &NetServerIP); + &net_server_ip); } /* Lock down EDBG link */ @@ -824,7 +838,7 @@ static int ce_send_bootme(ce_net *net) } /* IP address from active config */ - NetCopyIP(&data->ipAddr, &NetOurIP); + net_copy_ip(&data->ipAddr, &net_ip); // Device name string (NULL terminated). Should include // platform and number based on Ether address (e.g. Odo42, CEPCLS2346, etc) @@ -900,8 +914,6 @@ static inline int ce_init_download_link(ce_net *net, ce_bin *bin, int verbose) return 0; } -#define UINT_MAX ~0UL - static inline int ce_download_file(ce_net *net, ulong timeout) { ulong start = get_timer_masked(); @@ -955,7 +967,7 @@ static int do_ceconnect(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[] int ret = 1; int i; - server_ip = 0; + server_ip.s_addr = 0; for (i = 1; i < argc; i++){ if (*argv[i] != '-') @@ -968,7 +980,7 @@ static int do_ceconnect(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[] timeout = simple_strtoul(argv[i], NULL, 0); if (timeout >= UINT_MAX / CONFIG_SYS_HZ) { - printf("Timeout value %lu out of range (max.: %lu)\n", + printf("Timeout value %lu out of range (max.: %u)\n", timeout, UINT_MAX / CONFIG_SYS_HZ - 1); return CMD_RET_USAGE; }