media: renesas: vsp1: Add support for VSP software version
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> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
24c52aa35a
commit
9c63902745
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user