* [PATCH v7 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-14 6:33 ` Krzysztof Kozlowski
2026-05-13 21:24 ` [PATCH v7 2/8] arm64: dts: qcom: msm8939: Add venus node Erikas Bitovtas
` (6 subsequent siblings)
7 siblings, 1 reply; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
From: André Apitzsch <git@apitzsch.eu>
Add a schema description for the Venus video decoder/encoder IP in
MSM8939.
Signed-off-by: André Apitzsch <git@apitzsch.eu>
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
.../bindings/media/qcom,msm8939-venus.yaml | 79 ++++++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/Documentation/devicetree/bindings/media/qcom,msm8939-venus.yaml b/Documentation/devicetree/bindings/media/qcom,msm8939-venus.yaml
new file mode 100644
index 000000000000..10a50a410748
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/qcom,msm8939-venus.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/qcom,msm8939-venus.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm MSM8939 Venus video encode and decode accelerators
+
+maintainers:
+ - André Apitzsch <git@apitzsch.eu>
+ - Erikas Bitovtas <xerikasxx@gmail.com>
+
+description:
+ The Venus IP is a video encode and decode accelerator present
+ on Qualcomm platforms
+
+allOf:
+ - $ref: qcom,venus-common.yaml#
+
+properties:
+ compatible:
+ const: qcom,msm8939-venus
+
+ power-domains:
+ maxItems: 3
+
+ power-domain-names:
+ items:
+ - const: venus
+ - const: vcodec0
+ - const: vcodec1
+
+ clocks:
+ maxItems: 5
+
+ clock-names:
+ items:
+ - const: core
+ - const: iface
+ - const: bus
+ - const: vcodec0_core
+ - const: vcodec1_core
+
+ iommus:
+ maxItems: 1
+
+required:
+ - compatible
+ - iommus
+ - power-domain-names
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/clock/qcom,gcc-msm8939.h>
+
+ video-codec@1d00000 {
+ compatible = "qcom,msm8939-venus";
+ reg = <0x01d00000 0xff000>;
+ interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&gcc GCC_VENUS0_VCODEC0_CLK>,
+ <&gcc GCC_VENUS0_AHB_CLK>,
+ <&gcc GCC_VENUS0_AXI_CLK>,
+ <&gcc GCC_VENUS0_CORE0_VCODEC0_CLK>,
+ <&gcc GCC_VENUS0_CORE1_VCODEC0_CLK>;
+ clock-names = "core",
+ "iface",
+ "bus",
+ "vcodec0_core",
+ "vcodec1_core";
+ power-domains = <&gcc VENUS_GDSC>,
+ <&gcc VENUS_CORE0_GDSC>,
+ <&gcc VENUS_CORE1_GDSC>;
+ power-domain-names = "venus", "vcodec0", "vcodec1";
+ iommus = <&apps_iommu 5>;
+ memory-region = <&venus_mem>;
+ };
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v7 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema
2026-05-13 21:24 ` [PATCH v7 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema Erikas Bitovtas
@ 2026-05-14 6:33 ` Krzysztof Kozlowski
0 siblings, 0 replies; 10+ messages in thread
From: Krzysztof Kozlowski @ 2026-05-14 6:33 UTC (permalink / raw)
To: Erikas Bitovtas
Cc: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney, linux-media,
linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel
On Thu, May 14, 2026 at 12:24:30AM +0300, Erikas Bitovtas wrote:
> From: André Apitzsch <git@apitzsch.eu>
>
> Add a schema description for the Venus video decoder/encoder IP in
> MSM8939.
>
> Signed-off-by: André Apitzsch <git@apitzsch.eu>
> Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
> Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
> ---
> .../bindings/media/qcom,msm8939-venus.yaml | 79 ++++++++++++++++++++++
> 1 file changed, 79 insertions(+)
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v7 2/8] arm64: dts: qcom: msm8939: Add venus node
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 3/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable " Erikas Bitovtas
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
From: André Apitzsch <git@apitzsch.eu>
Add DT entries for the msm8939 venus encoder/decoder.
Signed-off-by: André Apitzsch <git@apitzsch.eu>
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
arch/arm64/boot/dts/qcom/msm8939.dtsi | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8939.dtsi b/arch/arm64/boot/dts/qcom/msm8939.dtsi
index d4d7b0c9206c..71e22584a46b 100644
--- a/arch/arm64/boot/dts/qcom/msm8939.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8939.dtsi
@@ -1627,6 +1627,29 @@ opp-19200000 {
};
};
+ venus: video-codec@1d00000 {
+ compatible = "qcom,msm8939-venus";
+ reg = <0x01d00000 0xff000>;
+ interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&gcc GCC_VENUS0_VCODEC0_CLK>,
+ <&gcc GCC_VENUS0_AHB_CLK>,
+ <&gcc GCC_VENUS0_AXI_CLK>,
+ <&gcc GCC_VENUS0_CORE0_VCODEC0_CLK>,
+ <&gcc GCC_VENUS0_CORE1_VCODEC0_CLK>;
+ clock-names = "core",
+ "iface",
+ "bus",
+ "vcodec0_core",
+ "vcodec1_core";
+ power-domains = <&gcc VENUS_GDSC>,
+ <&gcc VENUS_CORE0_GDSC>,
+ <&gcc VENUS_CORE1_GDSC>;
+ power-domain-names = "venus", "vcodec0", "vcodec1";
+ iommus = <&apps_iommu 5>;
+ memory-region = <&venus_mem>;
+ status = "disabled";
+ };
+
apps_iommu: iommu@1ef0000 {
compatible = "qcom,msm8916-iommu", "qcom,msm-iommu-v1";
reg = <0x01ef0000 0x3000>;
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 3/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable venus node
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 2/8] arm64: dts: qcom: msm8939: Add venus node Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 4/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus Erikas Bitovtas
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
From: André Apitzsch <git@apitzsch.eu>
Enable the venus node so that the video encoder/decoder will start
working.
Default paths for firmware work on BQ Aquaris M5, which means
firmware-name property can be left out.
Signed-off-by: André Apitzsch <git@apitzsch.eu>
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
---
arch/arm64/boot/dts/qcom/msm8939-longcheer-l9100.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8939-longcheer-l9100.dts b/arch/arm64/boot/dts/qcom/msm8939-longcheer-l9100.dts
index 13422a19c26a..48514c3df718 100644
--- a/arch/arm64/boot/dts/qcom/msm8939-longcheer-l9100.dts
+++ b/arch/arm64/boot/dts/qcom/msm8939-longcheer-l9100.dts
@@ -314,6 +314,14 @@ &usb_hs_phy {
extcon = <&usb_id>;
};
+&venus {
+ status = "okay";
+};
+
+&venus_mem {
+ status = "okay";
+};
+
&wcnss {
status = "okay";
};
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 4/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (2 preceding siblings ...)
2026-05-13 21:24 ` [PATCH v7 3/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable " Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 5/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
` (3 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
Enable Venus video encoder/decoder for Asus ZenFone 2 Laser/Selfie.
Default firmware paths work on Asus ZenFone 2 Laser/Selfie, which
means firmware-name property can be left out.
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
arch/arm64/boot/dts/qcom/msm8939-asus-z00t.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8939-asus-z00t.dts b/arch/arm64/boot/dts/qcom/msm8939-asus-z00t.dts
index 90e966242720..231a3e9c1929 100644
--- a/arch/arm64/boot/dts/qcom/msm8939-asus-z00t.dts
+++ b/arch/arm64/boot/dts/qcom/msm8939-asus-z00t.dts
@@ -267,6 +267,14 @@ &usb_hs_phy {
extcon = <&usb_id>;
};
+&venus {
+ status = "okay";
+};
+
+&venus_mem {
+ status = "okay";
+};
+
&wcnss {
status = "okay";
};
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 5/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (3 preceding siblings ...)
2026-05-13 21:24 ` [PATCH v7 4/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 6/8] media: qcom: venus: add power domain enable logic for Venus cores Erikas Bitovtas
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
Since in downstream kernel VENUS_CORE0_GDSC and VENUS_CORE1_GDSC have a
device tree property "qcom,supports-hw-trigger", add a HW_CTRL_TRIGGER
flag to these GDSCs to indicate that their control can be passed to
hardware.
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/clk/qcom/gcc-msm8939.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/clk/qcom/gcc-msm8939.c b/drivers/clk/qcom/gcc-msm8939.c
index 45193b3d714b..243d31a32e92 100644
--- a/drivers/clk/qcom/gcc-msm8939.c
+++ b/drivers/clk/qcom/gcc-msm8939.c
@@ -3664,6 +3664,7 @@ static struct clk_branch gcc_venus0_vcodec0_clk = {
static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
.halt_reg = 0x4c02c,
+ .halt_check = BRANCH_HALT_SKIP,
.clkr = {
.enable_reg = 0x4c02c,
.enable_mask = BIT(0),
@@ -3681,6 +3682,7 @@ static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
static struct clk_branch gcc_venus0_core1_vcodec0_clk = {
.halt_reg = 0x4c034,
+ .halt_check = BRANCH_HALT_SKIP,
.clkr = {
.enable_reg = 0x4c034,
.enable_mask = BIT(0),
@@ -3753,6 +3755,7 @@ static struct gdsc venus_core0_gdsc = {
.pd = {
.name = "venus_core0",
},
+ .flags = HW_CTRL_TRIGGER,
.pwrsts = PWRSTS_OFF_ON,
};
@@ -3761,6 +3764,7 @@ static struct gdsc venus_core1_gdsc = {
.pd = {
.name = "venus_core1",
},
+ .flags = HW_CTRL_TRIGGER,
.pwrsts = PWRSTS_OFF_ON,
};
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 6/8] media: qcom: venus: add power domain enable logic for Venus cores
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (4 preceding siblings ...)
2026-05-13 21:24 ` [PATCH v7 5/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 7/8] media: qcom: venus: add codec blacklist mechanism Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 8/8] media: qcom: venus: Add msm8939 resource struct Erikas Bitovtas
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
Attach power domains for vdec and venc cores and power them up if a vdec
or venc session is started.
Vcodev clocks are added and enabled to the core Venus device both for
vcodec0 and vcodec1. To ensure they are added only once, introduce a new
property "vcodec_clks", which is an array of clocks which are enabled
both during decode and encode and is retrieved from the device tree only
once.
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/media/platform/qcom/venus/core.h | 3 +
drivers/media/platform/qcom/venus/pm_helpers.c | 118 +++++++++++++++++++++++--
2 files changed, 116 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 7506f5d0f609..ff9174a4e8c1 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -77,6 +77,7 @@ struct venus_resources {
const struct hfi_ubwc_config *ubwc_conf;
const char * const clks[VIDC_CLKS_NUM_MAX];
unsigned int clks_num;
+ const char * const vcodec_clks[VIDC_VCODEC_CLKS_NUM_MAX];
const char * const vcodec0_clks[VIDC_VCODEC_CLKS_NUM_MAX];
const char * const vcodec1_clks[VIDC_VCODEC_CLKS_NUM_MAX];
unsigned int vcodec_clks_num;
@@ -140,6 +141,7 @@ struct venus_format {
* @aon_base: AON base address
* @irq: Venus irq
* @clks: an array of struct clk pointers
+ * @vcodec_clks: an array of vcodec struct clk pointers
* @vcodec0_clks: an array of vcodec0 struct clk pointers
* @vcodec1_clks: an array of vcodec1 struct clk pointers
* @video_path: an interconnect handle to video to/from memory path
@@ -194,6 +196,7 @@ struct venus_core {
void __iomem *aon_base;
int irq;
struct clk *clks[VIDC_CLKS_NUM_MAX];
+ struct clk *vcodec_clks[VIDC_VCODEC_CLKS_NUM_MAX];
struct clk *vcodec0_clks[VIDC_VCODEC_CLKS_NUM_MAX];
struct clk *vcodec1_clks[VIDC_VCODEC_CLKS_NUM_MAX];
struct icc_path *video_path;
diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
index f0269524ac70..be705d4d64b5 100644
--- a/drivers/media/platform/qcom/venus/pm_helpers.c
+++ b/drivers/media/platform/qcom/venus/pm_helpers.c
@@ -89,12 +89,23 @@ static void core_clks_disable(struct venus_core *core)
static int core_clks_set_rate(struct venus_core *core, unsigned long freq)
{
- int ret;
+ const struct venus_resources *res = core->res;
+ int ret, i;
ret = dev_pm_opp_set_rate(core->dev, freq);
if (ret)
return ret;
+ if (!res->vcodec_clks_num)
+ goto set_rates;
+
+ for (i = 0; i < res->vcodec_clks_num; i++) {
+ ret = clk_set_rate(core->vcodec_clks[i], freq);
+ if (ret)
+ return ret;
+ }
+
+set_rates:
ret = clk_set_rate(core->vcodec0_clks[0], freq);
if (ret)
return ret;
@@ -297,10 +308,33 @@ static int load_scale_v1(struct venus_inst *inst)
return ret;
}
+static int vcodec_domains_get_v1(struct venus_core *core)
+{
+ struct device *dev = core->dev;
+ const struct venus_resources *res = core->res;
+ const struct dev_pm_domain_attach_data vcodec_data = {
+ .pd_names = res->vcodec_pmdomains,
+ .num_pd_names = res->vcodec_pmdomains_num,
+ .pd_flags = PD_FLAG_NO_DEV_LINK,
+ };
+
+ if (!res->vcodec_pmdomains)
+ return 0;
+
+ return devm_pm_domain_attach_list(dev, &vcodec_data,
+ &core->pmdomains);
+}
+
static int core_get_v1(struct venus_core *core)
{
+ const struct venus_resources *res = core->res;
+ struct device *dev = core->dev;
int ret;
+ ret = vcodec_domains_get_v1(core);
+ if (ret < 0)
+ return ret;
+
ret = core_clks_get(core);
if (ret)
return ret;
@@ -309,9 +343,63 @@ static int core_get_v1(struct venus_core *core)
if (ret)
return ret;
+ if (!res->vcodec_pmdomains)
+ return 0;
+
+ ret = vcodec_clks_get(core, dev, core->vcodec_clks,
+ res->vcodec_clks);
+ if (ret)
+ return ret;
+
return 0;
}
+static int vcodec_domains_enable(struct venus_core *core)
+{
+ const struct venus_resources *res = core->res;
+ struct device *pd_dev;
+ int i = 0, ret;
+
+ if (!res->vcodec_pmdomains)
+ return 0;
+
+ for (; i < res->vcodec_pmdomains_num; i++) {
+ pd_dev = core->pmdomains->pd_devs[i];
+ ret = pm_runtime_resume_and_get(pd_dev);
+ if (ret)
+ goto err;
+
+ ret = dev_pm_genpd_set_hwmode(pd_dev, true);
+ if (ret && ret != -EOPNOTSUPP)
+ goto err;
+ }
+
+ return 0;
+err:
+ while (i--) {
+ pd_dev = core->pmdomains->pd_devs[i];
+ dev_pm_genpd_set_hwmode(pd_dev, false);
+ pm_runtime_put_sync(pd_dev);
+ }
+ return ret;
+}
+
+static void vcodec_domains_disable(struct venus_core *core)
+{
+ const struct venus_resources *res = core->res;
+ struct device *pd_dev;
+ int i = res->vcodec_pmdomains_num;
+
+ if (!res->vcodec_pmdomains)
+ return;
+
+ while (i--) {
+ pd_dev = core->pmdomains->pd_devs[i];
+ dev_pm_genpd_set_hwmode(pd_dev, false);
+ pm_runtime_put_sync(pd_dev);
+ }
+}
+
static void core_put_v1(struct venus_core *core)
{
}
@@ -320,11 +408,31 @@ static int core_power_v1(struct venus_core *core, int on)
{
int ret = 0;
- if (on == POWER_ON)
+ if (on == POWER_ON) {
+ ret = vcodec_domains_enable(core);
+ if (ret)
+ return ret;
+
ret = core_clks_enable(core);
- else
+ if (ret)
+ goto fail_pmdomains;
+
+ ret = vcodec_clks_enable(core, core->vcodec_clks);
+ if (ret)
+ goto fail_core_clks;
+
+ } else {
+ vcodec_clks_disable(core, core->vcodec_clks);
core_clks_disable(core);
+ vcodec_domains_disable(core);
+ }
+
+ return 0;
+fail_core_clks:
+ core_clks_disable(core);
+fail_pmdomains:
+ vcodec_domains_disable(core);
return ret;
}
@@ -875,7 +983,7 @@ static int venc_power_v4(struct device *dev, int on)
return ret;
}
-static int vcodec_domains_get(struct venus_core *core)
+static int vcodec_domains_get_v4(struct venus_core *core)
{
int ret;
struct device *dev = core->dev;
@@ -993,7 +1101,7 @@ static int core_get_v4(struct venus_core *core)
if (ret)
return ret;
- ret = vcodec_domains_get(core);
+ ret = vcodec_domains_get_v4(core);
if (ret)
return ret;
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 7/8] media: qcom: venus: add codec blacklist mechanism
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (5 preceding siblings ...)
2026-05-13 21:24 ` [PATCH v7 6/8] media: qcom: venus: add power domain enable logic for Venus cores Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
2026-05-13 21:24 ` [PATCH v7 8/8] media: qcom: venus: Add msm8939 resource struct Erikas Bitovtas
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas
Add decode and encode blacklist properties to allow disabling different
codecs per Venus device, instead of doing it per HFI version.
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/media/platform/qcom/venus/core.c | 4 ++++
drivers/media/platform/qcom/venus/core.h | 2 ++
drivers/media/platform/qcom/venus/hfi_parser.c | 10 +++++-----
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 7e639760c41d..1b5e72980702 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -178,6 +178,8 @@ static void venus_sys_error_handler(struct work_struct *work)
static u32 to_v4l2_codec_type(u32 codec)
{
switch (codec) {
+ case HFI_VIDEO_CODEC_HEVC:
+ return V4L2_PIX_FMT_HEVC;
case HFI_VIDEO_CODEC_H264:
return V4L2_PIX_FMT_H264;
case HFI_VIDEO_CODEC_H263:
@@ -684,6 +686,8 @@ static const struct venus_resources msm8916_res = {
.vmem_addr = 0,
.dma_mask = 0xddc00000 - 1,
.fwname = "qcom/venus-1.8/venus.mbn",
+ .dec_codec_blacklist = HFI_VIDEO_CODEC_HEVC | HFI_VIDEO_CODEC_SPARK,
+ .enc_codec_blacklist = HFI_VIDEO_CODEC_HEVC,
.dec_nodename = "video-decoder",
.enc_nodename = "video-encoder",
};
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index ff9174a4e8c1..3f162b11e669 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -85,6 +85,8 @@ struct venus_resources {
unsigned int vcodec_pmdomains_num;
const char **opp_pmdomain;
unsigned int vcodec_num;
+ const u32 dec_codec_blacklist;
+ const u32 enc_codec_blacklist;
const char * const resets[VIDC_RESETS_NUM_MAX];
unsigned int resets_num;
enum hfi_version hfi_version;
diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c b/drivers/media/platform/qcom/venus/hfi_parser.c
index 92765f9c8873..8e762cf77968 100644
--- a/drivers/media/platform/qcom/venus/hfi_parser.c
+++ b/drivers/media/platform/qcom/venus/hfi_parser.c
@@ -206,11 +206,11 @@ static int parse_codecs(struct venus_core *core, void *data)
core->dec_codecs = codecs->dec_codecs;
core->enc_codecs = codecs->enc_codecs;
- if (IS_V1(core)) {
- core->dec_codecs &= ~HFI_VIDEO_CODEC_HEVC;
- core->dec_codecs &= ~HFI_VIDEO_CODEC_SPARK;
- core->enc_codecs &= ~HFI_VIDEO_CODEC_HEVC;
- }
+ if (core->res->dec_codec_blacklist)
+ core->dec_codecs &= ~core->res->dec_codec_blacklist;
+
+ if (core->res->enc_codec_blacklist)
+ core->enc_codecs &= ~core->res->enc_codec_blacklist;
return sizeof(*codecs);
}
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH v7 8/8] media: qcom: venus: Add msm8939 resource struct
2026-05-13 21:24 [PATCH v7 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (6 preceding siblings ...)
2026-05-13 21:24 ` [PATCH v7 7/8] media: qcom: venus: add codec blacklist mechanism Erikas Bitovtas
@ 2026-05-13 21:24 ` Erikas Bitovtas
7 siblings, 0 replies; 10+ messages in thread
From: Erikas Bitovtas @ 2026-05-13 21:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, Dikshita Agarwal,
Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, André Apitzsch, Bjorn Andersson, Konrad Dybcio,
Michael Turquette, Stephen Boyd, Brian Masney
Cc: linux-media, linux-arm-msm, devicetree, linux-kernel, linux-clk,
~postmarketos/upstreaming, phone-devel, Erikas Bitovtas,
Dmitry Baryshkov
From: André Apitzsch <git@apitzsch.eu>
Add msm8939 configuration data and related compatible.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Bryan O'Donoghue <bod@kernel.org>
Signed-off-by: André Apitzsch <git@apitzsch.eu>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/media/platform/qcom/venus/core.c | 40 ++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 1b5e72980702..b6eb96e43319 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -692,6 +692,45 @@ static const struct venus_resources msm8916_res = {
.enc_nodename = "video-encoder",
};
+static const struct freq_tbl msm8939_freq_table[] = {
+ { 489600, 266670000 }, /* 1080p @ 60 */
+ { 244800, 133330000 }, /* 1080p @ 30 */
+ { 220800, 133330000 }, /* 720p @ 60 */
+ { 108000, 133330000 }, /* 720p @ 30 */
+ { 72000, 133330000 }, /* VGA @ 60 */
+ { 36000, 133330000 }, /* VGA @ 30 */
+};
+
+static const struct reg_val msm8939_reg_preset[] = {
+ { 0xe0020, 0x0aaaaaaa },
+ { 0xe0024, 0x0aaaaaaa },
+ { 0x80124, 0x00000003 },
+};
+
+static const struct venus_resources msm8939_res = {
+ .freq_tbl = msm8939_freq_table,
+ .freq_tbl_size = ARRAY_SIZE(msm8939_freq_table),
+ .reg_tbl = msm8939_reg_preset,
+ .reg_tbl_size = ARRAY_SIZE(msm8939_reg_preset),
+ .clks = { "core", "iface", "bus", },
+ .clks_num = 3,
+ .vcodec_clks = { "vcodec0_core", "vcodec1_core" },
+ .vcodec_clks_num = 2,
+ .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0", "vcodec1" },
+ .vcodec_pmdomains_num = 3,
+ .max_load = 489600, /* 1080p@30 + 1080p@30 */
+ .hfi_version = HFI_VERSION_1XX,
+ .vmem_id = VIDC_RESOURCE_NONE,
+ .vmem_size = 0,
+ .vmem_addr = 0,
+ .dma_mask = 0xddc00000 - 1,
+ .fwname = "qcom/venus-1.8/venus.mbn",
+ .dec_codec_blacklist = HFI_VIDEO_CODEC_SPARK,
+ .enc_codec_blacklist = HFI_VIDEO_CODEC_HEVC,
+ .dec_nodename = "video-decoder",
+ .enc_nodename = "video-encoder",
+};
+
static const struct freq_tbl msm8996_freq_table[] = {
{ 1944000, 520000000 }, /* 4k UHD @ 60 (decode only) */
{ 972000, 520000000 }, /* 4k UHD @ 30 */
@@ -1125,6 +1164,7 @@ static const struct venus_resources qcm2290_res = {
static const struct of_device_id venus_dt_match[] = {
{ .compatible = "qcom,msm8916-venus", .data = &msm8916_res, },
+ { .compatible = "qcom,msm8939-venus", .data = &msm8939_res, },
{ .compatible = "qcom,msm8996-venus", .data = &msm8996_res, },
{ .compatible = "qcom,msm8998-venus", .data = &msm8998_res, },
{ .compatible = "qcom,qcm2290-venus", .data = &qcm2290_res, },
--
2.54.0
^ permalink raw reply related [flat|nested] 10+ messages in thread