mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 20:34:38 +00:00
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. Change-Id: If1db5f49b32d93fefa7481e8dfe5b7ccc0e65af4 Signed-off-by: Heiko Schocher <hs@denx.de> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Marek Vasut <marex@denx.de> Cc: Pantelis Antoniou <panto@antoniou-consulting.com> Reviewed-by: Marek Vasut <marex@denx.de> Acked-by: Lukasz Majewski <l.majewski@samsung.com>
This commit is contained in:
parent
ab2f5c12f7
commit
fc25fa27e5
3 changed files with 23 additions and 1 deletions
|
@ -163,6 +163,18 @@ static int dfu_flush_medium_nand(struct dfu_entity *dfu)
|
||||||
return ret;
|
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)
|
int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
|
||||||
{
|
{
|
||||||
char *st;
|
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->read_medium = dfu_read_medium_nand;
|
||||||
dfu->write_medium = dfu_write_medium_nand;
|
dfu->write_medium = dfu_write_medium_nand;
|
||||||
dfu->flush_medium = dfu_flush_medium_nand;
|
dfu->flush_medium = dfu_flush_medium_nand;
|
||||||
|
dfu->poll_timeout = dfu_polltimeout_nand;
|
||||||
|
|
||||||
/* initial state */
|
/* initial state */
|
||||||
dfu->inited = 0;
|
dfu->inited = 0;
|
||||||
|
|
|
@ -175,10 +175,17 @@ static void dnload_request_flush(struct usb_ep *ep, struct usb_request *req)
|
||||||
req->length, f_dfu->blk_seq_num);
|
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)
|
static void handle_getstatus(struct usb_request *req)
|
||||||
{
|
{
|
||||||
struct dfu_status *dstat = (struct dfu_status *)req->buf;
|
struct dfu_status *dstat = (struct dfu_status *)req->buf;
|
||||||
struct f_dfu *f_dfu = req->context;
|
struct f_dfu *f_dfu = req->context;
|
||||||
|
struct dfu_entity *dfu = dfu_get_entity(f_dfu->altsetting);
|
||||||
|
|
||||||
dfu_set_poll_timeout(dstat, 0);
|
dfu_set_poll_timeout(dstat, 0);
|
||||||
|
|
||||||
|
@ -191,7 +198,8 @@ static void handle_getstatus(struct usb_request *req)
|
||||||
f_dfu->dfu_state = DFU_STATE_dfuMANIFEST;
|
f_dfu->dfu_state = DFU_STATE_dfuMANIFEST;
|
||||||
break;
|
break;
|
||||||
case DFU_STATE_dfuMANIFEST:
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,7 @@ struct dfu_entity {
|
||||||
u64 offset, void *buf, long *len);
|
u64 offset, void *buf, long *len);
|
||||||
|
|
||||||
int (*flush_medium)(struct dfu_entity *dfu);
|
int (*flush_medium)(struct dfu_entity *dfu);
|
||||||
|
unsigned int (*poll_timeout)(struct dfu_entity *dfu);
|
||||||
|
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue