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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
};

+30 −13
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -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
 */