[Uboot-stm32] [PATCH 09/10] dfu: add error callback

Patrice CHOTARD patrice.chotard at foss.st.com
Fri May 28 14:54:40 CEST 2021


Hi Patrick

On 5/18/21 3:12 PM, Patrick Delaunay wrote:
> Add error callback in dfu stack to manage some board specific
> behavior on DFU targets.
> 
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
> 
>  drivers/dfu/dfu.c | 12 ++++++++++++
>  include/dfu.h     | 11 +++++++++++
>  2 files changed, 23 insertions(+)
> 
> diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
> index 213a20e7bc..ff1859d946 100644
> --- a/drivers/dfu/dfu.c
> +++ b/drivers/dfu/dfu.c
> @@ -44,6 +44,14 @@ __weak void dfu_initiated_callback(struct dfu_entity *dfu)
>  {
>  }
>  
> +/*
> + * The purpose of the dfu_error_callback() function is to
> + * provide callback for dfu user
> + */
> +__weak void dfu_error_callback(struct dfu_entity *dfu, const char *msg)
> +{
> +}
> +
>  /*
>   * The purpose of the dfu_usb_get_reset() function is to
>   * provide information if after USB_DETACH request
> @@ -342,6 +350,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
>  		printf("%s: Wrong sequence number! [%d] [%d]\n",
>  		       __func__, dfu->i_blk_seq_num, blk_seq_num);
>  		dfu_transaction_cleanup(dfu);
> +		dfu_error_callback(dfu, "Wrong sequence number");
>  		return -1;
>  	}
>  
> @@ -366,6 +375,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
>  		ret = dfu_write_buffer_drain(dfu);
>  		if (ret) {
>  			dfu_transaction_cleanup(dfu);
> +			dfu_error_callback(dfu, "DFU write error");
>  			return ret;
>  		}
>  	}
> @@ -375,6 +385,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
>  		pr_err("Buffer overflow! (0x%p + 0x%x > 0x%p)\n", dfu->i_buf,
>  		      size, dfu->i_buf_end);
>  		dfu_transaction_cleanup(dfu);
> +		dfu_error_callback(dfu, "Buffer overflow");
>  		return -1;
>  	}
>  
> @@ -386,6 +397,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
>  		ret = dfu_write_buffer_drain(dfu);
>  		if (ret) {
>  			dfu_transaction_cleanup(dfu);
> +			dfu_error_callback(dfu, "DFU write error");
>  			return ret;
>  		}
>  	}
> diff --git a/include/dfu.h b/include/dfu.h
> index d18b701728..1963e9ffb9 100644
> --- a/include/dfu.h
> +++ b/include/dfu.h
> @@ -383,6 +383,17 @@ void dfu_initiated_callback(struct dfu_entity *dfu);
>   */
>  void dfu_flush_callback(struct dfu_entity *dfu);
>  
> +/**
> + * dfu_error_callback() - weak callback called at the DFU write error
> + *
> + * It is a callback function called by DFU stack after DFU write error.
> + * This function allows to manage some board specific behavior on DFU targets
> + *
> + * @dfu:	pointer to the dfu_entity which cause the error
> + * @msg:	the message of the error
> + */
> +void dfu_error_callback(struct dfu_entity *dfu, const char *msg);
> +
>  int dfu_transaction_initiate(struct dfu_entity *dfu, bool read);
>  void dfu_transaction_cleanup(struct dfu_entity *dfu);
>  
> 

Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>

Thanks
Patrice


More information about the U-Boot mailing list