dfu, nand: add medium specific polltimeout function
PATCH v2 1/1 dfu, nand: add medium specific polltimeout function
add a possibility to add a medium specific polltimeout function. So it is possible to define different poll timeouts.
Used on nand medium, for setting the DFU_MANIFEST_POLL_TIMEOUT only on nand ubi partitions, which is currently the only usecase.
---
- changes for v2:
- add comment from Pantelis Antoniou
- add simple accessor for getting the poll timeout dfu_get_manifest_timeout()
drivers/dfu/dfu_nand.c | 13 +++++++++++++ drivers/usb/gadget/f_dfu.c | 10 +++++++++- include/dfu.h | 1 + 3 files changed, 23 insertions(+), 1 deletion(-)
drivers/dfu/dfu_nand.c +13 -0
@@ -163,6 +163,18 @@ static int dfu_flush_medium_nand(struct dfu_entity *dfu)return ret; } +unsigned int dfu_polltimeout_nand (struct dfu_entity *dfu) +{ +/* +* Currently, Poll Timeout != 0 is only needed on nand +* ubi partition, as the not used sectors need an erase +*/ +if (dfu->data.nand.ubi) +return DFU_MANIFEST_POLL_TIMEOUT ; + +return DFU_DEFAULT_POLL_TIMEOUT ; +} +int dfu_fill_entity_nand (struct dfu_entity *dfu,char *s) {char *st;
@@ -211,6 +223,7 @@ int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s) dfu->read_medium = dfu_read_medium_nand; dfu->write_medium = dfu_write_medium_nand; dfu->flush_medium = dfu_flush_medium_nand; + dfu->poll_timeout = dfu_polltimeout_nand;/* initial state */ dfu->inited =0 ;
drivers/usb/gadget/f_dfu.c +9 -1
@@ -174,10 +174,17 @@ static void dnload_request_flush(struct usb_ep *ep, struct usb_request *req) req->length, f_dfu->blk_seq_num); } +static inline int dfu_get_manifest_timeout (struct dfu_entity *dfu) +{ +return dfu->poll_timeout ? dfu->poll_timeout (dfu) : +DFU_MANIFEST_POLL_TIMEOUT ; +} +static void handle_getstatus (struct usb_request *req) {struct dfu_status *dstat = (struct dfu_status *)req->buf;struct f_dfu *f_dfu = req->context; +struct dfu_entity *dfu =dfu_get_entity (f_dfu->altsetting);dfu_set_poll_timeout (dstat,0 );
@@ -190,7 +197,8 @@ static void handle_getstatus(struct usb_request *req) f_dfu->dfu_state = DFU_STATE_dfuMANIFEST;break ;case DFU_STATE_dfuMANIFEST: -dfu_set_poll_timeout (dstat,DFU_MANIFEST_POLL_TIMEOUT ); +dfu_set_poll_timeout (dstat,dfu_get_manifest_timeout (dfu)); +break ;default :break ; }
include/dfu.h +1 -0
@@ -105,6 +105,7 @@ struct dfu_entity { u64 offset, void *buf, long *len);int (*flush_medium)(struct dfu_entity *dfu); +unsigned int (*poll_timeout)(struct dfu_entity *dfu);struct list_head list;
Signature · 1 line
1.8.3.1
PATCH v2 1/1 dfu, nand: add medium specific polltimeout function
Quoted 30 lines · Heiko Schocher
add a possibility to add a medium specific polltimeout function. So it is possible to define different poll timeouts.
Used on nand medium, for setting the
DFU_MANIFEST_POLL_TIMEOUTonly on nand ubi partitions, which is currently the only usecase.Signed-off-by Heiko Schocher <[email protected]>Cc Lukasz Majewski <[email protected]>Cc Kyungmin Park <[email protected]>Cc Marek Vasut <[email protected]>Cc Pantelis Antoniou <[email protected]>---
- changes for v2:
- add comment from Pantelis Antoniou
- add simple accessor for getting the poll timeoutdfu_get_manifest_timeout()drivers/dfu/dfu_nand.c | 13 +++++++++++++ drivers/usb/gadget/f_dfu.c | 10 +++++++++- include/dfu.h | 1 + 3 files changed, 23 insertions(+), 1 deletion(-)drivers/dfu/dfu_nand.c +0
-0
drivers/dfu/dfu_nand.c static int dfu_flush_medium_nand(struct dfu_entity · line 170
Quoted 8 lines
drivers/dfu/dfu_nand.c +5
-0@@ -163,6 +163,18 @@ static int dfu_flush_medium_nand(struct dfu_entity *dfu) return ret; } +unsigned int dfu_polltimeout_nand (struct dfu_entity *dfu) +{ +/* +* Currently, Poll Timeout != 0 is only needed on nand +* ubi partition, as the not used sectors need an erase
Don't you have to erase sectors before writing into them even on RAW NAND ? [..]
Other than that:
Best regards,
Marek Vasut
PATCH v2 1/1 dfu, nand: add medium specific polltimeout function
In reply to Heiko SchocherHi Heiko,
Quoted 8 lines
add a possibility to add a medium specific polltimeout function. So it is possible to define different poll timeouts.
Used on nand medium, for setting the
DFU_MANIFEST_POLL_TIMEOUTonly on nand ubi partitions, which is currently the only usecase.
Quoted 5 lines
Signed-off-by Heiko Schocher <[email protected]>Cc Lukasz Majewski <[email protected]>Cc Kyungmin Park <[email protected]>Cc Marek Vasut <[email protected]>Cc Pantelis Antoniou <[email protected]>
Applied to u-boot-dfu. Thanks.
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group