All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 08/14] dfu: add DFU virtual backend
Date: Tue, 17 Sep 2019 12:42:39 +0200	[thread overview]
Message-ID: <20190917124239.5879c6fc@jawa> (raw)
In-Reply-To: <20190913141930.15784-9-patrick.delaunay@st.com>

Hi Patrick,

> Add a virtual DFU backend to allow board specific read and write
> (for OTP update for example).
> 
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
> 
>  drivers/dfu/Kconfig    |  7 ++++++
>  drivers/dfu/Makefile   |  1 +
>  drivers/dfu/dfu.c      |  5 ++++-
>  drivers/dfu/dfu_virt.c | 49
> ++++++++++++++++++++++++++++++++++++++++++ include/dfu.h          |
> 22 +++++++++++++++++++ 5 files changed, 83 insertions(+), 1
> deletion(-) create mode 100644 drivers/dfu/dfu_virt.c
> 
> diff --git a/drivers/dfu/Kconfig b/drivers/dfu/Kconfig
> index ee664a331b..c0e6e5d8f0 100644
> --- a/drivers/dfu/Kconfig
> +++ b/drivers/dfu/Kconfig
> @@ -52,5 +52,12 @@ config DFU_MTD
>  	help
>  	  This option enables using DFU to read and write to on any
> MTD device. 
> +config DFU_VIRT
> +	bool "VIRTUAL flash back end for DFU"
> +	help
> +	  This option enables using DFU to read and write to VIRTUAL
> device
> +	  used at board level to manage specific behavior
> +	  (OTP update for example).
> +
>  endif
>  endmenu
> diff --git a/drivers/dfu/Makefile b/drivers/dfu/Makefile
> index ebb119f398..0d7925c083 100644
> --- a/drivers/dfu/Makefile
> +++ b/drivers/dfu/Makefile
> @@ -10,3 +10,4 @@ obj-$(CONFIG_$(SPL_)DFU_NAND) += dfu_nand.o
>  obj-$(CONFIG_$(SPL_)DFU_RAM) += dfu_ram.o
>  obj-$(CONFIG_$(SPL_)DFU_SF) += dfu_sf.o
>  obj-$(CONFIG_$(SPL_)DFU_TFTP) += dfu_tftp.o
> +obj-$(CONFIG_$(SPL_)DFU_VIRT) += dfu_virt.o
> diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
> index 4f4a07b790..2697235c24 100644
> --- a/drivers/dfu/dfu.c
> +++ b/drivers/dfu/dfu.c
> @@ -474,6 +474,9 @@ static int dfu_fill_entity(struct dfu_entity
> *dfu, char *s, int alt, } else if (strcmp(interface, "sf") == 0) {
>  		if (dfu_fill_entity_sf(dfu, devstr, s))
>  			return -1;
> +	} else if (strcmp(interface, "virt") == 0) {
> +		if (dfu_fill_entity_virt(dfu, devstr, s))
> +			return -1;
>  	} else {
>  		printf("%s: Device %s not (yet) supported!\n",
>  		       __func__,  interface);
> @@ -569,7 +572,7 @@ int dfu_config_entities(char *env, char
> *interface, char *devstr) const char *dfu_get_dev_type(enum
> dfu_device_type t) {
>  	const char *const dev_t[] = {NULL, "eMMC", "OneNAND",
> "NAND", "RAM",
> -				     "SF", "MTD"};
> +				     "SF", "MTD", "VIRT"};
>  	return dev_t[t];
>  }
>  
> diff --git a/drivers/dfu/dfu_virt.c b/drivers/dfu/dfu_virt.c
> new file mode 100644
> index 0000000000..ea8c71f100
> --- /dev/null
> +++ b/drivers/dfu/dfu_virt.c
> @@ -0,0 +1,49 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
> +/*
> + * Copyright (C) 2019, STMicroelectronics - All Rights Reserved
> + */
> +#include <common.h>
> +#include <dfu.h>
> +#include <errno.h>
> +#include <malloc.h>
> +
> +int __weak dfu_write_medium_virt(struct dfu_entity *dfu, u64 offset,
> +				 void *buf, long *len)
> +{
> +	debug("%s: off=0x%llx, len=0x%x\n", __func__, offset,
> (u32)*len); +
> +	return 0;
> +}
> +
> +int __weak dfu_get_medium_size_virt(struct dfu_entity *dfu, u64
> *size) +{
> +	*size = 0;
> +
> +	return 0;
> +}
> +
> +int __weak dfu_read_medium_virt(struct dfu_entity *dfu, u64 offset,
> +				void *buf, long *len)
> +{
> +	debug("%s: off=0x%llx, len=0x%x\n", __func__, offset,
> (u32)*len);
> +	*len = 0;
> +
> +	return 0;
> +}
> +
> +int dfu_fill_entity_virt(struct dfu_entity *dfu, char *devstr, char
> *s) +{
> +	debug("%s: devstr = %s\n", __func__, devstr);
> +
> +	dfu->dev_type = DFU_DEV_VIRT;
> +	dfu->layout = DFU_RAW_ADDR;
> +	dfu->data.virt.dev_num = simple_strtoul(devstr, NULL, 10);
> +
> +	dfu->write_medium = dfu_write_medium_virt;
> +	dfu->get_medium_size = dfu_get_medium_size_virt;
> +	dfu->read_medium = dfu_read_medium_virt;
> +
> +	dfu->inited = 0;
> +
> +	return 0;
> +}
> diff --git a/include/dfu.h b/include/dfu.h
> index a90732cc43..4de7d35914 100644
> --- a/include/dfu.h
> +++ b/include/dfu.h
> @@ -23,6 +23,7 @@ enum dfu_device_type {
>  	DFU_DEV_RAM,
>  	DFU_DEV_SF,
>  	DFU_DEV_MTD,
> +	DFU_DEV_VIRT,
>  };
>  
>  enum dfu_layout {
> @@ -92,6 +93,10 @@ struct sf_internal_data {
>  	unsigned int ubi;
>  };
>  
> +struct virt_internal_data {
> +	int dev_num;
> +};
> +
>  #define DFU_NAME_SIZE			32
>  #ifndef CONFIG_SYS_DFU_DATA_BUF_SIZE
>  #define CONFIG_SYS_DFU_DATA_BUF_SIZE
> (1024*1024*8)	/* 8 MiB */ @@ -120,6 +125,7 @@ struct
> dfu_entity { struct nand_internal_data nand;
>  		struct ram_internal_data ram;
>  		struct sf_internal_data sf;
> +		struct virt_internal_data virt;
>  	} data;
>  
>  	int (*get_medium_size)(struct dfu_entity *dfu, u64 *size);
> @@ -272,6 +278,22 @@ static inline int dfu_fill_entity_mtd(struct
> dfu_entity *dfu, char *devstr, }
>  #endif
>  
> +#ifdef CONFIG_DFU_VIRT
> +int dfu_fill_entity_virt(struct dfu_entity *dfu, char *devstr, char
> *s); +int dfu_write_medium_virt(struct dfu_entity *dfu, u64 offset,
> +			  void *buf, long *len);
> +int dfu_get_medium_size_virt(struct dfu_entity *dfu, u64 *size);
> +int dfu_read_medium_virt(struct dfu_entity *dfu, u64 offset,
> +			 void *buf, long *len);
> +#else
> +static inline int dfu_fill_entity_virt(struct dfu_entity *dfu, char
> *devstr,
> +				       char *s)
> +{
> +	puts("VIRT support not available!\n");
> +	return -1;
> +}
> +#endif
> +
>  /**
>   * dfu_tftp_write - Write TFTP data to DFU medium
>   *

Acked-by: Lukasz Majewski <lukma@denx.de>

I will test this patch series (if it don't break current setup) and
provide the feedback.

As you mentioned - this series is heading to 2020.01, so I will put it
into next (if no regression is found on BBB).


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190917/9a89d1e8/attachment.sig>

  reply	other threads:[~2019-09-17 10:42 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-13 14:19 [U-Boot] [PATCH 01/14] dfu: cosmetic: cleanup sf to avoid checkpatch error Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 02/14] dfu: sf: add partition support for nor backend Patrick Delaunay
2019-09-16 22:12   ` Lukasz Majewski
2019-09-13 14:19 ` [U-Boot] [PATCH 03/14] dfu: prepare the support of multiple interface Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 04/14] dfu: allow to manage DFU on several devices Patrick Delaunay
2019-09-17 10:25   ` Lukasz Majewski
2019-09-17 11:28     ` Patrick DELAUNAY
2019-09-13 14:19 ` [U-Boot] [PATCH 05/14] dfu: allow read with 0 data for EOF indication Patrick Delaunay
2019-09-17 10:28   ` Lukasz Majewski
2019-09-18 11:45     ` Patrick DELAUNAY
2019-09-13 14:19 ` [U-Boot] [PATCH 06/14] dfu: add backend for MTD device Patrick Delaunay
2019-09-17 10:35   ` Lukasz Majewski
2019-09-17 11:40     ` Patrick DELAUNAY
2019-09-13 14:19 ` [U-Boot] [PATCH 07/14] dfu: add partition support for MTD backend Patrick Delaunay
2019-09-17 10:38   ` Lukasz Majewski
2019-09-17 12:03     ` Patrick DELAUNAY
2019-09-13 14:19 ` [U-Boot] [PATCH 08/14] dfu: add DFU virtual backend Patrick Delaunay
2019-09-17 10:42   ` Lukasz Majewski [this message]
2019-09-13 14:19 ` [U-Boot] [PATCH 09/14] dfu: add callback for flush and initiated operation Patrick Delaunay
2019-09-17 10:44   ` Lukasz Majewski
2019-09-17 12:52     ` Patrick DELAUNAY
2019-09-13 14:19 ` [U-Boot] [PATCH 10/14] stm32mp1: activate DFU support and command MTD Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 11/14] stm32mp1: activate SET_DFU_ALT_INFO Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 12/14] stp32mp1: configs: activate CONFIG_MTD_SPI_NAND Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 13/14] stm32mp1: board: add spi nand support Patrick Delaunay
2019-09-13 14:19 ` [U-Boot] [PATCH 14/14] stm32mp1: add support for virtual partition read Patrick Delaunay
2019-09-16 21:49 ` [U-Boot] [PATCH 01/14] dfu: cosmetic: cleanup sf to avoid checkpatch error Lukasz Majewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190917124239.5879c6fc@jawa \
    --to=lukma@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.