Skip to content

Commit addebd7

Browse files
committed
HSD #1509326948: fpga: altera-cvp: Recovery retry
If an incorrect bitstream is sent, there is a need to retry the tear-down if it fails. We shall set a maximum of 10 tries to recover the system from a permanent failure. Signed-off-by: Ang Tien Sung <[email protected]>
1 parent 3cec0a2 commit addebd7

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

drivers/fpga/altera-cvp.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
#define ALTERA_CVP_V1_SIZE 4
6767
#define ALTERA_CVP_V2_SIZE 4096
6868

69+
/* Tear-down retry */
70+
#define CVP_TEARDOWN_MAX_RETRY 10
6971
/* Optional CvP config error status check for debugging */
7072
static bool altera_cvp_chkcfg;
7173

@@ -328,6 +330,22 @@ static int altera_cvp_teardown(struct fpga_manager *mgr,
328330

329331
}
330332

333+
static int altera_cvp_recovery(struct fpga_manager *mgr,
334+
struct fpga_image_info *info)
335+
{
336+
int ret = 0, retry = 0;
337+
338+
for (retry = 0; retry < CVP_TEARDOWN_MAX_RETRY; retry++) {
339+
ret = altera_cvp_teardown(mgr, info);
340+
if (!ret)
341+
break;
342+
dev_warn(&mgr->dev,
343+
"%s: [%d] Tear-down failed. Retrying\n",
344+
__func__,
345+
retry);
346+
}
347+
return ret;
348+
}
331349
static int altera_cvp_write_init(struct fpga_manager *mgr,
332350
struct fpga_image_info *info,
333351
const char *buf, size_t count)
@@ -360,7 +378,7 @@ static int altera_cvp_write_init(struct fpga_manager *mgr,
360378

361379
if (val & VSE_CVP_STATUS_CFG_RDY) {
362380
dev_warn(&mgr->dev, "CvP already started, tear down first\n");
363-
ret = altera_cvp_teardown(mgr, info);
381+
ret = altera_cvp_recovery(mgr, info);
364382
if (ret)
365383
return ret;
366384
}
@@ -505,7 +523,7 @@ static int altera_cvp_write_complete(struct fpga_manager *mgr,
505523
u32 mask, val;
506524
int ret;
507525

508-
ret = altera_cvp_teardown(mgr, info);
526+
ret = altera_cvp_recovery(mgr, info);
509527
if (ret)
510528
return ret;
511529

0 commit comments

Comments
 (0)