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

Patrice CHOTARD patrice.chotard at foss.st.com
Fri Jun 18 09:56:42 CEST 2021



On 5/28/21 2:54 PM, Patrice CHOTARD wrote:
> 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
> _______________________________________________
> Uboot-stm32 mailing list
> Uboot-stm32 at st-md-mailman.stormreply.com
> https://st-md-mailman.stormreply.com/mailman/listinfo/uboot-stm32
> 
Applied on u-boot-stm32/next

Thanks


More information about the U-Boot mailing list