From f86723716c18608c344e24bf740980ed76a00637 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 17 May 2020 20:17:14 +0200 Subject: nwztools/scsitool: add alternative firmware upgrade command Newer devices seem to require flags 0x00 where older devices wanted 0x80, now try both variants Change-Id: Ifeee641052857c66c1b64860d7309a235021a168 --- utils/nwztools/scsitools/scsitool.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'utils/nwztools') diff --git a/utils/nwztools/scsitools/scsitool.c b/utils/nwztools/scsitools/scsitool.c index 024a845596..3d4b0c0a13 100644 --- a/utils/nwztools/scsitools/scsitool.c +++ b/utils/nwztools/scsitools/scsitool.c @@ -757,13 +757,13 @@ int get_dhp(int argc, char **argv) return 0; } -int do_fw_upgrade(int argc, char **argv) +int try_fw_upgrade(unsigned flags, int argc, char **argv) { (void) argc; - (void )argv; + (void) argv; /* older devices may have used subcommand 3 instead of 4, but this is not * supported by any device I have seen */ - uint8_t cdb[12] = {0xfc, 0, 0x04, 'd', 'b', 'm', 'n', 0, 0x80, 0, 0, 0}; + uint8_t cdb[12] = {0xfc, 0, 0x04, 'd', 'b', 'm', 'n', 0, flags, 0, 0, 0}; char *buffer = malloc(0x81); int buffer_size = 0x80; @@ -789,6 +789,14 @@ int do_fw_upgrade(int argc, char **argv) return 0; } +int do_fw_upgrade(int argc, char **argv) +{ + if(!try_fw_upgrade(0x80, argc, argv)) + return 0; + cprintf(GREY, "Trying alternative firmware upgrade command...\n"); + return try_fw_upgrade(0, argc, argv); +} + static struct { unsigned long dest; -- cgit v1.2.3