* [PATCH v9 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
` (6 subsequent siblings)
7 siblings, 0 replies; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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,
Bryan O'Donoghue, Krzysztof Kozlowski
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 <bryan.odonoghue@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
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] 14+ messages in thread* [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 13:43 ` Bryan O'Donoghue
2026-06-10 13:32 ` Konrad Dybcio
2026-05-26 13:24 ` [PATCH v9 3/8] media: qcom: venus: add power domain enable logic for Venus cores Erikas Bitovtas
` (5 subsequent siblings)
7 siblings, 2 replies; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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
Allow Venus core GDSCs to have their control passed to hardware, so they
can be powered on by Venus firmware.
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..956295289ae8 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,
.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,
.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] 14+ messages in thread* Re: [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled
2026-05-26 13:24 ` [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
@ 2026-05-26 13:43 ` Bryan O'Donoghue
2026-06-10 13:32 ` Konrad Dybcio
1 sibling, 0 replies; 14+ messages in thread
From: Bryan O'Donoghue @ 2026-05-26 13:43 UTC (permalink / raw)
To: Erikas Bitovtas, Vikash Garodia, 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
On 26/05/2026 14:24, Erikas Bitovtas wrote:
> Allow Venus core GDSCs to have their control passed to hardware, so they
> can be powered on by Venus firmware.
>
> 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..956295289ae8 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,
> .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,
> .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
>
>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
bod
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled
2026-05-26 13:24 ` [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
2026-05-26 13:43 ` Bryan O'Donoghue
@ 2026-06-10 13:32 ` Konrad Dybcio
1 sibling, 0 replies; 14+ messages in thread
From: Konrad Dybcio @ 2026-06-10 13:32 UTC (permalink / raw)
To: Erikas Bitovtas, Bryan O'Donoghue, Vikash Garodia,
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
On 5/26/26 3:24 PM, Erikas Bitovtas wrote:
> Allow Venus core GDSCs to have their control passed to hardware, so they
> can be powered on by Venus firmware.
"and explicitly state that the vcodec clocks' halt bit should be
checked"
// even though it already happens by virtue of:
#define BRANCH_HALT 0 /* pol: 1 = halt */
and C partial struct initialization rules setting uninitialized fields
to 0
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v9 3/8] media: qcom: venus: add power domain enable logic for Venus cores
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 1/8] media: dt-bindings: venus: Add qcom,msm8939 schema Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 2/8] clk: qcom: gcc-msm8939: mark Venus core GDSCs as hardware controlled Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 14:50 ` sashiko-bot
2026-05-26 13:24 ` [PATCH v9 4/8] media: qcom: venus: add codec blacklist mechanism Erikas Bitovtas
` (4 subsequent siblings)
7 siblings, 1 reply; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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,
Bryan O'Donoghue
Attach power domains for vdec and venc cores and power them up if a vdec
or venc session is started.
Vcodec 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.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/media/platform/qcom/venus/core.h | 3 +
drivers/media/platform/qcom/venus/pm_helpers.c | 146 ++++++++++++++++++++++++-
2 files changed, 144 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 03804c30808e..c1603eebd757 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -79,6 +79,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;
@@ -143,6 +144,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
@@ -197,6 +199,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 14a4e8311a64..be1cbd5cfe84 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,7 +343,77 @@ 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;
+ }
+
return 0;
+err:
+ while (i--) {
+ pd_dev = core->pmdomains->pd_devs[i];
+ 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];
+ pm_runtime_put_sync(pd_dev);
+ }
+}
+
+static int vcodec_domains_set_hw(struct venus_core *core, bool is_hw)
+{
+ const struct venus_resources *res = core->res;
+ struct device *pd_dev;
+ int i = 0, ret;
+
+ for (; i < res->vcodec_pmdomains_num; i++) {
+ pd_dev = core->pmdomains->pd_devs[i];
+ ret = dev_pm_genpd_set_hwmode(pd_dev, is_hw);
+ 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, !is_hw);
+ }
+ return ret;
}
static void core_put_v1(struct venus_core *core)
@@ -320,11 +424,43 @@ 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;
+
+ if (!core->res->vcodec_pmdomains)
+ return 0;
+
+ ret = vcodec_clks_enable(core, core->vcodec_clks);
+ if (ret)
+ goto fail_core_clks;
+
+ ret = vcodec_domains_set_hw(core, true);
+ if (ret)
+ goto fail_vcodec_clks;
+
+ } else {
+ if (core->res->vcodec_pmdomains) {
+ vcodec_domains_set_hw(core, false);
+ vcodec_clks_disable(core, core->vcodec_clks);
+ }
core_clks_disable(core);
+ vcodec_domains_disable(core);
+ }
+
+ return 0;
+fail_vcodec_clks:
+ vcodec_clks_disable(core, core->vcodec_clks);
+fail_core_clks:
+ core_clks_disable(core);
+fail_pmdomains:
+ vcodec_domains_disable(core);
return ret;
}
@@ -875,7 +1011,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;
@@ -999,7 +1135,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] 14+ messages in thread* Re: [PATCH v9 3/8] media: qcom: venus: add power domain enable logic for Venus cores
2026-05-26 13:24 ` [PATCH v9 3/8] media: qcom: venus: add power domain enable logic for Venus cores Erikas Bitovtas
@ 2026-05-26 14:50 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-05-26 14:50 UTC (permalink / raw)
To: Erikas Bitovtas; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
New issues:
- [High] NULL Pointer Dereference on `core->pmdomains`
- [Medium] Teardown Rollback Anti-pattern
- [Medium] Hardware Initialization Flaw for `vcodec_clks`
Pre-existing issues:
- [High] Ignored Error Code in `venc_power_v4()`
--
commit ee1d99aefaee1c4f53ba3c0a0d86c1b9d54963ce
Author: Erikas Bitovtas <xerikasxx@gmail.com>
media: qcom: venus: add power domain enable logic for Venus cores
This commit adds power domain attachment and enable logic for Venus
vdec and venc cores. It introduces an array of vcodec clocks that
are retrieved from the device tree and enabled during decode and
encode sessions.
> diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
> index 14a4e8311a643..be1cbd5cfe842 100644
> --- a/drivers/media/platform/qcom/venus/pm_helpers.c
> +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
[ ... ]
> @@ -309,7 +343,77 @@ 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);
[Severity: Medium]
Is it intentional to skip getting vcodec_clks if vcodec_pmdomains is
not defined?
Clocks and power domains are physically independent hardware resources.
Tying the initialization of vcodec_clks strictly to the presence of
vcodec_pmdomains means that if a platform defines vcodec_clks but lacks
vcodec_pmdomains, the clocks will be silently ignored, which could lead
to a failure to power up the hardware properly.
> + 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];
[Severity: High]
If CONFIG_PM or CONFIG_PM_GENERIC_DOMAINS is disabled (which is possible
under COMPILE_TEST), the devm_pm_domain_attach_list() stub returns 0 but
does not allocate the list pointer, leaving core->pmdomains as NULL.
Since res->vcodec_pmdomains is populated from static device matching data,
could this loop execute and trigger a NULL pointer dereference on
core->pmdomains?
> + ret = pm_runtime_resume_and_get(pd_dev);
> + if (ret)
> + goto err;
> + }
> +
> return 0;
[ ... ]
> +static int vcodec_domains_set_hw(struct venus_core *core, bool is_hw)
> +{
> + const struct venus_resources *res = core->res;
> + struct device *pd_dev;
> + int i = 0, ret;
> +
> + for (; i < res->vcodec_pmdomains_num; i++) {
> + pd_dev = core->pmdomains->pd_devs[i];
> + ret = dev_pm_genpd_set_hwmode(pd_dev, is_hw);
> + 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, !is_hw);
[Severity: Medium]
If setting hardware mode fails while disabling it (is_hw == false), the
error handler loops backward and re-enables hardware mode (!is_hw) for
previously disabled power domains.
In core_power_v1()'s teardown path, the returned error is ignored, and
the driver proceeds to manually disable power domains via
vcodec_domains_disable().
Does this rollback leave the domains in hardware control mode, potentially
preventing the genpd framework from properly powering them off during
pm_runtime_put_sync() and resulting in an inconsistent power state?
> + }
> + return ret;
> }
[ ... ]
> @@ -875,7 +1011,7 @@ static int venc_power_v4(struct device *dev, int on)
> return ret;
> }
[Severity: High]
This isn't a bug introduced by this patch, but in venc_power_v4(), if
on == POWER_ON, the driver calls vcodec_clks_enable() and stores its
return value in ret:
if (on == POWER_ON)
ret = vcodec_clks_enable(core, core->vcodec1_clks);
else
vcodec_clks_disable(core, core->vcodec1_clks);
ret = vcodec_control_v4(core, VIDC_CORE_ID_2, false);
Could the unconditional call to vcodec_control_v4() overwrite the error
code from vcodec_clks_enable()? If the clocks fail to enable, the driver
proceeds to access hardware registers without propagating the error, which
could cause a bus hang and system panic on ARM platforms.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260526-msm8939-venus-rfc-v9-0-bb1069f3fe02@gmail.com?part=3
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v9 4/8] media: qcom: venus: add codec blacklist mechanism
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (2 preceding siblings ...)
2026-05-26 13:24 ` [PATCH v9 3/8] media: qcom: venus: add power domain enable logic for Venus cores Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 15:24 ` sashiko-bot
2026-05-26 13:24 ` [PATCH v9 5/8] media: qcom: venus: Add msm8939 resource struct Erikas Bitovtas
` (3 subsequent siblings)
7 siblings, 1 reply; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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,
Bryan O'Donoghue
Add decode and encode blacklist properties to allow disabling different
codecs per Venus device, instead of doing it per HFI version.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Erikas Bitovtas <xerikasxx@gmail.com>
---
drivers/media/platform/qcom/venus/core.c | 5 +++++
drivers/media/platform/qcom/venus/core.h | 2 ++
drivers/media/platform/qcom/venus/hfi_parser.c | 10 +++++-----
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index a87e8afb23df..bd88e2b484a5 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -18,6 +18,7 @@
#include <linux/types.h>
#include <linux/pm_domain.h>
#include <linux/pm_runtime.h>
+#include <linux/videodev2.h>
#include <media/videobuf2-v4l2.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-mem2mem.h>
@@ -178,6 +179,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 +687,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 c1603eebd757..46705a666776 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -88,6 +88,8 @@ struct venus_resources {
const char **opp_pmdomain;
unsigned int opp_pmdomain_num;
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] 14+ messages in thread* Re: [PATCH v9 4/8] media: qcom: venus: add codec blacklist mechanism
2026-05-26 13:24 ` [PATCH v9 4/8] media: qcom: venus: add codec blacklist mechanism Erikas Bitovtas
@ 2026-05-26 15:24 ` sashiko-bot
0 siblings, 0 replies; 14+ messages in thread
From: sashiko-bot @ 2026-05-26 15:24 UTC (permalink / raw)
To: Erikas Bitovtas; +Cc: conor+dt, robh, devicetree
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [Medium] The newly introduced codec blacklist mechanism is silently bypassed and ignored for newer HFI platforms (V4, V6).
Pre-existing issues:
- [High] Unmapped firmware codecs cause a fatal probe failure instead of being gracefully skipped.
--
commit 940596b130019709f06d3571e5a70d611a9c2f28
Author: Erikas Bitovtas <xerikasxx@gmail.com>
media: qcom: venus: add codec blacklist mechanism
This commit introduces dec_codec_blacklist and enc_codec_blacklist
properties to allow disabling different codecs per Venus device. It updates
parse_codecs() to apply these blacklists instead of checking the HFI version.
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index a87e8afb23dfb..bd88e2b484a53 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
[ ... ]
> @@ -178,6 +179,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;
[Severity: High]
This is a pre-existing issue, but does an unmapped firmware codec cause a
fatal probe failure instead of being gracefully skipped?
If a codec bit is set by the firmware but is not explicitly mapped in
to_v4l2_codec_type() (such as HFI_VIDEO_CODEC_SPARK if it were not explicitly
blacklisted), it hits the default case and returns 0.
This 0 is then passed to hfi_session_init(), which converts it back to codec=0.
pkt_session_init() correctly rejects codec=0 with -EINVAL. This error is
unconditionally propagated up to venus_probe(), causing the entire device probe
to fail and the driver to become unusable.
Should unknown codecs simply be skipped instead?
[ ... ]
> diff --git a/drivers/media/platform/qcom/venus/hfi_parser.c b/drivers/media/platform/qcom/venus/hfi_parser.c
> index 92765f9c88730..8e762cf77968b 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;
[Severity: Medium]
Will this newly introduced codec blacklist mechanism be silently bypassed and
ignored for newer HFI platforms like V4 and V6?
For newer platforms, hfi_platform_parser() directly sets the codecs from
hardcoded driver capabilities and returns 0. This causes hfi_parser() to return
early and skip the entire firmware parsing loop where parse_codecs() resides.
If a V4 or V6 device is configured with these blacklists, they appear to be
completely ignored.
> +
> + if (core->res->enc_codec_blacklist)
> + core->enc_codecs &= ~core->res->enc_codec_blacklist;
>
> return sizeof(*codecs);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260526-msm8939-venus-rfc-v9-0-bb1069f3fe02@gmail.com?part=4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v9 5/8] media: qcom: venus: Add msm8939 resource struct
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (3 preceding siblings ...)
2026-05-26 13:24 ` [PATCH v9 4/8] media: qcom: venus: add codec blacklist mechanism Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 6/8] arm64: dts: qcom: msm8939: Add venus node Erikas Bitovtas
` (2 subsequent siblings)
7 siblings, 0 replies; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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 bd88e2b484a5..243e342b0ae7 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -693,6 +693,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 */
@@ -1133,6 +1172,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] 14+ messages in thread* [PATCH v9 6/8] arm64: dts: qcom: msm8939: Add venus node
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (4 preceding siblings ...)
2026-05-26 13:24 ` [PATCH v9 5/8] media: qcom: venus: Add msm8939 resource struct Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-06-10 13:29 ` Konrad Dybcio
2026-05-26 13:24 ` [PATCH v9 7/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable " Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 8/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus Erikas Bitovtas
7 siblings, 1 reply; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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] 14+ messages in thread* Re: [PATCH v9 6/8] arm64: dts: qcom: msm8939: Add venus node
2026-05-26 13:24 ` [PATCH v9 6/8] arm64: dts: qcom: msm8939: Add venus node Erikas Bitovtas
@ 2026-06-10 13:29 ` Konrad Dybcio
0 siblings, 0 replies; 14+ messages in thread
From: Konrad Dybcio @ 2026-06-10 13:29 UTC (permalink / raw)
To: Erikas Bitovtas, Bryan O'Donoghue, Vikash Garodia,
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
On 5/26/26 3:24 PM, Erikas Bitovtas wrote:
> 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";
> + };
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
in case you're going to resend, please add a \n before 'status'
and make power-domain-names a vertical list (like clock-names)
Konrad
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v9 7/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable venus node
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (5 preceding siblings ...)
2026-05-26 13:24 ` [PATCH v9 6/8] arm64: dts: qcom: msm8939: Add venus node Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
2026-05-26 13:24 ` [PATCH v9 8/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus Erikas Bitovtas
7 siblings, 0 replies; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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] 14+ messages in thread* [PATCH v9 8/8] arm64: dts: qcom: msm8939-asus-z00t: add Venus
2026-05-26 13:24 [PATCH v9 0/8] media: qcom: venus: add MSM8939 support Erikas Bitovtas
` (6 preceding siblings ...)
2026-05-26 13:24 ` [PATCH v9 7/8] arm64: dts: qcom: msm8939-longcheer-l9100: Enable " Erikas Bitovtas
@ 2026-05-26 13:24 ` Erikas Bitovtas
7 siblings, 0 replies; 14+ messages in thread
From: Erikas Bitovtas @ 2026-05-26 13:24 UTC (permalink / raw)
To: Bryan O'Donoghue, Vikash Garodia, 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] 14+ messages in thread