[flashrom] [PATCH 1/3] dediprog: Fix dediprog_device_init()

David Hendricks dhendrix at chromium.org
Sun Aug 2 03:25:29 CEST 2015


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 <dhendrix at chromium.org> 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 <dhendrix at chromium.org>
>
> 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




More information about the flashrom mailing list