linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/17] Venus QoL / maintainability fixes
@ 2023-05-30 12:30 Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1 Konrad Dybcio
                   ` (17 more replies)
  0 siblings, 18 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia, stable

v3 -> v4:
- Rebase on Stanimir's venus-for-next-v6.5
- Collapse 2 identical if-statements in "Sanitize venus_boot_core()
  per-VPU-version"
- Reword "Assign registers based on VPU version"
- Check for IS_IRIS2_1() instead of wrongly checking for core->use_tz,
  update commit msg in "media: venus: firmware: Correct IS_V6() checks"
- Access correct struct fields in "Use newly-introduced
  hfi_buffer_requirements accessors", drop Bryan's r-b

v3: https://lore.kernel.org/r/20230228-topic-venus-v3-0-6092ae43b58f@linaro.org

v2 -> v3:
- Rephrase "Write to VIDC_CTRL_INIT after unmasking interrupts" commit msg
- Drop "Remap bufreq fields on HFI6XX"
- Rephrase "Introduce VPU version distinction" commit msg
- Better explain "Leave a clue for homegrown porters"
- Drop incorrect fixes tags/rephrase version check alternations
- Drop AR50L/IRIS1 from if-conditions, they'll be introduced separately
- pick up tags
- rebase on next-20230517 (no effective changes)

v2: https://lore.kernel.org/r/20230228-topic-venus-v2-0-d95d14949c79@linaro.org

v1 -> v2:
- Move "Write to VIDC_CTRL_INIT after unmasking interrupts" up and add
  a Fixes tag & Cc stable
- Reword the comment in "Correct IS_V6() checks"
- Move up "media: venus: Remap bufreq fields on HFI6XX", add Fixes and
  Cc stable
- Use better English in "Use newly-introduced hfi_buffer_requirements
  accessors" commit message
- Mention "Restrict writing SCIACMDARG3 to Venus V1/V2" doesn't seem to
  regress SM8250 in the commit message
- Pick up tags (note: I capitalized the R in Dikshita's 'reviewed-by'
  and removed one occurrence of random '**' to make sure review tools
  like b4 don't go crazy)
- Handle AR50_LITE in "Assign registers based on VPU version"
- Drop /* VPUn */ comments, they're invalid as explained by Vikash
- Take a different approach to the sys_idle problem in patch 1

v1: https://lore.kernel.org/r/20230228-topic-venus-v1-0-58c2c88384e9@linaro.org

Currently upstream assumes all (well, almost all - see 7280 or CrOS
specific checks) Venus implementations using the same version of the
Hardware Firmware Interface can be treated the same way. This is
however not the case.

This series tries to introduce the groundwork to start differentiating
them based on the VPU (Video Processing Unit) hardware type, fixes a
couple of issues that were an effect of that generalized assumption
and lays the foundation for supporting 8150 (IRIS1) and SM6115/QCM2290
(AR50 Lite), which will hopefully come soon.

Tested on 8250, but pretty please test it on your boards too!

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
Konrad Dybcio (17):
      media: venus: hfi_venus: Only consider sys_idle_indicator on V1
      media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts
      media: venus: Introduce VPU version distinction
      media: venus: Add vpu_version to most SoCs
      media: venus: firmware: Leave a clue about obtaining CP VARs
      media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version
      media: venus: core: Assign registers based on VPU version
      media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version
      media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version
      media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version
      media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version
      media: venus: firmware: Sanitize per-VPU-version
      media: venus: hfi_platform: Check vpu_version instead of device compatible
      media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version
      media: venus: Introduce accessors for remapped hfi_buffer_reqs members
      media: venus: Use newly-introduced hfi_buffer_requirements accessors
      media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2

 drivers/media/platform/qcom/venus/core.c           |  7 ++-
 drivers/media/platform/qcom/venus/core.h           | 15 ++++++
 drivers/media/platform/qcom/venus/firmware.c       | 18 +++++--
 drivers/media/platform/qcom/venus/helpers.c        |  7 +--
 drivers/media/platform/qcom/venus/hfi_helper.h     | 61 +++++++++++++++++++---
 drivers/media/platform/qcom/venus/hfi_msgs.c       |  2 +-
 .../media/platform/qcom/venus/hfi_plat_bufs_v6.c   | 22 ++++----
 drivers/media/platform/qcom/venus/hfi_platform.c   |  2 +-
 drivers/media/platform/qcom/venus/hfi_venus.c      | 42 +++++++--------
 drivers/media/platform/qcom/venus/vdec.c           | 10 ++--
 drivers/media/platform/qcom/venus/vdec_ctrls.c     |  2 +-
 drivers/media/platform/qcom/venus/venc.c           |  4 +-
 drivers/media/platform/qcom/venus/venc_ctrls.c     |  2 +-
 13 files changed, 133 insertions(+), 61 deletions(-)
---
base-commit: 9f9f8ca6f012d25428f8605cb36369a449db8508
change-id: 20230228-topic-venus-70ea3bc76688

Best regards,
-- 
Konrad Dybcio <konrad.dybcio@linaro.org>


^ permalink raw reply	[flat|nested] 34+ messages in thread

* [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:08   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts Konrad Dybcio
                   ` (16 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

As per information from Qualcomm [1], this property is not really
supported beyond msm8916 (HFI V1) and some newer HFI versions really
dislike receiving it, going as far as crashing the device.

Only consider toggling it (via the module option) on HFIV1.
While at it, get rid of the global static variable (which defaulted
to zero) which was never explicitly assigned to for V1.

Note: [1] is a reply to the actual message in question, as lore did not
properly receive some of the emails..

[1] https://lore.kernel.org/lkml/955cd520-3881-0c22-d818-13fe9a47e124@linaro.org/
Fixes: 7ed9e0b3393c ("media: venus: hfi, vdec: v6 Add IS_V6() to existing IS_V4() if locations")
Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index f0b46389e8d5..918a283bd890 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -131,7 +131,6 @@ struct venus_hfi_device {
 
 static bool venus_pkt_debug;
 int venus_fw_debug = HFI_DEBUG_MSG_ERROR | HFI_DEBUG_MSG_FATAL;
-static bool venus_sys_idle_indicator;
 static bool venus_fw_low_power_mode = true;
 static int venus_hw_rsp_timeout = 1000;
 static bool venus_fw_coverage;
@@ -927,17 +926,12 @@ static int venus_sys_set_default_properties(struct venus_hfi_device *hdev)
 	if (ret)
 		dev_warn(dev, "setting fw debug msg ON failed (%d)\n", ret);
 
-	/*
-	 * Idle indicator is disabled by default on some 4xx firmware versions,
-	 * enable it explicitly in order to make suspend functional by checking
-	 * WFI (wait-for-interrupt) bit.
-	 */
-	if (IS_V4(hdev->core) || IS_V6(hdev->core))
-		venus_sys_idle_indicator = true;
-
-	ret = venus_sys_set_idle_message(hdev, venus_sys_idle_indicator);
-	if (ret)
-		dev_warn(dev, "setting idle response ON failed (%d)\n", ret);
+	/* HFI_PROPERTY_SYS_IDLE_INDICATOR is not supported beyond 8916 (HFI V1) */
+	if (IS_V1(hdev->core)) {
+		ret = venus_sys_set_idle_message(hdev, false);
+		if (ret)
+			dev_warn(dev, "setting idle response ON failed (%d)\n", ret);
+	}
 
 	ret = venus_sys_set_power_control(hdev, venus_fw_low_power_mode);
 	if (ret)

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1 Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:09   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 03/17] media: venus: Introduce VPU version distinction Konrad Dybcio
                   ` (15 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia, stable

The startup procedure shouldn't be started with interrupts masked, as that
may entail silent failures.

Kick off initialization only after the interrupts are unmasked.

Cc: stable@vger.kernel.org # v4.12+
Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 918a283bd890..5506a0d196ef 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -453,7 +453,6 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
 	void __iomem *wrapper_base = hdev->core->wrapper_base;
 	int ret = 0;
 
-	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
 	if (IS_V6(hdev->core)) {
 		mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
 		mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
@@ -464,6 +463,7 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
 	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
 	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
 
+	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
 	while (!ctrl_status && count < max_tries) {
 		ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
 		if ((ctrl_status & CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK) == 4) {

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 03/17] media: venus: Introduce VPU version distinction
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1 Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 04/17] media: venus: Add vpu_version to most SoCs Konrad Dybcio
                   ` (14 subsequent siblings)
  17 siblings, 0 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

The Video Processing Unit hardware version is the differentiator, based
on which the video driver should decide which code paths to take.

Up until now, we've relied on HFI versions instead, but that was just
a happy accident between recent SoCs. Add a field in the res struct
and add correlated definitions that will be used to account for the
aforementioned differences.

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/core.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 250342d27a6f..4f8ad9659907 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -48,6 +48,14 @@ struct bw_tbl {
 	u32 peak_10bit;
 };
 
+enum vpu_version {
+	VPU_VERSION_AR50,
+	VPU_VERSION_AR50_LITE,
+	VPU_VERSION_IRIS1,
+	VPU_VERSION_IRIS2,
+	VPU_VERSION_IRIS2_1,
+};
+
 struct venus_resources {
 	u64 dma_mask;
 	const struct freq_tbl *freq_tbl;
@@ -71,6 +79,7 @@ struct venus_resources {
 	const char * const resets[VIDC_RESETS_NUM_MAX];
 	unsigned int resets_num;
 	enum hfi_version hfi_version;
+	enum vpu_version vpu_version;
 	u8 num_vpp_pipes;
 	u32 max_load;
 	unsigned int vmem_id;
@@ -503,6 +512,12 @@ struct venus_inst {
 #define IS_V4(core)	((core)->res->hfi_version == HFI_VERSION_4XX)
 #define IS_V6(core)	((core)->res->hfi_version == HFI_VERSION_6XX)
 
+#define IS_AR50(core)		((core)->res->vpu_version == VPU_VERSION_AR50)
+#define IS_AR50_LITE(core)	((core)->res->vpu_version == VPU_VERSION_AR50_LITE)
+#define IS_IRIS1(core)		((core)->res->vpu_version == VPU_VERSION_IRIS1)
+#define IS_IRIS2(core)		((core)->res->vpu_version == VPU_VERSION_IRIS2)
+#define IS_IRIS2_1(core)	((core)->res->vpu_version == VPU_VERSION_IRIS2_1)
+
 #define ctrl_to_inst(ctrl)	\
 	container_of((ctrl)->handler, struct venus_inst, ctrl_handler)
 

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 04/17] media: venus: Add vpu_version to most SoCs
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (2 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 03/17] media: venus: Introduce VPU version distinction Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 05/17] media: venus: firmware: Leave a clue about obtaining CP VARs Konrad Dybcio
                   ` (13 subsequent siblings)
  17 siblings, 0 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Add vpu_version where I was able to retrieve the information to
allow for more precise hardware-specific code path matching.

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/core.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 2ae867cb4c48..01671dd23888 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -684,6 +684,7 @@ static const struct venus_resources sdm845_res = {
 	.vcodec_clks_num = 2,
 	.max_load = 3110400,	/* 4096x2160@90 */
 	.hfi_version = HFI_VERSION_4XX,
+	.vpu_version = VPU_VERSION_AR50,
 	.vmem_id = VIDC_RESOURCE_NONE,
 	.vmem_size = 0,
 	.vmem_addr = 0,
@@ -709,6 +710,7 @@ static const struct venus_resources sdm845_res_v2 = {
 	.vcodec_num = 2,
 	.max_load = 3110400,	/* 4096x2160@90 */
 	.hfi_version = HFI_VERSION_4XX,
+	.vpu_version = VPU_VERSION_AR50,
 	.vmem_id = VIDC_RESOURCE_NONE,
 	.vmem_size = 0,
 	.vmem_addr = 0,
@@ -756,6 +758,7 @@ static const struct venus_resources sc7180_res = {
 	.opp_pmdomain = (const char *[]) { "cx", NULL },
 	.vcodec_num = 1,
 	.hfi_version = HFI_VERSION_4XX,
+	.vpu_version = VPU_VERSION_AR50,
 	.vmem_id = VIDC_RESOURCE_NONE,
 	.vmem_size = 0,
 	.vmem_addr = 0,
@@ -809,6 +812,7 @@ static const struct venus_resources sm8250_res = {
 	.vcodec_num = 1,
 	.max_load = 7833600,
 	.hfi_version = HFI_VERSION_6XX,
+	.vpu_version = VPU_VERSION_IRIS2,
 	.num_vpp_pipes = 4,
 	.vmem_id = VIDC_RESOURCE_NONE,
 	.vmem_size = 0,
@@ -866,6 +870,7 @@ static const struct venus_resources sc7280_res = {
 	.opp_pmdomain = (const char *[]) { "cx", NULL },
 	.vcodec_num = 1,
 	.hfi_version = HFI_VERSION_6XX,
+	.vpu_version = VPU_VERSION_IRIS2_1,
 	.num_vpp_pipes = 1,
 	.vmem_id = VIDC_RESOURCE_NONE,
 	.vmem_size = 0,

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 05/17] media: venus: firmware: Leave a clue about obtaining CP VARs
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (3 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 04/17] media: venus: Add vpu_version to most SoCs Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version Konrad Dybcio
                   ` (12 subsequent siblings)
  17 siblings, 0 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

The qcom_scm_mem_protect_video_var accepts two sets of <addr size>
pairs as arguments. They describe the virtual address ranges of the
CP (Content Protection) and CP_NONPIXEL regions. It is however not
immediately obvious how to obtain these values.

Leave a comment explaining how one can translate the vendor device
tree properties for use with the mainline driver.

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/firmware.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c
index cfb11c551167..572b649c56f3 100644
--- a/drivers/media/platform/qcom/venus/firmware.c
+++ b/drivers/media/platform/qcom/venus/firmware.c
@@ -241,6 +241,16 @@ int venus_boot(struct venus_core *core)
 		return ret;
 
 	if (core->use_tz && res->cp_size) {
+		/*
+		 * Clues for porting using downstream data:
+		 * cp_start = 0
+		 * cp_size = venus_ns/virtual-addr-pool[0] - yes, address and not size!
+		 *   This works, as the non-secure context bank is placed
+		 *   contiguously right after the Content Protection region.
+		 *
+		 * cp_nonpixel_start = venus_sec_non_pixel/virtual-addr-pool[0]
+		 * cp_nonpixel_size = venus_sec_non_pixel/virtual-addr-pool[1]
+		 */
 		ret = qcom_scm_mem_protect_video_var(res->cp_start,
 						     res->cp_size,
 						     res->cp_nonpixel_start,

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (4 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 05/17] media: venus: firmware: Leave a clue about obtaining CP VARs Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:10   ` Vikash Garodia
  2023-06-01  9:33   ` Dikshita Agarwal
  2023-05-30 12:30 ` [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version Konrad Dybcio
                   ` (11 subsequent siblings)
  17 siblings, 2 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

The current assumption of IS_V6 is overgeneralized. Adjust the logic
to take the VPU hardware version into account.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 5506a0d196ef..9e36ef9076a0 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -447,19 +447,20 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
 {
 	struct device *dev = hdev->core->dev;
 	static const unsigned int max_tries = 100;
-	u32 ctrl_status = 0, mask_val;
+	u32 ctrl_status = 0, mask_val = 0;
 	unsigned int count = 0;
 	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
 	void __iomem *wrapper_base = hdev->core->wrapper_base;
 	int ret = 0;
 
-	if (IS_V6(hdev->core)) {
+	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
 		mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
 		mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
 			      WRAPPER_INTR_MASK_A2HCPU_MASK);
 	} else {
 		mask_val = WRAPPER_INTR_MASK_A2HVCODEC_MASK;
 	}
+
 	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
 	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
 
@@ -479,7 +480,7 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
 	if (count >= max_tries)
 		ret = -ETIMEDOUT;
 
-	if (IS_V6(hdev->core)) {
+	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
 		writel(0x1, cpu_cs_base + CPU_CS_H2XSOFTINTEN_V6);
 		writel(0x0, cpu_cs_base + CPU_CS_X2RPMH_V6);
 	}

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (5 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:11   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version Konrad Dybcio
                   ` (10 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

The current assumption of IS_V6 is overgeneralized. Adjust the logic
to take the VPU hardware version into account.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 01671dd23888..69c77b2137cc 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -246,7 +246,7 @@ static int venus_enumerate_codecs(struct venus_core *core, u32 type)
 
 static void venus_assign_register_offsets(struct venus_core *core)
 {
-	if (IS_V6(core)) {
+	if (IS_IRIS2(core) || IS_IRIS2_1(core)) {
 		core->vbif_base = core->base + VBIF_BASE;
 		core->cpu_base = core->base + CPU_BASE_V6;
 		core->cpu_cs_base = core->base + CPU_CS_BASE_V6;

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (6 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:13   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version Konrad Dybcio
                   ` (9 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Only IRIS2(_1) should enter the until-now-IS_V6() path and IRIS2_1
can be used instead of openly checking the number of VPP pipes.

Use VPU version comparison in both of these cases instead.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 9e36ef9076a0..60252d05781e 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -548,10 +548,10 @@ static int venus_halt_axi(struct venus_hfi_device *hdev)
 	u32 mask_val;
 	int ret;
 
-	if (IS_V6(hdev->core)) {
+	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
 		writel(0x3, cpu_cs_base + CPU_CS_X2RPMH_V6);
 
-		if (hdev->core->res->num_vpp_pipes == 1)
+		if (IS_IRIS2_1(hdev->core))
 			goto skip_aon_mvp_noc;
 
 		writel(0x1, aon_base + AON_WRAPPER_MVP_NOC_LPI_CONTROL);

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (7 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:14   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version Konrad Dybcio
                   ` (8 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Replace the general IS_V6 checks with more specific VPU version checks.

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 60252d05781e..5e4b97b0a4ae 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -1109,7 +1109,7 @@ static irqreturn_t venus_isr(struct venus_core *core)
 	wrapper_base = hdev->core->wrapper_base;
 
 	status = readl(wrapper_base + WRAPPER_INTR_STATUS);
-	if (IS_V6(core)) {
+	if (IS_IRIS2(core) || IS_IRIS2_1(core)) {
 		if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
 		    status & WRAPPER_INTR_STATUS_A2HWD_MASK_V6 ||
 		    status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
@@ -1121,7 +1121,7 @@ static irqreturn_t venus_isr(struct venus_core *core)
 			hdev->irq_status = status;
 	}
 	writel(1, cpu_cs_base + CPU_CS_A2HSOFTINTCLR);
-	if (!IS_V6(core))
+	if (!(IS_IRIS2(core) || IS_IRIS2_1(core)))
 		writel(status, wrapper_base + WRAPPER_INTR_CLEAR);
 
 	return IRQ_WAKE_THREAD;

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (8 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:15   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version Konrad Dybcio
                   ` (7 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Replace the general IS_V6 checks with more specific VPU version checks.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 5e4b97b0a4ae..b5d7aab03bca 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -1516,7 +1516,7 @@ static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev)
 	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
 	u32 ctrl_status, cpu_status;
 
-	if (IS_V6(hdev->core))
+	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core))
 		cpu_status = readl(wrapper_tz_base + WRAPPER_TZ_CPU_STATUS_V6);
 	else
 		cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (9 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:15   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version Konrad Dybcio
                   ` (6 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Replace the general IS_V6 checks with more specific VPU version checks.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index b5d7aab03bca..82854553f99e 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -1536,7 +1536,7 @@ static bool venus_cpu_idle_and_pc_ready(struct venus_hfi_device *hdev)
 	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
 	u32 ctrl_status, cpu_status;
 
-	if (IS_V6(hdev->core))
+	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core))
 		cpu_status = readl(wrapper_tz_base + WRAPPER_TZ_CPU_STATUS_V6);
 	else
 		cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (10 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:16   ` Vikash Garodia
  2023-06-01  9:34   ` Dikshita Agarwal
  2023-05-30 12:30 ` [PATCH v4 13/17] media: venus: hfi_platform: Check vpu_version instead of device compatible Konrad Dybcio
                   ` (5 subsequent siblings)
  17 siblings, 2 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Replace the general IS_V6 checks with more specific VPU version checks.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/firmware.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c
index 572b649c56f3..ef07eea38d93 100644
--- a/drivers/media/platform/qcom/venus/firmware.c
+++ b/drivers/media/platform/qcom/venus/firmware.c
@@ -29,7 +29,7 @@ static void venus_reset_cpu(struct venus_core *core)
 	u32 fw_size = core->fw.mapped_mem_size;
 	void __iomem *wrapper_base;
 
-	if (IS_V6(core))
+	if (IS_IRIS2_1(core))
 		wrapper_base = core->wrapper_tz_base;
 	else
 		wrapper_base = core->wrapper_base;
@@ -41,7 +41,7 @@ static void venus_reset_cpu(struct venus_core *core)
 	writel(fw_size, wrapper_base + WRAPPER_NONPIX_START_ADDR);
 	writel(fw_size, wrapper_base + WRAPPER_NONPIX_END_ADDR);
 
-	if (IS_V6(core)) {
+	if (IS_IRIS2_1(core)) {
 		/* Bring XTSS out of reset */
 		writel(0, wrapper_base + WRAPPER_TZ_XTSS_SW_RESET);
 	} else {
@@ -67,7 +67,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume)
 	if (resume) {
 		venus_reset_cpu(core);
 	} else {
-		if (IS_V6(core))
+		if (IS_IRIS2_1(core))
 			writel(WRAPPER_XTSS_SW_RESET_BIT,
 			       core->wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
 		else
@@ -179,7 +179,7 @@ static int venus_shutdown_no_tz(struct venus_core *core)
 	void __iomem *wrapper_base = core->wrapper_base;
 	void __iomem *wrapper_tz_base = core->wrapper_tz_base;
 
-	if (IS_V6(core)) {
+	if (IS_IRIS2_1(core)) {
 		/* Assert the reset to XTSS */
 		reg = readl(wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
 		reg |= WRAPPER_XTSS_SW_RESET_BIT;

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 13/17] media: venus: hfi_platform: Check vpu_version instead of device compatible
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (11 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-05-30 12:30 ` [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version Konrad Dybcio
                   ` (4 subsequent siblings)
  17 siblings, 0 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

This is not a matter of the host SoC, but the VPU chip in Venus. Fix it.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_platform.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_platform.c b/drivers/media/platform/qcom/venus/hfi_platform.c
index f07f554bc5fe..d163d5b0e6b7 100644
--- a/drivers/media/platform/qcom/venus/hfi_platform.c
+++ b/drivers/media/platform/qcom/venus/hfi_platform.c
@@ -80,7 +80,7 @@ hfi_platform_get_codecs(struct venus_core *core, u32 *enc_codecs, u32 *dec_codec
 	if (plat->codecs)
 		plat->codecs(enc_codecs, dec_codecs, count);
 
-	if (of_device_is_compatible(core->dev->of_node, "qcom,sc7280-venus")) {
+	if (IS_IRIS2_1(core)) {
 		*enc_codecs &= ~HFI_VIDEO_CODEC_VP8;
 		*dec_codecs &= ~HFI_VIDEO_CODEC_VP8;
 	}

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (12 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 13/17] media: venus: hfi_platform: Check vpu_version instead of device compatible Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:17   ` Vikash Garodia
  2023-05-30 12:30 ` [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members Konrad Dybcio
                   ` (3 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Replace the general IS_V6 checks with more specific VPU version checks.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/vdec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 12a2e99508f5..063a8b0d357b 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -727,7 +727,7 @@ static int vdec_set_work_route(struct venus_inst *inst)
 	u32 ptype = HFI_PROPERTY_PARAM_WORK_ROUTE;
 	struct hfi_video_work_route wr;
 
-	if (!IS_V6(inst->core))
+	if (!(IS_IRIS2(inst->core) || IS_IRIS2_1(inst->core)))
 		return 0;
 
 	wr.video_work_route = inst->core->res->num_vpp_pipes;

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (13 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:37   ` Dikshita Agarwal
  2023-05-30 12:30 ` [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors Konrad Dybcio
                   ` (2 subsequent siblings)
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Currently we have macros to access these, but they don't provide a
way to override the remapped fields. Replace the macros with actual
get/set pairs to fix that.

Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/helpers.c    |  2 +-
 drivers/media/platform/qcom/venus/hfi_helper.h | 61 ++++++++++++++++++++++----
 drivers/media/platform/qcom/venus/hfi_msgs.c   |  2 +-
 drivers/media/platform/qcom/venus/vdec.c       |  8 ++--
 drivers/media/platform/qcom/venus/vdec_ctrls.c |  2 +-
 drivers/media/platform/qcom/venus/venc.c       |  4 +-
 drivers/media/platform/qcom/venus/venc_ctrls.c |  2 +-
 7 files changed, 63 insertions(+), 18 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index 1822e85ab6bf..b70bd3dac4df 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -189,7 +189,7 @@ int venus_helper_alloc_dpb_bufs(struct venus_inst *inst)
 	if (ret)
 		return ret;
 
-	count = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
+	count = hfi_bufreq_get_count_min(&bufreq, ver);
 
 	for (i = 0; i < count; i++) {
 		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h
index 0abbc50c5864..e4c05d62cfc7 100644
--- a/drivers/media/platform/qcom/venus/hfi_helper.h
+++ b/drivers/media/platform/qcom/venus/hfi_helper.h
@@ -1170,14 +1170,6 @@ struct hfi_buffer_display_hold_count_actual {
 	u32 hold_count;
 };
 
-/* HFI 4XX reorder the fields, use these macros */
-#define HFI_BUFREQ_HOLD_COUNT(bufreq, ver)	\
-	((ver) == HFI_VERSION_4XX ? 0 : (bufreq)->hold_count)
-#define HFI_BUFREQ_COUNT_MIN(bufreq, ver)	\
-	((ver) == HFI_VERSION_4XX ? (bufreq)->hold_count : (bufreq)->count_min)
-#define HFI_BUFREQ_COUNT_MIN_HOST(bufreq, ver)	\
-	((ver) == HFI_VERSION_4XX ? (bufreq)->count_min : 0)
-
 struct hfi_buffer_requirements {
 	u32 type;
 	u32 size;
@@ -1189,6 +1181,59 @@ struct hfi_buffer_requirements {
 	u32 alignment;
 };
 
+/* On HFI 4XX, some of the struct members have been swapped. */
+static inline u32 hfi_bufreq_get_hold_count(struct hfi_buffer_requirements *req,
+					    u32 ver)
+{
+	if (ver == HFI_VERSION_4XX)
+		return 0;
+
+	return req->hold_count;
+};
+
+static inline u32 hfi_bufreq_get_count_min(struct hfi_buffer_requirements *req,
+					   u32 ver)
+{
+	if (ver == HFI_VERSION_4XX)
+		return req->hold_count;
+
+	return req->count_min;
+};
+
+static inline u32 hfi_bufreq_get_count_min_host(struct hfi_buffer_requirements *req,
+						u32 ver)
+{
+	if (ver == HFI_VERSION_4XX)
+		return req->count_min;
+
+	return 0;
+};
+
+static inline void hfi_bufreq_set_hold_count(struct hfi_buffer_requirements *req,
+					     u32 ver, u32 val)
+{
+	if (ver == HFI_VERSION_4XX)
+		return;
+
+	req->hold_count = val;
+};
+
+static inline void hfi_bufreq_set_count_min(struct hfi_buffer_requirements *req,
+					    u32 ver, u32 val)
+{
+	if (ver == HFI_VERSION_4XX)
+		req->hold_count = val;
+
+	req->count_min = val;
+};
+
+static inline void hfi_bufreq_set_count_min_host(struct hfi_buffer_requirements *req,
+						 u32 ver, u32 val)
+{
+	if (ver == HFI_VERSION_4XX)
+		req->count_min = val;
+};
+
 struct hfi_data_payload {
 	u32 size;
 	u8 data[1];
diff --git a/drivers/media/platform/qcom/venus/hfi_msgs.c b/drivers/media/platform/qcom/venus/hfi_msgs.c
index 3d5dadfa1900..7cab685a2ec8 100644
--- a/drivers/media/platform/qcom/venus/hfi_msgs.c
+++ b/drivers/media/platform/qcom/venus/hfi_msgs.c
@@ -99,7 +99,7 @@ static void event_seq_changed(struct venus_core *core, struct venus_inst *inst,
 		case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
 			data_ptr += sizeof(u32);
 			bufreq = (struct hfi_buffer_requirements *)data_ptr;
-			event.buf_count = HFI_BUFREQ_COUNT_MIN(bufreq, ver);
+			event.buf_count = hfi_bufreq_get_count_min(bufreq, ver);
 			data_ptr += sizeof(*bufreq);
 			break;
 		case HFI_INDEX_EXTRADATA_INPUT_CROP:
diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index 063a8b0d357b..2a1e038f92cf 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -899,13 +899,13 @@ static int vdec_num_buffers(struct venus_inst *inst, unsigned int *in_num,
 	if (ret)
 		return ret;
 
-	*in_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
+	*in_num = hfi_bufreq_get_count_min(&bufreq, ver);
 
 	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
 	if (ret)
 		return ret;
 
-	*out_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
+	*out_num = hfi_bufreq_get_count_min(&bufreq, ver);
 
 	return 0;
 }
@@ -1019,14 +1019,14 @@ static int vdec_verify_conf(struct venus_inst *inst)
 		return ret;
 
 	if (inst->num_output_bufs < bufreq.count_actual ||
-	    inst->num_output_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
+	    inst->num_output_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
 		return -EINVAL;
 
 	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
 	if (ret)
 		return ret;
 
-	if (inst->num_input_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
+	if (inst->num_input_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
 		return -EINVAL;
 
 	return 0;
diff --git a/drivers/media/platform/qcom/venus/vdec_ctrls.c b/drivers/media/platform/qcom/venus/vdec_ctrls.c
index fbe12a608b21..7e0f29bf7fae 100644
--- a/drivers/media/platform/qcom/venus/vdec_ctrls.c
+++ b/drivers/media/platform/qcom/venus/vdec_ctrls.c
@@ -79,7 +79,7 @@ static int vdec_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
 		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
 		if (!ret)
-			ctrl->val = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
+			ctrl->val = hfi_bufreq_get_count_min(&bufreq, ver);
 		break;
 	default:
 		return -EINVAL;
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index b60772cc2cdc..d2e2d3108752 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -1207,7 +1207,7 @@ static int venc_verify_conf(struct venus_inst *inst)
 		return ret;
 
 	if (inst->num_output_bufs < bufreq.count_actual ||
-	    inst->num_output_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
+	    inst->num_output_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
 		return -EINVAL;
 
 	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
@@ -1215,7 +1215,7 @@ static int venc_verify_conf(struct venus_inst *inst)
 		return ret;
 
 	if (inst->num_input_bufs < bufreq.count_actual ||
-	    inst->num_input_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
+	    inst->num_input_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
 		return -EINVAL;
 
 	return 0;
diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c
index 7468e43800a9..d9d2a293f3ef 100644
--- a/drivers/media/platform/qcom/venus/venc_ctrls.c
+++ b/drivers/media/platform/qcom/venus/venc_ctrls.c
@@ -358,7 +358,7 @@ static int venc_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 	case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
 		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
 		if (!ret)
-			ctrl->val = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
+			ctrl->val = hfi_bufreq_get_count_min(&bufreq, ver);
 		break;
 	default:
 		return -EINVAL;

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (14 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:39   ` Dikshita Agarwal
  2023-05-30 12:30 ` [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2 Konrad Dybcio
  2023-07-11 12:25 ` [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

Now that we have a way which is independent of the HFI version to set
the correct fields in hfi_buffer_requirements, use it!

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/helpers.c        |  5 +++--
 .../media/platform/qcom/venus/hfi_plat_bufs_v6.c   | 22 +++++++++++-----------
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index b70bd3dac4df..8295542e1a7c 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -668,6 +668,7 @@ int venus_helper_get_bufreq(struct venus_inst *inst, u32 type,
 			    struct hfi_buffer_requirements *req)
 {
 	u32 ptype = HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS;
+	enum hfi_version ver = inst->core->res->hfi_version;
 	union hfi_get_property hprop;
 	unsigned int i;
 	int ret;
@@ -675,12 +676,12 @@ int venus_helper_get_bufreq(struct venus_inst *inst, u32 type,
 	memset(req, 0, sizeof(*req));
 
 	if (type == HFI_BUFFER_OUTPUT || type == HFI_BUFFER_OUTPUT2)
-		req->count_min = inst->fw_min_cnt;
+		hfi_bufreq_set_count_min(req, ver, inst->fw_min_cnt);
 
 	ret = platform_get_bufreq(inst, type, req);
 	if (!ret) {
 		if (type == HFI_BUFFER_OUTPUT || type == HFI_BUFFER_OUTPUT2)
-			inst->fw_min_cnt = req->count_min;
+			inst->fw_min_cnt = hfi_bufreq_get_count_min(req, ver);
 		return 0;
 	}
 
diff --git a/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c b/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
index e97ff8cf6d64..f5a655973c08 100644
--- a/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
+++ b/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
@@ -1215,24 +1215,24 @@ static int bufreq_dec(struct hfi_plat_buffers_params *params, u32 buftype,
 
 	out_min_count = output_buffer_count(VIDC_SESSION_TYPE_DEC, codec);
 	/* Max of driver and FW count */
-	out_min_count = max(out_min_count, bufreq->count_min);
+	out_min_count = max(out_min_count, hfi_bufreq_get_count_min(bufreq, version));
 
 	bufreq->type = buftype;
 	bufreq->region_size = 0;
-	bufreq->count_min = 1;
 	bufreq->count_actual = 1;
-	bufreq->hold_count = 1;
+	hfi_bufreq_set_count_min(bufreq, version, 1);
+	hfi_bufreq_set_hold_count(bufreq, version, 1);
 	bufreq->contiguous = 1;
 	bufreq->alignment = 256;
 
 	if (buftype == HFI_BUFFER_INPUT) {
-		bufreq->count_min = MIN_INPUT_BUFFERS;
+		hfi_bufreq_set_count_min(bufreq, version, MIN_INPUT_BUFFERS);
 		bufreq->size =
 			calculate_dec_input_frame_size(width, height, codec,
 						       max_mbs_per_frame,
 						       buffer_size_limit);
 	} else if (buftype == HFI_BUFFER_OUTPUT || buftype == HFI_BUFFER_OUTPUT2) {
-		bufreq->count_min = out_min_count;
+		hfi_bufreq_set_count_min(bufreq, version, out_min_count);
 		bufreq->size =
 			venus_helper_get_framesz_raw(params->hfi_color_fmt,
 						     out_width, out_height);
@@ -1269,7 +1269,7 @@ static int bufreq_enc(struct hfi_plat_buffers_params *params, u32 buftype,
 	u32 work_mode = params->enc.work_mode;
 	u32 rc_type = params->enc.rc_type;
 	u32 num_vpp_pipes = params->num_vpp_pipes;
-	u32 num_ref;
+	u32 num_ref, count_min;
 
 	switch (codec) {
 	case V4L2_PIX_FMT_H264:
@@ -1289,21 +1289,21 @@ static int bufreq_enc(struct hfi_plat_buffers_params *params, u32 buftype,
 
 	bufreq->type = buftype;
 	bufreq->region_size = 0;
-	bufreq->count_min = 1;
 	bufreq->count_actual = 1;
-	bufreq->hold_count = 1;
+	hfi_bufreq_set_count_min(bufreq, version, 1);
+	hfi_bufreq_set_hold_count(bufreq, version, 1);
 	bufreq->contiguous = 1;
 	bufreq->alignment = 256;
 
 	if (buftype == HFI_BUFFER_INPUT) {
-		bufreq->count_min = MIN_INPUT_BUFFERS;
+		hfi_bufreq_set_count_min(bufreq, version, MIN_INPUT_BUFFERS);
 		bufreq->size =
 			venus_helper_get_framesz_raw(params->hfi_color_fmt,
 						     width, height);
 	} else if (buftype == HFI_BUFFER_OUTPUT ||
 		   buftype == HFI_BUFFER_OUTPUT2) {
-		bufreq->count_min =
-			output_buffer_count(VIDC_SESSION_TYPE_ENC, codec);
+		count_min = output_buffer_count(VIDC_SESSION_TYPE_ENC, codec);
+		hfi_bufreq_set_count_min(bufreq, version, count_min);
 		bufreq->size = calculate_enc_output_frame_size(width, height,
 							       rc_type);
 	} else if (buftype == HFI_BUFFER_INTERNAL_SCRATCH(version)) {

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (15 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors Konrad Dybcio
@ 2023-05-30 12:30 ` Konrad Dybcio
  2023-06-01  9:17   ` Vikash Garodia
  2023-07-11 12:25 ` [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
  17 siblings, 1 reply; 34+ messages in thread
From: Konrad Dybcio @ 2023-05-30 12:30 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, Konrad Dybcio,
	Vikash Garodia

This write was last present on msm-3.10, which means before HFI3XX
platforms were introduced. Guard it with an appropriate if condition.

Does not seem to have any adverse effects on at least SM8250.

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/media/platform/qcom/venus/hfi_venus.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
index 82854553f99e..19fc6575a489 100644
--- a/drivers/media/platform/qcom/venus/hfi_venus.c
+++ b/drivers/media/platform/qcom/venus/hfi_venus.c
@@ -462,7 +462,8 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
 	}
 
 	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
-	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
+	if (IS_V1(hdev->core))
+		writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
 
 	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
 	while (!ctrl_status && count < max_tries) {

-- 
2.40.1


^ permalink raw reply related	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1
  2023-05-30 12:30 ` [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1 Konrad Dybcio
@ 2023-06-01  9:08   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:08 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> As per information from Qualcomm [1], this property is not really
> supported beyond msm8916 (HFI V1) and some newer HFI versions really
> dislike receiving it, going as far as crashing the device.
> 
> Only consider toggling it (via the module option) on HFIV1.
> While at it, get rid of the global static variable (which defaulted
> to zero) which was never explicitly assigned to for V1.
> 
> Note: [1] is a reply to the actual message in question, as lore did not
> properly receive some of the emails..
> 
> [1] https://lore.kernel.org/lkml/955cd520-3881-0c22-d818-13fe9a47e124@linaro.org/
> Fixes: 7ed9e0b3393c ("media: venus: hfi, vdec: v6 Add IS_V6() to existing IS_V4() if locations")
> Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 18 ++++++------------
>  1 file changed, 6 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index f0b46389e8d5..918a283bd890 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -131,7 +131,6 @@ struct venus_hfi_device {
>  
>  static bool venus_pkt_debug;
>  int venus_fw_debug = HFI_DEBUG_MSG_ERROR | HFI_DEBUG_MSG_FATAL;
> -static bool venus_sys_idle_indicator;
>  static bool venus_fw_low_power_mode = true;
>  static int venus_hw_rsp_timeout = 1000;
>  static bool venus_fw_coverage;
> @@ -927,17 +926,12 @@ static int venus_sys_set_default_properties(struct venus_hfi_device *hdev)
>  	if (ret)
>  		dev_warn(dev, "setting fw debug msg ON failed (%d)\n", ret);
>  
> -	/*
> -	 * Idle indicator is disabled by default on some 4xx firmware versions,
> -	 * enable it explicitly in order to make suspend functional by checking
> -	 * WFI (wait-for-interrupt) bit.
> -	 */
> -	if (IS_V4(hdev->core) || IS_V6(hdev->core))
> -		venus_sys_idle_indicator = true;
> -
> -	ret = venus_sys_set_idle_message(hdev, venus_sys_idle_indicator);
> -	if (ret)
> -		dev_warn(dev, "setting idle response ON failed (%d)\n", ret);
> +	/* HFI_PROPERTY_SYS_IDLE_INDICATOR is not supported beyond 8916 (HFI V1) */
> +	if (IS_V1(hdev->core)) {
> +		ret = venus_sys_set_idle_message(hdev, false);
> +		if (ret)
> +			dev_warn(dev, "setting idle response ON failed (%d)\n", ret);
> +	}
>  
>  	ret = venus_sys_set_power_control(hdev, venus_fw_low_power_mode);
>  	if (ret)
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts
  2023-05-30 12:30 ` [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts Konrad Dybcio
@ 2023-06-01  9:09   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:09 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, stable

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> The startup procedure shouldn't be started with interrupts masked, as that
> may entail silent failures.
> 
> Kick off initialization only after the interrupts are unmasked.
> 
> Cc: stable@vger.kernel.org # v4.12+
> Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 918a283bd890..5506a0d196ef 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -453,7 +453,6 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  	void __iomem *wrapper_base = hdev->core->wrapper_base;
>  	int ret = 0;
>  
> -	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
>  	if (IS_V6(hdev->core)) {
>  		mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
>  		mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
> @@ -464,6 +463,7 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
>  	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
>  
> +	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
>  	while (!ctrl_status && count < max_tries) {
>  		ctrl_status = readl(cpu_cs_base + CPU_CS_SCIACMDARG0);
>  		if ((ctrl_status & CPU_CS_SCIACMDARG0_ERROR_STATUS_MASK) == 4) {
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:10   ` Vikash Garodia
  2023-06-01  9:33   ` Dikshita Agarwal
  1 sibling, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:10 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> The current assumption of IS_V6 is overgeneralized. Adjust the logic
> to take the VPU hardware version into account.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 5506a0d196ef..9e36ef9076a0 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -447,19 +447,20 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  {
>  	struct device *dev = hdev->core->dev;
>  	static const unsigned int max_tries = 100;
> -	u32 ctrl_status = 0, mask_val;
> +	u32 ctrl_status = 0, mask_val = 0;
>  	unsigned int count = 0;
>  	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
>  	void __iomem *wrapper_base = hdev->core->wrapper_base;
>  	int ret = 0;
>  
> -	if (IS_V6(hdev->core)) {
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
>  		mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
>  		mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
>  			      WRAPPER_INTR_MASK_A2HCPU_MASK);
>  	} else {
>  		mask_val = WRAPPER_INTR_MASK_A2HVCODEC_MASK;
>  	}
> +
>  	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
>  	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
>  
> @@ -479,7 +480,7 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  	if (count >= max_tries)
>  		ret = -ETIMEDOUT;
>  
> -	if (IS_V6(hdev->core)) {
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
>  		writel(0x1, cpu_cs_base + CPU_CS_H2XSOFTINTEN_V6);
>  		writel(0x0, cpu_cs_base + CPU_CS_X2RPMH_V6);
>  	}
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version
  2023-05-30 12:30 ` [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version Konrad Dybcio
@ 2023-06-01  9:11   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:11 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> The current assumption of IS_V6 is overgeneralized. Adjust the logic
> to take the VPU hardware version into account.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index 01671dd23888..69c77b2137cc 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -246,7 +246,7 @@ static int venus_enumerate_codecs(struct venus_core *core, u32 type)
>  
>  static void venus_assign_register_offsets(struct venus_core *core)
>  {
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2(core) || IS_IRIS2_1(core)) {
>  		core->vbif_base = core->base + VBIF_BASE;
>  		core->cpu_base = core->base + CPU_BASE_V6;
>  		core->cpu_cs_base = core->base + CPU_CS_BASE_V6;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:13   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:13 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Only IRIS2(_1) should enter the until-now-IS_V6() path and IRIS2_1
> can be used instead of openly checking the number of VPP pipes.
> 
> Use VPU version comparison in both of these cases instead.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 9e36ef9076a0..60252d05781e 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -548,10 +548,10 @@ static int venus_halt_axi(struct venus_hfi_device *hdev)
>  	u32 mask_val;
>  	int ret;
>  
> -	if (IS_V6(hdev->core)) {
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
>  		writel(0x3, cpu_cs_base + CPU_CS_X2RPMH_V6);
>  
> -		if (hdev->core->res->num_vpp_pipes == 1)
> +		if (IS_IRIS2_1(hdev->core))
>  			goto skip_aon_mvp_noc;
>  
>  		writel(0x1, aon_base + AON_WRAPPER_MVP_NOC_LPI_CONTROL);
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:14   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:14 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 60252d05781e..5e4b97b0a4ae 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -1109,7 +1109,7 @@ static irqreturn_t venus_isr(struct venus_core *core)
>  	wrapper_base = hdev->core->wrapper_base;
>  
>  	status = readl(wrapper_base + WRAPPER_INTR_STATUS);
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2(core) || IS_IRIS2_1(core)) {
>  		if (status & WRAPPER_INTR_STATUS_A2H_MASK ||
>  		    status & WRAPPER_INTR_STATUS_A2HWD_MASK_V6 ||
>  		    status & CPU_CS_SCIACMDARG0_INIT_IDLE_MSG_MASK)
> @@ -1121,7 +1121,7 @@ static irqreturn_t venus_isr(struct venus_core *core)
>  			hdev->irq_status = status;
>  	}
>  	writel(1, cpu_cs_base + CPU_CS_A2HSOFTINTCLR);
> -	if (!IS_V6(core))
> +	if (!(IS_IRIS2(core) || IS_IRIS2_1(core)))
>  		writel(status, wrapper_base + WRAPPER_INTR_CLEAR);
>  
>  	return IRQ_WAKE_THREAD;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:15   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:15 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 5e4b97b0a4ae..b5d7aab03bca 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -1516,7 +1516,7 @@ static bool venus_cpu_and_video_core_idle(struct venus_hfi_device *hdev)
>  	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
>  	u32 ctrl_status, cpu_status;
>  
> -	if (IS_V6(hdev->core))
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core))
>  		cpu_status = readl(wrapper_tz_base + WRAPPER_TZ_CPU_STATUS_V6);
>  	else
>  		cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:15   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:15 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index b5d7aab03bca..82854553f99e 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -1536,7 +1536,7 @@ static bool venus_cpu_idle_and_pc_ready(struct venus_hfi_device *hdev)
>  	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
>  	u32 ctrl_status, cpu_status;
>  
> -	if (IS_V6(hdev->core))
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core))
>  		cpu_status = readl(wrapper_tz_base + WRAPPER_TZ_CPU_STATUS_V6);
>  	else
>  		cpu_status = readl(wrapper_base + WRAPPER_CPU_STATUS);
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version Konrad Dybcio
@ 2023-06-01  9:16   ` Vikash Garodia
  2023-06-01  9:34   ` Dikshita Agarwal
  1 sibling, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:16 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/firmware.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c
> index 572b649c56f3..ef07eea38d93 100644
> --- a/drivers/media/platform/qcom/venus/firmware.c
> +++ b/drivers/media/platform/qcom/venus/firmware.c
> @@ -29,7 +29,7 @@ static void venus_reset_cpu(struct venus_core *core)
>  	u32 fw_size = core->fw.mapped_mem_size;
>  	void __iomem *wrapper_base;
>  
> -	if (IS_V6(core))
> +	if (IS_IRIS2_1(core))
>  		wrapper_base = core->wrapper_tz_base;
>  	else
>  		wrapper_base = core->wrapper_base;
> @@ -41,7 +41,7 @@ static void venus_reset_cpu(struct venus_core *core)
>  	writel(fw_size, wrapper_base + WRAPPER_NONPIX_START_ADDR);
>  	writel(fw_size, wrapper_base + WRAPPER_NONPIX_END_ADDR);
>  
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2_1(core)) {
>  		/* Bring XTSS out of reset */
>  		writel(0, wrapper_base + WRAPPER_TZ_XTSS_SW_RESET);
>  	} else {
> @@ -67,7 +67,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume)
>  	if (resume) {
>  		venus_reset_cpu(core);
>  	} else {
> -		if (IS_V6(core))
> +		if (IS_IRIS2_1(core))
>  			writel(WRAPPER_XTSS_SW_RESET_BIT,
>  			       core->wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
>  		else
> @@ -179,7 +179,7 @@ static int venus_shutdown_no_tz(struct venus_core *core)
>  	void __iomem *wrapper_base = core->wrapper_base;
>  	void __iomem *wrapper_tz_base = core->wrapper_tz_base;
>  
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2_1(core)) {
>  		/* Assert the reset to XTSS */
>  		reg = readl(wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
>  		reg |= WRAPPER_XTSS_SW_RESET_BIT;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version Konrad Dybcio
@ 2023-06-01  9:17   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:17 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/vdec.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
> index 12a2e99508f5..063a8b0d357b 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -727,7 +727,7 @@ static int vdec_set_work_route(struct venus_inst *inst)
>  	u32 ptype = HFI_PROPERTY_PARAM_WORK_ROUTE;
>  	struct hfi_video_work_route wr;
>  
> -	if (!IS_V6(inst->core))
> +	if (!(IS_IRIS2(inst->core) || IS_IRIS2_1(inst->core)))
>  		return 0;
>  
>  	wr.video_work_route = inst->core->res->num_vpp_pipes;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2
  2023-05-30 12:30 ` [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2 Konrad Dybcio
@ 2023-06-01  9:17   ` Vikash Garodia
  0 siblings, 0 replies; 34+ messages in thread
From: Vikash Garodia @ 2023-06-01  9:17 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten

On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> This write was last present on msm-3.10, which means before HFI3XX
> platforms were introduced. Guard it with an appropriate if condition.
> 
> Does not seem to have any adverse effects on at least SM8250.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 82854553f99e..19fc6575a489 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -462,7 +462,8 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  	}
>  
>  	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
> -	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
> +	if (IS_V1(hdev->core))
> +		writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
>  
>  	writel(BIT(VIDC_CTRL_INIT_CTRL_SHIFT), cpu_cs_base + VIDC_CTRL_INIT);
>  	while (!ctrl_status && count < max_tries) {
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version Konrad Dybcio
  2023-06-01  9:10   ` Vikash Garodia
@ 2023-06-01  9:33   ` Dikshita Agarwal
  1 sibling, 0 replies; 34+ messages in thread
From: Dikshita Agarwal @ 2023-06-01  9:33 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Vikash Garodia, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Dikshita Agarwal,
	Bryan O'Donoghue, Mansur Alisha Shaik, Jonathan Marek,
	Hans Verkuil
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten



On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> The current assumption of IS_V6 is overgeneralized. Adjust the logic
> to take the VPU hardware version into account.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> ---
>  drivers/media/platform/qcom/venus/hfi_venus.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/hfi_venus.c b/drivers/media/platform/qcom/venus/hfi_venus.c
> index 5506a0d196ef..9e36ef9076a0 100644
> --- a/drivers/media/platform/qcom/venus/hfi_venus.c
> +++ b/drivers/media/platform/qcom/venus/hfi_venus.c
> @@ -447,19 +447,20 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  {
>  	struct device *dev = hdev->core->dev;
>  	static const unsigned int max_tries = 100;
> -	u32 ctrl_status = 0, mask_val;
> +	u32 ctrl_status = 0, mask_val = 0;
>  	unsigned int count = 0;
>  	void __iomem *cpu_cs_base = hdev->core->cpu_cs_base;
>  	void __iomem *wrapper_base = hdev->core->wrapper_base;
>  	int ret = 0;
>  
> -	if (IS_V6(hdev->core)) {
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
>  		mask_val = readl(wrapper_base + WRAPPER_INTR_MASK);
>  		mask_val &= ~(WRAPPER_INTR_MASK_A2HWD_BASK_V6 |
>  			      WRAPPER_INTR_MASK_A2HCPU_MASK);
>  	} else {
>  		mask_val = WRAPPER_INTR_MASK_A2HVCODEC_MASK;
>  	}
> +
>  	writel(mask_val, wrapper_base + WRAPPER_INTR_MASK);
>  	writel(1, cpu_cs_base + CPU_CS_SCIACMDARG3);
>  
> @@ -479,7 +480,7 @@ static int venus_boot_core(struct venus_hfi_device *hdev)
>  	if (count >= max_tries)
>  		ret = -ETIMEDOUT;
>  
> -	if (IS_V6(hdev->core)) {
> +	if (IS_IRIS2(hdev->core) || IS_IRIS2_1(hdev->core)) {
>  		writel(0x1, cpu_cs_base + CPU_CS_H2XSOFTINTEN_V6);
>  		writel(0x0, cpu_cs_base + CPU_CS_X2RPMH_V6);
>  	}
> 
Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version
  2023-05-30 12:30 ` [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version Konrad Dybcio
  2023-06-01  9:16   ` Vikash Garodia
@ 2023-06-01  9:34   ` Dikshita Agarwal
  1 sibling, 0 replies; 34+ messages in thread
From: Dikshita Agarwal @ 2023-06-01  9:34 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Vikash Garodia, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Dikshita Agarwal,
	Bryan O'Donoghue, Mansur Alisha Shaik, Jonathan Marek,
	Hans Verkuil
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten



On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Replace the general IS_V6 checks with more specific VPU version checks.
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/firmware.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c
> index 572b649c56f3..ef07eea38d93 100644
> --- a/drivers/media/platform/qcom/venus/firmware.c
> +++ b/drivers/media/platform/qcom/venus/firmware.c
> @@ -29,7 +29,7 @@ static void venus_reset_cpu(struct venus_core *core)
>  	u32 fw_size = core->fw.mapped_mem_size;
>  	void __iomem *wrapper_base;
>  
> -	if (IS_V6(core))
> +	if (IS_IRIS2_1(core))
>  		wrapper_base = core->wrapper_tz_base;
>  	else
>  		wrapper_base = core->wrapper_base;
> @@ -41,7 +41,7 @@ static void venus_reset_cpu(struct venus_core *core)
>  	writel(fw_size, wrapper_base + WRAPPER_NONPIX_START_ADDR);
>  	writel(fw_size, wrapper_base + WRAPPER_NONPIX_END_ADDR);
>  
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2_1(core)) {
>  		/* Bring XTSS out of reset */
>  		writel(0, wrapper_base + WRAPPER_TZ_XTSS_SW_RESET);
>  	} else {
> @@ -67,7 +67,7 @@ int venus_set_hw_state(struct venus_core *core, bool resume)
>  	if (resume) {
>  		venus_reset_cpu(core);
>  	} else {
> -		if (IS_V6(core))
> +		if (IS_IRIS2_1(core))
>  			writel(WRAPPER_XTSS_SW_RESET_BIT,
>  			       core->wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
>  		else
> @@ -179,7 +179,7 @@ static int venus_shutdown_no_tz(struct venus_core *core)
>  	void __iomem *wrapper_base = core->wrapper_base;
>  	void __iomem *wrapper_tz_base = core->wrapper_tz_base;
>  
> -	if (IS_V6(core)) {
> +	if (IS_IRIS2_1(core)) {
>  		/* Assert the reset to XTSS */
>  		reg = readl(wrapper_tz_base + WRAPPER_TZ_XTSS_SW_RESET);
>  		reg |= WRAPPER_XTSS_SW_RESET_BIT;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members
  2023-05-30 12:30 ` [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members Konrad Dybcio
@ 2023-06-01  9:37   ` Dikshita Agarwal
  0 siblings, 0 replies; 34+ messages in thread
From: Dikshita Agarwal @ 2023-06-01  9:37 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Vikash Garodia, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Dikshita Agarwal,
	Bryan O'Donoghue, Mansur Alisha Shaik, Jonathan Marek,
	Hans Verkuil
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten



On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Currently we have macros to access these, but they don't provide a
> way to override the remapped fields. Replace the macros with actual
> get/set pairs to fix that.
> 
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/helpers.c    |  2 +-
>  drivers/media/platform/qcom/venus/hfi_helper.h | 61 ++++++++++++++++++++++----
>  drivers/media/platform/qcom/venus/hfi_msgs.c   |  2 +-
>  drivers/media/platform/qcom/venus/vdec.c       |  8 ++--
>  drivers/media/platform/qcom/venus/vdec_ctrls.c |  2 +-
>  drivers/media/platform/qcom/venus/venc.c       |  4 +-
>  drivers/media/platform/qcom/venus/venc_ctrls.c |  2 +-
>  7 files changed, 63 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
> index 1822e85ab6bf..b70bd3dac4df 100644
> --- a/drivers/media/platform/qcom/venus/helpers.c
> +++ b/drivers/media/platform/qcom/venus/helpers.c
> @@ -189,7 +189,7 @@ int venus_helper_alloc_dpb_bufs(struct venus_inst *inst)
>  	if (ret)
>  		return ret;
>  
> -	count = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
> +	count = hfi_bufreq_get_count_min(&bufreq, ver);
>  
>  	for (i = 0; i < count; i++) {
>  		buf = kzalloc(sizeof(*buf), GFP_KERNEL);
> diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h
> index 0abbc50c5864..e4c05d62cfc7 100644
> --- a/drivers/media/platform/qcom/venus/hfi_helper.h
> +++ b/drivers/media/platform/qcom/venus/hfi_helper.h
> @@ -1170,14 +1170,6 @@ struct hfi_buffer_display_hold_count_actual {
>  	u32 hold_count;
>  };
>  
> -/* HFI 4XX reorder the fields, use these macros */
> -#define HFI_BUFREQ_HOLD_COUNT(bufreq, ver)	\
> -	((ver) == HFI_VERSION_4XX ? 0 : (bufreq)->hold_count)
> -#define HFI_BUFREQ_COUNT_MIN(bufreq, ver)	\
> -	((ver) == HFI_VERSION_4XX ? (bufreq)->hold_count : (bufreq)->count_min)
> -#define HFI_BUFREQ_COUNT_MIN_HOST(bufreq, ver)	\
> -	((ver) == HFI_VERSION_4XX ? (bufreq)->count_min : 0)
> -
>  struct hfi_buffer_requirements {
>  	u32 type;
>  	u32 size;
> @@ -1189,6 +1181,59 @@ struct hfi_buffer_requirements {
>  	u32 alignment;
>  };
>  
> +/* On HFI 4XX, some of the struct members have been swapped. */
> +static inline u32 hfi_bufreq_get_hold_count(struct hfi_buffer_requirements *req,
> +					    u32 ver)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		return 0;
> +
> +	return req->hold_count;
> +};
> +
> +static inline u32 hfi_bufreq_get_count_min(struct hfi_buffer_requirements *req,
> +					   u32 ver)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		return req->hold_count;
> +
> +	return req->count_min;
> +};
> +
> +static inline u32 hfi_bufreq_get_count_min_host(struct hfi_buffer_requirements *req,
> +						u32 ver)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		return req->count_min;
> +
> +	return 0;
> +};
> +
> +static inline void hfi_bufreq_set_hold_count(struct hfi_buffer_requirements *req,
> +					     u32 ver, u32 val)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		return;
> +
> +	req->hold_count = val;
> +};
> +
> +static inline void hfi_bufreq_set_count_min(struct hfi_buffer_requirements *req,
> +					    u32 ver, u32 val)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		req->hold_count = val;
> +
> +	req->count_min = val;
> +};
> +
> +static inline void hfi_bufreq_set_count_min_host(struct hfi_buffer_requirements *req,
> +						 u32 ver, u32 val)
> +{
> +	if (ver == HFI_VERSION_4XX)
> +		req->count_min = val;
> +};
> +
>  struct hfi_data_payload {
>  	u32 size;
>  	u8 data[1];
> diff --git a/drivers/media/platform/qcom/venus/hfi_msgs.c b/drivers/media/platform/qcom/venus/hfi_msgs.c
> index 3d5dadfa1900..7cab685a2ec8 100644
> --- a/drivers/media/platform/qcom/venus/hfi_msgs.c
> +++ b/drivers/media/platform/qcom/venus/hfi_msgs.c
> @@ -99,7 +99,7 @@ static void event_seq_changed(struct venus_core *core, struct venus_inst *inst,
>  		case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
>  			data_ptr += sizeof(u32);
>  			bufreq = (struct hfi_buffer_requirements *)data_ptr;
> -			event.buf_count = HFI_BUFREQ_COUNT_MIN(bufreq, ver);
> +			event.buf_count = hfi_bufreq_get_count_min(bufreq, ver);
>  			data_ptr += sizeof(*bufreq);
>  			break;
>  		case HFI_INDEX_EXTRADATA_INPUT_CROP:
> diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
> index 063a8b0d357b..2a1e038f92cf 100644
> --- a/drivers/media/platform/qcom/venus/vdec.c
> +++ b/drivers/media/platform/qcom/venus/vdec.c
> @@ -899,13 +899,13 @@ static int vdec_num_buffers(struct venus_inst *inst, unsigned int *in_num,
>  	if (ret)
>  		return ret;
>  
> -	*in_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
> +	*in_num = hfi_bufreq_get_count_min(&bufreq, ver);
>  
>  	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
>  	if (ret)
>  		return ret;
>  
> -	*out_num = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
> +	*out_num = hfi_bufreq_get_count_min(&bufreq, ver);
>  
>  	return 0;
>  }
> @@ -1019,14 +1019,14 @@ static int vdec_verify_conf(struct venus_inst *inst)
>  		return ret;
>  
>  	if (inst->num_output_bufs < bufreq.count_actual ||
> -	    inst->num_output_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
> +	    inst->num_output_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
>  		return -EINVAL;
>  
>  	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
>  	if (ret)
>  		return ret;
>  
> -	if (inst->num_input_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
> +	if (inst->num_input_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
>  		return -EINVAL;
>  
>  	return 0;
> diff --git a/drivers/media/platform/qcom/venus/vdec_ctrls.c b/drivers/media/platform/qcom/venus/vdec_ctrls.c
> index fbe12a608b21..7e0f29bf7fae 100644
> --- a/drivers/media/platform/qcom/venus/vdec_ctrls.c
> +++ b/drivers/media/platform/qcom/venus/vdec_ctrls.c
> @@ -79,7 +79,7 @@ static int vdec_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
>  	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
>  		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_OUTPUT, &bufreq);
>  		if (!ret)
> -			ctrl->val = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
> +			ctrl->val = hfi_bufreq_get_count_min(&bufreq, ver);
>  		break;
>  	default:
>  		return -EINVAL;
> diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
> index b60772cc2cdc..d2e2d3108752 100644
> --- a/drivers/media/platform/qcom/venus/venc.c
> +++ b/drivers/media/platform/qcom/venus/venc.c
> @@ -1207,7 +1207,7 @@ static int venc_verify_conf(struct venus_inst *inst)
>  		return ret;
>  
>  	if (inst->num_output_bufs < bufreq.count_actual ||
> -	    inst->num_output_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
> +	    inst->num_output_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
>  		return -EINVAL;
>  
>  	ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
> @@ -1215,7 +1215,7 @@ static int venc_verify_conf(struct venus_inst *inst)
>  		return ret;
>  
>  	if (inst->num_input_bufs < bufreq.count_actual ||
> -	    inst->num_input_bufs < HFI_BUFREQ_COUNT_MIN(&bufreq, ver))
> +	    inst->num_input_bufs < hfi_bufreq_get_count_min(&bufreq, ver))
>  		return -EINVAL;
>  
>  	return 0;
> diff --git a/drivers/media/platform/qcom/venus/venc_ctrls.c b/drivers/media/platform/qcom/venus/venc_ctrls.c
> index 7468e43800a9..d9d2a293f3ef 100644
> --- a/drivers/media/platform/qcom/venus/venc_ctrls.c
> +++ b/drivers/media/platform/qcom/venus/venc_ctrls.c
> @@ -358,7 +358,7 @@ static int venc_op_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
>  	case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
>  		ret = venus_helper_get_bufreq(inst, HFI_BUFFER_INPUT, &bufreq);
>  		if (!ret)
> -			ctrl->val = HFI_BUFREQ_COUNT_MIN(&bufreq, ver);
> +			ctrl->val = hfi_bufreq_get_count_min(&bufreq, ver);
>  		break;
>  	default:
>  		return -EINVAL;
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors
  2023-05-30 12:30 ` [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors Konrad Dybcio
@ 2023-06-01  9:39   ` Dikshita Agarwal
  0 siblings, 0 replies; 34+ messages in thread
From: Dikshita Agarwal @ 2023-06-01  9:39 UTC (permalink / raw)
  To: Konrad Dybcio, Stanimir Varbanov, Vikash Garodia, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Dikshita Agarwal,
	Bryan O'Donoghue, Mansur Alisha Shaik, Jonathan Marek,
	Hans Verkuil
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten



On 5/30/2023 6:00 PM, Konrad Dybcio wrote:
> Now that we have a way which is independent of the HFI version to set
> the correct fields in hfi_buffer_requirements, use it!
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Reviewed-by: Dikshita Agarwal <quic_dikshita@quicinc.com>

> ---
>  drivers/media/platform/qcom/venus/helpers.c        |  5 +++--
>  .../media/platform/qcom/venus/hfi_plat_bufs_v6.c   | 22 +++++++++++-----------
>  2 files changed, 14 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
> index b70bd3dac4df..8295542e1a7c 100644
> --- a/drivers/media/platform/qcom/venus/helpers.c
> +++ b/drivers/media/platform/qcom/venus/helpers.c
> @@ -668,6 +668,7 @@ int venus_helper_get_bufreq(struct venus_inst *inst, u32 type,
>  			    struct hfi_buffer_requirements *req)
>  {
>  	u32 ptype = HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS;
> +	enum hfi_version ver = inst->core->res->hfi_version;
>  	union hfi_get_property hprop;
>  	unsigned int i;
>  	int ret;
> @@ -675,12 +676,12 @@ int venus_helper_get_bufreq(struct venus_inst *inst, u32 type,
>  	memset(req, 0, sizeof(*req));
>  
>  	if (type == HFI_BUFFER_OUTPUT || type == HFI_BUFFER_OUTPUT2)
> -		req->count_min = inst->fw_min_cnt;
> +		hfi_bufreq_set_count_min(req, ver, inst->fw_min_cnt);
>  
>  	ret = platform_get_bufreq(inst, type, req);
>  	if (!ret) {
>  		if (type == HFI_BUFFER_OUTPUT || type == HFI_BUFFER_OUTPUT2)
> -			inst->fw_min_cnt = req->count_min;
> +			inst->fw_min_cnt = hfi_bufreq_get_count_min(req, ver);
>  		return 0;
>  	}
>  
> diff --git a/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c b/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
> index e97ff8cf6d64..f5a655973c08 100644
> --- a/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
> +++ b/drivers/media/platform/qcom/venus/hfi_plat_bufs_v6.c
> @@ -1215,24 +1215,24 @@ static int bufreq_dec(struct hfi_plat_buffers_params *params, u32 buftype,
>  
>  	out_min_count = output_buffer_count(VIDC_SESSION_TYPE_DEC, codec);
>  	/* Max of driver and FW count */
> -	out_min_count = max(out_min_count, bufreq->count_min);
> +	out_min_count = max(out_min_count, hfi_bufreq_get_count_min(bufreq, version));
>  
>  	bufreq->type = buftype;
>  	bufreq->region_size = 0;
> -	bufreq->count_min = 1;
>  	bufreq->count_actual = 1;
> -	bufreq->hold_count = 1;
> +	hfi_bufreq_set_count_min(bufreq, version, 1);
> +	hfi_bufreq_set_hold_count(bufreq, version, 1);
>  	bufreq->contiguous = 1;
>  	bufreq->alignment = 256;
>  
>  	if (buftype == HFI_BUFFER_INPUT) {
> -		bufreq->count_min = MIN_INPUT_BUFFERS;
> +		hfi_bufreq_set_count_min(bufreq, version, MIN_INPUT_BUFFERS);
>  		bufreq->size =
>  			calculate_dec_input_frame_size(width, height, codec,
>  						       max_mbs_per_frame,
>  						       buffer_size_limit);
>  	} else if (buftype == HFI_BUFFER_OUTPUT || buftype == HFI_BUFFER_OUTPUT2) {
> -		bufreq->count_min = out_min_count;
> +		hfi_bufreq_set_count_min(bufreq, version, out_min_count);
>  		bufreq->size =
>  			venus_helper_get_framesz_raw(params->hfi_color_fmt,
>  						     out_width, out_height);
> @@ -1269,7 +1269,7 @@ static int bufreq_enc(struct hfi_plat_buffers_params *params, u32 buftype,
>  	u32 work_mode = params->enc.work_mode;
>  	u32 rc_type = params->enc.rc_type;
>  	u32 num_vpp_pipes = params->num_vpp_pipes;
> -	u32 num_ref;
> +	u32 num_ref, count_min;
>  
>  	switch (codec) {
>  	case V4L2_PIX_FMT_H264:
> @@ -1289,21 +1289,21 @@ static int bufreq_enc(struct hfi_plat_buffers_params *params, u32 buftype,
>  
>  	bufreq->type = buftype;
>  	bufreq->region_size = 0;
> -	bufreq->count_min = 1;
>  	bufreq->count_actual = 1;
> -	bufreq->hold_count = 1;
> +	hfi_bufreq_set_count_min(bufreq, version, 1);
> +	hfi_bufreq_set_hold_count(bufreq, version, 1);
>  	bufreq->contiguous = 1;
>  	bufreq->alignment = 256;
>  
>  	if (buftype == HFI_BUFFER_INPUT) {
> -		bufreq->count_min = MIN_INPUT_BUFFERS;
> +		hfi_bufreq_set_count_min(bufreq, version, MIN_INPUT_BUFFERS);
>  		bufreq->size =
>  			venus_helper_get_framesz_raw(params->hfi_color_fmt,
>  						     width, height);
>  	} else if (buftype == HFI_BUFFER_OUTPUT ||
>  		   buftype == HFI_BUFFER_OUTPUT2) {
> -		bufreq->count_min =
> -			output_buffer_count(VIDC_SESSION_TYPE_ENC, codec);
> +		count_min = output_buffer_count(VIDC_SESSION_TYPE_ENC, codec);
> +		hfi_bufreq_set_count_min(bufreq, version, count_min);
>  		bufreq->size = calculate_enc_output_frame_size(width, height,
>  							       rc_type);
>  	} else if (buftype == HFI_BUFFER_INTERNAL_SCRATCH(version)) {
> 

^ permalink raw reply	[flat|nested] 34+ messages in thread

* Re: [PATCH v4 00/17] Venus QoL / maintainability fixes
  2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
                   ` (16 preceding siblings ...)
  2023-05-30 12:30 ` [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2 Konrad Dybcio
@ 2023-07-11 12:25 ` Konrad Dybcio
  17 siblings, 0 replies; 34+ messages in thread
From: Konrad Dybcio @ 2023-07-11 12:25 UTC (permalink / raw)
  To: Stanimir Varbanov, Vikash Garodia, Andy Gross, Bjorn Andersson,
	Mauro Carvalho Chehab, Dikshita Agarwal, Bryan O'Donoghue,
	Mansur Alisha Shaik, Jonathan Marek, Hans Verkuil,
	Dikshita Agarwal
  Cc: Mauro Carvalho Chehab, Stanimir Varbanov, linux-media,
	linux-arm-msm, linux-kernel, Marijn Suijten, stable

On 30.05.2023 14:30, Konrad Dybcio wrote:
> v3 -> v4:
> - Rebase on Stanimir's venus-for-next-v6.5
> - Collapse 2 identical if-statements in "Sanitize venus_boot_core()
>   per-VPU-version"
> - Reword "Assign registers based on VPU version"
> - Check for IS_IRIS2_1() instead of wrongly checking for core->use_tz,
>   update commit msg in "media: venus: firmware: Correct IS_V6() checks"
> - Access correct struct fields in "Use newly-introduced
>   hfi_buffer_requirements accessors", drop Bryan's r-b
Stan,

could you please pick this up?

Konrad
> 
> v3: https://lore.kernel.org/r/20230228-topic-venus-v3-0-6092ae43b58f@linaro.org
> 
> v2 -> v3:
> - Rephrase "Write to VIDC_CTRL_INIT after unmasking interrupts" commit msg
> - Drop "Remap bufreq fields on HFI6XX"
> - Rephrase "Introduce VPU version distinction" commit msg
> - Better explain "Leave a clue for homegrown porters"
> - Drop incorrect fixes tags/rephrase version check alternations
> - Drop AR50L/IRIS1 from if-conditions, they'll be introduced separately
> - pick up tags
> - rebase on next-20230517 (no effective changes)
> 
> v2: https://lore.kernel.org/r/20230228-topic-venus-v2-0-d95d14949c79@linaro.org
> 
> v1 -> v2:
> - Move "Write to VIDC_CTRL_INIT after unmasking interrupts" up and add
>   a Fixes tag & Cc stable
> - Reword the comment in "Correct IS_V6() checks"
> - Move up "media: venus: Remap bufreq fields on HFI6XX", add Fixes and
>   Cc stable
> - Use better English in "Use newly-introduced hfi_buffer_requirements
>   accessors" commit message
> - Mention "Restrict writing SCIACMDARG3 to Venus V1/V2" doesn't seem to
>   regress SM8250 in the commit message
> - Pick up tags (note: I capitalized the R in Dikshita's 'reviewed-by'
>   and removed one occurrence of random '**' to make sure review tools
>   like b4 don't go crazy)
> - Handle AR50_LITE in "Assign registers based on VPU version"
> - Drop /* VPUn */ comments, they're invalid as explained by Vikash
> - Take a different approach to the sys_idle problem in patch 1
> 
> v1: https://lore.kernel.org/r/20230228-topic-venus-v1-0-58c2c88384e9@linaro.org
> 
> Currently upstream assumes all (well, almost all - see 7280 or CrOS
> specific checks) Venus implementations using the same version of the
> Hardware Firmware Interface can be treated the same way. This is
> however not the case.
> 
> This series tries to introduce the groundwork to start differentiating
> them based on the VPU (Video Processing Unit) hardware type, fixes a
> couple of issues that were an effect of that generalized assumption
> and lays the foundation for supporting 8150 (IRIS1) and SM6115/QCM2290
> (AR50 Lite), which will hopefully come soon.
> 
> Tested on 8250, but pretty please test it on your boards too!
> 
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> ---
> Konrad Dybcio (17):
>       media: venus: hfi_venus: Only consider sys_idle_indicator on V1
>       media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts
>       media: venus: Introduce VPU version distinction
>       media: venus: Add vpu_version to most SoCs
>       media: venus: firmware: Leave a clue about obtaining CP VARs
>       media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version
>       media: venus: core: Assign registers based on VPU version
>       media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version
>       media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version
>       media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version
>       media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version
>       media: venus: firmware: Sanitize per-VPU-version
>       media: venus: hfi_platform: Check vpu_version instead of device compatible
>       media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version
>       media: venus: Introduce accessors for remapped hfi_buffer_reqs members
>       media: venus: Use newly-introduced hfi_buffer_requirements accessors
>       media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2
> 
>  drivers/media/platform/qcom/venus/core.c           |  7 ++-
>  drivers/media/platform/qcom/venus/core.h           | 15 ++++++
>  drivers/media/platform/qcom/venus/firmware.c       | 18 +++++--
>  drivers/media/platform/qcom/venus/helpers.c        |  7 +--
>  drivers/media/platform/qcom/venus/hfi_helper.h     | 61 +++++++++++++++++++---
>  drivers/media/platform/qcom/venus/hfi_msgs.c       |  2 +-
>  .../media/platform/qcom/venus/hfi_plat_bufs_v6.c   | 22 ++++----
>  drivers/media/platform/qcom/venus/hfi_platform.c   |  2 +-
>  drivers/media/platform/qcom/venus/hfi_venus.c      | 42 +++++++--------
>  drivers/media/platform/qcom/venus/vdec.c           | 10 ++--
>  drivers/media/platform/qcom/venus/vdec_ctrls.c     |  2 +-
>  drivers/media/platform/qcom/venus/venc.c           |  4 +-
>  drivers/media/platform/qcom/venus/venc_ctrls.c     |  2 +-
>  13 files changed, 133 insertions(+), 61 deletions(-)
> ---
> base-commit: 9f9f8ca6f012d25428f8605cb36369a449db8508
> change-id: 20230228-topic-venus-70ea3bc76688
> 
> Best regards,

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2023-07-11 12:29 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-30 12:30 [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio
2023-05-30 12:30 ` [PATCH v4 01/17] media: venus: hfi_venus: Only consider sys_idle_indicator on V1 Konrad Dybcio
2023-06-01  9:08   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 02/17] media: venus: hfi_venus: Write to VIDC_CTRL_INIT after unmasking interrupts Konrad Dybcio
2023-06-01  9:09   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 03/17] media: venus: Introduce VPU version distinction Konrad Dybcio
2023-05-30 12:30 ` [PATCH v4 04/17] media: venus: Add vpu_version to most SoCs Konrad Dybcio
2023-05-30 12:30 ` [PATCH v4 05/17] media: venus: firmware: Leave a clue about obtaining CP VARs Konrad Dybcio
2023-05-30 12:30 ` [PATCH v4 06/17] media: venus: hfi_venus: Sanitize venus_boot_core() per-VPU-version Konrad Dybcio
2023-06-01  9:10   ` Vikash Garodia
2023-06-01  9:33   ` Dikshita Agarwal
2023-05-30 12:30 ` [PATCH v4 07/17] media: venus: core: Assign registers based on VPU version Konrad Dybcio
2023-06-01  9:11   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 08/17] media: venus: hfi_venus: Sanitize venus_halt_axi() per-VPU-version Konrad Dybcio
2023-06-01  9:13   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 09/17] media: venus: hfi_venus: Sanitize venus_isr() per-VPU-version Konrad Dybcio
2023-06-01  9:14   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 10/17] media: venus: hfi_venus: Sanitize venus_cpu_and_video_core_idle() per-VPU-version Konrad Dybcio
2023-06-01  9:15   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 11/17] media: venus: hfi_venus: Sanitize venus_cpu_idle_and_pc_ready() per-VPU-version Konrad Dybcio
2023-06-01  9:15   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 12/17] media: venus: firmware: Sanitize per-VPU-version Konrad Dybcio
2023-06-01  9:16   ` Vikash Garodia
2023-06-01  9:34   ` Dikshita Agarwal
2023-05-30 12:30 ` [PATCH v4 13/17] media: venus: hfi_platform: Check vpu_version instead of device compatible Konrad Dybcio
2023-05-30 12:30 ` [PATCH v4 14/17] media: venus: vdec: Sanitize vdec_set_work_route() per-VPU-version Konrad Dybcio
2023-06-01  9:17   ` Vikash Garodia
2023-05-30 12:30 ` [PATCH v4 15/17] media: venus: Introduce accessors for remapped hfi_buffer_reqs members Konrad Dybcio
2023-06-01  9:37   ` Dikshita Agarwal
2023-05-30 12:30 ` [PATCH v4 16/17] media: venus: Use newly-introduced hfi_buffer_requirements accessors Konrad Dybcio
2023-06-01  9:39   ` Dikshita Agarwal
2023-05-30 12:30 ` [PATCH v4 17/17] media: venus: hfi_venus: Restrict writing SCIACMDARG3 to Venus V1/V2 Konrad Dybcio
2023-06-01  9:17   ` Vikash Garodia
2023-07-11 12:25 ` [PATCH v4 00/17] Venus QoL / maintainability fixes Konrad Dybcio

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).