* [PATCH v2 1/8] media: iris: turn platform caps into constants
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 2/8] media: iris: turn platform data " Dmitry Baryshkov
` (6 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel, Bryan O'Donoghue
Make all struct platform_inst_fw_cap instances constant, they are not
modified at runtime.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_ctrls.c | 2 +-
drivers/media/platform/qcom/iris/iris_platform_common.h | 4 ++--
drivers/media/platform/qcom/iris/iris_platform_gen2.c | 4 ++--
drivers/media/platform/qcom/iris/iris_platform_qcs8300.h | 4 ++--
drivers/media/platform/qcom/iris/iris_platform_sm8250.c | 4 ++--
5 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 754a5ad718bc37630bb861012301df7a2e7342a1..9da050aa1f7ce8152dfa46a706e2c27adfb5d6ce 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -301,7 +301,7 @@ int iris_ctrls_init(struct iris_inst *inst)
void iris_session_init_caps(struct iris_core *core)
{
- struct platform_inst_fw_cap *caps;
+ const struct platform_inst_fw_cap *caps;
u32 i, num_cap, cap_id;
caps = core->iris_platform_data->inst_fw_caps_dec;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 58d05e0a112eed25faea027a34c719c89d6c3897..17ed86bf78bb3b0bc3f0862253fba6505ac3d164 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -215,9 +215,9 @@ struct iris_platform_data {
const char *fwname;
u32 pas_id;
struct platform_inst_caps *inst_caps;
- struct platform_inst_fw_cap *inst_fw_caps_dec;
+ const struct platform_inst_fw_cap *inst_fw_caps_dec;
u32 inst_fw_caps_dec_size;
- struct platform_inst_fw_cap *inst_fw_caps_enc;
+ const struct platform_inst_fw_cap *inst_fw_caps_enc;
u32 inst_fw_caps_enc_size;
struct tz_cp_config *tz_cp_config_data;
u32 core_arch;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index 36d69cc73986b74534a2912524c8553970fd862e..cbf38e13f89e5c4c46e759fbb86777854d751552 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -19,7 +19,7 @@
#define VIDEO_ARCH_LX 1
#define BITRATE_MAX 245000000
-static struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
{
.cap_id = PROFILE_H264,
.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
@@ -203,7 +203,7 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
},
};
-static struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_sm8550_enc[] = {
{
.cap_id = PROFILE_H264,
.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
diff --git a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
index 35ea0efade73caa687d300779c5b1dc3b17a0128..87517361a1cf4b6fe53b8a1483188670df52c7e7 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
@@ -5,7 +5,7 @@
#define BITRATE_MAX 245000000
-static struct platform_inst_fw_cap inst_fw_cap_qcs8300_dec[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_qcs8300_dec[] = {
{
.cap_id = PROFILE_H264,
.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
@@ -189,7 +189,7 @@ static struct platform_inst_fw_cap inst_fw_cap_qcs8300_dec[] = {
},
};
-static struct platform_inst_fw_cap inst_fw_cap_qcs8300_enc[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_qcs8300_enc[] = {
{
.cap_id = PROFILE_H264,
.min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
index 16486284f8acccf6a95a27f6003e885226e28f4d..e29cba993fde922b579eb7e5a59ae34bb46f9f0f 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
@@ -17,7 +17,7 @@
#define BITRATE_PEAK_DEFAULT (BITRATE_DEFAULT * 2)
#define BITRATE_STEP 100
-static struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
{
.cap_id = PIPE,
.min = PIPE_1,
@@ -38,7 +38,7 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
},
};
-static struct platform_inst_fw_cap inst_fw_cap_sm8250_enc[] = {
+static const struct platform_inst_fw_cap inst_fw_cap_sm8250_enc[] = {
{
.cap_id = STAGE,
.min = STAGE_1,
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 2/8] media: iris: turn platform data into constants
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 1/8] media: iris: turn platform caps into constants Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 3/8] media: iris: stop copying r/o data Dmitry Baryshkov
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel, Bryan O'Donoghue
Make all struct iris_platform_data instances constant, they are not
modified at runtime.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_platform_common.h | 10 +++++-----
drivers/media/platform/qcom/iris/iris_platform_gen2.c | 8 ++++----
drivers/media/platform/qcom/iris/iris_platform_sm8250.c | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 17ed86bf78bb3b0bc3f0862253fba6505ac3d164..5ffc1874e8c6362b1c650e912c230e9c4e3bd160 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -41,11 +41,11 @@ enum pipe_type {
PIPE_4 = 4,
};
-extern struct iris_platform_data qcs8300_data;
-extern struct iris_platform_data sm8250_data;
-extern struct iris_platform_data sm8550_data;
-extern struct iris_platform_data sm8650_data;
-extern struct iris_platform_data sm8750_data;
+extern const struct iris_platform_data qcs8300_data;
+extern const struct iris_platform_data sm8250_data;
+extern const struct iris_platform_data sm8550_data;
+extern const struct iris_platform_data sm8650_data;
+extern const struct iris_platform_data sm8750_data;
enum platform_clk_type {
IRIS_AXI_CLK, /* AXI0 in case of platforms with multiple AXI clocks */
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index cbf38e13f89e5c4c46e759fbb86777854d751552..b444e816355624bca8248cce9da7adcd7caf6c5b 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -737,7 +737,7 @@ static const u32 sm8550_enc_op_int_buf_tbl[] = {
BUF_SCRATCH_2,
};
-struct iris_platform_data sm8550_data = {
+const struct iris_platform_data sm8550_data = {
.get_instance = iris_hfi_gen2_get_instance,
.init_hfi_command_ops = iris_hfi_gen2_command_ops_init,
.init_hfi_response_ops = iris_hfi_gen2_response_ops_init,
@@ -827,7 +827,7 @@ struct iris_platform_data sm8550_data = {
* - controller_rst_tbl to sm8650_controller_reset_table
* - fwname to "qcom/vpu/vpu33_p4.mbn"
*/
-struct iris_platform_data sm8650_data = {
+const struct iris_platform_data sm8650_data = {
.get_instance = iris_hfi_gen2_get_instance,
.init_hfi_command_ops = iris_hfi_gen2_command_ops_init,
.init_hfi_response_ops = iris_hfi_gen2_response_ops_init,
@@ -912,7 +912,7 @@ struct iris_platform_data sm8650_data = {
.enc_op_int_buf_tbl_size = ARRAY_SIZE(sm8550_enc_op_int_buf_tbl),
};
-struct iris_platform_data sm8750_data = {
+const struct iris_platform_data sm8750_data = {
.get_instance = iris_hfi_gen2_get_instance,
.init_hfi_command_ops = iris_hfi_gen2_command_ops_init,
.init_hfi_response_ops = iris_hfi_gen2_response_ops_init,
@@ -998,7 +998,7 @@ struct iris_platform_data sm8750_data = {
* - inst_caps to platform_inst_cap_qcs8300
* - inst_fw_caps to inst_fw_cap_qcs8300
*/
-struct iris_platform_data qcs8300_data = {
+const struct iris_platform_data qcs8300_data = {
.get_instance = iris_hfi_gen2_get_instance,
.init_hfi_command_ops = iris_hfi_gen2_command_ops_init,
.init_hfi_response_ops = iris_hfi_gen2_response_ops_init,
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
index e29cba993fde922b579eb7e5a59ae34bb46f9f0f..66a5bdd24d8a0e98b0554a019438bf4caa1dc43c 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
@@ -314,7 +314,7 @@ static const u32 sm8250_enc_ip_int_buf_tbl[] = {
BUF_SCRATCH_2,
};
-struct iris_platform_data sm8250_data = {
+const struct iris_platform_data sm8250_data = {
.get_instance = iris_hfi_gen1_get_instance,
.init_hfi_command_ops = &iris_hfi_gen1_command_ops_init,
.init_hfi_response_ops = iris_hfi_gen1_response_ops_init,
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 3/8] media: iris: stop copying r/o data
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 1/8] media: iris: turn platform caps into constants Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 2/8] media: iris: turn platform data " Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 4/8] media: iris: stop encoding PIPE value into fw_caps Dmitry Baryshkov
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel
Most of the platform_inst_caps data is read-only. In order to lower the
amount of memory consumed by the driver, store the value and the
corresponding index in the read-write data and use the rest via the
pointer to r/o capability data.
Keep all read-only flags inside platform_inst_fw_cap.flags and transform
CAP_FLAG_CLIENT_SET (which is being set per-instance once the client
changes any of the controls) into the boolean field inside struct
platform_inst_fw_cap_value.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_core.h | 4 +-
drivers/media/platform/qcom/iris/iris_ctrls.c | 238 ++++++++++-----------
drivers/media/platform/qcom/iris/iris_instance.h | 3 +-
.../platform/qcom/iris/iris_platform_common.h | 8 +-
drivers/media/platform/qcom/iris/iris_vdec.c | 5 +-
drivers/media/platform/qcom/iris/iris_venc.c | 5 +-
6 files changed, 135 insertions(+), 128 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_core.h b/drivers/media/platform/qcom/iris/iris_core.h
index fb194c967ad4f9b5e00cd74f0d41e0b827ef14db..b5037ae8c71921753c165a86a277a4a4b5083b30 100644
--- a/drivers/media/platform/qcom/iris/iris_core.h
+++ b/drivers/media/platform/qcom/iris/iris_core.h
@@ -115,8 +115,8 @@ struct iris_core {
struct delayed_work sys_error_handler;
struct list_head instances;
/* encoder and decoder have overlapping caps, so two different arrays are required */
- struct platform_inst_fw_cap inst_fw_caps_dec[INST_FW_CAP_MAX];
- struct platform_inst_fw_cap inst_fw_caps_enc[INST_FW_CAP_MAX];
+ struct platform_inst_fw_cap_value inst_fw_caps_dec[INST_FW_CAP_MAX];
+ struct platform_inst_fw_cap_value inst_fw_caps_enc[INST_FW_CAP_MAX];
};
int iris_core_init(struct iris_core *core);
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 9da050aa1f7ce8152dfa46a706e2c27adfb5d6ce..0e9adb3982a49cfd7cbe5110cfd5f573f0f7bb38 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -194,26 +194,28 @@ static int iris_op_s_ctrl(struct v4l2_ctrl *ctrl)
{
struct iris_inst *inst = container_of(ctrl->handler, struct iris_inst, ctrl_handler);
enum platform_inst_fw_cap_type cap_id;
- struct platform_inst_fw_cap *cap;
+ unsigned int cap_idx;
struct vb2_queue *q;
- cap = &inst->fw_caps[0];
cap_id = iris_get_cap_id(ctrl->id);
if (!iris_valid_cap_id(cap_id))
return -EINVAL;
+ cap_idx = inst->fw_caps[cap_id].idx;
+
q = v4l2_m2m_get_src_vq(inst->m2m_ctx);
if (vb2_is_streaming(q) &&
- (!(inst->fw_caps[cap_id].flags & CAP_FLAG_DYNAMIC_ALLOWED)))
+ (!(inst->inst_fw_caps[cap_id].flags & CAP_FLAG_DYNAMIC_ALLOWED)))
return -EINVAL;
- cap[cap_id].flags |= CAP_FLAG_CLIENT_SET;
+ inst->fw_caps[cap_id].client_set = true;
inst->fw_caps[cap_id].value = ctrl->val;
if (vb2_is_streaming(q)) {
- if (cap[cap_id].set)
- cap[cap_id].set(inst, cap_id);
+
+ if (inst->inst_fw_caps[cap_idx].set)
+ inst->inst_fw_caps[cap_idx].set(inst, cap_id);
}
return 0;
@@ -225,13 +227,14 @@ static const struct v4l2_ctrl_ops iris_ctrl_ops = {
int iris_ctrls_init(struct iris_inst *inst)
{
- struct platform_inst_fw_cap *cap = &inst->fw_caps[0];
u32 num_ctrls = 0, ctrl_idx = 0, idx = 0;
u32 v4l2_id;
int ret;
for (idx = 1; idx < INST_FW_CAP_MAX; idx++) {
- if (iris_get_v4l2_id(cap[idx].cap_id))
+ unsigned int cap_idx = inst->fw_caps[idx].idx;
+
+ if (iris_get_v4l2_id(inst->inst_fw_caps[cap_idx].cap_id))
num_ctrls++;
}
@@ -245,9 +248,11 @@ int iris_ctrls_init(struct iris_inst *inst)
return ret;
for (idx = 1; idx < INST_FW_CAP_MAX; idx++) {
+ unsigned int cap_idx = inst->fw_caps[idx].idx;
+ const struct platform_inst_fw_cap *cap = &inst->inst_fw_caps[cap_idx];
struct v4l2_ctrl *ctrl;
- v4l2_id = iris_get_v4l2_id(cap[idx].cap_id);
+ v4l2_id = iris_get_v4l2_id(cap->cap_id);
if (!v4l2_id)
continue;
@@ -256,21 +261,21 @@ int iris_ctrls_init(struct iris_inst *inst)
goto error;
}
- if (cap[idx].flags & CAP_FLAG_MENU) {
+ if (inst->inst_fw_caps[cap_idx].flags & CAP_FLAG_MENU) {
ctrl = v4l2_ctrl_new_std_menu(&inst->ctrl_handler,
&iris_ctrl_ops,
v4l2_id,
- cap[idx].max,
- ~(cap[idx].step_or_mask),
- cap[idx].value);
+ cap[cap_idx].max,
+ ~(cap[cap_idx].step_or_mask),
+ inst->fw_caps[idx].value);
} else {
ctrl = v4l2_ctrl_new_std(&inst->ctrl_handler,
&iris_ctrl_ops,
v4l2_id,
- cap[idx].min,
- cap[idx].max,
- cap[idx].step_or_mask,
- cap[idx].value);
+ cap[cap_idx].min,
+ cap[cap_idx].max,
+ cap[cap_idx].step_or_mask,
+ inst->fw_caps[idx].value);
}
if (!ctrl) {
ret = -EINVAL;
@@ -312,14 +317,8 @@ void iris_session_init_caps(struct iris_core *core)
if (!iris_valid_cap_id(cap_id))
continue;
- core->inst_fw_caps_dec[cap_id].cap_id = caps[i].cap_id;
- core->inst_fw_caps_dec[cap_id].min = caps[i].min;
- core->inst_fw_caps_dec[cap_id].max = caps[i].max;
- core->inst_fw_caps_dec[cap_id].step_or_mask = caps[i].step_or_mask;
+ core->inst_fw_caps_dec[cap_id].idx = i;
core->inst_fw_caps_dec[cap_id].value = caps[i].value;
- core->inst_fw_caps_dec[cap_id].flags = caps[i].flags;
- core->inst_fw_caps_dec[cap_id].hfi_id = caps[i].hfi_id;
- core->inst_fw_caps_dec[cap_id].set = caps[i].set;
}
caps = core->iris_platform_data->inst_fw_caps_enc;
@@ -330,29 +329,23 @@ void iris_session_init_caps(struct iris_core *core)
if (!iris_valid_cap_id(cap_id))
continue;
- core->inst_fw_caps_enc[cap_id].cap_id = caps[i].cap_id;
- core->inst_fw_caps_enc[cap_id].min = caps[i].min;
- core->inst_fw_caps_enc[cap_id].max = caps[i].max;
- core->inst_fw_caps_enc[cap_id].step_or_mask = caps[i].step_or_mask;
+ core->inst_fw_caps_enc[cap_id].idx = i;
core->inst_fw_caps_enc[cap_id].value = caps[i].value;
- core->inst_fw_caps_enc[cap_id].flags = caps[i].flags;
- core->inst_fw_caps_enc[cap_id].hfi_id = caps[i].hfi_id;
- core->inst_fw_caps_enc[cap_id].set = caps[i].set;
}
}
static u32 iris_get_port_info(struct iris_inst *inst,
- enum platform_inst_fw_cap_type cap_id)
+ unsigned int cap_idx)
{
if (inst->domain == DECODER) {
- if (inst->fw_caps[cap_id].flags & CAP_FLAG_INPUT_PORT)
+ if (inst->inst_fw_caps[cap_idx].flags & CAP_FLAG_INPUT_PORT)
return HFI_PORT_BITSTREAM;
- else if (inst->fw_caps[cap_id].flags & CAP_FLAG_OUTPUT_PORT)
+ else if (inst->inst_fw_caps[cap_idx].flags & CAP_FLAG_OUTPUT_PORT)
return HFI_PORT_RAW;
} else {
- if (inst->fw_caps[cap_id].flags & CAP_FLAG_INPUT_PORT)
+ if (inst->inst_fw_caps[cap_idx].flags & CAP_FLAG_INPUT_PORT)
return HFI_PORT_RAW;
- else if (inst->fw_caps[cap_id].flags & CAP_FLAG_OUTPUT_PORT)
+ else if (inst->inst_fw_caps[cap_idx].flags & CAP_FLAG_OUTPUT_PORT)
return HFI_PORT_BITSTREAM;
}
@@ -362,12 +355,13 @@ static u32 iris_get_port_info(struct iris_inst *inst,
int iris_set_u32_enum(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
u32 hfi_value = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&hfi_value, sizeof(u32));
}
@@ -375,12 +369,13 @@ int iris_set_u32_enum(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
int iris_set_u32(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
u32 hfi_value = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&hfi_value, sizeof(u32));
}
@@ -389,7 +384,8 @@ int iris_set_stage(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
struct v4l2_format *inp_f = inst->fmt_src;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 height = inp_f->fmt.pix_mp.height;
u32 width = inp_f->fmt.pix_mp.width;
u32 work_mode = STAGE_2;
@@ -401,7 +397,7 @@ int iris_set_stage(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&work_mode, sizeof(u32));
}
@@ -409,12 +405,13 @@ int iris_set_stage(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id
int iris_set_pipe(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 work_route = inst->fw_caps[PIPE].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&work_route, sizeof(u32));
}
@@ -422,19 +419,13 @@ int iris_set_pipe(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
int iris_set_profile(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
- u32 hfi_id, hfi_value;
-
- if (inst->codec == V4L2_PIX_FMT_H264) {
- hfi_id = inst->fw_caps[PROFILE_H264].hfi_id;
- hfi_value = inst->fw_caps[PROFILE_H264].value;
- } else {
- hfi_id = inst->fw_caps[PROFILE_HEVC].hfi_id;
- hfi_value = inst->fw_caps[PROFILE_HEVC].value;
- }
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
+ u32 hfi_value = inst->fw_caps[cap_id].value;
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&hfi_value, sizeof(u32));
}
@@ -442,19 +433,13 @@ int iris_set_profile(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_
int iris_set_level(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
- u32 hfi_id, hfi_value;
-
- if (inst->codec == V4L2_PIX_FMT_H264) {
- hfi_id = inst->fw_caps[LEVEL_H264].hfi_id;
- hfi_value = inst->fw_caps[LEVEL_H264].value;
- } else {
- hfi_id = inst->fw_caps[LEVEL_HEVC].hfi_id;
- hfi_value = inst->fw_caps[LEVEL_HEVC].value;
- }
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
+ u32 hfi_value = inst->fw_caps[cap_id].value;
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&hfi_value, sizeof(u32));
}
@@ -462,20 +447,19 @@ int iris_set_level(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id
int iris_set_profile_level_gen1(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
struct hfi_profile_level pl;
- if (inst->codec == V4L2_PIX_FMT_H264) {
- pl.profile = inst->fw_caps[PROFILE_H264].value;
+ pl.profile = inst->fw_caps[cap_id].value;
+ if (inst->codec == V4L2_PIX_FMT_H264)
pl.level = inst->fw_caps[LEVEL_H264].value;
- } else {
- pl.profile = inst->fw_caps[PROFILE_HEVC].value;
+ else
pl.level = inst->fw_caps[LEVEL_HEVC].value;
- }
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&pl, sizeof(u32));
}
@@ -484,7 +468,8 @@ int iris_set_header_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap_
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 header_mode = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 hfi_val;
if (header_mode == V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE)
@@ -494,7 +479,7 @@ int iris_set_header_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap_
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&hfi_val, sizeof(u32));
}
@@ -504,7 +489,8 @@ int iris_set_header_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap_
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 prepend_sps_pps = inst->fw_caps[PREPEND_SPSPPS_TO_IDR].value;
u32 header_mode = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 hfi_val;
if (prepend_sps_pps)
@@ -516,7 +502,7 @@ int iris_set_header_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap_
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&hfi_val, sizeof(u32));
}
@@ -526,7 +512,8 @@ int iris_set_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 entropy_mode = inst->fw_caps[ENTROPY_MODE].value;
u32 bitrate = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 max_bitrate;
if (inst->codec == V4L2_PIX_FMT_HEVC)
@@ -541,7 +528,7 @@ int iris_set_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&bitrate, sizeof(u32));
}
@@ -552,12 +539,13 @@ int iris_set_peak_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_type
u32 rc_mode = inst->fw_caps[BITRATE_MODE].value;
u32 peak_bitrate = inst->fw_caps[cap_id].value;
u32 bitrate = inst->fw_caps[BITRATE].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
if (rc_mode != V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)
return 0;
- if (inst->fw_caps[cap_id].flags & CAP_FLAG_CLIENT_SET) {
+ if (inst->fw_caps[cap_id].client_set) {
if (peak_bitrate < bitrate)
peak_bitrate = bitrate;
} else {
@@ -568,7 +556,7 @@ int iris_set_peak_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_type
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&peak_bitrate, sizeof(u32));
}
@@ -579,7 +567,8 @@ int iris_set_bitrate_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap
u32 bitrate_mode = inst->fw_caps[BITRATE_MODE].value;
u32 frame_rc = inst->fw_caps[FRAME_RC_ENABLE].value;
u32 frame_skip = inst->fw_caps[FRAME_SKIP_MODE].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 rc_mode = 0;
if (!frame_rc)
@@ -595,7 +584,7 @@ int iris_set_bitrate_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&rc_mode, sizeof(u32));
}
@@ -606,7 +595,8 @@ int iris_set_bitrate_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap
u32 bitrate_mode = inst->fw_caps[BITRATE_MODE].value;
u32 frame_rc = inst->fw_caps[FRAME_RC_ENABLE].value;
u32 frame_skip = inst->fw_caps[FRAME_SKIP_MODE].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 rc_mode = 0;
if (!frame_rc)
@@ -622,7 +612,7 @@ int iris_set_bitrate_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32_ENUM,
&rc_mode, sizeof(u32));
}
@@ -631,7 +621,8 @@ int iris_set_entropy_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 entropy_mode = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 hfi_val;
if (inst->codec != V4L2_PIX_FMT_H264)
@@ -642,7 +633,7 @@ int iris_set_entropy_mode_gen1(struct iris_inst *inst, enum platform_inst_fw_cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&hfi_val, sizeof(u32));
}
@@ -651,7 +642,8 @@ int iris_set_entropy_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 entropy_mode = inst->fw_caps[cap_id].value;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 profile;
if (inst->codec != V4L2_PIX_FMT_H264)
@@ -667,7 +659,7 @@ int iris_set_entropy_mode_gen2(struct iris_inst *inst, enum platform_inst_fw_cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_U32,
&entropy_mode, sizeof(u32));
}
@@ -678,32 +670,33 @@ int iris_set_min_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
u32 i_qp_enable = 0, p_qp_enable = 0, b_qp_enable = 0;
u32 i_frame_qp = 0, p_frame_qp = 0, b_frame_qp = 0;
u32 min_qp_enable = 0, client_qp_enable = 0;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 hfi_val;
if (inst->codec == V4L2_PIX_FMT_H264) {
- if (inst->fw_caps[MIN_FRAME_QP_H264].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[MIN_FRAME_QP_H264].client_set)
min_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[I_FRAME_MIN_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[I_FRAME_MIN_QP_H264].client_set))
i_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[P_FRAME_MIN_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[P_FRAME_MIN_QP_H264].client_set))
p_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[B_FRAME_MIN_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[B_FRAME_MIN_QP_H264].client_set))
b_qp_enable = 1;
} else {
- if (inst->fw_caps[MIN_FRAME_QP_HEVC].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[MIN_FRAME_QP_HEVC].client_set)
min_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[I_FRAME_MIN_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[I_FRAME_MIN_QP_HEVC].client_set))
i_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[P_FRAME_MIN_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[P_FRAME_MIN_QP_HEVC].client_set))
p_qp_enable = 1;
if (min_qp_enable ||
- (inst->fw_caps[B_FRAME_MIN_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[B_FRAME_MIN_QP_HEVC].client_set))
b_qp_enable = 1;
}
@@ -731,7 +724,7 @@ int iris_set_min_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_32_PACKED,
&hfi_val, sizeof(u32));
}
@@ -742,32 +735,33 @@ int iris_set_max_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
u32 i_qp_enable = 0, p_qp_enable = 0, b_qp_enable = 0;
u32 max_qp_enable = 0, client_qp_enable;
u32 i_frame_qp, p_frame_qp, b_frame_qp;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
u32 hfi_val;
if (inst->codec == V4L2_PIX_FMT_H264) {
- if (inst->fw_caps[MAX_FRAME_QP_H264].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[MAX_FRAME_QP_H264].client_set)
max_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[I_FRAME_MAX_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[I_FRAME_MAX_QP_H264].client_set))
i_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[P_FRAME_MAX_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[P_FRAME_MAX_QP_H264].client_set))
p_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[B_FRAME_MAX_QP_H264].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[B_FRAME_MAX_QP_H264].client_set))
b_qp_enable = 1;
} else {
- if (inst->fw_caps[MAX_FRAME_QP_HEVC].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[MAX_FRAME_QP_HEVC].client_set)
max_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[I_FRAME_MAX_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[I_FRAME_MAX_QP_HEVC].client_set))
i_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[P_FRAME_MAX_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[P_FRAME_MAX_QP_HEVC].client_set))
p_qp_enable = 1;
if (max_qp_enable ||
- (inst->fw_caps[B_FRAME_MAX_QP_HEVC].flags & CAP_FLAG_CLIENT_SET))
+ (inst->fw_caps[B_FRAME_MAX_QP_HEVC].client_set))
b_qp_enable = 1;
}
@@ -796,7 +790,7 @@ int iris_set_max_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_i
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_32_PACKED,
&hfi_val, sizeof(u32));
}
@@ -806,7 +800,8 @@ int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
u32 i_qp_enable = 0, p_qp_enable = 0, b_qp_enable = 0, client_qp_enable;
u32 i_frame_qp, p_frame_qp, b_frame_qp;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
struct vb2_queue *q;
u32 hfi_val;
@@ -822,18 +817,18 @@ int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
b_qp_enable = 1;
} else {
if (inst->codec == V4L2_PIX_FMT_H264) {
- if (inst->fw_caps[I_FRAME_QP_H264].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[I_FRAME_QP_H264].client_set)
i_qp_enable = 1;
- if (inst->fw_caps[P_FRAME_QP_H264].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[P_FRAME_QP_H264].client_set)
p_qp_enable = 1;
- if (inst->fw_caps[B_FRAME_QP_H264].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[B_FRAME_QP_H264].client_set)
b_qp_enable = 1;
} else {
- if (inst->fw_caps[I_FRAME_QP_HEVC].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[I_FRAME_QP_HEVC].client_set)
i_qp_enable = 1;
- if (inst->fw_caps[P_FRAME_QP_HEVC].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[P_FRAME_QP_HEVC].client_set)
p_qp_enable = 1;
- if (inst->fw_caps[B_FRAME_QP_HEVC].flags & CAP_FLAG_CLIENT_SET)
+ if (inst->fw_caps[B_FRAME_QP_HEVC].client_set)
b_qp_enable = 1;
}
}
@@ -857,7 +852,7 @@ int iris_set_frame_qp(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_32_PACKED,
&hfi_val, sizeof(u32));
}
@@ -866,7 +861,8 @@ int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
struct hfi_quantization_range_v2 range;
- u32 hfi_id = inst->fw_caps[cap_id].hfi_id;
+ unsigned int cap_idx = inst->fw_caps[cap_id].idx;
+ u32 hfi_id = inst->inst_fw_caps[cap_idx].hfi_id;
if (inst->codec == V4L2_PIX_FMT_HEVC) {
range.min_qp.qp_packed = inst->fw_caps[MIN_FRAME_QP_HEVC].value;
@@ -878,7 +874,7 @@ int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
return hfi_ops->session_set_property(inst, hfi_id,
HFI_HOST_FLAGS_NONE,
- iris_get_port_info(inst, cap_id),
+ iris_get_port_info(inst, cap_idx),
HFI_PAYLOAD_32_PACKED,
&range, sizeof(range));
}
@@ -886,7 +882,7 @@ int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_type cap
int iris_set_properties(struct iris_inst *inst, u32 plane)
{
const struct iris_hfi_command_ops *hfi_ops = inst->core->hfi_ops;
- struct platform_inst_fw_cap *cap;
+ const struct platform_inst_fw_cap *cap;
int ret;
u32 i;
@@ -895,7 +891,9 @@ int iris_set_properties(struct iris_inst *inst, u32 plane)
return ret;
for (i = 1; i < INST_FW_CAP_MAX; i++) {
- cap = &inst->fw_caps[i];
+ unsigned int cap_idx = inst->fw_caps[i].idx;
+
+ cap = &inst->inst_fw_caps[cap_idx];
if (!iris_valid_cap_id(cap->cap_id))
continue;
diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/media/platform/qcom/iris/iris_instance.h
index 5982d7adefeab80905478b32cddba7bd4651a691..39d74bef4d188abb919c372b7529d1d0773bd96a 100644
--- a/drivers/media/platform/qcom/iris/iris_instance.h
+++ b/drivers/media/platform/qcom/iris/iris_instance.h
@@ -82,7 +82,8 @@ struct iris_inst {
struct completion completion;
struct completion flush_completion;
u32 flush_responses_pending;
- struct platform_inst_fw_cap fw_caps[INST_FW_CAP_MAX];
+ struct platform_inst_fw_cap_value fw_caps[INST_FW_CAP_MAX];
+ const struct platform_inst_fw_cap *inst_fw_caps;
struct iris_buffers buffers[BUF_TYPE_MAX];
u32 fw_min_count;
enum iris_inst_state state;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 5ffc1874e8c6362b1c650e912c230e9c4e3bd160..104ff38219e30e6d52476d44b54338c55ef2ca7b 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -148,7 +148,7 @@ enum platform_inst_fw_cap_flags {
CAP_FLAG_MENU = BIT(1),
CAP_FLAG_INPUT_PORT = BIT(2),
CAP_FLAG_OUTPUT_PORT = BIT(3),
- CAP_FLAG_CLIENT_SET = BIT(4),
+ // BIT(4)
CAP_FLAG_BITMASK = BIT(5),
CAP_FLAG_VOLATILE = BIT(6),
};
@@ -165,6 +165,12 @@ struct platform_inst_fw_cap {
enum platform_inst_fw_cap_type cap_id);
};
+struct platform_inst_fw_cap_value {
+ unsigned int idx;
+ s64 value;
+ bool client_set;
+};
+
struct bw_info {
u32 mbs_per_sec;
u32 bw_ddr;
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/platform/qcom/iris/iris_vdec.c
index ae13c3e1b426bfd81a7b46dc6c3ff5eb5c4860cb..72559497e81c30373711e9b113582039f1fb5153 100644
--- a/drivers/media/platform/qcom/iris/iris_vdec.c
+++ b/drivers/media/platform/qcom/iris/iris_vdec.c
@@ -55,8 +55,9 @@ int iris_vdec_inst_init(struct iris_inst *inst)
inst->buffers[BUF_OUTPUT].min_count = iris_vpu_buf_count(inst, BUF_OUTPUT);
inst->buffers[BUF_OUTPUT].size = f->fmt.pix_mp.plane_fmt[0].sizeimage;
- memcpy(&inst->fw_caps[0], &core->inst_fw_caps_dec[0],
- INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
+ memcpy(inst->fw_caps, core->inst_fw_caps_dec,
+ sizeof(inst->fw_caps));
+ inst->inst_fw_caps = core->iris_platform_data->inst_fw_caps_dec;
return iris_ctrls_init(inst);
}
diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/platform/qcom/iris/iris_venc.c
index 099bd5ed4ae0294725860305254c4cad1ec88d7e..3d1d481f8048305ef9a9bf0cb435ebca68563105 100644
--- a/drivers/media/platform/qcom/iris/iris_venc.c
+++ b/drivers/media/platform/qcom/iris/iris_venc.c
@@ -68,8 +68,9 @@ int iris_venc_inst_init(struct iris_inst *inst)
inst->operating_rate = DEFAULT_FPS;
inst->frame_rate = DEFAULT_FPS;
- memcpy(&inst->fw_caps[0], &core->inst_fw_caps_enc[0],
- INST_FW_CAP_MAX * sizeof(struct platform_inst_fw_cap));
+ memcpy(inst->fw_caps, core->inst_fw_caps_enc,
+ sizeof(inst->fw_caps));
+ inst->inst_fw_caps = core->iris_platform_data->inst_fw_caps_enc;
return iris_ctrls_init(inst);
}
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 4/8] media: iris: stop encoding PIPE value into fw_caps
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
` (2 preceding siblings ...)
2025-10-12 16:23 ` [PATCH v2 3/8] media: iris: stop copying r/o data Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 5/8] media: iris: remove duplicateion between generic gen2 data and qcs8300 Dmitry Baryshkov
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel
The value of the PIPE property depends on the number of pipes available
on the platform and is frequently the only difference between several
fw_caps. In order to reduce duplciation, use num_vpp_pipe from the
iris_platform_data rather than hardcoding the value into the fw_cap.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_ctrls.c | 6 +++++-
drivers/media/platform/qcom/iris/iris_platform_gen2.c | 4 ++--
drivers/media/platform/qcom/iris/iris_platform_qcs8300.h | 4 ++--
drivers/media/platform/qcom/iris/iris_platform_sm8250.c | 4 ++--
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c
index 0e9adb3982a49cfd7cbe5110cfd5f573f0f7bb38..8db3fa222bdb92a7ffff3dfe62d33f16c0550757 100644
--- a/drivers/media/platform/qcom/iris/iris_ctrls.c
+++ b/drivers/media/platform/qcom/iris/iris_ctrls.c
@@ -318,7 +318,11 @@ void iris_session_init_caps(struct iris_core *core)
continue;
core->inst_fw_caps_dec[cap_id].idx = i;
- core->inst_fw_caps_dec[cap_id].value = caps[i].value;
+ if (cap_id == PIPE)
+ core->inst_fw_caps_dec[cap_id].value =
+ core->iris_platform_data->num_vpp_pipe;
+ else
+ core->inst_fw_caps_dec[cap_id].value = caps[i].value;
}
caps = core->iris_platform_data->inst_fw_caps_enc;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index b444e816355624bca8248cce9da7adcd7caf6c5b..7ad03a800356ae9fb73bdbd6d09928d0b500cb3c 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -161,9 +161,9 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
{
.cap_id = PIPE,
.min = PIPE_1,
- .max = PIPE_4,
+ /* .max is set via platform data */
.step_or_mask = 1,
- .value = PIPE_4,
+ /* .value is set via platform data */
.hfi_id = HFI_PROP_PIPE,
.set = iris_set_pipe,
},
diff --git a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
index 87517361a1cf4b6fe53b8a1483188670df52c7e7..612526a938eed0554fc0da99e12c26d22e04bb6e 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
@@ -147,9 +147,9 @@ static const struct platform_inst_fw_cap inst_fw_cap_qcs8300_dec[] = {
{
.cap_id = PIPE,
.min = PIPE_1,
- .max = PIPE_2,
+ /* .max is set via platform data */
.step_or_mask = 1,
- .value = PIPE_2,
+ /* .value is set via platform data */
.hfi_id = HFI_PROP_PIPE,
.set = iris_set_pipe,
},
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
index 66a5bdd24d8a0e98b0554a019438bf4caa1dc43c..2b3b8bd00a6096acaae928318d9231847ec89855 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c
@@ -21,9 +21,9 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
{
.cap_id = PIPE,
.min = PIPE_1,
- .max = PIPE_4,
+ /* .max is set via platform data */
.step_or_mask = 1,
- .value = PIPE_4,
+ /* .value is set via platform data */
.hfi_id = HFI_PROPERTY_PARAM_WORK_ROUTE,
.set = iris_set_pipe,
},
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 5/8] media: iris: remove duplicateion between generic gen2 data and qcs8300
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
` (3 preceding siblings ...)
2025-10-12 16:23 ` [PATCH v2 4/8] media: iris: stop encoding PIPE value into fw_caps Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 6/8] media: iris: rename sm8250 platform file to gen1 Dmitry Baryshkov
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel
Now as we have removed PIPE value from inst_fw_caps_dec there should be
no difference between inst_fw_caps of QCS8300 and SM8550+. Drop the
QCS8300-specific tables and use generic one instead.
The differences between QCS8300 and SM8550 data comes from a
non-conflict merge of commit d22037f3fd33 ("media: iris: Set platform
capabilities to firmware for encoder video device") (which added .set
callbacks), and commit 6bdfa3f947a7 ("media: iris: Add platform-specific
capabilities for encoder video device") (which added QCS8300 data, but
not the callbacks).
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
.../media/platform/qcom/iris/iris_platform_gen2.c | 9 +-
.../platform/qcom/iris/iris_platform_qcs8300.h | 534 +--------------------
2 files changed, 8 insertions(+), 535 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
index 7ad03a800356ae9fb73bdbd6d09928d0b500cb3c..25d761cacbbb5d45b02b8868c0f698d47ed1e758 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
@@ -996,7 +996,6 @@ const struct iris_platform_data sm8750_data = {
/*
* Shares most of SM8550 data except:
* - inst_caps to platform_inst_cap_qcs8300
- * - inst_fw_caps to inst_fw_cap_qcs8300
*/
const struct iris_platform_data qcs8300_data = {
.get_instance = iris_hfi_gen2_get_instance,
@@ -1022,10 +1021,10 @@ const struct iris_platform_data qcs8300_data = {
.fwname = "qcom/vpu/vpu30_p4_s6.mbn",
.pas_id = IRIS_PAS_ID,
.inst_caps = &platform_inst_cap_qcs8300,
- .inst_fw_caps_dec = inst_fw_cap_qcs8300_dec,
- .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_qcs8300_dec),
- .inst_fw_caps_enc = inst_fw_cap_qcs8300_enc,
- .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_qcs8300_enc),
+ .inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
+ .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
+ .inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
+ .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
.tz_cp_config_data = &tz_cp_config_sm8550,
.core_arch = VIDEO_ARCH_LX,
.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
diff --git a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
index 612526a938eed0554fc0da99e12c26d22e04bb6e..a97a9f932b75a88535df66160dfc934220919ed5 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_qcs8300.h
@@ -3,537 +3,9 @@
* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
*/
-#define BITRATE_MAX 245000000
-static const struct platform_inst_fw_cap inst_fw_cap_qcs8300_dec[] = {
- {
- .cap_id = PROFILE_H264,
- .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
- .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH),
- .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
- .hfi_id = HFI_PROP_PROFILE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = PROFILE_HEVC,
- .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
- .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
- BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE),
- .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
- .hfi_id = HFI_PROP_PROFILE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = PROFILE_VP9,
- .min = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
- .max = V4L2_MPEG_VIDEO_VP9_PROFILE_2,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_PROFILE_2),
- .value = V4L2_MPEG_VIDEO_VP9_PROFILE_0,
- .hfi_id = HFI_PROP_PROFILE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = LEVEL_H264,
- .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
- .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_2,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_2),
- .value = V4L2_MPEG_VIDEO_H264_LEVEL_6_1,
- .hfi_id = HFI_PROP_LEVEL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = LEVEL_HEVC,
- .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
- .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
- .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1,
- .hfi_id = HFI_PROP_LEVEL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = LEVEL_VP9,
- .min = V4L2_MPEG_VIDEO_VP9_LEVEL_1_0,
- .max = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_1_1) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_2_1) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_3_1) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_4_1) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_0) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_1) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_5_2) |
- BIT(V4L2_MPEG_VIDEO_VP9_LEVEL_6_0),
- .value = V4L2_MPEG_VIDEO_VP9_LEVEL_6_0,
- .hfi_id = HFI_PROP_LEVEL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = TIER,
- .min = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
- .max = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_TIER_MAIN) |
- BIT(V4L2_MPEG_VIDEO_HEVC_TIER_HIGH),
- .value = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
- .hfi_id = HFI_PROP_TIER,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- .set = iris_set_u32_enum,
- },
- {
- .cap_id = INPUT_BUF_HOST_MAX_COUNT,
- .min = DEFAULT_MAX_HOST_BUF_COUNT,
- .max = DEFAULT_MAX_HOST_BURST_BUF_COUNT,
- .step_or_mask = 1,
- .value = DEFAULT_MAX_HOST_BUF_COUNT,
- .hfi_id = HFI_PROP_BUFFER_HOST_MAX_COUNT,
- .flags = CAP_FLAG_INPUT_PORT,
- .set = iris_set_u32,
- },
- {
- .cap_id = STAGE,
- .min = STAGE_1,
- .max = STAGE_2,
- .step_or_mask = 1,
- .value = STAGE_2,
- .hfi_id = HFI_PROP_STAGE,
- .set = iris_set_stage,
- },
- {
- .cap_id = PIPE,
- .min = PIPE_1,
- /* .max is set via platform data */
- .step_or_mask = 1,
- /* .value is set via platform data */
- .hfi_id = HFI_PROP_PIPE,
- .set = iris_set_pipe,
- },
- {
- .cap_id = POC,
- .min = 0,
- .max = 2,
- .step_or_mask = 1,
- .value = 1,
- .hfi_id = HFI_PROP_PIC_ORDER_CNT_TYPE,
- },
- {
- .cap_id = CODED_FRAMES,
- .min = CODED_FRAMES_PROGRESSIVE,
- .max = CODED_FRAMES_PROGRESSIVE,
- .step_or_mask = 0,
- .value = CODED_FRAMES_PROGRESSIVE,
- .hfi_id = HFI_PROP_CODED_FRAMES,
- },
- {
- .cap_id = BIT_DEPTH,
- .min = BIT_DEPTH_8,
- .max = BIT_DEPTH_8,
- .step_or_mask = 1,
- .value = BIT_DEPTH_8,
- .hfi_id = HFI_PROP_LUMA_CHROMA_BIT_DEPTH,
- },
- {
- .cap_id = RAP_FRAME,
- .min = 0,
- .max = 1,
- .step_or_mask = 1,
- .value = 1,
- .hfi_id = HFI_PROP_DEC_START_FROM_RAP_FRAME,
- .flags = CAP_FLAG_INPUT_PORT,
- .set = iris_set_u32,
- },
-};
-
-static const struct platform_inst_fw_cap inst_fw_cap_qcs8300_enc[] = {
- {
- .cap_id = PROFILE_H264,
- .min = V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE,
- .max = V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_MAIN) |
- BIT(V4L2_MPEG_VIDEO_H264_PROFILE_HIGH),
- .value = V4L2_MPEG_VIDEO_H264_PROFILE_HIGH,
- .hfi_id = HFI_PROP_PROFILE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = PROFILE_HEVC,
- .min = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
- .max = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN) |
- BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE) |
- BIT(V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10),
- .value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
- .hfi_id = HFI_PROP_PROFILE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = LEVEL_H264,
- .min = V4L2_MPEG_VIDEO_H264_LEVEL_1_0,
- .max = V4L2_MPEG_VIDEO_H264_LEVEL_6_0,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1B) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_1_3) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_2_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_4_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_0) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_1) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_5_2) |
- BIT(V4L2_MPEG_VIDEO_H264_LEVEL_6_0),
- .value = V4L2_MPEG_VIDEO_H264_LEVEL_5_0,
- .hfi_id = HFI_PROP_LEVEL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = LEVEL_HEVC,
- .min = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
- .max = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1) |
- BIT(V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2),
- .value = V4L2_MPEG_VIDEO_HEVC_LEVEL_5,
- .hfi_id = HFI_PROP_LEVEL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = STAGE,
- .min = STAGE_1,
- .max = STAGE_2,
- .step_or_mask = 1,
- .value = STAGE_2,
- .hfi_id = HFI_PROP_STAGE,
- },
- {
- .cap_id = HEADER_MODE,
- .min = V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE,
- .max = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_HEADER_MODE_SEPARATE) |
- BIT(V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME),
- .value = V4L2_MPEG_VIDEO_HEADER_MODE_JOINED_WITH_1ST_FRAME,
- .hfi_id = HFI_PROP_SEQ_HEADER_MODE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = PREPEND_SPSPPS_TO_IDR,
- .min = 0,
- .max = 1,
- .step_or_mask = 1,
- .value = 0,
- },
- {
- .cap_id = BITRATE,
- .min = 1,
- .max = BITRATE_MAX,
- .step_or_mask = 1,
- .value = BITRATE_DEFAULT,
- .hfi_id = HFI_PROP_TOTAL_BITRATE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = BITRATE_PEAK,
- .min = 1,
- .max = BITRATE_MAX,
- .step_or_mask = 1,
- .value = BITRATE_DEFAULT,
- .hfi_id = HFI_PROP_TOTAL_PEAK_BITRATE,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = BITRATE_MODE,
- .min = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
- .max = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) |
- BIT(V4L2_MPEG_VIDEO_BITRATE_MODE_CBR),
- .value = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
- .hfi_id = HFI_PROP_RATE_CONTROL,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = FRAME_SKIP_MODE,
- .min = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
- .max = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED) |
- BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT) |
- BIT(V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT),
- .value = V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = FRAME_RC_ENABLE,
- .min = 0,
- .max = 1,
- .step_or_mask = 1,
- .value = 1,
- },
- {
- .cap_id = GOP_SIZE,
- .min = 0,
- .max = INT_MAX,
- .step_or_mask = 1,
- .value = 2 * DEFAULT_FPS - 1,
- .hfi_id = HFI_PROP_MAX_GOP_FRAMES,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = ENTROPY_MODE,
- .min = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
- .max = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
- .step_or_mask = BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC) |
- BIT(V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC),
- .value = V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC,
- .hfi_id = HFI_PROP_CABAC_SESSION,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
- },
- {
- .cap_id = MIN_FRAME_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- .hfi_id = HFI_PROP_MIN_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT,
- },
- {
- .cap_id = MIN_FRAME_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- .hfi_id = HFI_PROP_MIN_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT,
- },
- {
- .cap_id = MAX_FRAME_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- .hfi_id = HFI_PROP_MAX_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT,
- },
- {
- .cap_id = MAX_FRAME_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- .hfi_id = HFI_PROP_MAX_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT,
- },
- {
- .cap_id = I_FRAME_MIN_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = I_FRAME_MIN_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = P_FRAME_MIN_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = P_FRAME_MIN_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = B_FRAME_MIN_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = B_FRAME_MIN_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MIN_QP_8BIT,
- },
- {
- .cap_id = I_FRAME_MAX_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = I_FRAME_MAX_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = P_FRAME_MAX_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = P_FRAME_MAX_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = B_FRAME_MAX_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = B_FRAME_MAX_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = MAX_QP,
- },
- {
- .cap_id = I_FRAME_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = I_FRAME_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = P_FRAME_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = P_FRAME_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = B_FRAME_QP_H264,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
- {
- .cap_id = B_FRAME_QP_HEVC,
- .min = MIN_QP_8BIT,
- .max = MAX_QP,
- .step_or_mask = 1,
- .value = DEFAULT_QP,
- .hfi_id = HFI_PROP_QP_PACKED,
- .flags = CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT |
- CAP_FLAG_DYNAMIC_ALLOWED,
- },
-};
+#ifndef __IRIS_PLATFORM_QCS8300_H__
+#define __IRIS_PLATFORM_QCS8300_H__
static struct platform_inst_caps platform_inst_cap_qcs8300 = {
.min_frame_width = 96,
@@ -548,3 +20,5 @@ static struct platform_inst_caps platform_inst_cap_qcs8300 = {
.max_frame_rate = MAXIMUM_FPS,
.max_operating_rate = MAXIMUM_FPS,
};
+
+#endif
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 6/8] media: iris: rename sm8250 platform file to gen1
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
` (4 preceding siblings ...)
2025-10-12 16:23 ` [PATCH v2 5/8] media: iris: remove duplicateion between generic gen2 data and qcs8300 Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 7/8] media: iris: move common register definitions to the header Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 8/8] media: iris: enable support for SC7280 platform Dmitry Baryshkov
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel
In preparation to adding more Gen1 platforms, which will share a
significant amount of data, rename the SM8250 platform file to
iris_platform_gen1.c.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/Makefile | 2 +-
.../platform/qcom/iris/{iris_platform_sm8250.c => iris_platform_gen1.c} | 0
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/platform/qcom/iris/Makefile b/drivers/media/platform/qcom/iris/Makefile
index 13270cd6d899852dded675b33d37f5919b81ccba..fad3be044e5fe783db697a592b4f09de4d42d0d2 100644
--- a/drivers/media/platform/qcom/iris/Makefile
+++ b/drivers/media/platform/qcom/iris/Makefile
@@ -26,7 +26,7 @@ qcom-iris-objs += iris_buffer.o \
iris_vpu_common.o \
ifeq ($(CONFIG_VIDEO_QCOM_VENUS),)
-qcom-iris-objs += iris_platform_sm8250.o
+qcom-iris-objs += iris_platform_gen1.o
endif
obj-$(CONFIG_VIDEO_QCOM_IRIS) += qcom-iris.o
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
similarity index 100%
rename from drivers/media/platform/qcom/iris/iris_platform_sm8250.c
rename to drivers/media/platform/qcom/iris/iris_platform_gen1.c
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 7/8] media: iris: move common register definitions to the header
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
` (5 preceding siblings ...)
2025-10-12 16:23 ` [PATCH v2 6/8] media: iris: rename sm8250 platform file to gen1 Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 16:23 ` [PATCH v2 8/8] media: iris: enable support for SC7280 platform Dmitry Baryshkov
7 siblings, 0 replies; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel, Bryan O'Donoghue
Simplify adding new platforms by moving common registers definitions
from VPU 3.x and "common" file to the header with other register
defines.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_vpu3x.c | 35 --------------
drivers/media/platform/qcom/iris/iris_vpu_common.c | 43 -----------------
.../platform/qcom/iris/iris_vpu_register_defines.h | 56 ++++++++++++++++++++++
3 files changed, 56 insertions(+), 78 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/platform/qcom/iris/iris_vpu3x.c
index 339776a0b4672e246848c3a6a260eb83c7da6a60..78aede9ac497abafc0545647c34a53c63c595f72 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu3x.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c
@@ -11,48 +11,13 @@
#include "iris_vpu_common.h"
#include "iris_vpu_register_defines.h"
-#define WRAPPER_TZ_BASE_OFFS 0x000C0000
-#define AON_BASE_OFFS 0x000E0000
#define AON_MVP_NOC_RESET 0x0001F000
-#define WRAPPER_DEBUG_BRIDGE_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x54)
-#define WRAPPER_DEBUG_BRIDGE_LPI_STATUS (WRAPPER_BASE_OFFS + 0x58)
-#define WRAPPER_IRIS_CPU_NOC_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x5C)
-#define REQ_POWER_DOWN_PREP BIT(0)
-#define WRAPPER_IRIS_CPU_NOC_LPI_STATUS (WRAPPER_BASE_OFFS + 0x60)
-#define NOC_LPI_STATUS_DONE BIT(0) /* Indicates the NOC handshake is complete */
-#define NOC_LPI_STATUS_DENY BIT(1) /* Indicates the NOC handshake is denied */
-#define NOC_LPI_STATUS_ACTIVE BIT(2) /* Indicates the NOC is active */
-#define WRAPPER_CORE_CLOCK_CONFIG (WRAPPER_BASE_OFFS + 0x88)
-#define CORE_CLK_RUN 0x0
-/* VPU v3.5 */
-#define WRAPPER_IRIS_VCODEC_VPU_WRAPPER_SPARE_0 (WRAPPER_BASE_OFFS + 0x78)
-
-#define WRAPPER_TZ_CTL_AXI_CLOCK_CONFIG (WRAPPER_TZ_BASE_OFFS + 0x14)
-#define CTL_AXI_CLK_HALT BIT(0)
-#define CTL_CLK_HALT BIT(1)
-
-#define WRAPPER_TZ_QNS4PDXFIFO_RESET (WRAPPER_TZ_BASE_OFFS + 0x18)
-#define RESET_HIGH BIT(0)
-
-#define CPU_CS_AHB_BRIDGE_SYNC_RESET (CPU_CS_BASE_OFFS + 0x160)
-#define CORE_BRIDGE_SW_RESET BIT(0)
-#define CORE_BRIDGE_HW_RESET_DISABLE BIT(1)
-
-#define CPU_CS_X2RPMH (CPU_CS_BASE_OFFS + 0x168)
-#define MSK_SIGNAL_FROM_TENSILICA BIT(0)
-#define MSK_CORE_POWER_ON BIT(1)
-
#define AON_WRAPPER_MVP_NOC_RESET_REQ (AON_MVP_NOC_RESET + 0x000)
#define VIDEO_NOC_RESET_REQ (BIT(0) | BIT(1))
#define AON_WRAPPER_MVP_NOC_RESET_ACK (AON_MVP_NOC_RESET + 0x004)
-#define VCODEC_SS_IDLE_STATUSN (VCODEC_BASE_OFFS + 0x70)
-
-#define AON_WRAPPER_MVP_NOC_LPI_CONTROL (AON_BASE_OFFS)
-#define AON_WRAPPER_MVP_NOC_LPI_STATUS (AON_BASE_OFFS + 0x4)
-
#define AON_WRAPPER_MVP_NOC_CORE_SW_RESET (AON_BASE_OFFS + 0x18)
#define SW_RESET BIT(0)
#define AON_WRAPPER_MVP_NOC_CORE_CLK_CONTROL (AON_BASE_OFFS + 0x20)
diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/media/platform/qcom/iris/iris_vpu_common.c
index bb98950e018fadf69ac4f41b3037f7fd6ac33c5b..2d6548e47d47967c1c110489cb8088130fb625fd 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu_common.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c
@@ -11,13 +11,6 @@
#include "iris_vpu_common.h"
#include "iris_vpu_register_defines.h"
-#define WRAPPER_TZ_BASE_OFFS 0x000C0000
-#define AON_BASE_OFFS 0x000E0000
-
-#define CPU_IC_BASE_OFFS (CPU_BASE_OFFS)
-
-#define CPU_CS_A2HSOFTINTCLR (CPU_CS_BASE_OFFS + 0x1C)
-#define CLEAR_XTENSA2HOST_INTR BIT(0)
#define CTRL_INIT (CPU_CS_BASE_OFFS + 0x48)
#define CTRL_STATUS (CPU_CS_BASE_OFFS + 0x4C)
@@ -35,42 +28,6 @@
#define UC_REGION_ADDR (CPU_CS_BASE_OFFS + 0x64)
#define UC_REGION_SIZE (CPU_CS_BASE_OFFS + 0x68)
-#define CPU_CS_H2XSOFTINTEN (CPU_CS_BASE_OFFS + 0x148)
-#define HOST2XTENSA_INTR_ENABLE BIT(0)
-
-#define CPU_CS_X2RPMH (CPU_CS_BASE_OFFS + 0x168)
-#define MSK_SIGNAL_FROM_TENSILICA BIT(0)
-#define MSK_CORE_POWER_ON BIT(1)
-
-#define CPU_IC_SOFTINT (CPU_IC_BASE_OFFS + 0x150)
-#define CPU_IC_SOFTINT_H2A_SHFT 0x0
-
-#define WRAPPER_INTR_STATUS (WRAPPER_BASE_OFFS + 0x0C)
-#define WRAPPER_INTR_STATUS_A2HWD_BMSK BIT(3)
-#define WRAPPER_INTR_STATUS_A2H_BMSK BIT(2)
-
-#define WRAPPER_INTR_MASK (WRAPPER_BASE_OFFS + 0x10)
-#define WRAPPER_INTR_MASK_A2HWD_BMSK BIT(3)
-#define WRAPPER_INTR_MASK_A2HCPU_BMSK BIT(2)
-
-#define WRAPPER_DEBUG_BRIDGE_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x54)
-#define WRAPPER_DEBUG_BRIDGE_LPI_STATUS (WRAPPER_BASE_OFFS + 0x58)
-#define WRAPPER_IRIS_CPU_NOC_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x5C)
-#define WRAPPER_IRIS_CPU_NOC_LPI_STATUS (WRAPPER_BASE_OFFS + 0x60)
-
-#define WRAPPER_TZ_CPU_STATUS (WRAPPER_TZ_BASE_OFFS + 0x10)
-#define WRAPPER_TZ_CTL_AXI_CLOCK_CONFIG (WRAPPER_TZ_BASE_OFFS + 0x14)
-#define CTL_AXI_CLK_HALT BIT(0)
-#define CTL_CLK_HALT BIT(1)
-
-#define WRAPPER_TZ_QNS4PDXFIFO_RESET (WRAPPER_TZ_BASE_OFFS + 0x18)
-#define RESET_HIGH BIT(0)
-
-#define AON_WRAPPER_MVP_NOC_LPI_CONTROL (AON_BASE_OFFS)
-#define REQ_POWER_DOWN_PREP BIT(0)
-
-#define AON_WRAPPER_MVP_NOC_LPI_STATUS (AON_BASE_OFFS + 0x4)
-
static void iris_vpu_interrupt_init(struct iris_core *core)
{
u32 mask_val;
diff --git a/drivers/media/platform/qcom/iris/iris_vpu_register_defines.h b/drivers/media/platform/qcom/iris/iris_vpu_register_defines.h
index fe8a39e5e5a3fc68dc3a706ffdba07a5558163cf..9955367a9f8179d2e364c41dcfe8ad445a0a13f4 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu_register_defines.h
+++ b/drivers/media/platform/qcom/iris/iris_vpu_register_defines.h
@@ -9,9 +9,65 @@
#define VCODEC_BASE_OFFS 0x00000000
#define CPU_BASE_OFFS 0x000A0000
#define WRAPPER_BASE_OFFS 0x000B0000
+#define WRAPPER_TZ_BASE_OFFS 0x000C0000
+#define AON_BASE_OFFS 0x000E0000
+
+#define VCODEC_SS_IDLE_STATUSN (VCODEC_BASE_OFFS + 0x70)
#define CPU_CS_BASE_OFFS (CPU_BASE_OFFS)
+#define CPU_CS_A2HSOFTINTCLR (CPU_CS_BASE_OFFS + 0x1C)
+#define CLEAR_XTENSA2HOST_INTR BIT(0)
+
+#define CPU_CS_H2XSOFTINTEN (CPU_CS_BASE_OFFS + 0x148)
+#define HOST2XTENSA_INTR_ENABLE BIT(0)
+
+#define CPU_IC_BASE_OFFS (CPU_BASE_OFFS)
+#define CPU_IC_SOFTINT (CPU_IC_BASE_OFFS + 0x150)
+#define CPU_IC_SOFTINT_H2A_SHFT 0x0
+
+#define CPU_CS_AHB_BRIDGE_SYNC_RESET (CPU_CS_BASE_OFFS + 0x160)
+#define CORE_BRIDGE_SW_RESET BIT(0)
+#define CORE_BRIDGE_HW_RESET_DISABLE BIT(1)
+
+#define CPU_CS_X2RPMH (CPU_CS_BASE_OFFS + 0x168)
+#define MSK_SIGNAL_FROM_TENSILICA BIT(0)
+#define MSK_CORE_POWER_ON BIT(1)
+
+#define WRAPPER_INTR_STATUS (WRAPPER_BASE_OFFS + 0x0C)
+#define WRAPPER_INTR_STATUS_A2HWD_BMSK BIT(3)
+#define WRAPPER_INTR_STATUS_A2H_BMSK BIT(2)
+
+#define WRAPPER_INTR_MASK (WRAPPER_BASE_OFFS + 0x10)
+#define WRAPPER_INTR_MASK_A2HWD_BMSK BIT(3)
+#define WRAPPER_INTR_MASK_A2HCPU_BMSK BIT(2)
+
#define WRAPPER_CORE_POWER_STATUS (WRAPPER_BASE_OFFS + 0x80)
+#define WRAPPER_DEBUG_BRIDGE_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x54)
+#define WRAPPER_DEBUG_BRIDGE_LPI_STATUS (WRAPPER_BASE_OFFS + 0x58)
+#define WRAPPER_IRIS_CPU_NOC_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x5C)
+#define REQ_POWER_DOWN_PREP BIT(0)
+
+#define WRAPPER_IRIS_CPU_NOC_LPI_STATUS (WRAPPER_BASE_OFFS + 0x60)
+#define NOC_LPI_STATUS_DONE BIT(0) /* Indicates the NOC handshake is complete */
+#define NOC_LPI_STATUS_DENY BIT(1) /* Indicates the NOC handshake is denied */
+#define NOC_LPI_STATUS_ACTIVE BIT(2) /* Indicates the NOC is active */
+
+#define WRAPPER_IRIS_VCODEC_VPU_WRAPPER_SPARE_0 (WRAPPER_BASE_OFFS + 0x78)
+
+#define WRAPPER_CORE_CLOCK_CONFIG (WRAPPER_BASE_OFFS + 0x88)
+#define CORE_CLK_RUN 0x0
+
+#define WRAPPER_TZ_CPU_STATUS (WRAPPER_TZ_BASE_OFFS + 0x10)
+
+#define WRAPPER_TZ_CTL_AXI_CLOCK_CONFIG (WRAPPER_TZ_BASE_OFFS + 0x14)
+#define CTL_AXI_CLK_HALT BIT(0)
+#define CTL_CLK_HALT BIT(1)
+
+#define WRAPPER_TZ_QNS4PDXFIFO_RESET (WRAPPER_TZ_BASE_OFFS + 0x18)
+#define RESET_HIGH BIT(0)
+
+#define AON_WRAPPER_MVP_NOC_LPI_CONTROL (AON_BASE_OFFS)
+#define AON_WRAPPER_MVP_NOC_LPI_STATUS (AON_BASE_OFFS + 0x4)
#endif
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH v2 8/8] media: iris: enable support for SC7280 platform
2025-10-12 16:23 [PATCH v2 0/8] media: iris: port support for Qualcomm SC7280 Dmitry Baryshkov
` (6 preceding siblings ...)
2025-10-12 16:23 ` [PATCH v2 7/8] media: iris: move common register definitions to the header Dmitry Baryshkov
@ 2025-10-12 16:23 ` Dmitry Baryshkov
2025-10-12 19:24 ` kernel test robot
7 siblings, 1 reply; 10+ messages in thread
From: Dmitry Baryshkov @ 2025-10-12 16:23 UTC (permalink / raw)
To: Vikash Garodia, Dikshita Agarwal, Abhinav Kumar,
Bryan O'Donoghue, Mauro Carvalho Chehab, Konrad Dybcio
Cc: linux-media, linux-arm-msm, linux-kernel
As a part of migrating code from the old Venus driver to the new Iris
one, add support for the SC7280 platform. It is very similar to SM8250,
but it (currently) uses no reset controls (there is an optional
GCC-generated reset, it will be added later) and no AON registers
region. Extend the VPU ops to support optional clocks and skip the AON
shutdown for this platform.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
.../platform/qcom/iris/iris_platform_common.h | 4 ++
.../media/platform/qcom/iris/iris_platform_gen1.c | 52 ++++++++++++++++++++++
drivers/media/platform/qcom/iris/iris_probe.c | 4 ++
drivers/media/platform/qcom/iris/iris_resources.c | 2 +-
drivers/media/platform/qcom/iris/iris_vpu2.c | 6 +++
drivers/media/platform/qcom/iris/iris_vpu_common.c | 34 ++++++++++----
6 files changed, 92 insertions(+), 10 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
index 104ff38219e30e6d52476d44b54338c55ef2ca7b..43cd6bf94ab600e53f983c9e11b63dc0a572e6ad 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_common.h
+++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
@@ -42,6 +42,7 @@ enum pipe_type {
};
extern const struct iris_platform_data qcs8300_data;
+extern const struct iris_platform_data sc7280_data;
extern const struct iris_platform_data sm8250_data;
extern const struct iris_platform_data sm8550_data;
extern const struct iris_platform_data sm8650_data;
@@ -50,7 +51,9 @@ extern const struct iris_platform_data sm8750_data;
enum platform_clk_type {
IRIS_AXI_CLK, /* AXI0 in case of platforms with multiple AXI clocks */
IRIS_CTRL_CLK,
+ IRIS_AHB_CLK,
IRIS_HW_CLK,
+ IRIS_HW_AXI_CLK,
IRIS_AXI1_CLK,
IRIS_CTRL_FREERUN_CLK,
IRIS_HW_FREERUN_CLK,
@@ -230,6 +233,7 @@ struct iris_platform_data {
u32 hw_response_timeout;
struct ubwc_config_data *ubwc_config;
u32 num_vpp_pipe;
+ bool no_aon;
u32 max_session_count;
/* max number of macroblocks per frame supported */
u32 max_core_mbpf;
diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
index 2b3b8bd00a6096acaae928318d9231847ec89855..828864902501aef072d60935fe57019a70dcb9f4 100644
--- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c
+++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
@@ -12,6 +12,8 @@
#include "iris_vpu_buffer.h"
#include "iris_vpu_common.h"
+#include "iris_platform_sc7280.h"
+
#define BITRATE_MIN 32000
#define BITRATE_MAX 160000000
#define BITRATE_PEAK_DEFAULT (BITRATE_DEFAULT * 2)
@@ -364,3 +366,53 @@ const struct iris_platform_data sm8250_data = {
.enc_ip_int_buf_tbl = sm8250_enc_ip_int_buf_tbl,
.enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8250_enc_ip_int_buf_tbl),
};
+
+const struct iris_platform_data sc7280_data = {
+ .get_instance = iris_hfi_gen1_get_instance,
+ .init_hfi_command_ops = &iris_hfi_gen1_command_ops_init,
+ .init_hfi_response_ops = iris_hfi_gen1_response_ops_init,
+ .get_vpu_buffer_size = iris_vpu_buf_size,
+ .vpu_ops = &iris_vpu2_ops,
+ .set_preset_registers = iris_set_sm8250_preset_registers,
+ .icc_tbl = sm8250_icc_table,
+ .icc_tbl_size = ARRAY_SIZE(sm8250_icc_table),
+ .bw_tbl_dec = sc7280_bw_table_dec,
+ .bw_tbl_dec_size = ARRAY_SIZE(sc7280_bw_table_dec),
+ .pmdomain_tbl = sm8250_pmdomain_table,
+ .pmdomain_tbl_size = ARRAY_SIZE(sm8250_pmdomain_table),
+ .opp_pd_tbl = sc7280_opp_pd_table,
+ .opp_pd_tbl_size = ARRAY_SIZE(sc7280_opp_pd_table),
+ .clk_tbl = sc7280_clk_table,
+ .clk_tbl_size = ARRAY_SIZE(sc7280_clk_table),
+ /* Upper bound of DMA address range */
+ .dma_mask = 0xe0000000 - 1,
+ .fwname = "qcom/vpu/vpu20_p1.mbn",
+ .pas_id = IRIS_PAS_ID,
+ .inst_caps = &platform_inst_cap_sm8250,
+ .inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
+ .inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
+ .inst_fw_caps_enc = inst_fw_cap_sm8250_enc,
+ .inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8250_enc),
+ .tz_cp_config_data = &tz_cp_config_sm8250,
+ .hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
+ .num_vpp_pipe = 4,
+ .no_aon = true,
+ .max_session_count = 16,
+ .max_core_mbpf = NUM_MBS_8K,
+ .max_core_mbps = ((7680 * 4320) / 256) * 60,
+ .dec_input_config_params_default =
+ sm8250_vdec_input_config_param_default,
+ .dec_input_config_params_default_size =
+ ARRAY_SIZE(sm8250_vdec_input_config_param_default),
+ .enc_input_config_params = sm8250_venc_input_config_param,
+ .enc_input_config_params_size =
+ ARRAY_SIZE(sm8250_venc_input_config_param),
+
+ .dec_ip_int_buf_tbl = sm8250_dec_ip_int_buf_tbl,
+ .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8250_dec_ip_int_buf_tbl),
+ .dec_op_int_buf_tbl = sm8250_dec_op_int_buf_tbl,
+ .dec_op_int_buf_tbl_size = ARRAY_SIZE(sm8250_dec_op_int_buf_tbl),
+
+ .enc_ip_int_buf_tbl = sm8250_enc_ip_int_buf_tbl,
+ .enc_ip_int_buf_tbl_size = ARRAY_SIZE(sm8250_enc_ip_int_buf_tbl),
+};
diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/platform/qcom/iris/iris_probe.c
index 00e99be16e087c4098f930151fd76cd381d721ce..9bc9b34c2576581635fa8d87eed1965657eb3eb3 100644
--- a/drivers/media/platform/qcom/iris/iris_probe.c
+++ b/drivers/media/platform/qcom/iris/iris_probe.c
@@ -357,6 +357,10 @@ static const struct of_device_id iris_dt_match[] = {
.data = &qcs8300_data,
},
#if (!IS_ENABLED(CONFIG_VIDEO_QCOM_VENUS))
+ {
+ .compatible = "qcom,sc7280-venus",
+ .data = &sc7280_data,
+ },
{
.compatible = "qcom,sm8250-venus",
.data = &sm8250_data,
diff --git a/drivers/media/platform/qcom/iris/iris_resources.c b/drivers/media/platform/qcom/iris/iris_resources.c
index cf32f268b703c1c042a9bcf146e444fff4f4990d..164490c49c95ee048670981fdab014d20436ef85 100644
--- a/drivers/media/platform/qcom/iris/iris_resources.c
+++ b/drivers/media/platform/qcom/iris/iris_resources.c
@@ -112,7 +112,7 @@ int iris_prepare_enable_clock(struct iris_core *core, enum platform_clk_type clk
clock = iris_get_clk_by_type(core, clk_type);
if (!clock)
- return -EINVAL;
+ return -ENOENT;
return clk_prepare_enable(clock);
}
diff --git a/drivers/media/platform/qcom/iris/iris_vpu2.c b/drivers/media/platform/qcom/iris/iris_vpu2.c
index de7d142316d2dc9ab0c4ad9cc8161c87ac949b4c..9c103a2e4e4eafee101a8a9b168fdc8ca76e277d 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu2.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu2.c
@@ -3,9 +3,15 @@
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
+#include <linux/bits.h>
+#include <linux/iopoll.h>
+#include <linux/reset.h>
+
#include "iris_instance.h"
#include "iris_vpu_common.h"
+#include "iris_vpu_register_defines.h"
+
static u64 iris_vpu2_calc_freq(struct iris_inst *inst, size_t data_size)
{
struct platform_inst_caps *caps = inst->core->iris_platform_data->inst_caps;
diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/media/platform/qcom/iris/iris_vpu_common.c
index 2d6548e47d47967c1c110489cb8088130fb625fd..f8fd120873ccdcb5239985d0d6a8bbda144a98f6 100644
--- a/drivers/media/platform/qcom/iris/iris_vpu_common.c
+++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c
@@ -179,12 +179,14 @@ int iris_vpu_power_off_controller(struct iris_core *core)
writel(MSK_SIGNAL_FROM_TENSILICA | MSK_CORE_POWER_ON, core->reg_base + CPU_CS_X2RPMH);
- writel(REQ_POWER_DOWN_PREP, core->reg_base + AON_WRAPPER_MVP_NOC_LPI_CONTROL);
+ if (!core->iris_platform_data->no_aon) {
+ writel(REQ_POWER_DOWN_PREP, core->reg_base + AON_WRAPPER_MVP_NOC_LPI_CONTROL);
- ret = readl_poll_timeout(core->reg_base + AON_WRAPPER_MVP_NOC_LPI_STATUS,
- val, val & BIT(0), 200, 2000);
- if (ret)
- goto disable_power;
+ ret = readl_poll_timeout(core->reg_base + AON_WRAPPER_MVP_NOC_LPI_STATUS,
+ val, val & BIT(0), 200, 2000);
+ if (ret)
+ goto disable_power;
+ }
writel(REQ_POWER_DOWN_PREP, core->reg_base + WRAPPER_IRIS_CPU_NOC_LPI_CONTROL);
@@ -207,6 +209,7 @@ int iris_vpu_power_off_controller(struct iris_core *core)
writel(0x0, core->reg_base + WRAPPER_TZ_CTL_AXI_CLOCK_CONFIG);
disable_power:
+ iris_disable_unprepare_clock(core, IRIS_AHB_CLK);
iris_disable_unprepare_clock(core, IRIS_CTRL_CLK);
iris_disable_unprepare_clock(core, IRIS_AXI_CLK);
iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
@@ -218,6 +221,7 @@ void iris_vpu_power_off_hw(struct iris_core *core)
{
dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN], false);
iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN]);
+ iris_disable_unprepare_clock(core, IRIS_HW_AXI_CLK);
iris_disable_unprepare_clock(core, IRIS_HW_CLK);
}
@@ -251,11 +255,17 @@ int iris_vpu_power_on_controller(struct iris_core *core)
ret = iris_prepare_enable_clock(core, IRIS_CTRL_CLK);
if (ret)
- goto err_disable_clock;
+ goto err_disable_axi_clock;
+
+ ret = iris_prepare_enable_clock(core, IRIS_AHB_CLK);
+ if (ret && ret != -ENOENT)
+ goto err_disable_ctrl_clock;
return 0;
-err_disable_clock:
+err_disable_ctrl_clock:
+ iris_disable_unprepare_clock(core, IRIS_CTRL_CLK);
+err_disable_axi_clock:
iris_disable_unprepare_clock(core, IRIS_AXI_CLK);
err_disable_power:
iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
@@ -275,13 +285,19 @@ int iris_vpu_power_on_hw(struct iris_core *core)
if (ret)
goto err_disable_power;
+ ret = iris_prepare_enable_clock(core, IRIS_HW_AXI_CLK);
+ if (ret && ret != -ENOENT)
+ goto err_disable_hw_clock;
+
ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN], true);
if (ret)
- goto err_disable_clock;
+ goto err_disable_hw_axi_clock;
return 0;
-err_disable_clock:
+err_disable_hw_axi_clock:
+ iris_disable_unprepare_clock(core, IRIS_HW_AXI_CLK);
+err_disable_hw_clock:
iris_disable_unprepare_clock(core, IRIS_HW_CLK);
err_disable_power:
iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN]);
--
2.47.3
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH v2 8/8] media: iris: enable support for SC7280 platform
2025-10-12 16:23 ` [PATCH v2 8/8] media: iris: enable support for SC7280 platform Dmitry Baryshkov
@ 2025-10-12 19:24 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2025-10-12 19:24 UTC (permalink / raw)
To: Dmitry Baryshkov, Vikash Garodia, Dikshita Agarwal,
Abhinav Kumar, Bryan O'Donoghue, Mauro Carvalho Chehab,
Konrad Dybcio
Cc: oe-kbuild-all, linux-media, linux-arm-msm, linux-kernel
Hi Dmitry,
kernel test robot noticed the following build errors:
[auto build test ERROR on 0b2f041c47acb45db82b4e847af6e17eb66cd32d]
url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Baryshkov/media-iris-turn-platform-caps-into-constants/20251013-002837
base: 0b2f041c47acb45db82b4e847af6e17eb66cd32d
patch link: https://lore.kernel.org/r/20251012-iris-sc7280-v2-8-d53a1a4056c3%40oss.qualcomm.com
patch subject: [PATCH v2 8/8] media: iris: enable support for SC7280 platform
config: arm64-randconfig-002-20251013 (https://download.01.org/0day-ci/archive/20251013/202510130211.Ujh708qh-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251013/202510130211.Ujh708qh-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202510130211.Ujh708qh-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/media/platform/qcom/iris/iris_platform_gen1.c:15:10: fatal error: iris_platform_sc7280.h: No such file or directory
#include "iris_platform_sc7280.h"
^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
vim +15 drivers/media/platform/qcom/iris/iris_platform_gen1.c
14
> 15 #include "iris_platform_sc7280.h"
16
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread