diff options
Diffstat (limited to 'drivers/misc/mic/host/mic_x100.c')
-rw-r--r-- | drivers/misc/mic/host/mic_x100.c | 19 |
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 | |||
484 | error: | 490 | error: |
485 | dev_dbg(&mdev->pdev->dev, "%s %d rc %d\n", __func__, __LINE__, rc); | 491 | release_firmware(fw); |
486 | done: | ||
487 | return rc; | 492 | return rc; |
488 | } | 493 | } |
489 | 494 | ||