On Thu Aug 27 15:33:11 2026 +0300, Antti Laakso wrote:
> Move handling of hardware specific buffers out of common code, like
> ipu6-isys-video.c. Now the ipu6_put_fw_msg_buf() works with fw_msg_bufs,
> like its counterpart ipu6_get_fw_msg_buf().
> 
> Signed-off-by: Antti Laakso <[email protected]>
> Signed-off-by: Sakari Ailus <[email protected]>

Patch committed.

Thanks,
Sakari Ailus

 drivers/media/pci/intel/ipu6/ipu6-fw-isys.c    | 11 ++++++++++-
 drivers/media/pci/intel/ipu6/ipu6-isys-video.c |  6 +++---
 drivers/media/pci/intel/ipu6/ipu6-isys.c       |  7 ++-----
 drivers/media/pci/intel/ipu6/ipu6-isys.h       |  2 +-
 4 files changed, 16 insertions(+), 10 deletions(-)

---

diff --git a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c 
b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
index 7f7125202ffd..8906727ca84b 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-fw-isys.c
@@ -530,6 +530,7 @@ int ipu6_isys_isr_one(struct ipu6_bus_device *adev)
        struct ipu6_fw_isys_resp_info_abi *resp;
        struct ipu6_isys_stream *stream;
        struct ipu6_isys_csi2 *csi2 = NULL;
+       struct isys_fw_msgs *isys_fw_msg = NULL;
        u32 index;
        u64 ts;
 
@@ -598,7 +599,15 @@ int ipu6_isys_isr_one(struct ipu6_bus_device *adev)
                 * firmware only release the capture msg until software
                 * get pin_data_ready event
                 */
-               ipu6_put_fw_msg_buf(ipu6_bus_get_drvdata(adev), resp->buf_id);
+               if (!resp->buf_id)
+                       dev_warn(&adev->auxdev.dev, "%d: Invalid buf ID\n",
+                                resp->stream_handle);
+               else
+                       isys_fw_msg =
+                               container_of((void *)(uintptr_t)resp->buf_id,
+                                            struct isys_fw_msgs, ipu6.dummy);
+
+               ipu6_put_fw_msg_buf(ipu6_bus_get_drvdata(adev), isys_fw_msg);
                if (resp->pin_id < IPU6_ISYS_OUTPUT_PINS &&
                    stream->output_pins_queue[resp->pin_id])
                        ipu6_isys_queue_buf_ready(stream, resp);
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c 
b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
index c925386a1e98..fabea6a75d7d 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c
@@ -544,7 +544,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
 
                ret = ipu6_isys_fw_pin_cfg(__av, stream_cfg);
                if (ret < 0) {
-                       ipu6_put_fw_msg_buf(av->isys, (uintptr_t)stream_cfg);
+                       ipu6_put_fw_msg_buf(av->isys, msg);
                        return ret;
                }
        }
@@ -561,7 +561,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
                                       IPU6_FW_ISYS_SEND_TYPE_STREAM_OPEN);
        if (ret < 0) {
                dev_err(dev, "can't open stream (%d)\n", ret);
-               ipu6_put_fw_msg_buf(av->isys, (uintptr_t)stream_cfg);
+               ipu6_put_fw_msg_buf(av->isys, msg);
                return ret;
        }
 
@@ -570,7 +570,7 @@ static int start_stream_firmware(struct ipu6_isys_video *av,
        tout = wait_for_completion_timeout(&stream->stream_open_completion,
                                           IPU6_FW_CALL_TIMEOUT_JIFFIES);
 
-       ipu6_put_fw_msg_buf(av->isys, (uintptr_t)stream_cfg);
+       ipu6_put_fw_msg_buf(av->isys, msg);
 
        if (!tout) {
                dev_err(dev, "stream open time out\n");
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.c 
b/drivers/media/pci/intel/ipu6/ipu6-isys.c
index a58a35112ebd..bb3c0d6bc6c9 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.c
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.c
@@ -919,17 +919,14 @@ void ipu6_cleanup_fw_msg_bufs(struct ipu6_isys *isys)
        spin_unlock_irqrestore(&isys->listlock, flags);
 }
 
-void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, uintptr_t data)
+void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, struct isys_fw_msgs *msg)
 {
-       struct isys_fw_msgs *msg;
        unsigned long flags;
-       void *ptr = (void *)data;
 
-       if (!ptr)
+       if (!msg)
                return;
 
        spin_lock_irqsave(&isys->listlock, flags);
-       msg = container_of(ptr, struct isys_fw_msgs, ipu6.dummy);
        list_move(&msg->head, &isys->framebuflist);
        spin_unlock_irqrestore(&isys->listlock, flags);
 }
diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys.h 
b/drivers/media/pci/intel/ipu6/ipu6-isys.h
index abcd5e1cbc2c..f39566513a87 100644
--- a/drivers/media/pci/intel/ipu6/ipu6-isys.h
+++ b/drivers/media/pci/intel/ipu6/ipu6-isys.h
@@ -175,7 +175,7 @@ struct isys_fw_msgs {
 };
 
 struct isys_fw_msgs *ipu6_get_fw_msg_buf(struct ipu6_isys_stream *stream);
-void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, uintptr_t data);
+void ipu6_put_fw_msg_buf(struct ipu6_isys *isys, struct isys_fw_msgs *msg);
 void ipu6_cleanup_fw_msg_bufs(struct ipu6_isys *isys);
 
 extern const struct v4l2_ioctl_ops ipu6_isys_ioctl_ops;
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to