accel/ivpu: Reset fw log on cold boot
authorTomasz Rusinowicz <tomasz.rusinowicz@intel.com>
Mon, 30 Sep 2024 19:52:54 +0000 (21:52 +0200)
committerJacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Fri, 11 Oct 2024 10:35:58 +0000 (12:35 +0200)
Add ivpu_fw_log_reset() that resets the read_index of all FW logs
on cold boot so logs are properly read.

Signed-off-by: Tomasz Rusinowicz <tomasz.rusinowicz@intel.com>
Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240930195322.461209-4-jacek.lawrynowicz@linux.intel.com
Signed-off-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com>
drivers/accel/ivpu/ivpu_fw_log.c
drivers/accel/ivpu/ivpu_fw_log.h
drivers/accel/ivpu/ivpu_pm.c

index 2f2d324..817210e 100644 (file)
@@ -140,3 +140,17 @@ void ivpu_fw_log_clear(struct ivpu_device *vdev)
        while (fw_log_ptr(vdev, vdev->fw->mem_log_verb, &next, &log_header) == 0)
                log_header->read_index = log_header->write_index;
 }
+
+void ivpu_fw_log_reset(struct ivpu_device *vdev)
+{
+       struct vpu_tracing_buffer_header *log_header;
+       u32 next;
+
+       next = 0;
+       while (fw_log_ptr(vdev, vdev->fw->mem_log_crit, &next, &log_header) == 0)
+               log_header->read_index = 0;
+
+       next = 0;
+       while (fw_log_ptr(vdev, vdev->fw->mem_log_verb, &next, &log_header) == 0)
+               log_header->read_index = 0;
+}
index ccef429..a033ce2 100644 (file)
@@ -27,6 +27,7 @@ extern unsigned int ivpu_fw_log_level;
 
 void ivpu_fw_log_print(struct ivpu_device *vdev, bool only_new_msgs, struct drm_printer *p);
 void ivpu_fw_log_clear(struct ivpu_device *vdev);
+void ivpu_fw_log_reset(struct ivpu_device *vdev);
 
 static inline void ivpu_fw_log_dump(struct ivpu_device *vdev)
 {
index 59d3170..3c36b55 100644 (file)
@@ -37,6 +37,7 @@ 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->entry_point = fw->cold_boot_entry_point;
 }