media: renesas: vsp1: Add VSP1_HAS_NON_ZERO_LBA feature bit
authorBiju Das <biju.das.jz@bp.renesas.com>
Sun, 28 Aug 2022 08:13:33 +0000 (10:13 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Tue, 30 Aug 2022 13:33:22 +0000 (15:33 +0200)
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>
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.h
drivers/media/platform/renesas/vsp1/vsp1_drv.c
drivers/media/platform/renesas/vsp1/vsp1_lif.c

index ff4435705abb0d11d089a6d725a61222416bf8d2..2f6f0c6ae55514d312e48232a5f8c8673f69ba13 100644 (file)
@@ -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;
index fd75788a5a36f36c73ad1dab60cf01d3f06381f7..8ab5b2b37524c1e4e30d32e3d7195a5f0c54d91c 100644 (file)
@@ -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",
@@ -822,6 +834,8 @@ static const struct vsp1_device_info *vsp1_lookup_info(struct vsp1_device *vsp1)
 {
        const struct vsp1_device_info *info;
        unsigned int i;
+       u32 model;
+       u32 soc;
 
        /*
         * Try the info stored in match data first for devices that don't have
@@ -834,11 +848,13 @@ static const struct vsp1_device_info *vsp1_lookup_info(struct vsp1_device *vsp1)
        }
 
        vsp1->version = vsp1_read(vsp1, VI6_IP_VERSION);
+       model = vsp1->version & VI6_IP_VERSION_MODEL_MASK;
+       soc = vsp1->version & VI6_IP_VERSION_SOC_MASK;
 
        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 (model == info->version && (!info->soc || soc == info->soc))
                        return info;
        }
 
index 6a6857ac932707e93c048e68991de7502c8c35a7..9adb892edcdc63b583e742aa2611190433aa61b8 100644 (file)
@@ -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));