Hmmm, on second thoughts my other 2 patches were basically just rebasing the other patches to add new protocol support and add basic SF600 support. No need to re-hash them. Just apply this along with the other two patches and SF600 should work (reads, not writes).
On Sat, Aug 1, 2015 at 6:07 PM, David Hendricks <[email protected]> wrote: > As per e-mail with Dediprog, command 0x0B (which is not listed in the > command spec) is used to set voltage level on older Dediprogs. SF100 > V6.0.0 and newer as well as all SF600 programmers do not support it. > > This patch renames the function and adds comments for clarity, and > only runs it conditionally if we cannot query the devicestring during > init. > > Tested with SF100 V:5.1.5 and SF600 V:7.1.4 (with subsequent patches). > Signed-off-by: David Hendricks <[email protected]> > > Index: dediprog.c > =================================================================== > --- dediprog.c (revision 1896) > +++ dediprog.c (working copy) > @@ -75,6 +75,7 @@ > CMD_READ_PROG_INFO = 0x08, > CMD_SET_VCC = 0x09, > CMD_SET_STANDALONE = 0x0A, > + CMD_SET_VOLTAGE = 0x0B, /* Only in firmware older than 6.0.0 */ > CMD_GET_BUTTON = 0x11, > CMD_GET_UID = 0x12, > CMD_SET_CS = 0x14, > @@ -579,13 +580,15 @@ > return 0; > } > > -static int dediprog_device_init(void) > +/* Only use dediprog_set_voltage on SF100 programmers with firmware older > + * than V6.0.0. Newer programmers (including all SF600s) do not support it. > */ > +static int dediprog_set_voltage(void) > { > int ret; > char buf[0x1]; > > memset(buf, 0, sizeof(buf)); > - ret = usb_control_msg(dediprog_handle, REQTYPE_OTHER_IN, 0x0B, 0x0, 0x0, > + ret = usb_control_msg(dediprog_handle, REQTYPE_OTHER_IN, > CMD_SET_VOLTAGE, 0x0, 0x0, > buf, 0x1, DEFAULT_TIMEOUT); > if (ret < 0) { > msg_perr("Command A failed (%s)!\n", usb_strerror()); > @@ -595,6 +598,7 @@ > msg_perr("Unexpected response to init!\n"); > return 1; > } > + > return 0; > } > > @@ -853,11 +857,15 @@ > if (register_shutdown(dediprog_shutdown, NULL)) > return 1; > > - /* Perform basic setup. */ > - if (dediprog_device_init()) > - return 1; > - if (dediprog_check_devicestring()) > - return 1; > + /* Try reading the devicestring. If that fails and the device is old > + * (FW < 6.0.0) then we need to try the "set voltage" command and then > + * attempt to read the devicestring again. */ > + if (dediprog_check_devicestring()) { > + if (dediprog_set_voltage()) > + return 1; > + if (dediprog_check_devicestring()) > + return 1; > + } > > /* Set all possible LEDs as soon as possible to indicate activity. > * Because knowing the firmware version is required to set the LEDs > correctly we need to this after _______________________________________________ flashrom mailing list [email protected] http://www.flashrom.org/mailman/listinfo/flashrom
