media: renesas: vsp1: Add support for RZ/G2L VSPD
authorBiju Das <biju.das.jz@bp.renesas.com>
Sun, 28 Aug 2022 08:13:34 +0000 (10:13 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Tue, 30 Aug 2022 13:34:10 +0000 (15:34 +0200)
The RZ/G2L VSPD provides a single VSPD instance. It has the following
sub modules MAU, CTU, RPF, DPR, LUT, BRS, WPF and LIF.

The VSPD block on RZ/G2L SoCs does not have a version register, so
added a new compatible string "renesas,r9a07g044-vsp2" with a data
pointer containing the info structure. Also the reset line is shared
with the DU module.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/renesas/vsp1/vsp1_drv.c
drivers/media/platform/renesas/vsp1/vsp1_lif.c
drivers/media/platform/renesas/vsp1/vsp1_regs.h

index 8ab5b2b37524c1e4e30d32e3d7195a5f0c54d91c..c260d318d2988dbfaf4e1ca51cea1c9f5645cdb4 100644 (file)
@@ -830,6 +830,18 @@ static const struct vsp1_device_info vsp1_device_infos[] = {
        },
 };
 
+static const struct vsp1_device_info rzg2l_vsp2_device_info = {
+       .version = VI6_IP_VERSION_MODEL_VSPD_RZG2L,
+       .model = "VSP2-D",
+       .soc = VI6_IP_VERSION_SOC_RZG2L,
+       .gen = 3,
+       .features = VSP1_HAS_BRS | VSP1_HAS_WPF_VFLIP | VSP1_HAS_EXT_DL
+                 | VSP1_HAS_NON_ZERO_LBA,
+       .lif_count = 1,
+       .rpf_count = 2,
+       .wpf_count = 1,
+};
+
 static const struct vsp1_device_info *vsp1_lookup_info(struct vsp1_device *vsp1)
 {
        const struct vsp1_device_info *info;
@@ -980,6 +992,7 @@ static int vsp1_remove(struct platform_device *pdev)
 static const struct of_device_id vsp1_of_match[] = {
        { .compatible = "renesas,vsp1" },
        { .compatible = "renesas,vsp2" },
+       { .compatible = "renesas,r9a07g044-vsp2", .data = &rzg2l_vsp2_device_info },
        { },
 };
 MODULE_DEVICE_TABLE(of, vsp1_of_match);
index 9adb892edcdc63b583e742aa2611190433aa61b8..186a5730e1e32fc1dcb049a5c2c94700029ab2e1 100644 (file)
@@ -107,6 +107,7 @@ static void lif_configure_stream(struct vsp1_entity *entity,
 
        case VI6_IP_VERSION_MODEL_VSPDL_GEN3:
        case VI6_IP_VERSION_MODEL_VSPD_V3:
+       case VI6_IP_VERSION_MODEL_VSPD_RZG2L:
                hbth = 0;
                obth = 1500;
                lbth = 0;
@@ -130,10 +131,10 @@ static void lif_configure_stream(struct vsp1_entity *entity,
                        VI6_LIF_CTRL_REQSEL | VI6_LIF_CTRL_LIF_EN);
 
        /*
-        * On R-Car V3M the LIF0 buffer attribute register has to be set to a
-        * non-default value to guarantee proper operation (otherwise artifacts
-        * may appear on the output). The value required by the manual is not
-        * explained but is likely a buffer size or threshold.
+        * On R-Car V3M and RZ/G2L the LIF0 buffer attribute register has to be
+        * set to a non-default value to guarantee proper operation (otherwise
+        * artifacts may appear on the output). The value required by the
+        * manual is not explained but is likely a buffer size or threshold.
         */
        if (vsp1_feature(entity->vsp1, VSP1_HAS_NON_ZERO_LBA))
                vsp1_lif_write(lif, dlb, VI6_LIF_LBA,
index 4286d13eca328b3ad806e8acce9d445a09bb6d41..8928f4c6bb557b5a3204864acb8c0b54ebcad548 100644 (file)
 #define VI6_IP_VERSION_MODEL_VSPDL_GEN3        (0x19 << 8)
 #define VI6_IP_VERSION_MODEL_VSPBS_GEN3        (0x1a << 8)
 #define VI6_IP_VERSION_MODEL_VSPD_V3U  (0x1c << 8)
+/* RZ/G2L SoCs have no version register, So use 0x80 as the model version */
+#define VI6_IP_VERSION_MODEL_VSPD_RZG2L        (0x80 << 8)
 
 #define VI6_IP_VERSION_SOC_MASK                (0xff << 0)
 #define VI6_IP_VERSION_SOC_H2          (0x01 << 0)
 #define VI6_IP_VERSION_SOC_M3N         (0x04 << 0)
 #define VI6_IP_VERSION_SOC_E3          (0x04 << 0)
 #define VI6_IP_VERSION_SOC_V3U         (0x05 << 0)
+/* RZ/G2L SoCs have no version register, So use 0x80 for SoC Identification */
+#define VI6_IP_VERSION_SOC_RZG2L       (0x80 << 0)
 
 #define VI6_IP_VERSION_VSP_SW          (0xfffe << 16) /* SW VSP version */