Hi nico,
Thanks for confirmation and for DB410c recovery(with this patch) it is mandatory to use "--s emmc" for qdl to work.

Regards,
Laxman

On Tue, 6 Nov 2018 at 16:06, Nicolas Dechesne <nicolas.dechesne@linaro.org> wrote:
hi Laxman,

thanks for your patch and improvements.  I have tested it on my
DB820c, and it works fine. Also tested that I get a failure when using
--storage emmc, as expected.

On Tue, Nov 6, 2018 at 9:54 AM Laxman <itsmelaxman91@gmail.com> wrote:
>
> added qdl support for emmc storage
> use option --s emmc or ufs as a argument to qdl command
> if not specified any option the default storage would be ufs
>
> Signed-off-by: Laxman <itsmelaxman91@gmail.com>

Tested-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>

> ---
>  firehose.c | 16 ++++++++--------
>  qdl.c      | 10 +++++++---
>  qdl.h      |  2 +-
>  3 files changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/firehose.c b/firehose.c
> index c4e9500..cae90bd 100644
> --- a/firehose.c
> +++ b/firehose.c
> @@ -265,7 +265,7 @@ static int firehose_configure_response_parser(xmlNode *node)
>         return max_size;
>  }
>
> -static int firehose_send_configure(int fd, size_t payload_size, bool skip_storage_init)
> +static int firehose_send_configure(int fd, size_t payload_size, bool skip_storage_init, const char *storage)
>  {
>         xmlNode *root;
>         xmlNode *node;
> @@ -277,7 +277,7 @@ static int firehose_send_configure(int fd, size_t payload_size, bool skip_storag
>         xmlDocSetRootElement(doc, root);
>
>         node = xmlNewChild(root, NULL, (xmlChar*)"configure", NULL);
> -       xml_setpropf(node, "MemoryName", "ufs");
> +       xml_setpropf(node, "MemoryName", storage);
>         xml_setpropf(node, "MaxPayloadSizeToTargetInBytes", "%d", payload_size);
>         xml_setpropf(node, "verbose", "%d", 0);
>         xml_setpropf(node, "ZLPAwareHost", "%d", 0);
> @@ -291,17 +291,17 @@ static int firehose_send_configure(int fd, size_t payload_size, bool skip_storag
>         return firehose_read(fd, -1, firehose_configure_response_parser);
>  }
>
> -static int firehose_configure(int fd, bool skip_storage_init)
> +static int firehose_configure(int fd, bool skip_storage_init, const char *storage)
>  {
>         int ret;
>
> -       ret = firehose_send_configure(fd, max_payload_size, skip_storage_init);
> +       ret = firehose_send_configure(fd, max_payload_size, skip_storage_init, storage);
>         if (ret < 0)
>                 return ret;
>
>         /* Retry if remote proposed different size */
>         if (ret != max_payload_size) {
> -               ret = firehose_send_configure(fd, ret, skip_storage_init);
> +               ret = firehose_send_configure(fd, ret, skip_storage_init, storage);
>                 if (ret < 0)
>                         return ret;
>
> @@ -601,7 +601,7 @@ static int firehose_reset(int fd)
>         return firehose_read(fd, -1, firehose_nop_parser);
>  }
>
> -int firehose_run(int fd, const char *incdir)
> +int firehose_run(int fd, const char *incdir, const char *storage)
>  {
>         int bootable;
>         int ret;
> @@ -618,7 +618,7 @@ int firehose_run(int fd, const char *incdir)
>                 return ret;
>
>         if(ufs_need_provisioning()) {
> -               ret = firehose_configure(fd, true);
> +               ret = firehose_configure(fd, true, storage);
>                 if (ret)
>                         return ret;
>                 ret = ufs_provisioning_execute(fd, firehose_apply_ufs_common,
> @@ -630,7 +630,7 @@ int firehose_run(int fd, const char *incdir)
>                 return ret;
>         }
>
> -       ret = firehose_configure(fd, false);
> +       ret = firehose_configure(fd, false, storage);
>         if (ret)
>                 return ret;
>
> diff --git a/qdl.c b/qdl.c
> index 8cf1011..98801cc 100644
> --- a/qdl.c
> +++ b/qdl.c
> @@ -220,14 +220,14 @@ static void print_usage(void)
>  {
>         extern const char *__progname;
>         fprintf(stderr,
> -               "%s [--debug] [--finalize-provisioning] [--include <PATH>] <prog.mbn> [<program> <patch> ...]\n",
> +               "%s [--debug] [--storage <emmc|ufs>] [--finalize-provisioning] [--include <PATH>] <prog.mbn> [<program> <patch> ...]\n",
>                 __progname);
>  }
>
>  int main(int argc, char **argv)
>  {
>         struct termios tios;
> -       char *prog_mbn;
> +       char *prog_mbn, *storage="ufs";
>         char *incdir = NULL;
>         int type;
>         int ret;
> @@ -240,6 +240,7 @@ int main(int argc, char **argv)
>                 {"debug", no_argument, 0, 'd'},
>                 {"include", required_argument, 0, 'i'},
>                 {"finalize-provisioning", no_argument, 0, 'l'},
> +               {"storage", required_argument, 0, 's'},
>                 {0, 0, 0, 0}
>         };
>
> @@ -254,6 +255,9 @@ int main(int argc, char **argv)
>                 case 'l':
>                         qdl_finalize_provisioning = true;
>                         break;
> +               case 's':
> +                       storage = optarg;
> +                       break;
>                 default:
>                         print_usage();
>                         return 1;
> @@ -303,7 +307,7 @@ int main(int argc, char **argv)
>         if (ret < 0)
>                 goto out;
>
> -       ret = firehose_run(fd, incdir);
> +       ret = firehose_run(fd, incdir, storage);
>
>  out:
>         ret = tcsetattr(fd, TCSANOW, &tios);
> diff --git a/qdl.h b/qdl.h
> index 73ea84c..f835442 100644
> --- a/qdl.h
> +++ b/qdl.h
> @@ -7,7 +7,7 @@
>  #include "program.h"
>  #include <libxml/tree.h>
>
> -int firehose_run(int fd, const char *incdir);
> +int firehose_run(int fd, const char *incdir, const char *storage);
>  int sahara_run(int fd, char *prog_mbn);
>  void print_hex_dump(const char *prefix, const void *buf, size_t len);
>  unsigned attr_as_unsigned(xmlNode *node, const char *attr, int *errors);
> --
> 2.7.4
>