* [PATCH] accel/ivpu: Load firmware on cold boot
@ 2026-10-14 10:15 Andrzej Kacprowski
2026-10-14 11:07 ` Wachowski, Karol
2026-10-14 19:57 ` Jeff Hugo
0 siblings, 2 replies; 3+ messages in thread
From: Andrzej Kacprowski @ 2026-10-14 10:15 UTC (permalink / raw)
To: dri-devel
Cc: oded.gabbay, jeff.hugo, karol.wachowski, lizhi.hou,
dawid.osuchowski, Andrzej Kacprowski
Load the firmware image immediately before each cold boot
instead of during probe or cold-boot preparation.
This moves image loading to a single call site
and aligns code for future driver changes.
Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
---
drivers/accel/ivpu/ivpu_drv.c | 8 ++++++++
drivers/accel/ivpu/ivpu_fw.c | 5 ++---
drivers/accel/ivpu/ivpu_fw.h | 2 +-
drivers/accel/ivpu/ivpu_pm.c | 1 -
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
index ada18a36caef..61149b7c30c2 100644
--- a/drivers/accel/ivpu/ivpu_drv.c
+++ b/drivers/accel/ivpu/ivpu_drv.c
@@ -520,6 +520,14 @@ int ivpu_boot(struct ivpu_device *vdev)
ivpu_fw_boot_params_setup(vdev, ivpu_bo_vaddr(vdev->fw->mem_bp));
vdev->fw->last_boot_mode = vdev->fw->next_boot_mode;
+ if (!ivpu_fw_is_warm_boot(vdev)) {
+ ret = ivpu_fw_load(vdev);
+ if (ret) {
+ ivpu_err(vdev, "Failed to load the firmware: %d\n", ret);
+ return ret;
+ }
+ }
+
ret = ivpu_hw_boot_fw(vdev);
if (ret) {
ivpu_err(vdev, "Failed to start the firmware: %d\n", ret);
diff --git a/drivers/accel/ivpu/ivpu_fw.c b/drivers/accel/ivpu/ivpu_fw.c
index 71ac0a861935..96f5be23a867 100644
--- a/drivers/accel/ivpu/ivpu_fw.c
+++ b/drivers/accel/ivpu/ivpu_fw.c
@@ -473,8 +473,6 @@ int ivpu_fw_init(struct ivpu_device *vdev)
if (ret)
goto err_fw_release;
- ivpu_fw_load(vdev);
-
return 0;
err_fw_release:
@@ -488,7 +486,7 @@ void ivpu_fw_fini(struct ivpu_device *vdev)
ivpu_fw_release(vdev);
}
-void ivpu_fw_load(struct ivpu_device *vdev)
+int ivpu_fw_load(struct ivpu_device *vdev)
{
struct ivpu_fw_info *fw = vdev->fw;
u64 image_end_offset = fw->image_load_offset + fw->image_size;
@@ -505,6 +503,7 @@ void ivpu_fw_load(struct ivpu_device *vdev)
}
wmb(); /* Flush WC buffers after writing fw->mem */
+ return 0;
}
static void ivpu_fw_boot_params_print(struct ivpu_device *vdev, struct vpu_boot_params *boot_params)
diff --git a/drivers/accel/ivpu/ivpu_fw.h b/drivers/accel/ivpu/ivpu_fw.h
index e7045b47dfaf..45a705431f22 100644
--- a/drivers/accel/ivpu/ivpu_fw.h
+++ b/drivers/accel/ivpu/ivpu_fw.h
@@ -55,7 +55,7 @@ struct ivpu_fw_info {
bool ivpu_is_within_range(u64 addr, size_t size, struct ivpu_addr_range *range);
int ivpu_fw_init(struct ivpu_device *vdev);
void ivpu_fw_fini(struct ivpu_device *vdev);
-void ivpu_fw_load(struct ivpu_device *vdev);
+int ivpu_fw_load(struct ivpu_device *vdev);
void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params *boot_params);
static inline bool ivpu_fw_is_warm_boot(struct ivpu_device *vdev)
diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
index c1ce8329790e..cd4eff72f76c 100644
--- a/drivers/accel/ivpu/ivpu_pm.c
+++ b/drivers/accel/ivpu/ivpu_pm.c
@@ -46,7 +46,6 @@ static void ivpu_pm_prepare_cold_boot(struct ivpu_device *vdev)
ivpu_cmdq_reset_all_contexts(vdev);
ivpu_ipc_reset(vdev);
ivpu_fw_log_reset(vdev);
- ivpu_fw_load(vdev);
fw->last_heartbeat = 0;
ivpu_dbg(vdev, FW_BOOT, "Cold boot entry point 0x%llx", vdev->fw->cold_boot_entry_point);
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] accel/ivpu: Load firmware on cold boot
2026-10-14 10:15 [PATCH] accel/ivpu: Load firmware on cold boot Andrzej Kacprowski
@ 2026-10-14 11:07 ` Wachowski, Karol
2026-10-14 19:57 ` Jeff Hugo
1 sibling, 0 replies; 3+ messages in thread
From: Wachowski, Karol @ 2026-10-14 11:07 UTC (permalink / raw)
To: Andrzej Kacprowski, dri-devel
Cc: oded.gabbay, jeff.hugo, lizhi.hou, dawid.osuchowski
On 14-Oct-26 12:15, Andrzej Kacprowski wrote:
> Load the firmware image immediately before each cold boot
> instead of during probe or cold-boot preparation.
> This moves image loading to a single call site
> and aligns code for future driver changes.
>
> Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
> ---
> drivers/accel/ivpu/ivpu_drv.c | 8 ++++++++
> drivers/accel/ivpu/ivpu_fw.c | 5 ++---
> drivers/accel/ivpu/ivpu_fw.h | 2 +-
> drivers/accel/ivpu/ivpu_pm.c | 1 -
> 4 files changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c
> index ada18a36caef..61149b7c30c2 100644
> --- a/drivers/accel/ivpu/ivpu_drv.c
> +++ b/drivers/accel/ivpu/ivpu_drv.c
> @@ -520,6 +520,14 @@ int ivpu_boot(struct ivpu_device *vdev)
> ivpu_fw_boot_params_setup(vdev, ivpu_bo_vaddr(vdev->fw->mem_bp));
> vdev->fw->last_boot_mode = vdev->fw->next_boot_mode;
>
> + if (!ivpu_fw_is_warm_boot(vdev)) {
> + ret = ivpu_fw_load(vdev);
> + if (ret) {
> + ivpu_err(vdev, "Failed to load the firmware: %d\n", ret);
> + return ret;
> + }
> + }
> +
> ret = ivpu_hw_boot_fw(vdev);
> if (ret) {
> ivpu_err(vdev, "Failed to start the firmware: %d\n", ret);
> diff --git a/drivers/accel/ivpu/ivpu_fw.c b/drivers/accel/ivpu/ivpu_fw.c
> index 71ac0a861935..96f5be23a867 100644
> --- a/drivers/accel/ivpu/ivpu_fw.c
> +++ b/drivers/accel/ivpu/ivpu_fw.c
> @@ -473,8 +473,6 @@ int ivpu_fw_init(struct ivpu_device *vdev)
> if (ret)
> goto err_fw_release;
>
> - ivpu_fw_load(vdev);
> -
> return 0;
>
> err_fw_release:
> @@ -488,7 +486,7 @@ void ivpu_fw_fini(struct ivpu_device *vdev)
> ivpu_fw_release(vdev);
> }
>
> -void ivpu_fw_load(struct ivpu_device *vdev)
> +int ivpu_fw_load(struct ivpu_device *vdev)
> {
> struct ivpu_fw_info *fw = vdev->fw;
> u64 image_end_offset = fw->image_load_offset + fw->image_size;
> @@ -505,6 +503,7 @@ void ivpu_fw_load(struct ivpu_device *vdev)
> }
>
> wmb(); /* Flush WC buffers after writing fw->mem */
> + return 0;
> }
>
> static void ivpu_fw_boot_params_print(struct ivpu_device *vdev, struct vpu_boot_params *boot_params)
> diff --git a/drivers/accel/ivpu/ivpu_fw.h b/drivers/accel/ivpu/ivpu_fw.h
> index e7045b47dfaf..45a705431f22 100644
> --- a/drivers/accel/ivpu/ivpu_fw.h
> +++ b/drivers/accel/ivpu/ivpu_fw.h
> @@ -55,7 +55,7 @@ struct ivpu_fw_info {
> bool ivpu_is_within_range(u64 addr, size_t size, struct ivpu_addr_range *range);
> int ivpu_fw_init(struct ivpu_device *vdev);
> void ivpu_fw_fini(struct ivpu_device *vdev);
> -void ivpu_fw_load(struct ivpu_device *vdev);
> +int ivpu_fw_load(struct ivpu_device *vdev);
> void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params *boot_params);
>
> static inline bool ivpu_fw_is_warm_boot(struct ivpu_device *vdev)
> diff --git a/drivers/accel/ivpu/ivpu_pm.c b/drivers/accel/ivpu/ivpu_pm.c
> index c1ce8329790e..cd4eff72f76c 100644
> --- a/drivers/accel/ivpu/ivpu_pm.c
> +++ b/drivers/accel/ivpu/ivpu_pm.c
> @@ -46,7 +46,6 @@ static void ivpu_pm_prepare_cold_boot(struct ivpu_device *vdev)
> ivpu_cmdq_reset_all_contexts(vdev);
> ivpu_ipc_reset(vdev);
> ivpu_fw_log_reset(vdev);
> - ivpu_fw_load(vdev);
> fw->last_heartbeat = 0;
>
> ivpu_dbg(vdev, FW_BOOT, "Cold boot entry point 0x%llx", vdev->fw->cold_boot_entry_point);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] accel/ivpu: Load firmware on cold boot
2026-10-14 10:15 [PATCH] accel/ivpu: Load firmware on cold boot Andrzej Kacprowski
2026-10-14 11:07 ` Wachowski, Karol
@ 2026-10-14 19:57 ` Jeff Hugo
1 sibling, 0 replies; 3+ messages in thread
From: Jeff Hugo @ 2026-10-14 19:57 UTC (permalink / raw)
To: Andrzej Kacprowski, dri-devel
Cc: oded.gabbay, karol.wachowski, lizhi.hou, dawid.osuchowski
On 10/14/2026 4:15 AM, Andrzej Kacprowski wrote:
> Load the firmware image immediately before each cold boot
> instead of during probe or cold-boot preparation.
> This moves image loading to a single call site
> and aligns code for future driver changes.
>
> Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-14 19:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-14 10:15 [PATCH] accel/ivpu: Load firmware on cold boot Andrzej Kacprowski
2026-10-14 11:07 ` Wachowski, Karol
2026-10-14 19:57 ` Jeff Hugo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.