From 91ca9ba75bc4d22c6ecce9c71ef484aa7bd5ee0e Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Thu, 23 Jul 2015 16:39:56 +0300 Subject: [PATCH] Make sure WDT is re-enabled in eboot even in case of error (#517) --- bootloaders/eboot/eboot.c | 52 +++++++++++++++++------------------- bootloaders/eboot/eboot.elf | Bin 10083 -> 10083 bytes 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/bootloaders/eboot/eboot.c b/bootloaders/eboot/eboot.c index f3e6d061a..3c0bc1cce 100644 --- a/bootloaders/eboot/eboot.c +++ b/bootloaders/eboot/eboot.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015 Ivan Grokhotkov. All rights reserved. +/* Copyright (c) 2015 Ivan Grokhotkov. All rights reserved. * This file is part of eboot bootloader. * * Redistribution and use is permitted according to the conditions of the @@ -26,10 +26,10 @@ int load_app_from_flash_raw(const uint32_t flash_addr) return 1; } pos += sizeof(image_header); - + for (uint32_t section_index = 0; - section_index < image_header.num_segments; + section_index < image_header.num_segments; ++section_index) { section_header_t section_header = {0}; @@ -74,8 +74,8 @@ int load_app_from_flash_raw(const uint32_t flash_addr) -int copy_raw(const uint32_t src_addr, - const uint32_t dst_addr, +int copy_raw(const uint32_t src_addr, + const uint32_t dst_addr, const uint32_t size) { // require regions to be aligned @@ -90,25 +90,21 @@ int copy_raw(const uint32_t src_addr, uint32_t saddr = src_addr; uint32_t daddr = dst_addr; - ets_wdt_disable(); - while (left) { - if (SPIEraseSector(daddr/buffer_size)) { - return 2; - } - if (SPIRead(saddr, buffer, buffer_size)) { - return 3; - } - if (SPIWrite(daddr, buffer, buffer_size)) { - return 4; - } - saddr += buffer_size; - daddr += buffer_size; - left -= buffer_size; + if (SPIEraseSector(daddr/buffer_size)) { + return 2; + } + if (SPIRead(saddr, buffer, buffer_size)) { + return 3; + } + if (SPIWrite(daddr, buffer, buffer_size)) { + return 4; + } + saddr += buffer_size; + daddr += buffer_size; + left -= buffer_size; } - ets_wdt_enable(); - return 0; } @@ -127,10 +123,12 @@ void main() ets_putc('@'); } eboot_command_clear(); - + if (cmd.action == ACTION_COPY_RAW) { ets_putc('c'); ets_putc('p'); ets_putc(':'); + ets_wdt_disable(); res = copy_raw(cmd.args[0], cmd.args[1], cmd.args[2]); + ets_wdt_enable(); ets_putc('0'+res); ets_putc('\n'); if (res == 0) { cmd.action = ACTION_LOAD_APP; @@ -139,14 +137,14 @@ void main() } if (cmd.action == ACTION_LOAD_APP) { - ets_putc('l'); ets_putc('d'); ets_putc('\n'); - res = load_app_from_flash_raw(cmd.args[0]); - //we will get to this only on load fail - ets_putc('e'); ets_putc(':'); ets_putc('0'+res); ets_putc('\n'); + ets_putc('l'); ets_putc('d'); ets_putc('\n'); + res = load_app_from_flash_raw(cmd.args[0]); + //we will get to this only on load fail + ets_putc('e'); ets_putc(':'); ets_putc('0'+res); ets_putc('\n'); } if (res) { - SWRST; + SWRST; } while(true){} diff --git a/bootloaders/eboot/eboot.elf b/bootloaders/eboot/eboot.elf index 0e5510f693bbc95c993df141d36fc89631333dbc..7fb4f5f93ab9814226b346dd2cb8adc101a861c9 100755 GIT binary patch delta 1406 zcmZXUUu+ar6vpqFotf>nQ)YH)5iF&%Q)+ibnRbgZO=@;nEv!)cClX$)bg_UjQj3LX zjHXLWz(kD!Zb%I2!-f}MHTw!-OH5;o4~>TSq(SI|rZ3wS6^y!mXF8iSVUoG?yWe-_ zoO|xx*?Xh+MlWt9|I)S}cWl2ad~s0tBe+FW6oe4xe%&SfYM<~+Zg~?uMal(N4k@n` z)2_Y+cFOg#Bq=#x>`r%i zZt!$HGnKWwD`_)j9?AS|D4m-+O(nVcRxKmUay#opnm{G{@DJNQ@{n%Q(CfD?XVRb4t_nCJRpKG`+zv zbd6r;C!ORmmG#E*Q`&F!v`N!}U^=(@=qRIcjV9|w4l=)cjf{6 zrQ`H+7(2nwRQCLB-o1e_y>~i+rTtulMb-frE-( zuZzUu^24wGrL^3t+B6^s)jajc57k*}mNoS-{UHx%J+vxkv;q6)|BOiRUh<~~b(#wDt zLve=MPQ$`s5FL+N=U|P)diD{^x(%yk7+#o7&NVw&{*~rC7~g4mA5GL+GH9a5*iR98 z%6OUz@~Yv{NAd^5p-TBrqo{PQD##FC+woMy7)q&u;*~F(JCvv@C_*t!-iSXRqZrS$ z*cNFf_OEYl3f$he;KxG!7cel;nKy^}{S7*E zLyw|a>{$@s1l}9QXTd?+oKt z%1a%))%Z$iTVkz#7FI=Swo5DJXKa&j#J2P?3Br{o)HZ@TAhMMxU4 z9}3#6H!YO*BIXb%C6vLN{sB{HFItQx^{P;46=_ir^Gtl`PLXcDFVbR2q;vSYad4Fw7eZVv?e}WwWzx(ZmDJuk zB4;&PEH4W&_ySxJiziaF!1K-V({4+eJ49kEwkMmSkJ*6KJy^?9{F#)oG9QK2Z(7u( zB4^aU+Rma73$8m~x2#RHuTSiA)}qo4%UN+G{zIc!l9$#y;+EEtlI|Rx<$G?B$Z0gg z_+cv+aw^g<-IH{N1?irp(+tV0G{x6gDlwcL8z_}K?3gXT@1!wSt*dmxckLf1FHNFB zY`7zZO4?!RPScxgNw+|wLH3xRO%2>a73oe-N=uoR{&H8Qyc`wT zP}d<<4)xNjs#nj_UNxuBQds?|kJ5(fH`?eAb;jsvzWbjQLb^|Dxl^HC_TOER>rTz8 z`qs!%g9@AbjgfUH{YdqhJ(N^4W;@+fix@Z5cV@d$*l^P0>bluVE2^d{NsqmuDnrAK zBjL}A@A-EMysstu+|)aQ&bMI_x^i#MJ~>kmbipE?KAfwcMvFRlA|yn^d8qUONAcS0 zFT>gfZhGFDhjkd%YtLEEudu2I;04vxx$P3mU)+8V8l);UZM{MT z^|_UxPt-4#q!sUpRn&Gp)=(k%HRGy@VYJeHCFw2LyR{laP)G}#7%6P3uj~5l%1no5 zgd0^Ta)_$EqmidXNiSdjrBOVE0uuk9)|@oz3Etk%;1>h^cQDY`nRf*G(=9r4MYpk8 zJTpJPTRRVVF$xk)n6 zbrfZ0ogY(fOP;wN8rK;IR~9z`K8XIl@dYOQU32Iwa5UhXV4%Nh<|vpOY;4h)cLsVb zjv&xqD02qPHAlckz{j^_j*nte6Bv^f1H0j~d;mH(Td3#(cL({EijF+<-XLG{ZZsXx z>q>#`h_&*&uvU~2jZ?|%joO4GH_&no$Ip;^8h8V5BM`we)o}*=FGcmqYxs2jkxf+a I8d~%E|5<-G)c^nh