On Fri Jul 31 02:48:35 2026 +0300, Dmitry Baryshkov wrote:
> Upon receiving data for HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS the
> driver should update buffer sizes and counts from the received data.
> Implement corresponding functionality updating buffers data. This will
> be used for upcoming support of AR50Lt platforms with Gen1 firmware.
> 
> Reviewed-by: Vikash Garodia <[email protected]>
> Signed-off-by: Dmitry Baryshkov <[email protected]>
> Signed-off-by: Bryan O'Donoghue <[email protected]>

Patch committed.

Thanks,
Bryan O'Donoghue

 .../platform/qcom/iris/iris_hfi_gen1_response.c    | 76 +++++++++++++++++++++-
 1 file changed, 75 insertions(+), 1 deletion(-)

---

diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c 
b/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
index 23fc7194b1e3..7ad6f0bb4677 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
@@ -533,6 +533,80 @@ error:
        dev_err(core->dev, "error in ftb done\n");
 }
 
+static enum iris_buffer_type iris_hfi_gen1_buf_type(struct iris_inst *inst, 
u32 type)
+{
+       switch (type) {
+       case HFI_BUFFER_INPUT:
+               return BUF_INPUT;
+       case HFI_BUFFER_OUTPUT:
+               if (iris_split_mode_enabled(inst))
+                       return BUF_DPB;
+               return BUF_OUTPUT;
+       case HFI_BUFFER_OUTPUT2:
+               if (iris_split_mode_enabled(inst))
+                       return BUF_OUTPUT;
+               return BUF_DPB;
+       case HFI_BUFFER_INTERNAL_PERSIST_1:
+               return BUF_PERSIST;
+       case HFI_BUFFER_INTERNAL_SCRATCH:
+               return BUF_BIN;
+       case HFI_BUFFER_INTERNAL_SCRATCH_1:
+               return BUF_SCRATCH_1;
+       case HFI_BUFFER_INTERNAL_SCRATCH_2:
+               return BUF_SCRATCH_2;
+       case HFI_BUFFER_INTERNAL_PERSIST:
+               return BUF_ARP;
+       default:
+               return BUF_TYPE_MAX;
+       }
+}
+
+static void iris_hfi_gen1_session_buffer_requirements(struct iris_inst *inst,
+                                                     void *data, size_t size)
+{
+       struct hfi_buffer_requirements *req;
+
+       if (!size || size % sizeof(*req))
+               return;
+
+       for (req = data; size; size -= sizeof(*req), req++) {
+               enum iris_buffer_type type = iris_hfi_gen1_buf_type(inst, 
req->type);
+
+               if (type == BUF_TYPE_MAX)
+                       continue;
+
+               /* on relevant platforms hold_count and min_count are swapped */
+               inst->buffers[type].min_count = req->hold_count;
+               inst->buffers[type].size = req->size;
+
+               if (type == BUF_OUTPUT)
+                       inst->fw_min_count = req->count_actual;
+       }
+}
+
+static void iris_hfi_gen1_session_property_info(struct iris_inst *inst, void 
*packet)
+{
+       struct hfi_msg_session_property_info_pkt *pkt = packet;
+
+       if (pkt->num_properties != 1) {
+               dev_warn_ratelimited(inst->core->dev, "%s: expected 1 property, 
got %u\n",
+                                    __func__, pkt->num_properties);
+               goto out;
+       }
+
+       switch (pkt->property) {
+       case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
+               iris_hfi_gen1_session_buffer_requirements(inst, pkt->data,
+                                                         pkt->shdr.hdr.size - 
sizeof(*pkt));
+               break;
+       default:
+               dev_warn(inst->core->dev, "unknown property id: %x\n", 
pkt->property);
+       }
+
+out:
+       complete(&inst->completion);
+}
+
 struct iris_hfi_gen1_response_pkt_info {
        u32 pkt;
        u32 pkt_sz;
@@ -657,7 +731,7 @@ static void iris_hfi_gen1_handle_response(struct iris_core 
*core, void *response
                } else if (hdr->pkt_type == HFI_MSG_SESSION_FILL_BUFFER) {
                        iris_hfi_gen1_session_ftb_done(inst, hdr);
                } else if (hdr->pkt_type == HFI_MSG_SESSION_PROPERTY_INFO) {
-                       complete(&inst->completion);
+                       iris_hfi_gen1_session_property_info(inst, hdr);
                } else {
                        struct hfi_msg_session_hdr_pkt *shdr;
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to