From a2199afea169c1e13881ca90a02a28e4c9ffd114 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Tue, 18 Mar 2014 08:09:55 +0100 Subject: usb, dfu: extract flush code into seperate function move the flushing code into an extra function dfu_flush(), so it can be used from other code. Signed-off-by: Heiko Schocher Cc: Lukasz Majewski Cc: Kyungmin Park Cc: Marek Vasut Cc: Pantelis Antoniou --- include/dfu.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/dfu.h b/include/dfu.h index f973426aa90..272a245764a 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -138,6 +138,7 @@ unsigned long dfu_get_buf_size(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); /* Device specific */ #ifdef CONFIG_DFU_MMC extern int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s); -- cgit v1.2.3 From 001a8319866062cd63b7b62e5bb4b85eacfde4b4 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Tue, 18 Mar 2014 08:09:56 +0100 Subject: usb: dfu: introduce dfuMANIFEST state on nand flash using ubi, after the download of the new image into the flash, the "rest" of the nand sectors get erased while flushing the medium. With current u-boot version dfu-util may show: Starting download: [##################################################] finished! state(7) = dfuMANIFEST, status(0) = No error condition is present unable to read DFU status as get_status is not answered while erasing sectors, if erasing needs some time. So do the following changes to prevent this: - introduce dfuManifest state According to dfu specification ( http://www.usb.org/developers/devclass_docs/usbdfu10.pdf ) section 7: "the device enters the dfuMANIFEST-SYNC state and awaits the solicitation of the status report by the host. Upon receipt of the anticipated DFU_GETSTATUS, the device enters the dfuMANIFEST state, where it completes its reprogramming operations." - when stepping into dfuManifest state, sending a PollTimeout DFU_MANIFEST_POLL_TIMEOUT in ms, to the host, so the host (dfu-util) waits the PollTimeout before sending a get_status again. Signed-off-by: Heiko Schocher Cc: Lukasz Majewski Cc: Kyungmin Park Cc: Marek Vasut Cc: Pantelis Antoniou --- include/dfu.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'include') diff --git a/include/dfu.h b/include/dfu.h index 272a245764a..6c71ecbe355 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -80,6 +80,9 @@ static inline unsigned int get_mmc_blk_size(int dev) #ifndef DFU_DEFAULT_POLL_TIMEOUT #define DFU_DEFAULT_POLL_TIMEOUT 0 #endif +#ifndef DFU_MANIFEST_POLL_TIMEOUT +#define DFU_MANIFEST_POLL_TIMEOUT DFU_DEFAULT_POLL_TIMEOUT +#endif struct dfu_entity { char name[DFU_NAME_SIZE]; -- cgit v1.2.3 From 401341d62175650e7966058360683cafeb15be88 Mon Sep 17 00:00:00 2001 From: Heiko Schocher Date: Tue, 18 Mar 2014 08:09:57 +0100 Subject: am335x, dfu: add DFU_MANIFEST_POLL_TIMEOUT to the siemens boards as the siemens boards use dfu for updating a nand ubi partition add DFU_MANIFEST_POLL_TIMEOUT to them, so dfu host waits after complete transfer of the new image for DFU_MANIFEST_POLL_TIMEOUT ms before sending again an usb request. So the board have enough time to erase rest of the nand sectors. Signed-off-by: Heiko Schocher Reviewed-by: Lukasz Majewski Cc: Kyungmin Park Cc: Marek Vasut Cc: Tom Rini Cc: Pantelis Antoniou --- include/configs/siemens-am33x-common.h | 1 + 1 file changed, 1 insertion(+) (limited to 'include') diff --git a/include/configs/siemens-am33x-common.h b/include/configs/siemens-am33x-common.h index 98b6e7206d9..721c4e6badc 100644 --- a/include/configs/siemens-am33x-common.h +++ b/include/configs/siemens-am33x-common.h @@ -265,6 +265,7 @@ #define CONFIG_DFU_NAND #define CONFIG_CMD_DFU #define CONFIG_SYS_DFU_DATA_BUF_SIZE (1 << 20) +#define DFU_MANIFEST_POLL_TIMEOUT 25000 #endif /* CONFIG_SPL_BUILD */ -- cgit v1.2.3