* [PATCH v12 1/5] media: dt-bindings: media: renesas,vsp1: Document RZ/G2L VSPD bindings
2022-07-22 16:49 [PATCH v12 0/5] Add support for RZ/G2L VSPD Biju Das
@ 2022-07-22 16:49 ` Biju Das
2022-07-22 16:49 ` [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line Biju Das
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Biju Das @ 2022-07-22 16:49 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski
Cc: Biju Das, Laurent Pinchart, Kieran Bingham, linux-media,
linux-renesas-soc, devicetree, Geert Uytterhoeven,
Chris Paterson, Biju Das, Prabhakar Mahadev Lad,
Krzysztof Kozlowski
Document VSPD found in RZ/G2L SoC. VSPD block is similar to VSP2-D
found on R-Car SoC's, but it does not have a version register and
it has 3 clocks compared to 1 clock on vsp1 and vsp2.
This patch introduces a new compatible 'renesas,r9a07g044-vsp2' to
handle these differences.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
v11->v12:
* No change.
v10->v11:
* No change
v9->v10:
* No change
v8->v9:
* No change
v7->v8:
* Added Clock-names to false for Non RZ/G2L SoC's
* Replaced compatble 'renesas,rzg2l-vsp2'->'renesas,r9a07g044-vsp2'
* Removed RZ/V2L SoC, will be added later after testing it.
* Added Rb tag from Laurent.
v6->v7:
* No change
v5->v6:
* Removed LCDC reference clock description
* Changed the clock name from du.0->aclk
v4->v5:
* No change
v3->v4:
* No change
v2->v3:
* Added Rb tag from Krzysztof.
v1->v2:
* Changed compatible from vsp2-rzg2l->rzg2l-vsp2
RFC->v1:
* Updated commit description
* Changed compatible from vsp2-r9a07g044->vsp2-rzg2l
* Defined the clocks
* Clock max Items is based on SoC Compatible string
RFC:
* https://patchwork.kernel.org/project/linux-renesas-soc/patch/20220112174612.10773-20-biju.das.jz@bp.renesas.com/
---
.../bindings/media/renesas,vsp1.yaml | 53 ++++++++++++++-----
1 file changed, 40 insertions(+), 13 deletions(-)
diff --git a/Documentation/devicetree/bindings/media/renesas,vsp1.yaml b/Documentation/devicetree/bindings/media/renesas,vsp1.yaml
index 990e9c1dbc43..7a8f32473852 100644
--- a/Documentation/devicetree/bindings/media/renesas,vsp1.yaml
+++ b/Documentation/devicetree/bindings/media/renesas,vsp1.yaml
@@ -17,6 +17,7 @@ description:
properties:
compatible:
enum:
+ - renesas,r9a07g044-vsp2 # RZ/G2L
- renesas,vsp1 # R-Car Gen2 and RZ/G1
- renesas,vsp2 # R-Car Gen3 and RZ/G2
@@ -26,8 +27,8 @@ properties:
interrupts:
maxItems: 1
- clocks:
- maxItems: 1
+ clocks: true
+ clock-names: true
power-domains:
maxItems: 1
@@ -50,17 +51,43 @@ required:
additionalProperties: false
-if:
- properties:
- compatible:
- items:
- - const: renesas,vsp1
-then:
- properties:
- renesas,fcp: false
-else:
- required:
- - renesas,fcp
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,vsp1
+ then:
+ properties:
+ renesas,fcp: false
+ else:
+ required:
+ - renesas,fcp
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a07g044-vsp2
+ then:
+ properties:
+ clocks:
+ items:
+ - description: Main clock
+ - description: Register access clock
+ - description: Video clock
+ clock-names:
+ items:
+ - const: aclk
+ - const: pclk
+ - const: vclk
+ required:
+ - clock-names
+ else:
+ properties:
+ clocks:
+ maxItems: 1
+ clock-names: false
examples:
# R8A7790 (R-Car H2) VSP1-S
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line
2022-07-22 16:49 [PATCH v12 0/5] Add support for RZ/G2L VSPD Biju Das
2022-07-22 16:49 ` [PATCH v12 1/5] media: dt-bindings: media: renesas,vsp1: Document RZ/G2L VSPD bindings Biju Das
@ 2022-07-22 16:49 ` Biju Das
2022-08-18 8:50 ` Geert Uytterhoeven
2022-07-22 16:49 ` [PATCH v12 3/5] media: renesas: vsp1: Add support for VSP software version Biju Das
2022-07-22 16:49 ` [PATCH v12 4/5] media: renesas: vsp1: Add VSP1_HAS_NON_ZERO_LBA feature bit Biju Das
3 siblings, 1 reply; 7+ messages in thread
From: Biju Das @ 2022-07-22 16:49 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Philipp Zabel
Cc: Biju Das, Laurent Pinchart, Kieran Bingham, linux-media,
linux-renesas-soc, Geert Uytterhoeven, Chris Paterson, Biju Das,
Prabhakar Mahadev Lad
As the resets DT property is mandatory, and is present in all .dtsi
in mainline, add support to perform deassert/assert using reference
counted reset handle.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
v11->v12:
* Replaced read_poll_timeout_atomic-> udelay(1) as testing on RZ/G1N
shows this delay is sufficient to avoid lock-up.
* Removed Rb tags.
v10->v11:
* To avoid lock-up on R-Car Gen2, added poll for reset status after deassert.
v9->v10:
* Moved {deassert,assert} calls to vsp1_pm_runtime_{resume,suspend}
v8->v9:
* No change
v7->v8:
* No Change
v6->v7:
* No change
v5->v6:
* Rebased to media_staging and updated commit header
* Added Rb tag from Laurent
* Added forward declaration for struct reset_control
* Updated vsp1_device_get() with changes suggested by Laurent
* Updated error message for reset_control_get form ctrl->control.
v4->v5:
* Added Rb tag from Geert
v3->v4:
* Restored error check for pm_runtime_resume_and_get and calls
assert() in case of failure.
v2->v3:
* Added Rb tag from Philipp
* If reset_control_deassert() failed, return ret directly.
v1->v2:
* Used reference counted reset handle to perform deassert/assert
RFC->v1:
* Added reset support as separate patch
* Moved rstc just after the bus_master field in struct vsp1_device
RFC:
* https://patchwork.kernel.org/project/linux-renesas-soc/patch/20220112174612.10773-21-biju.das.jz@bp.renesas.com/
---
drivers/media/platform/renesas/vsp1/vsp1.h | 2 ++
.../media/platform/renesas/vsp1/vsp1_drv.c | 29 +++++++++++++++++--
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/renesas/vsp1/vsp1.h b/drivers/media/platform/renesas/vsp1/vsp1.h
index 37cf33c7e6ca..baf898d577ec 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1.h
+++ b/drivers/media/platform/renesas/vsp1/vsp1.h
@@ -22,6 +22,7 @@
struct clk;
struct device;
struct rcar_fcp_device;
+struct reset_control;
struct vsp1_drm;
struct vsp1_entity;
@@ -79,6 +80,7 @@ struct vsp1_device {
void __iomem *mmio;
struct rcar_fcp_device *fcp;
struct device *bus_master;
+ struct reset_control *rstc;
struct vsp1_brx *brs;
struct vsp1_brx *bru;
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drv.c b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
index 1f73c48eb738..89cb8080e13e 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
@@ -11,11 +11,13 @@
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/interrupt.h>
+#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
+#include <linux/reset.h>
#include <linux/videodev2.h>
#include <media/rcar-fcp.h>
@@ -622,6 +624,7 @@ static int __maybe_unused vsp1_pm_runtime_suspend(struct device *dev)
struct vsp1_device *vsp1 = dev_get_drvdata(dev);
rcar_fcp_disable(vsp1->fcp);
+ reset_control_assert(vsp1->rstc);
return 0;
}
@@ -631,13 +634,30 @@ static int __maybe_unused vsp1_pm_runtime_resume(struct device *dev)
struct vsp1_device *vsp1 = dev_get_drvdata(dev);
int ret;
+ ret = reset_control_deassert(vsp1->rstc);
+ if (ret < 0)
+ return ret;
+
+ /*
+ * On R-Car Gen2, vsp1 register access after deassert can cause
+ * lock-up. It is a special case and needs some delay to avoid
+ * this lock-up.
+ */
+ udelay(1);
+
if (vsp1->info) {
ret = vsp1_device_init(vsp1);
if (ret < 0)
- return ret;
+ goto done;
}
- return rcar_fcp_enable(vsp1->fcp);
+ ret = rcar_fcp_enable(vsp1->fcp);
+
+done:
+ if (ret < 0)
+ reset_control_assert(vsp1->rstc);
+
+ return ret;
}
static const struct dev_pm_ops vsp1_pm_ops = {
@@ -825,6 +845,11 @@ static int vsp1_probe(struct platform_device *pdev)
if (irq < 0)
return irq;
+ vsp1->rstc = devm_reset_control_get_shared(&pdev->dev, NULL);
+ if (IS_ERR(vsp1->rstc))
+ return dev_err_probe(&pdev->dev, PTR_ERR(vsp1->rstc),
+ "failed to get reset control\n");
+
/* FCP (optional). */
fcp_node = of_parse_phandle(pdev->dev.of_node, "renesas,fcp", 0);
if (fcp_node) {
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line
2022-07-22 16:49 ` [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line Biju Das
@ 2022-08-18 8:50 ` Geert Uytterhoeven
2022-08-24 8:49 ` Biju Das
0 siblings, 1 reply; 7+ messages in thread
From: Geert Uytterhoeven @ 2022-08-18 8:50 UTC (permalink / raw)
To: Biju Das
Cc: Mauro Carvalho Chehab, Philipp Zabel, Laurent Pinchart,
Kieran Bingham, Linux Media Mailing List, Linux-Renesas,
Geert Uytterhoeven, Chris Paterson, Biju Das,
Prabhakar Mahadev Lad
Hi Biju,
On Fri, Jul 22, 2022 at 6:49 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
> As the resets DT property is mandatory, and is present in all .dtsi
> in mainline, add support to perform deassert/assert using reference
> counted reset handle.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
> v11->v12:
> * Replaced read_poll_timeout_atomic-> udelay(1) as testing on RZ/G1N
> shows this delay is sufficient to avoid lock-up.
> * Removed Rb tags.
Thanks for the update!
> --- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c
> +++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
> @@ -11,11 +11,13 @@
> #include <linux/delay.h>
> #include <linux/device.h>
> #include <linux/interrupt.h>
> +#include <linux/iopoll.h>
This is no longer needed.
> #include <linux/module.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> +#include <linux/reset.h>
> #include <linux/videodev2.h>
>
> #include <media/rcar-fcp.h>
The rest LGTM, so with the above fixed:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line
2022-08-18 8:50 ` Geert Uytterhoeven
@ 2022-08-24 8:49 ` Biju Das
0 siblings, 0 replies; 7+ messages in thread
From: Biju Das @ 2022-08-24 8:49 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Mauro Carvalho Chehab, Philipp Zabel, Laurent Pinchart,
Kieran Bingham, Linux Media Mailing List, Linux-Renesas,
Geert Uytterhoeven, Chris Paterson, Biju Das,
Prabhakar Mahadev Lad
Hi Geert,
Thanks for the feedback.
> Subject: Re: [PATCH v12 2/5] media: renesas: vsp1: Add support to
> deassert/assert reset line
>
> Hi Biju,
>
> On Fri, Jul 22, 2022 at 6:49 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> > As the resets DT property is mandatory, and is present in all .dtsi in
> > mainline, add support to perform deassert/assert using reference
> > counted reset handle.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > ---
> > v11->v12:
> > * Replaced read_poll_timeout_atomic-> udelay(1) as testing on RZ/G1N
> > shows this delay is sufficient to avoid lock-up.
> > * Removed Rb tags.
>
> Thanks for the update!
>
> > --- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c
> > +++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
> > @@ -11,11 +11,13 @@
> > #include <linux/delay.h>
> > #include <linux/device.h>
> > #include <linux/interrupt.h>
> > +#include <linux/iopoll.h>
>
> This is no longer needed.
Oops, fix it in next version.
Cheers,
Biju
>
> > #include <linux/module.h>
> > #include <linux/of.h>
> > #include <linux/of_device.h>
> > #include <linux/platform_device.h>
> > #include <linux/pm_runtime.h>
> > +#include <linux/reset.h>
> > #include <linux/videodev2.h>
> >
> > #include <media/rcar-fcp.h>
>
> The rest LGTM, so with the above fixed:
>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-
> m68k.org
>
> In personal conversations with technical people, I call myself a hacker.
> But when I'm talking to journalists I just say "programmer" or something
> like that.
> -- Linus Torvalds
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v12 3/5] media: renesas: vsp1: Add support for VSP software version
2022-07-22 16:49 [PATCH v12 0/5] Add support for RZ/G2L VSPD Biju Das
2022-07-22 16:49 ` [PATCH v12 1/5] media: dt-bindings: media: renesas,vsp1: Document RZ/G2L VSPD bindings Biju Das
2022-07-22 16:49 ` [PATCH v12 2/5] media: renesas: vsp1: Add support to deassert/assert reset line Biju Das
@ 2022-07-22 16:49 ` Biju Das
2022-07-22 16:49 ` [PATCH v12 4/5] media: renesas: vsp1: Add VSP1_HAS_NON_ZERO_LBA feature bit Biju Das
3 siblings, 0 replies; 7+ messages in thread
From: Biju Das @ 2022-07-22 16:49 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Biju Das, Laurent Pinchart, Kieran Bingham, linux-media,
linux-renesas-soc, Geert Uytterhoeven, Chris Paterson, Biju Das,
Prabhakar Mahadev Lad
The VSPD block on RZ/G2L SoCs does not have a version register.
This patch adds support for adding VSP software version based on
device match.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v11->v12:
* No change
v10->v11:
* No change
v9->v10:
* No change
v8->v9:
* Added Rb tag from Geert
* Updated commit description RZ/G2L -> RZ/G2L SoCs.
* Replaced break with return info in case a Model match is found and
removed additional check for non-match case.
v8:
* New patch
---
drivers/media/platform/renesas/vsp1/vsp1.h | 1 +
.../media/platform/renesas/vsp1/vsp1_drv.c | 43 +++++++++++++------
.../media/platform/renesas/vsp1/vsp1_regs.h | 2 +
3 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/drivers/media/platform/renesas/vsp1/vsp1.h b/drivers/media/platform/renesas/vsp1/vsp1.h
index baf898d577ec..ff4435705abb 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1.h
+++ b/drivers/media/platform/renesas/vsp1/vsp1.h
@@ -67,6 +67,7 @@ struct vsp1_device_info {
unsigned int uif_count;
unsigned int wpf_count;
unsigned int num_bru_inputs;
+ u8 soc;
bool uapi;
};
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drv.c b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
index 89cb8080e13e..9558586e9d73 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
@@ -818,11 +818,39 @@ static const struct vsp1_device_info vsp1_device_infos[] = {
},
};
+static const struct vsp1_device_info *vsp1_lookup_info(struct vsp1_device *vsp1)
+{
+ const struct vsp1_device_info *info;
+ unsigned int i;
+
+ /*
+ * Try the info stored in match data first for devices that don't have
+ * a version register.
+ */
+ info = of_device_get_match_data(vsp1->dev);
+ if (info) {
+ vsp1->version = VI6_IP_VERSION_VSP_SW | info->version | info->soc;
+ return info;
+ }
+
+ vsp1->version = vsp1_read(vsp1, VI6_IP_VERSION);
+
+ for (i = 0; i < ARRAY_SIZE(vsp1_device_infos); ++i) {
+ info = &vsp1_device_infos[i];
+
+ if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) == info->version)
+ return info;
+ }
+
+ dev_err(vsp1->dev, "unsupported IP version 0x%08x\n", vsp1->version);
+
+ return NULL;
+}
+
static int vsp1_probe(struct platform_device *pdev)
{
struct vsp1_device *vsp1;
struct device_node *fcp_node;
- unsigned int i;
int ret;
int irq;
@@ -878,19 +906,8 @@ static int vsp1_probe(struct platform_device *pdev)
if (ret < 0)
goto done;
- vsp1->version = vsp1_read(vsp1, VI6_IP_VERSION);
-
- for (i = 0; i < ARRAY_SIZE(vsp1_device_infos); ++i) {
- if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) ==
- vsp1_device_infos[i].version) {
- vsp1->info = &vsp1_device_infos[i];
- break;
- }
- }
-
+ vsp1->info = vsp1_lookup_info(vsp1);
if (!vsp1->info) {
- dev_err(&pdev->dev, "unsupported IP version 0x%08x\n",
- vsp1->version);
vsp1_device_put(vsp1);
ret = -ENXIO;
goto done;
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_regs.h b/drivers/media/platform/renesas/vsp1/vsp1_regs.h
index fae7286eb01e..4286d13eca32 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_regs.h
+++ b/drivers/media/platform/renesas/vsp1/vsp1_regs.h
@@ -781,6 +781,8 @@
#define VI6_IP_VERSION_SOC_E3 (0x04 << 0)
#define VI6_IP_VERSION_SOC_V3U (0x05 << 0)
+#define VI6_IP_VERSION_VSP_SW (0xfffe << 16) /* SW VSP version */
+
/* -----------------------------------------------------------------------------
* RPF CLUT Registers
*/
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v12 4/5] media: renesas: vsp1: Add VSP1_HAS_NON_ZERO_LBA feature bit
2022-07-22 16:49 [PATCH v12 0/5] Add support for RZ/G2L VSPD Biju Das
` (2 preceding siblings ...)
2022-07-22 16:49 ` [PATCH v12 3/5] media: renesas: vsp1: Add support for VSP software version Biju Das
@ 2022-07-22 16:49 ` Biju Das
3 siblings, 0 replies; 7+ messages in thread
From: Biju Das @ 2022-07-22 16:49 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: Biju Das, Laurent Pinchart, Kieran Bingham, linux-media,
linux-renesas-soc, Geert Uytterhoeven, Chris Paterson, Biju Das,
Prabhakar Mahadev Lad
As per HW manual V3M and RZ/G2L SoCs has nonzero LIF buffer
attributes. So, introduce a feature bit for handling the same.
This patch also adds separate device info structure for V3M and V3H
SoCs, as both these SoCs share the same model ID, but V3H does not
have VSP1_HAS_NON_ZERO_LBA feature bit.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
v11->v12:
* No change
v10->v11:
* No change
v9->v10:
* No change
v8->v9:
* Used generic check for matching SoCs with LBA feature.
v8:
* New patch
---
drivers/media/platform/renesas/vsp1/vsp1.h | 1 +
drivers/media/platform/renesas/vsp1/vsp1_drv.c | 18 +++++++++++++++++-
drivers/media/platform/renesas/vsp1/vsp1_lif.c | 3 +--
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/renesas/vsp1/vsp1.h b/drivers/media/platform/renesas/vsp1/vsp1.h
index ff4435705abb..2f6f0c6ae555 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1.h
+++ b/drivers/media/platform/renesas/vsp1/vsp1.h
@@ -55,6 +55,7 @@ struct vsp1_uif;
#define VSP1_HAS_HGT BIT(8)
#define VSP1_HAS_BRS BIT(9)
#define VSP1_HAS_EXT_DL BIT(10)
+#define VSP1_HAS_NON_ZERO_LBA BIT(11)
struct vsp1_device_info {
u32 version;
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_drv.c b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
index 9558586e9d73..bc0ce5614841 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_drv.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_drv.c
@@ -788,6 +788,7 @@ static const struct vsp1_device_info vsp1_device_infos[] = {
}, {
.version = VI6_IP_VERSION_MODEL_VSPD_V3,
.model = "VSP2-D",
+ .soc = VI6_IP_VERSION_SOC_V3H,
.gen = 3,
.features = VSP1_HAS_BRS | VSP1_HAS_BRU,
.lif_count = 1,
@@ -795,6 +796,17 @@ static const struct vsp1_device_info vsp1_device_infos[] = {
.uif_count = 1,
.wpf_count = 1,
.num_bru_inputs = 5,
+ }, {
+ .version = VI6_IP_VERSION_MODEL_VSPD_V3,
+ .model = "VSP2-D",
+ .soc = VI6_IP_VERSION_SOC_V3M,
+ .gen = 3,
+ .features = VSP1_HAS_BRS | VSP1_HAS_BRU | VSP1_HAS_NON_ZERO_LBA,
+ .lif_count = 1,
+ .rpf_count = 5,
+ .uif_count = 1,
+ .wpf_count = 1,
+ .num_bru_inputs = 5,
}, {
.version = VI6_IP_VERSION_MODEL_VSPDL_GEN3,
.model = "VSP2-DL",
@@ -838,8 +850,12 @@ static const struct vsp1_device_info *vsp1_lookup_info(struct vsp1_device *vsp1)
for (i = 0; i < ARRAY_SIZE(vsp1_device_infos); ++i) {
info = &vsp1_device_infos[i];
- if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) == info->version)
+ if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) == info->version) {
+ if (info->soc &&
+ ((vsp1->version & VI6_IP_VERSION_SOC_MASK) != info->soc))
+ continue;
return info;
+ }
}
dev_err(vsp1->dev, "unsupported IP version 0x%08x\n", vsp1->version);
diff --git a/drivers/media/platform/renesas/vsp1/vsp1_lif.c b/drivers/media/platform/renesas/vsp1/vsp1_lif.c
index 6a6857ac9327..9adb892edcdc 100644
--- a/drivers/media/platform/renesas/vsp1/vsp1_lif.c
+++ b/drivers/media/platform/renesas/vsp1/vsp1_lif.c
@@ -135,8 +135,7 @@ static void lif_configure_stream(struct vsp1_entity *entity,
* may appear on the output). The value required by the manual is not
* explained but is likely a buffer size or threshold.
*/
- if ((entity->vsp1->version & VI6_IP_VERSION_MASK) ==
- (VI6_IP_VERSION_MODEL_VSPD_V3 | VI6_IP_VERSION_SOC_V3M))
+ if (vsp1_feature(entity->vsp1, VSP1_HAS_NON_ZERO_LBA))
vsp1_lif_write(lif, dlb, VI6_LIF_LBA,
VI6_LIF_LBA_LBA0 |
(1536 << VI6_LIF_LBA_LBA1_SHIFT));
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread