diff mbox series

media: rcar-vin: require master VIN only for CSI source

Message ID 20220202104700.3329055-1-nikita.yoush@cogentembedded.com (mailing list archive)
State New
Delegated to: Kieran Bingham
Headers show
Series media: rcar-vin: require master VIN only for CSI source | expand

Commit Message

Nikita Yushchenko Feb. 2, 2022, 10:47 a.m. UTC
Hardware limitations on VINs that can be used at the same time cover only
CSI data source. For parallel source, any single VIN can work.

This patch moves check for master VIN availability in
rvin_csi2_link_notify() below processing the parallel case.

This fixes media-ctl usage on KF board when both CSI and parallel cameras
are in use on the same system. In such a setup, VINs 0-3 are used for
CSI cameras and VIN5 is used for parallel camera.

Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
---
 drivers/media/platform/rcar-vin/rcar-core.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Niklas Söderlund Feb. 2, 2022, 11:11 a.m. UTC | #1
Hi Nikita,

Thanks for your work.

On 2022-02-02 13:47:00 +0300, Nikita Yushchenko wrote:
> Hardware limitations on VINs that can be used at the same time cover only
> CSI data source. For parallel source, any single VIN can work.
> 
> This patch moves check for master VIN availability in
> rvin_csi2_link_notify() below processing the parallel case.
> 
> This fixes media-ctl usage on KF board when both CSI and parallel cameras
> are in use on the same system. In such a setup, VINs 0-3 are used for
> CSI cameras and VIN5 is used for parallel camera.

I agree this issue needs to be addressed and I think the use-case is 
covered in the patch 1/3 in the VIN routing series [1]. I don't have 
access to King Fisher hardware so I can't test it, if you do could you 
test that series and see if it fix the issue?

1. [PATCH v3 0/3] media: rcar-{csi2,vin}: Move to full Virtual Channel routing per CSI-2 IP
   https://lore.kernel.org/linux-renesas-soc/20220124124858.571363-4-niklas.soderlund+renesas@ragnatech.se/T/

> 
> Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
> ---
>  drivers/media/platform/rcar-vin/rcar-core.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
> index 0186ae235113..038ee187f95a 100644
> --- a/drivers/media/platform/rcar-vin/rcar-core.c
> +++ b/drivers/media/platform/rcar-vin/rcar-core.c
> @@ -826,11 +826,6 @@ static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
>  	vin = container_of(vdev, struct rvin_dev, vdev);
>  	master_id = rvin_group_id_to_master(vin->id);
>  
> -	if (WARN_ON(!group->vin[master_id])) {
> -		ret = -ENODEV;
> -		goto out;
> -	}
> -
>  	/* Build a mask for already enabled links. */
>  	for (i = master_id; i < master_id + 4; i++) {
>  		if (!group->vin[i])
> @@ -878,6 +873,11 @@ static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
>  		goto out;
>  	}
>  
> +	if (WARN_ON(!group->vin[master_id])) {
> +		ret = -ENODEV;
> +		goto out;
> +	}
> +
>  	channel = rvin_group_csi_pad_to_channel(link->source->index);
>  	mask_new = mask & rvin_csi2_get_mask(vin, csi_id, channel);
>  	vin_dbg(vin, "Try link change mask: 0x%x new: 0x%x\n", mask, mask_new);
> -- 
> 2.30.2
>
Nikita Yushchenko Feb. 2, 2022, 11:25 a.m. UTC | #2
Hi.

> I agree this issue needs to be addressed and I think the use-case is
> covered in the patch 1/3 in the VIN routing series [1].

Indeed, that patch moves the check to CSI-only path, which is exactly what I tried to do. Thank you!

> I don't have
> access to King Fisher hardware so I can't test it, if you do could you
> test that series and see if it fix the issue?

Right now I don't have all needed hw to run the test that reproduced the issue. If/when I get access to 
hw, I will try it.

Nikita
diff mbox series

Patch

diff --git a/drivers/media/platform/rcar-vin/rcar-core.c b/drivers/media/platform/rcar-vin/rcar-core.c
index 0186ae235113..038ee187f95a 100644
--- a/drivers/media/platform/rcar-vin/rcar-core.c
+++ b/drivers/media/platform/rcar-vin/rcar-core.c
@@ -826,11 +826,6 @@  static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
 	vin = container_of(vdev, struct rvin_dev, vdev);
 	master_id = rvin_group_id_to_master(vin->id);
 
-	if (WARN_ON(!group->vin[master_id])) {
-		ret = -ENODEV;
-		goto out;
-	}
-
 	/* Build a mask for already enabled links. */
 	for (i = master_id; i < master_id + 4; i++) {
 		if (!group->vin[i])
@@ -878,6 +873,11 @@  static int rvin_csi2_link_notify(struct media_link *link, u32 flags,
 		goto out;
 	}
 
+	if (WARN_ON(!group->vin[master_id])) {
+		ret = -ENODEV;
+		goto out;
+	}
+
 	channel = rvin_group_csi_pad_to_channel(link->source->index);
 	mask_new = mask & rvin_csi2_get_mask(vin, csi_id, channel);
 	vin_dbg(vin, "Try link change mask: 0x%x new: 0x%x\n", mask, mask_new);