[U-Boot,RFC,09/14] dfu: add callback for flush and initiated operation
diff mbox series

Message ID 1563541046-6432-10-git-send-email-patrick.delaunay@st.com
State New
Delegated to: Patrick Delaunay
Headers show
Series
  • dfu: update dfu stack and use them for stm32mp1
Related show

Commit Message

Patrick Delaunay July 19, 2019, 12:57 p.m. UTC
Add weak callback to allow board specific behavior
- flush
- initiated

This patch prepare usage of DFU back end for communication with
STM32CubeProgrammer on stm32mp1 platform with stm32prog command.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---

 drivers/dfu/dfu.c | 19 +++++++++++++++++++
 include/dfu.h     |  2 ++
 2 files changed, 21 insertions(+)

Comments

Lukasz Majewski July 22, 2019, 8:22 a.m. UTC | #1
Hi Patrick,

> Add weak callback to allow board specific behavior
> - flush
> - initiated
> 
> This patch prepare usage of DFU back end for communication with
> STM32CubeProgrammer on stm32mp1 platform with stm32prog command.

Would the stm32prog need to modify the environment variables ?
For example to update the "VERSION" or any other one?


> 
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
> 
>  drivers/dfu/dfu.c | 19 +++++++++++++++++++
>  include/dfu.h     |  2 ++
>  2 files changed, 21 insertions(+)
> 
> diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
> index a960b6e..e642b09 100644
> --- a/drivers/dfu/dfu.c
> +++ b/drivers/dfu/dfu.c
> @@ -22,6 +22,22 @@ static int alt_num_cnt;
>  static struct hash_algo *dfu_hash_algo;
>  
>  /*
> + * The purpose of the dfu_flush_callback() function is to
> + * provide callback for dfu user
> + */
> +__weak void dfu_flush_callback(struct dfu_entity *dfu)
> +{
> +}
> +
> +/*
> + * The purpose of the dfu_flush_callback() function is to
> + * provide callback for dfu user
> + */
> +__weak void dfu_initiated_callback(struct dfu_entity *dfu)
> +{
> +}
> +
> +/*
>   * The purpose of the dfu_usb_get_reset() function is to
>   * provide information if after USB_DETACH request
>   * being sent the dfu-util performed reset of USB
> @@ -262,6 +278,7 @@ int dfu_transaction_initiate(struct dfu_entity
> *dfu, bool read) }
>  
>  	dfu->inited = 1;
> +	dfu_initiated_callback(dfu);
>  
>  	return 0;
>  }
> @@ -281,6 +298,8 @@ int dfu_flush(struct dfu_entity *dfu, void *buf,
> int size, int blk_seq_num) printf("\nDFU complete %s: 0x%08x\n",
> dfu_hash_algo->name, dfu->crc);
>  
> +	dfu_flush_callback(dfu);
> +
>  	dfu_transaction_cleanup(dfu);
>  
>  	return ret;
> diff --git a/include/dfu.h b/include/dfu.h
> index 4de7d35..5d85cc3 100644
> --- a/include/dfu.h
> +++ b/include/dfu.h
> @@ -182,6 +182,8 @@ bool dfu_usb_get_reset(void);
>  int dfu_read(struct dfu_entity *de, void *buf, int size, int
> blk_seq_num); int dfu_write(struct dfu_entity *de, void *buf, int
> size, int blk_seq_num); int dfu_flush(struct dfu_entity *de, void
> *buf, int size, int blk_seq_num); +void dfu_flush_callback(struct
> dfu_entity *dfu); +void dfu_initiated_callback(struct dfu_entity
> *dfu); 
>  /*
>   * dfu_defer_flush - pointer to store dfu_entity for deferred
> flashing.




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@denx.de

Patch
diff mbox series

diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
index a960b6e..e642b09 100644
--- a/drivers/dfu/dfu.c
+++ b/drivers/dfu/dfu.c
@@ -22,6 +22,22 @@  static int alt_num_cnt;
 static struct hash_algo *dfu_hash_algo;
 
 /*
+ * The purpose of the dfu_flush_callback() function is to
+ * provide callback for dfu user
+ */
+__weak void dfu_flush_callback(struct dfu_entity *dfu)
+{
+}
+
+/*
+ * The purpose of the dfu_flush_callback() function is to
+ * provide callback for dfu user
+ */
+__weak void dfu_initiated_callback(struct dfu_entity *dfu)
+{
+}
+
+/*
  * The purpose of the dfu_usb_get_reset() function is to
  * provide information if after USB_DETACH request
  * being sent the dfu-util performed reset of USB
@@ -262,6 +278,7 @@  int dfu_transaction_initiate(struct dfu_entity *dfu, bool read)
 	}
 
 	dfu->inited = 1;
+	dfu_initiated_callback(dfu);
 
 	return 0;
 }
@@ -281,6 +298,8 @@  int dfu_flush(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
 		printf("\nDFU complete %s: 0x%08x\n", dfu_hash_algo->name,
 		       dfu->crc);
 
+	dfu_flush_callback(dfu);
+
 	dfu_transaction_cleanup(dfu);
 
 	return ret;
diff --git a/include/dfu.h b/include/dfu.h
index 4de7d35..5d85cc3 100644
--- a/include/dfu.h
+++ b/include/dfu.h
@@ -182,6 +182,8 @@  bool dfu_usb_get_reset(void);
 int dfu_read(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
 int dfu_write(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
 int dfu_flush(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
+void dfu_flush_callback(struct dfu_entity *dfu);
+void dfu_initiated_callback(struct dfu_entity *dfu);
 
 /*
  * dfu_defer_flush - pointer to store dfu_entity for deferred flashing.