Commit 9c639027 authored by Biju Das's avatar Biju Das Committed by Mauro Carvalho Chehab

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: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 24c52aa3
......@@ -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
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment