[openwrt/openwrt] tplink-safeloader: fix C7v5 factory flashing from vendor fw > v1.1.x

LEDE Commits lede-commits at lists.infradead.org
Thu May 6 08:58:31 BST 2021


ynezz pushed a commit to openwrt/openwrt.git, branch openwrt-19.07:
https://git.openwrt.org/a2728a806a055f38d7451b56681787e362b1eb25

commit a2728a806a055f38d7451b56681787e362b1eb25
Author: Petr Štetiar <ynezz at true.cz>
AuthorDate: Fri Apr 9 14:52:05 2021 +0200

    tplink-safeloader: fix C7v5 factory flashing from vendor fw > v1.1.x
    
    Currently it's not possible to flash factory images on devices shipped
    with vendor firmware versions 1.1.0 Build 20201120 rel. 50406 (published
    2020-12-22):
    
     (curFw_ver, newFw_ver) == (1.1, 1.0) [NM_Error](nm_checkSoftVer) 00848: Firmwave not supports, check failed.
     [NM_Error](nm_checkUpdateContent) 01084: software version dismatched
     [NM_Error](nm_buildUpgradeStruct) 01188: checkUpdateContent failed.
    
    They've even following note in release notes:
    
     Note: You will be unable to downgrade to the previous firmware version
           after updating this firmware.
    
    This version check in vendor firmware is implemented in
    /usr/bin/nvrammanager binary likely as following C code[1]:
    
     sscanf(buf, "%d.%d.%*s",&upd_fw_major, &upd_fw_minor);
     ...
     if (((int)upd_fw_major < (int)cur_fw_major) ||
         ((ret = 1, cur_fw_major == upd_fw_major && (upd_fw_minor < (int)cur_fw_minor)))) {
           ret = 0;
           printf("[NM_Error](%s) %05d: Firmwave not supports, check failed.\r\n\r\n","nm_checkSoftVer" ,0x350);
     }
     ...
     return ret;
    
    So in order to fix this and make it future proof it should be enough to
    ship our factory firmware images with major version 7 (lucky number).
    
    Tested on latest firmware version 1.1.2 Build 20210125 rel.37999:
    
     Firmwave supports, check OK.
      (curFw_ver, newFw_ver) == (1.1, 7.0) check firmware ok!
    
    Flashing back to vendor firmware
    c7v5_us-up-ver1-1-2-P1[20210125-rel37999]_2021-01-25_10.33.55.bin works
    as well:
    
     U-Boot 1.1.4-gbec22107-dirty (Nov 18 2020 - 18:19:12)
     ...
     Firmware downloaded... filesize = 0xeeae77 fileaddr = 0x80060000.
     Firmware Recovery file length : 15642231
     Firmware process id 2.
     handle_fw_cloud 146
     Image verify OK!
     Firmware file Verify ok!
     product-info:product_name:Archer C7
     product_ver:5.0.0
     special_id:55530000
     [Error]sysmgr_cfg_checkSupportList(): 1023 @ specialId 45550000 NOT Match.
     Firmware supports, check OK.
     Firmware Recovery check ok!
    
    1. https://gist.github.com/ynezz/2e0583647d863386a66c3d231541b6d1
    
    Signed-off-by: Petr Štetiar <ynezz at true.cz>
    (cherry picked from commit e6d66375cbbb54e0e82a67030e385a5486273766)
    Signed-off-by: Petr Štetiar <ynezz at true.cz>
---
 tools/firmware-utils/src/tplink-safeloader.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
index e4f11bf4c8..f80368636c 100644
--- a/tools/firmware-utils/src/tplink-safeloader.c
+++ b/tools/firmware-utils/src/tplink-safeloader.c
@@ -938,7 +938,7 @@ static struct device_info boards[] = {
 			"{product_name:Archer C7,product_ver:5.0.0,special_id:4B520000}\n",
 
 		.support_trail = '\x00',
-		.soft_ver = "soft_ver:1.0.0\n",
+		.soft_ver = "soft_ver:7.0.0\n",
 
 		/* We're using a dynamic kernel/rootfs split here */
 		.partitions = {



More information about the lede-commits mailing list