aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mic/host/mic_x100.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mic/host/mic_x100.c')
-rw-r--r--drivers/misc/mic/host/mic_x100.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/misc/mic/host/mic_x100.c b/drivers/misc/mic/host/mic_x100.c
index 8118ac48c764..82a973c85b5d 100644
--- a/drivers/misc/mic/host/mic_x100.c
+++ b/drivers/misc/mic/host/mic_x100.c
@@ -450,26 +450,29 @@ mic_x100_load_firmware(struct mic_device *mdev, const char *buf)
450 450
451 rc = mic_x100_get_boot_addr(mdev); 451 rc = mic_x100_get_boot_addr(mdev);
452 if (rc) 452 if (rc)
453 goto error; 453 return rc;
454 /* load OS */ 454 /* load OS */
455 rc = request_firmware(&fw, mdev->cosm_dev->firmware, &mdev->pdev->dev); 455 rc = request_firmware(&fw, mdev->cosm_dev->firmware, &mdev->pdev->dev);
456 if (rc < 0) { 456 if (rc < 0) {
457 dev_err(&mdev->pdev->dev, 457 dev_err(&mdev->pdev->dev,
458 "ramdisk request_firmware failed: %d %s\n", 458 "ramdisk request_firmware failed: %d %s\n",
459 rc, mdev->cosm_dev->firmware); 459 rc, mdev->cosm_dev->firmware);
460 goto error; 460 return rc;
461 } 461 }
462 if (mdev->bootaddr > mdev->aper.len - fw->size) { 462 if (mdev->bootaddr > mdev->aper.len - fw->size) {
463 rc = -EINVAL; 463 rc = -EINVAL;
464 dev_err(&mdev->pdev->dev, "%s %d rc %d bootaddr 0x%x\n", 464 dev_err(&mdev->pdev->dev, "%s %d rc %d bootaddr 0x%x\n",
465 __func__, __LINE__, rc, mdev->bootaddr); 465 __func__, __LINE__, rc, mdev->bootaddr);
466 release_firmware(fw);
467 goto error; 466 goto error;
468 } 467 }
469 memcpy_toio(mdev->aper.va + mdev->bootaddr, fw->data, fw->size); 468 memcpy_toio(mdev->aper.va + mdev->bootaddr, fw->data, fw->size);
470 mdev->ops->write_spad(mdev, MIC_X100_FW_SIZE, fw->size); 469 mdev->ops->write_spad(mdev, MIC_X100_FW_SIZE, fw->size);
471 if (!strcmp(mdev->cosm_dev->bootmode, "flash")) 470 if (!strcmp(mdev->cosm_dev->bootmode, "flash")) {
472 goto done; 471 rc = -EINVAL;
472 dev_err(&mdev->pdev->dev, "%s %d rc %d\n",
473 __func__, __LINE__, rc);
474 goto error;
475 }
473 /* load command line */ 476 /* load command line */
474 rc = mic_x100_load_command_line(mdev, fw); 477 rc = mic_x100_load_command_line(mdev, fw);
475 if (rc) { 478 if (rc) {
@@ -481,9 +484,11 @@ mic_x100_load_firmware(struct mic_device *mdev, const char *buf)
481 /* load ramdisk */ 484 /* load ramdisk */
482 if (mdev->cosm_dev->ramdisk) 485 if (mdev->cosm_dev->ramdisk)
483 rc = mic_x100_load_ramdisk(mdev); 486 rc = mic_x100_load_ramdisk(mdev);
487
488 return rc;
489
484error: 490error:
485 dev_dbg(&mdev->pdev->dev, "%s %d rc %d\n", __func__, __LINE__, rc); 491 release_firmware(fw);
486done:
487 return rc; 492 return rc;
488} 493}
489 494