From patchwork Wed Feb 19 13:48:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982242 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 421701E0B61; Wed, 19 Feb 2025 13:49:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972987; cv=none; b=nSGEwGxp4nqnR8lfyRjSaOTm+IZqdzGZHPZnehYzkoG0UguOXt1WKWW5NY76ljYeLk0wfIC4ZNjjtwGytOiBb5aLV8VGXVzTDMVr024MOfsneNGBccmw69MjSUWQg/8kF5J3KRZgjMxQIGCiQdK64bS0mXYlgs3dHUfI9Zr2DqU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972987; c=relaxed/simple; bh=QCdow8fYV/gcoLZOG4ngc/tMnOtsJNdvgkcgwY/I9qw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jPtq3615Wwl64bd4H62WOazDPOk+Rac4Y10mFTijUiXuI71VI+be9dr/VSmMzOMPjf8xKKxx2kQJlo/8FWMSg/UyLs3jVXWhOSPZsKCLfphDDLqUujNL9gi+fItVmG2hf61JqC2fKUZ81c66nHj+cbAyo2gwAkd/sSDVW75lC0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=bmiMBl6w; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="bmiMBl6w" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0E4236B5; Wed, 19 Feb 2025 14:48:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972901; bh=QCdow8fYV/gcoLZOG4ngc/tMnOtsJNdvgkcgwY/I9qw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bmiMBl6w1a3GzTwXOK7xmwKB8PoOzmcj9NvMbvhsCP2QDDxewuF2be/wXVJ96HSGm OEr+Pu0a+azgV9pYxZfPtJcR8ZGEqypXWoY9BY1bqr/Dap8Wd9KrC6fe8o+AHOcTcD LYzb40oVqBxLfiN3dJAyet49DDnx0rWue7GAN3YI= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:48:55 +0200 Subject: [PATCH 01/18] media: rcar-vin: Add RCAR_GEN4 model value Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-1-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=3060; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=QCdow8fYV/gcoLZOG4ngc/tMnOtsJNdvgkcgwY/I9qw=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFv+AUe/JK1zWWc7VybdLq2/DzF9PBAyG1EQ 42GPjgCLqSJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhbwAKCRD6PaqMvJYe 9f9lEACGTYXM+t0Q0JlZtfM68RaR0SgNXQMVg6rpMGtgHLK5+ZgmxPedqmh0vDZngY+yYFQM0VW azP7HOuGZwP5FnIlqA46qJ+9rXZPp7yeH1F24Nuad3kpQ9SyFw1qvVt4++OKP1yx5NdMg9V2+0T HAJ4sFs5puleOC5CbGzU6Vzzj8pbztWHo7A/R+e9D2W1/RRNPv7BV3/5grQMTQu/QG6IHM0Z7P7 RdCtkjyZBCqw5y+jy1S+soWK9gcl4dr9VgI7mqcw/FRxnCXa+Bn3zsL4mMUaPpx760zZk+pk/i5 VGKDpkLiQKjZGOPuSE8pHpLTRVkfDEbjpQkKa3r5JhUo7Y2bml8L4jhD1Wylr+9j67KxpiGoe93 x+kWkaNF/d1UbGNyfE1bJx0J3HvOHbFZXkdnd47kLk1YkbISw2pnecJqfH9lKufNaqjVAD2Sh7+ wZnRSmkQgAz/dqGd33DrG6TAtpyaoOHGTPuigntgHZL/0YfofOBjixVc27p7/zi4Vw//vAEKneg t8aHbEVpYbiEmvFIVpXq0/3vEaxc4XLXDaLV3tED2ZQ94opioGyVY0aZmDVK2J6W5gyuTb8WfyG r6JdgqCqiQ1xX4zxASWorqmz41oLD2O5iY2RIs0owO7Li96QVQoDls8485EGDOJWkTM846mR01I hddbYtVszMGbHxw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Currently Gen4 VINs are marked as RCAN_GEN3 models. Add a new enum value, RCAR_GEN4, and use it for Gen4 VINs. No functional changes in this patch. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-vin/rcar-core.c | 2 +- drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 8 ++++---- drivers/media/platform/renesas/rcar-vin/rcar-vin.h | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-core.c b/drivers/media/platform/renesas/rcar-vin/rcar-core.c index c3cf02b94a2b..68c0acc7fc2c 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-core.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-core.c @@ -1089,7 +1089,7 @@ static const struct rvin_info rcar_info_r8a77995 = { }; static const struct rvin_info rcar_info_gen4 = { - .model = RCAR_GEN3, + .model = RCAR_GEN4, .use_mc = true, .use_isp = true, .nv12 = true, diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c index 976a4e218cd9..f0a77199cead 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c @@ -821,7 +821,7 @@ static int rvin_setup(struct rvin_dev *vin) } /* Make sure input interface and input format is valid. */ - if (vin->info->model == RCAR_GEN3) { + if (vin->info->model == RCAR_GEN3 || vin->info->model == RCAR_GEN4) { switch (vnmc & VNMC_INF_MASK) { case VNMC_INF_YUV8_BT656: case VNMC_INF_YUV10_BT656: @@ -844,7 +844,7 @@ static int rvin_setup(struct rvin_dev *vin) } /* Enable VSYNC Field Toggle mode after one VSYNC input */ - if (vin->info->model == RCAR_GEN3) + if (vin->info->model == RCAR_GEN3 || vin->info->model == RCAR_GEN4) dmr2 = VNDMR2_FTEV; else dmr2 = VNDMR2_FTEV | VNDMR2_VLV(1); @@ -944,7 +944,7 @@ static int rvin_setup(struct rvin_dev *vin) if (input_is_yuv == output_is_yuv) vnmc |= VNMC_BPS; - if (vin->info->model == RCAR_GEN3) { + if (vin->info->model == RCAR_GEN3 || vin->info->model == RCAR_GEN4) { /* Select between CSI-2 and parallel input */ if (rvin_remote_is_parallel(vin)) vnmc |= VNMC_DPINE; @@ -1325,7 +1325,7 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd, if (rvin_scaler_needed(vin)) { /* Gen3 can't scale NV12 */ - if (vin->info->model == RCAR_GEN3 && + if ((vin->info->model == RCAR_GEN3 || vin->info->model == RCAR_GEN4) && vin->format.pixelformat == V4L2_PIX_FMT_NV12) return -EPIPE; diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-vin.h b/drivers/media/platform/renesas/rcar-vin/rcar-vin.h index 62fed93e4438..90534df84ccd 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-vin.h +++ b/drivers/media/platform/renesas/rcar-vin/rcar-vin.h @@ -39,6 +39,7 @@ enum model_id { RCAR_M1, RCAR_GEN2, RCAR_GEN3, + RCAR_GEN4, }; enum rvin_csi_id { From patchwork Wed Feb 19 13:48:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982243 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E26101EFF85; Wed, 19 Feb 2025 13:49:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972990; cv=none; b=tH1qXLGWvz91uw7XrekOQpLwQlsKfrWVUJnppJ4NVBH44Ep9qWp4vmPTMUyYSFTqefsHpkjXf81xaWNWq5XWneYQLxtoRYOzBfM6Qj0LdFcc9TReYh/v3Z+QaMMckalwztIBvF0158PYHZpuw6Z7a2oyCUdojW+NSc+IbKk+/ks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972990; c=relaxed/simple; bh=L3pJ41SXmj2+v2IVbke+e+gWd0rD1XayieQMn4VEF2E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ImOiCmkrSbmRAKNv/beaZzgW4vSAiXXnKp5CJ6+8zpfZbt6Ba4FiP3WwYjOMzQ67E9HTnY5lmJfwh+vrshKplHmEQoXLC5fAzSFeRwqqzT4IEwmREIvPyng2St5jMhOQ9NAmAsaxmdfTUsvklrUTVev4HCMQn1FHyi9AV62SlZA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=SkEdFHZR; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="SkEdFHZR" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C11DD6D5; Wed, 19 Feb 2025 14:48:21 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972902; bh=L3pJ41SXmj2+v2IVbke+e+gWd0rD1XayieQMn4VEF2E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SkEdFHZRaQ/NzyvUlq9oio2MhKJR6YWzVRTNLs5UFp8t6TsKOi0h/wgP8ewcD8gKO Ilcgp1KXm3d6K4KO+khOLS6vFaD8S/FurkM4bmRBR2F2Niz2Cj6AVs15iM/kKa7UYk FkQT8TAXKMOsA/f+XQfJdxgStdFg3mi+0sEg3LXg= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:48:56 +0200 Subject: [PATCH 02/18] media: rcar-vin: Fix RAW8 Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-2-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1189; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=L3pJ41SXmj2+v2IVbke+e+gWd0rD1XayieQMn4VEF2E=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFwr9bEQwqTPX5Xvs/2jnCBRmD0wAHpJhPOl SdYfV6Ism6JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcAAKCRD6PaqMvJYe 9SLoEACpI7LVGZObwy1xXy/vd0WtiXTefic3dhb4UTxkvCdyzonXsQMPKbQlo3LZAP5e2G8PinF 8Wmh8woGWBXqngbPRYLE3UegzZhsWvqzwxC5iB2dSMonZ2lMq9XcMDviDDQk+GpUr+345NXLkIz xZkPwUXRhqb5IyKa2doFtGZHHggIQ75Hl9DifMqxPNWW4z0pI3uw9MhA2izYJHMWWktSR8F2V56 tHGghtBWY+WNJ4r6q5C0C+H0auMR0iJzsMc5eTloY/RJPDKiDY7jum8bvAbiwDs3LnbuqU74TYZ C1RH/DJKcS9VtWFG4GBHodRCLdON0Pq7O8WkC1HGK4OkaBdfMjmCVWh4ZUhD8Lpui/BWo2KdnPD 34+mRjndJi39aU0Do2WLwKEUoYdTfCKQrtXX0KgjPJSNXHVQSnZME8T9apo14f+PGSG8YQ3pydo L9eOhYAKhaiECWtNACffnR2rqzLuVvDDSkqr+doLMU2vVA2CybwnzJeCLFHWbP/IR6Tn5XOsN+G beQj6o/1r11Bg9PmPYBpbcd+49/yvRxtuQb3zVbyn7F0r0fTiGmSYnL8GppqFnj1avFNRrHa5GH euV1NnVaqk9517Sht/+7rY246pqzh405D9QzCFTFgMdqyyvI3m3wYwKyDxbkOQWCDW0Rd2OB0L9 ORjJSuoFY6dvJbA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 On Gen4 we need to set VNMC's EXINF to a different value (1) than in Gen3 (0). Add a define for this, and set the bit for Gen4. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c index f0a77199cead..bbdff7aed9e2 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c @@ -94,6 +94,7 @@ #define VNMC_INF_YUV16 (5 << 16) #define VNMC_INF_RGB888 (6 << 16) #define VNMC_INF_RGB666 (7 << 16) +#define VNMC_EXINF_RAW8 (1 << 12) /* Gen4 specific */ #define VNMC_VUP (1 << 10) #define VNMC_IM_ODD (0 << 3) #define VNMC_IM_ODD_EVEN (1 << 3) @@ -809,6 +810,8 @@ static int rvin_setup(struct rvin_dev *vin) case MEDIA_BUS_FMT_SRGGB8_1X8: case MEDIA_BUS_FMT_Y8_1X8: vnmc |= VNMC_INF_RAW8; + if (vin->info->model == RCAR_GEN4) + vnmc |= VNMC_EXINF_RAW8; break; case MEDIA_BUS_FMT_SBGGR10_1X10: case MEDIA_BUS_FMT_SGBRG10_1X10: From patchwork Wed Feb 19 13:48:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982244 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 788A91EFF9B; Wed, 19 Feb 2025 13:49:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972991; cv=none; b=beMwshb//skzpmL7ycdikxtAiFh2L2/a/PcDz08yv2FRC/F7xkrum7HKOYjDWhS+OL8U5EF8O+pF+etvSyYAnDjdeHV/0AdKGVcFXkrv94/giXlumfcwoDEcJpwvBJj7h3rJyAPl5dlsY6XMwBD+cvQsmR5BtczynTDTZPVuwxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972991; c=relaxed/simple; bh=cI20VEEG0Wewbxtf6yf0cY16LqWf1h8sTX2S2UouvwU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a8YHjQPKdZUGDEZUxvQuZDNL8a1uq0ikXPyhL7y3+T/LdTMj/wel++UZaO1qVPGw+wPI22MZ1Qlnev3EyIXpslp62qlskYDgZERjShg0wjxtGoB/BLThbOp+Qht49wM9wVh/X69EwlG2qJA26KVzAg+yPmAZsv2sjPdKTv9lRRA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=JDlj/oKd; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="JDlj/oKd" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8352675A; Wed, 19 Feb 2025 14:48:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972903; bh=cI20VEEG0Wewbxtf6yf0cY16LqWf1h8sTX2S2UouvwU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JDlj/oKddSHCuhVL04XS/DFPJFRTtPH51ejqCtQslYxUVM7ELJWTXz2w7exgZRHOz oE3gYRf17risCx9zT0xXbmRUAXa9b/hhVa4WNrA4g2ClZdXX8x6a5jbOllk/v73JHN UiGojk7hWvNqoIfwZWk/FLWr6Rh4iuw3Jgzileog= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:48:57 +0200 Subject: [PATCH 03/18] media: rcar-vin: Fix RAW10 Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-3-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=2869; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=cI20VEEG0Wewbxtf6yf0cY16LqWf1h8sTX2S2UouvwU=; b=owEBbAKT/ZANAwAIAfo9qoy8lh71AcsmYgBnteFwUn2vdNxe2ESg8YkBy7AHTJAjWcqWqcbcK O2Z3lBuHz2JAjIEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcAAKCRD6PaqMvJYe 9fHkD/QMLIzJRx1BRcxckphx+wWzfnm2pU5vZUhkWGkE+DJ5K1fAnEpfMV4QLGpoWW9eKhrmGPx +tlmpW9mwKaL4Uelvr108CcIOdPTa7GggbWKpaxivJ4/Img6Xq+kHfXnEFNEEqHxeZ6nX22dcNq zR9fYskfXx2pdQaeVJZZhC2VJzz5DIVRW0EGJWYlqRpoRPFQPqJHEOFKv9oKCGVLQMA8XO/gLah 0ruFoNcnN9IflDZsdTregkF6ZAdW6d4mnAQTZoyp+4RmNInnCFNbJone0zsMXX+Ux0gXrPi5tyS l5CpdVsw6d2wFnZUfjV7AUV0V5YQaLulRd9XeNSWRndPY9e+10H10soF0jySZAbKK1kmOopa3OU DQ/rSbUZzI2rOfKQgArf6VdFn7NNGWmjFvelUCRAxNa+okdCuBZNKY84aYXQtpXqM5tU8c65zkQ K/RxMUrWUYWTUVjyDZgRKAGCqK5FWi/96XFnhIE+/GMC1bg+NFAHRlya4y9oZXV2ZKsfS/K/PJS oX0+371dIBEiqVzP5NeTwSGDHMfX00zznVeqe3BRPFBwnNs2gaWACgGw4JBqLG+4DYa+f7x/xEn bGcQtOgrQ3fjxUvAbCh4s9b/XEWT6gmi+2p1SvkUycqdfNX4tk5qMrkVmyCJ8VGZQHlxwNtmVte eF2eP5UxhsNlm X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Fix the following to get RAW10 formats working: In rvin_formats, the bpp is set to 4 for RAW10. As VIN unpacks RAW10 to 16-bit containers, the bpp should be 2. Don't set VNDMR_YC_THR to the VNDMR register. The YC_THR is "YC Data Through Mode", used for YUV formats and should not be set for RAW10. Fix the check related to the RGB666 format and CSI-2 mode. The VNMC_INF_RGB666 define is the same as used for RAW10 on Gen4, and RAW10 is allowed on CSI-2 (whereas RGB666 is not allowed on Gen3 on CSI-2). This feels a bit hacky, though, and the formats should really have been verified already earlier. Fixes: 1b7e7240eaf3 ("media: rcar-vin: Add support for RAW10") Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 9 +++++++-- drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c index bbdff7aed9e2..00629acc6404 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c @@ -829,12 +829,17 @@ static int rvin_setup(struct rvin_dev *vin) case VNMC_INF_YUV8_BT656: case VNMC_INF_YUV10_BT656: case VNMC_INF_YUV16: - case VNMC_INF_RGB666: if (!rvin_remote_is_parallel(vin)) { vin_err(vin, "Invalid setting in MIPI CSI2\n"); return -EINVAL; } break; + case VNMC_INF_RGB666: + if (vin->info->model == RCAR_GEN3 && !rvin_remote_is_parallel(vin)) { + vin_err(vin, "Invalid setting in MIPI CSI2\n"); + return -EINVAL; + } + break; case VNMC_INF_RAW8: if (rvin_remote_is_parallel(vin)) { vin_err(vin, "Invalid setting in Digital Pins\n"); @@ -931,7 +936,7 @@ static int rvin_setup(struct rvin_dev *vin) case V4L2_PIX_FMT_SGBRG10: case V4L2_PIX_FMT_SGRBG10: case V4L2_PIX_FMT_SRGGB10: - dmr = VNDMR_RMODE_RAW10 | VNDMR_YC_THR; + dmr = VNDMR_RMODE_RAW10; break; default: vin_err(vin, "Invalid pixelformat (0x%x)\n", diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c b/drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c index a1b74be33ab2..591f1a4d3595 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c @@ -88,19 +88,19 @@ static const struct rvin_video_format rvin_formats[] = { }, { .fourcc = V4L2_PIX_FMT_SBGGR10, - .bpp = 4, + .bpp = 2, }, { .fourcc = V4L2_PIX_FMT_SGBRG10, - .bpp = 4, + .bpp = 2, }, { .fourcc = V4L2_PIX_FMT_SGRBG10, - .bpp = 4, + .bpp = 2, }, { .fourcc = V4L2_PIX_FMT_SRGGB10, - .bpp = 4, + .bpp = 2, }, }; From patchwork Wed Feb 19 13:48:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982245 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C71971F3B97; Wed, 19 Feb 2025 13:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972994; cv=none; b=SE/oPdT+LzfrCX/zYx/xdRf7ErltZhzBgXoI5xHVi5gonl++4KGb9TcF9I87bumggoxiBuHyJHWkRWsrJPvDDHUg6ID/Kik4vIDzk9JWqjWCfji6LaZTjzTNFsgn61TO4VZjw44zaRSLll6chd5zDhA9tb7iNy185D1gV88Ew4A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972994; c=relaxed/simple; bh=AZEcPeUrIUmHg/tQUpkh5f/1BH5qdAk4lHVIl65W08U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pTDq3ohO0Dz4oHC3B6cNYAVW9vNgkwGBXNDQgrMCWxhmmGyB1T1kmQT4Q6xyJLjAgR+hnQ9U/WablLoaf2J82zYtrXLarmIqR/zK2xThck7WNLjS22a99BFL1txK2sC8LHxXzcHZ0RjchiN04/Pf2v0Nh+h9n/voKtGOwUb58C4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=Xdi1nL/R; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Xdi1nL/R" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4001ABEB; Wed, 19 Feb 2025 14:48:23 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972903; bh=AZEcPeUrIUmHg/tQUpkh5f/1BH5qdAk4lHVIl65W08U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Xdi1nL/RKSEk/nqqim4wRzrgugPadkCJ+Mcbn4tOVDIrvMQvUW2o2KiFKnN/zRbmn mRzoTfpyOWgU5QFtKC8Ed+njbLkzlisCdD2GyO4Wejjt/svfGT3zzbdm1zTswgbdCP GSPHuvWctcJTT7y028lbH2+pFpU2Z4C89Tt2BKrU= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:48:58 +0200 Subject: [PATCH 04/18] media: rcar-isp: Improve ISPPROCMODE_DT_PROC_MODE_VC Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-4-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1822; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=AZEcPeUrIUmHg/tQUpkh5f/1BH5qdAk4lHVIl65W08U=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFxAFlpn2XnBz6BFA1jJX6MMP+JSvTLFATK8 hbkY9D0X2iJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcQAKCRD6PaqMvJYe 9RgqEACmisnqpyHDD1GuGBYkPApeLbk4xuVfsQRA3kMj5HtSjw/7LywTOWqiXFhlYngiCKbrnSx LH4YelT+XCJMRl5jytMRKgDTC1jgeyM2IvleEeCLJt3p0ebNMX8pBwl+Ae8XnlQfurLZ6TXm86K TYI0XQsoscVtvEkl4NtIvNgy2HwxoAbUACJIKxUesEgQtHCXUDMAFqkXW8qPcKihC8YkJADXEZg bKci2oQwzI0svlSkXI07VJ1cBLulRDLddbHWX+CbHkxCuwvIhedQnDhn/cywTmUng0ym0U6Z5DR oMqeGj+50aD07huaKI7o4t8WyLCayp62roiP6v2ADTmlpFwXvywOD4Ql/4v/850IsEPSRIA3MEf OPvAyS6bnRuY/TghJHZ/VIGleZcuE6Vw5p8X4jOprA6EtrbsedFeoFHjbQmQZEkC+csXIY/q0Qu BPn+PsdV17uMJNGuV+NkqStsIiTRd2FoLiNEBpmW2iEtVRTP+XwEDqBeLt3gUBNZ6+pCVSHA2u6 jezS1FXEaWNr2gOKjmz0XmZ+Yx9NQu8rFHj8ZQszCEAJGAAbDza5s6beeF6Fa3Dw2rjswM0KyZl PsUSVQQdMWB47aMq1anTbXjCQ172pE7usp5WexQl9qr3Fy/zBHgZ5fPvMYkKvxiIBbb1CV63NMr EaBm2nxfrp0TOBg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Instead of having four macros for ISPPROCMODE_DT_PROC_MODE_VC[0123](pm), have just one ISPPROCMODE_DT_PROC_MODE_VCn(vc, pm). Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp.c b/drivers/media/platform/renesas/rcar-isp.c index 4bc89d4757fa..46534a479201 100644 --- a/drivers/media/platform/renesas/rcar-isp.c +++ b/drivers/media/platform/renesas/rcar-isp.c @@ -28,10 +28,7 @@ #define ISPSTART_STOP 0x0000 #define ISPPROCMODE_DT_REG(n) (0x1100 + (0x4 * (n))) -#define ISPPROCMODE_DT_PROC_MODE_VC3(pm) (((pm) & 0x3f) << 24) -#define ISPPROCMODE_DT_PROC_MODE_VC2(pm) (((pm) & 0x3f) << 16) -#define ISPPROCMODE_DT_PROC_MODE_VC1(pm) (((pm) & 0x3f) << 8) -#define ISPPROCMODE_DT_PROC_MODE_VC0(pm) ((pm) & 0x3f) +#define ISPPROCMODE_DT_PROC_MODE_VCn(vc, pm) (((pm) & 0x3f) << (8 * (vc))) #define ISPCS_FILTER_ID_CH_REG(n) (0x3000 + (0x0100 * (n))) @@ -263,10 +260,10 @@ static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) /* Setup processing method. */ risp_write(isp, ISPPROCMODE_DT_REG(format->datatype), - ISPPROCMODE_DT_PROC_MODE_VC3(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC2(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC1(format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VC0(format->procmode)); + ISPPROCMODE_DT_PROC_MODE_VCn(3, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(2, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(1, format->procmode) | + ISPPROCMODE_DT_PROC_MODE_VCn(0, format->procmode)); /* Start ISP. */ risp_write(isp, ISPSTART_REG, ISPSTART_START); From patchwork Wed Feb 19 13:48:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982246 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C711B1F3B96; Wed, 19 Feb 2025 13:49:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972994; cv=none; b=JVJwszgNrI8+RI1dsonefHzJtwc0QBNiYuHMi8QV9N4P1Jylxk2vGP0MBXKBaZpg8bmwAtlGWIEqgI+xT1kD9FVFA/SP5XEfHwHSe8JtCSNFB3pM/73f0QxGDJB/P7RxFwes/MRM++b13ekKjm8ZLU3YmXlCSWB3s+pKC3CsB10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972994; c=relaxed/simple; bh=bAh1et3ubU3RR5o1IhFws7s0RctF///TjTdS3EPINR8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oLwJ+W22DDclWZotiBMiCwaoz1+ZSEH/xr1BfjwUPO9ZSKqaROFXZo4nPpnsBPuoCBqHZv8tswGMNWo9viJa9IHjoWbW1K5gSo7Y8OQ0pirtf8uKf+HPThu2hqnSng4n/wN+niLx8iCaQqhWd2PzRedCxinjv5NLG4/4+uUCEOU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=BabW0SCV; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="BabW0SCV" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id F23FCD21; Wed, 19 Feb 2025 14:48:23 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972904; bh=bAh1et3ubU3RR5o1IhFws7s0RctF///TjTdS3EPINR8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BabW0SCVyQOFe4TQwfYsMFxOfkFFa2w8Ts2Fkt/wDMzAKQ5wzU7DhbE3LXjx7hw2M mivonXIQOKVWv7JObJJvjWBxOnV/yRZGIjL+KY25Dbeh7o4BvgF1GHotQtvHWagLs1 u18BHUK2eMRrqQw6IfAvjhGZdh8fVnN+Ot6gM468= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:48:59 +0200 Subject: [PATCH 05/18] media: rcar-isp: Move {enable|disable}_streams() calls Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-5-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1795; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=bAh1et3ubU3RR5o1IhFws7s0RctF///TjTdS3EPINR8=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFx4eXYetGbYwLQyFQy/GbZOOCC92+Js0WUL tB2dgK7Td6JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcQAKCRD6PaqMvJYe 9UQKD/0VuzwdREumypkCBpxCGGsk960IvdU3uEEB9G/Uq8pGiyZOpKuGFairOvZP95PfMpa+qV8 CA1AFb36LUzYnEG/ecxok6G5qIv3nP7G2Qjmbs7TVULV9xvsyF9UDpTjdJN0AfbIcgX5W1/rG+s 3RND8PFIttALGGo7kLdcjI1ndN6rbPTH7d7/xF+opvzud52A+xHtNcGuYjkLsWJCIgqQgvZlQaK TL7gX3l/SXqB+Bw3m1wAMleqcyRQjE/RuMT5Jpc1GUSLz62voKC0io4ypFzTKlxszPtymAUA6yc vHeope2SCFW5pwvqkyRCRocG/XUATNXDzSp1DJ+H8FcoZpumG/RncY7fAG04+Nh1kK+W2qV2+Ut auWXrAAd/zi1BhjGhWf/EDDg0msi3qU256dayKGdGjUhlhBbt6d5FmkgtLe2T2k1e6QZ2j3jdBD 6dRIDTyvyChB+pZtaqb6g+N53ewNa+dc/UzT+61tGJzi8bmJN3MFzi+N9nByol63WGToVgtZ3P6 GM8mh2nmz7Au5J/oZWcPOOySrKmuNkcyQ1HeKCEwefi/N/5GErumKStIQwoqjGZBdthaAIlgBNb dCrkLKhUKv24cs0hi6qfVM14xjmurPA/21+zhxosZJxC2tHnTgtIasz7FGTO+d0ML3MbwLk2IIw E6nHdA19hV1utYw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With multiple streams the operation to enable the ISP hardware and to call {enable|disable}_streams() on upstream subdev will need to be handled separately. Prepare for that by moving {enable|disable}_streams() calls out from risp_start() and risp_stop(). Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp.c b/drivers/media/platform/renesas/rcar-isp.c index 46534a479201..8e222c9ec604 100644 --- a/drivers/media/platform/renesas/rcar-isp.c +++ b/drivers/media/platform/renesas/rcar-isp.c @@ -268,18 +268,11 @@ static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) /* Start ISP. */ risp_write(isp, ISPSTART_REG, ISPSTART_START); - ret = v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, - BIT_ULL(0)); - if (ret) - risp_power_off(isp); - - return ret; + return 0; } static void risp_stop(struct rcar_isp *isp) { - v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); - /* Stop ISP. */ risp_write(isp, ISPSTART_REG, ISPSTART_STOP); @@ -305,6 +298,13 @@ static int risp_enable_streams(struct v4l2_subdev *sd, return ret; } + ret = v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, + BIT_ULL(0)); + if (ret) { + risp_stop(isp); + return ret; + } + isp->stream_count += 1; return ret; @@ -322,6 +322,8 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; + v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); + if (isp->stream_count == 1) risp_stop(isp); From patchwork Wed Feb 19 13:49:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982248 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E96D1F4176; Wed, 19 Feb 2025 13:49:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972997; cv=none; b=VjUNhWfiCnfkpW5ik/UfAH1Q4OgRXUfLMgE2FvlMirMCHLc3HiHD1BBdAXnN2KaNxkL2wQuyBDLUm6sHLJutKtDz8l5jrX0YoDgYdbCQkqz5TezXvLVJboDE9NyVRysRTpd+dMnfYlvghF69meBcomz9Rg9qTve+as7VSbdfGZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972997; c=relaxed/simple; bh=xFvCyhRSDHkL00smllyvHTMBcw/7LCqO1172ZwdpHWE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nZZfeH94lNt8cB8m7K/yE7n0JqvW12+xCFoOg8fMDmnUV14hnAPn/Bme0OVkaFhTiY/EP2yDqgTSheSUY1PT00GS6Trtj0Z+/QLrp8nh1G29KNngNo+rYNqpPRutSGLAHUt983MENzTTbac28MBkj3+acAuNL6NFy9c/8qX/0Pk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=Z4E2rmpQ; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Z4E2rmpQ" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id AF61211B3; Wed, 19 Feb 2025 14:48:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972905; bh=xFvCyhRSDHkL00smllyvHTMBcw/7LCqO1172ZwdpHWE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Z4E2rmpQsJgeZz0sstaPt+XjDX0u7LhxVd+AOYfk1tScu91VbKCn1nPNX6yMbF9DU jPcQSrYp1Tl927hoWT0anywzKb9zuj1pfxOBs326wgqkt7xswj8XjAyAB5bB1+z57e /DfTjWJmFPDDo6wQGN52tCZYRMgoXv93L9ojkbJ0= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:00 +0200 Subject: [PATCH 06/18] media: rcar-csi2: Move {enable|disable}_streams() calls Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-6-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1818; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=xFvCyhRSDHkL00smllyvHTMBcw/7LCqO1172ZwdpHWE=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFxstggz+FhA/AuDZJ0J+pm2IjeTGBY7xGNX hwQ8Zv/S+uJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcQAKCRD6PaqMvJYe 9WQfD/90d5oD1SIcCjjCizz8EpGSwfM27a1R5FH9LYIVujieO/qHqwEjfqDrR80Mp3HLixu55Wx htY89iOG6xTRLvcaEswBT9ZCzd0/3dOdAj6muS3/kA+Az6ACS3+JPBuUYMtH5Dby2yuD4uLKY8+ HEVYm9ZbX/J/+kx+scaaXqacJpQ+HFVms47I4iBam2nIbPWgr6izgPO4bk0O43rspClsSMoNeYX h+Y4t/oB3cyUDdOV6uYUNTgtIIFd4uIKqtvCBZySaFfGFrRxYLruA3VixLFkqI3QrFFWWlN8Hu8 UFTVmQtKDmTRPF3H4SzF9NQVe4J9ZO9KrWnmT7BXKjB3y/b+zXnYp3D17kLxu/pWlM2jEFWa1e5 UqkYpEnMhcocsPmdkb/F8DJykU2asRKGczc0KvtrmCy6ppSoNIR/LUqQvb69CtlxXSuENEeRZK2 z4/4QSrrcXGXpD5hT3QBrRTP52sZS2rDmeqgp4I2wC2aJOv5+CJrg+6E4+MMquMOmKHFM7E1ZJL 3KJZU4EFwAcf0frPOUTSrkaYMGyDvRgKVUBxdHZrZEJ8oB6IWO24NOf1/83OS6O/rv7mwlccnip 8RPgymbw2BcGL1XDaakVfQSSexz+b9zPSOAB9KW+o8slRcupZ9zz6PU5FMF/v1PtFAQsioNBIcu xZ45wbjfl+nHAwg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With multiple streams the operation to enable the CSI-2 hardware and to call {enable|disable}_streams() on upstream subdev will need to be handled separately. Prepare for that by moving {enable|disable}_streams() calls out from rcsi2_start() and rcsi2_stop(). Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 9979de4f6ef1..845fb3e155f1 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1571,20 +1571,12 @@ static int rcsi2_start(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) return ret; } - ret = v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, - BIT_ULL(0)); - if (ret) { - rcsi2_enter_standby(priv); - return ret; - } - return 0; } static void rcsi2_stop(struct rcar_csi2 *priv) { rcsi2_enter_standby(priv); - v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); } static int rcsi2_enable_streams(struct v4l2_subdev *sd, @@ -1606,6 +1598,13 @@ static int rcsi2_enable_streams(struct v4l2_subdev *sd, return ret; } + ret = v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, + BIT_ULL(0)); + if (ret) { + rcsi2_stop(priv); + return ret; + } + priv->stream_count += 1; return ret; @@ -1627,6 +1626,8 @@ static int rcsi2_disable_streams(struct v4l2_subdev *sd, if (priv->stream_count == 1) rcsi2_stop(priv); + v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); + priv->stream_count -= 1; return ret; From patchwork Wed Feb 19 13:49:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982247 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C53C11EB184; Wed, 19 Feb 2025 13:49:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972997; cv=none; b=V/dDV8Tv2dvmgwwoNgNPqLSsv/EO7eaVxlHgqsuH0s7aTxr9L9ezn+D3di38xNDxTowFdZeleJx17EGTLKwyAt+RQKJYoxt8JVzHeCRzsngFBIIrYW7/7O40go/YjoVkvBjy7ENCdaRJl222P0OPGqsu4g//KGhowslNKKO4Wrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739972997; c=relaxed/simple; bh=ePInWZswxQnSaLKmHVVpKwsATVLBmrczu3ZBpYlw44Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YgBcO6NOwoOXY2FDfGhVJmFrzYQYaRbdTi1mHM5ffbG9Rj0tH2y/uOozAkubVXSYzRVPXmNW+H9iG7O42ctrd0yIbpBmbGlsvkcoITWJd0PYWRq8Ak2/hbXeQWupyaej9/BcXCPcnPaWZM68nDMip9uq+6s9DuDhjwKwp7q+mRs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=FL2RRBUk; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="FL2RRBUk" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6D3D713E2; Wed, 19 Feb 2025 14:48:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972906; bh=ePInWZswxQnSaLKmHVVpKwsATVLBmrczu3ZBpYlw44Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FL2RRBUk1GLAl+iT0MRGO+WXCOulsi/6qzbO2YD2vEaoDru72b+SA15gCKJM6OMVt X1s1RP3pyrSJirXZ4Ch5/DFz7bADOBLvZuuNMKJQz6+sqKCsKi9VfdCip/bcfLbeJz 08GmtdbOcfgfqfO6Cb65kgXHPquRlEwrhzNI7oGU= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:01 +0200 Subject: [PATCH 07/18] media: rcar-csi2: Fix typo Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-7-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1446; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=ePInWZswxQnSaLKmHVVpKwsATVLBmrczu3ZBpYlw44Q=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFyQImVhcQz/A/9tqJdqiSEq3t8qnXOubnLO cYH6VCLieiJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcgAKCRD6PaqMvJYe 9QwgEACUoQ/DNCqQm8DsHidCyPTo5JTNRM+YWkBDShJyjLJIIHQm9KAbQzkMDG8c2G5OOWLx5Jh pCw/iTnxWaP2UTeBYAId0TY9twAEZF4r3nYlardAQ85pQtcurd+Vhk8/TxzbiN+xcQqK5+yb8Z/ 3lWpgWiQQFonYDdaY+TZWvMLLzLzcRm8Qi1EuSOpcldM6R+4cl0CmmplAJlE9h+aLczWfrgNVgU HdpTm59yL+QsPbkTr0/JC+e1boAtMEWBkMEZRWkgg7LnKCeWPVEeggAc95Hxk6u0ZYPxjmw+iJW e0xeTO+0OziP6FwQBjV92XZy8hbGuEll+Xvn1m0a8xwD7RTpDeJDVisrQheb5+6EX9qSHK7pxne 9otpohLUhQN/CQ2+rsgNwoMpcSykvHEQgj9SMsXkp3bDjN3cpLRvGwKdn77RCuJPVl+4aMdclmo tXGFKHYVh/m4KD2gNfOydxk7NCHyQYr+AO+t5QYb/du7dcGZRU+gtgxq5K9URU9NTu7Wk9HTSJ5 KMT87LUkZ0jCYWJ+LcRlUJsQBi1PtkVdhCjOp/jPp2ZEfN5cJ/xosFFW1Od+AtXQjQvrmt2RHrE yFTbdlD7/1GnV+Tv+dFhI/ZU9g4DcFwMSr9uiA1/YKI+za0aaJqqrK3cjwBNAmvardI/TpZNOeH IoQBSP3E2oM5d9A== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Fix typo with variable name 'msps'. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 845fb3e155f1..92697ea3df01 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1301,7 +1301,7 @@ static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv, const struct rcar_csi2_format *format; const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; - int msps; + int mbps; int ret; /* Use the format on the sink pad to compute the receiver config. */ @@ -1314,9 +1314,9 @@ static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv, if (ret) return ret; - msps = rcsi2_calc_mbps(priv, format->bpp, lanes); - if (msps < 0) - return msps; + mbps = rcsi2_calc_mbps(priv, format->bpp, lanes); + if (mbps < 0) + return mbps; /* Reset LINK and PHY*/ rcsi2_write(priv, V4H_CSI2_RESETN_REG, 0); @@ -1352,7 +1352,7 @@ static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv, rcsi2_write16(priv, V4H_PPI_RW_COMMON_CFG_REG, 0x0003); /* C-PHY settings */ - ret = rcsi2_c_phy_setting_v4h(priv, msps); + ret = rcsi2_c_phy_setting_v4h(priv, mbps); if (ret) return ret; From patchwork Wed Feb 19 13:49:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982250 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 135641F4629; Wed, 19 Feb 2025 13:49:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973000; cv=none; b=kbaFtq/y6DvXA7yzjCHL6MBG0T2oXCfYrj1FOVmtYFaKpZmot+Y7wUHANDGqGF3Lx0GoAhrcwcUkcc9PDwhxV0xqDa14x4YRowc0a59ySyoY9mW+ctuY+48vvsk2Ge8bv0889/8kPzodZFqJrR/PggY9inBNa07JNzXlamQVXJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973000; c=relaxed/simple; bh=Wik3MCT/8mMmWyYgUU93n7+wbTYPLNdfK0ZB/R1V7H4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rDfpEpSDaDnRoIScK5f1NSsxHF8TjUapAAD0x3I4SaHKpTNC/IP5xGIqqLyhr0/d5U3oMU64luao0v6/Jes5Fttwli6r0SweQgDsY0xRwCdzmiGdJmIdqbgUPGoxNvR2WBMEuZb0AG/fArvziFpNC2NKDVozViqCe7HHnVa5d8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=rAhzs1jK; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="rAhzs1jK" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3779E1934; Wed, 19 Feb 2025 14:48:26 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972906; bh=Wik3MCT/8mMmWyYgUU93n7+wbTYPLNdfK0ZB/R1V7H4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rAhzs1jKVzse1tqVdR+4E5XKEL8u5eeJp7Z5LZc2M47KTnZzKQcdrbyCBWQgbjqkD bhx5tU+tvUV5ods+JLv7bH7ZUE5UfUYX8ScTNCLTfCj/l2omxYWbzv+N1tZrX9ecZB rmrJ9focZsGvyQIf7cnLOhFsHHSj28R17FEZJ5mM= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:02 +0200 Subject: [PATCH 08/18] media: rcar-csi2: Move rcar2_calc_mbps() Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-8-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=2232; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=Wik3MCT/8mMmWyYgUU93n7+wbTYPLNdfK0ZB/R1V7H4=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFyMO1BKh2HE+YUW0FWd5kQ4NKSH/KOsrGyY VISgO9perGJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcgAKCRD6PaqMvJYe 9cstD/sGpAGbbMhxLdUmNX3XbgcyeSXfEzYy2uSnnoy131xN8jdlkEfa9wwes0fRvLgoOF+s3pi sprq1cdoLwRbJLvVa/Cg6y1l+JWV6EnhJrd9X+eG5vXOnFktaYjeBOVZxQnUXNjnhEhhDnNGhrW mn74+5nzp9pvidOGmOG2+NMvFhQqopBNA7Ol9v1cwBJOUxqOPcqY16yfIW/9DkFseGdJhHoe2Ip 9fzTeZySUbzczLtrZv0aHgHaEjP6OcyayDs/9nkryNReNwWwC5ywOdVHd3nuO9nwt4AjgnRRLLA H0hvNxRm7fQKgDFfvLgPw47cznY7JYCaDeXeRRLJSmEzFOMlgBVbkdylzzD+ivj5WPBu8SdULP7 gsuqOLh7BWpAFFOy87XGDqGRgs9fW8z0TfdFBaN17Wcs7XiutwxVjekA3Pxa1AO36Mvr0lLXAgx xSGLLf5u19r4rnVtEf+hf9Zp+ZptrzUfjVoVnKyb/QYzVx4azcmjbKFXjNbP8omMv/zNnF+UFyT PG+6vxRilfFDexC0kDZCIP36LO5eFAQx/GDFH53EwMa/zCpw+0QIkimse7sZnSL0/aQ7H5IuKPX B+gznYDr9XkCYRdCvoa0SsqcI40XVHoWAnrkwLVzMCnApwaCAmH3//9RkpHrlrk7i8TeE2m6rrJ 921TFGqHqFMJsqw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Move the function so that it can call rcsi2_get_active_lanes() in the following patch. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 62 +++++++++++++++--------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 92697ea3df01..8de0f88aca61 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -951,37 +951,6 @@ static int rcsi2_set_phypll(struct rcar_csi2 *priv, unsigned int mbps) return 0; } -static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, - unsigned int lanes) -{ - struct v4l2_subdev *source; - s64 freq; - u64 mbps; - - if (!priv->remote) - return -ENODEV; - - source = priv->remote; - - freq = v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes); - if (freq < 0) { - int ret = (int)freq; - - dev_err(priv->dev, "failed to get link freq for %s: %d\n", - source->name, ret); - - return ret; - } - - mbps = div_u64(freq * 2, MEGA); - - /* Adjust for C-PHY, divide by 2.8. */ - if (priv->cphy) - mbps = div_u64(mbps * 5, 14); - - return mbps; -} - static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, unsigned int *lanes) { @@ -1029,6 +998,37 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, return 0; } +static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, + unsigned int lanes) +{ + struct v4l2_subdev *source; + s64 freq; + u64 mbps; + + if (!priv->remote) + return -ENODEV; + + source = priv->remote; + + freq = v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes); + if (freq < 0) { + int ret = (int)freq; + + dev_err(priv->dev, "failed to get link freq for %s: %d\n", + source->name, ret); + + return ret; + } + + mbps = div_u64(freq * 2, MEGA); + + /* Adjust for C-PHY, divide by 2.8. */ + if (priv->cphy) + mbps = div_u64(mbps * 5, 14); + + return mbps; +} + static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { From patchwork Wed Feb 19 13:49:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982249 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BD551F4628; Wed, 19 Feb 2025 13:49:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973000; cv=none; b=XgeFSJ1yG1PIwA2B/E3pVgxOviSPX5DBz4zZJpYQN5pjUcDLKuj2IedDXWvtVEhUqnH9jz+uOuE+CvIGqFRr3Q9bQWMqXDS6aUteh36cASdTxeDEp276w2FXWWGmVMvTDw5v1yrfl9qkBCrCiPigXmNlDy/1Ukw6jPF11LfIfYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973000; c=relaxed/simple; bh=eUsO9jmJhoqRME33BAeDwGxOQbvR7uX22YuUt/KjcIM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r0CysHYIY2lbXZf048C/EFQKJZvE7mqmWHDxusFvNnQ2F/tdfVB+U7P/z+FxlxLdXLHJsKZu/h9Z2/iMi8SHCHXFfGQ8B6GIKcWu+bY8+qQg1otWJE7b+FgbRfW3RydlkojOcNg7ik3U3tFEamlnydG6XitX9dT82TgxkU+z46c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=aeFwpwwo; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="aeFwpwwo" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EAE37169; Wed, 19 Feb 2025 14:48:26 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972907; bh=eUsO9jmJhoqRME33BAeDwGxOQbvR7uX22YuUt/KjcIM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=aeFwpwwocaQqI2rUrmJmn7qch1BPhvfy0cE5dFz9xXJpocltrysStbBkWRkQpfhfs /EkW2hm430jWdReomqr8s6bwO+oWUpEe6+mZX8+Kk7D5ZRQLpmnt6EFP1YKXqap7Nq gHyzur/srg5PjwGRZ/W6IXf5/d6RG/Fx6FRosE8o= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:03 +0200 Subject: [PATCH 09/18] media: rcar-csi2: Simplify rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-9-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=3426; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=eUsO9jmJhoqRME33BAeDwGxOQbvR7uX22YuUt/KjcIM=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFyDYIGr14/Ao5iFLLyHR/fbjbYiGdShW5nX BOBIziSYg2JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcgAKCRD6PaqMvJYe 9agrD/wJ+VRUDklmTGUUNM4PQF8VyMSKujUadIAX1DIQ+klFAsvD+gMFwuK/B20t4bpJrsKP4LD czFAKXQTA06DcIz7IM42LSgCyK5Pdjtww5eJLugUn9pjruOiw1qTxcCzZkbDhEOkm8b9J+f2+Oa nJMfqiYyxyKp5UazZc25op/DVJ5NREEebKal7ikpqDzeYGRy1OX818jHwlOgxuXeQ8PQsJaaL80 QrTM4nuBB02IDsekfboy8P6NqRNrZY9RAb0J8TfmXNWfWK7QnCwpKopt6oxp4DMJyLiVv8feGGh ZaY6LZ3xaaApFk6qGS++37eydQijWPtxPwI86E9sLzYEdNMLYdxC37lNCbIp3dYxT0J3O9AukfH pZCuqKULFIy8y3snJCssSLQ9EQPxr+Vet5rmP97bZYNanV1lwPr9y/Zd54VttNQ4RdxacsMi9Lo HKt30LopSZI7EUJ1Tjui8lLc6+h9/JY3CyCS51s3RX5JcrVjBx1f1I6Au4McMjjja/X6/0MM2ma Yex1pV66+PBzCsPK5QIjt2kjWLUmDHhOE5DzvQQqJYBfXh7bUbsNMLvM1V6+/lfD4Ta6WPz1Bwd HB5p+dKBLqu1JwnJutzK6qXsjGR9dnMp2MJCal8kE8fhudlTUZRitnbWZUgOUAwl+3jjg2MjdA3 JzAbUw5wKApulmg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Instead of taking the bpp and the number of lanes as parameters to rcsi2_calc_mbps(), change the function to get those parameters inside the function. This centralizes the code a bit and makes it easier to add streams support. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 45 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 8de0f88aca61..f8b581e10886 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -998,18 +998,37 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, return 0; } -static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp, - unsigned int lanes) +static int rcsi2_calc_mbps(struct rcar_csi2 *priv, + struct v4l2_subdev_state *state) { + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; struct v4l2_subdev *source; + unsigned int lanes; + unsigned int bpp; s64 freq; u64 mbps; + int ret; if (!priv->remote) return -ENODEV; source = priv->remote; + ret = rcsi2_get_active_lanes(priv, &lanes); + if (ret) + return ret; + + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + if (!fmt) + return -EINVAL; + + format = rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; + + bpp = format->bpp; + freq = v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes); if (freq < 0) { int ret = (int)freq; @@ -1090,7 +1109,7 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, phycnt = PHYCNT_ENABLECLK; phycnt |= (1 << lanes) - 1; - mbps = rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps = rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; @@ -1298,23 +1317,15 @@ static int rcsi2_c_phy_setting_v4h(struct rcar_csi2 *priv, int msps) static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; int mbps; int ret; - /* Use the format on the sink pad to compute the receiver config. */ - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - format = rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; - ret = rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; - mbps = rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps = rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; @@ -1492,23 +1503,15 @@ static int rcsi2_init_common_v4m(struct rcar_csi2 *priv, unsigned int mbps) static int rcsi2_start_receiver_v4m(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - const struct v4l2_mbus_framefmt *fmt; unsigned int lanes; int mbps; int ret; - /* Calculate parameters */ - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - format = rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; - ret = rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; - mbps = rcsi2_calc_mbps(priv, format->bpp, lanes); + mbps = rcsi2_calc_mbps(priv, state); if (mbps < 0) return mbps; From patchwork Wed Feb 19 13:49:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982251 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F26301F5837; Wed, 19 Feb 2025 13:50:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973003; cv=none; b=JCtS6caZQqd04PUWLAX3ZEik4hfKcrzG2Ei0LaMBgR6P5WyXrXUM1w0RRho9KEF5aGNiBmmxcQMGK+srPGnNsm4BRIpvBZSnXZUlOWeu91A73l6nO4tW2Rmzw5vx+TdDoyWXgkU6MAosm7k0J3i36M5PfEUGDzDO8e1RhJXdLlY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973003; c=relaxed/simple; bh=viJXLf5qesszZisZjfDfCS6B8SB7JofUtDlzQmb2wWg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e03MEB0MMkU/RVq5VBF7g5lXRzSSq5uOlfbWSG8wUg9UIK9f8yyZwVxLuB4kFgUALeahxJ74MJq9Smjt0Q9qbt6r1/H5g7sDR0ANvYSW/8vQPyTrLfngoDevVGU7HODQ1sRww8z+Y/IKS9/7LiO67WkyzOTEMehZo3egE9bIu4w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=e/MgA4NT; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="e/MgA4NT" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A974D6B5; Wed, 19 Feb 2025 14:48:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972908; bh=viJXLf5qesszZisZjfDfCS6B8SB7JofUtDlzQmb2wWg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=e/MgA4NTIEOgo09qQ8yH57zv9tZ5cJZhfOVl+oMYrNxJxtmW8jXlUK/6MMQetbsmM yyu7dHeDCOUs4peydKnuqkHQHtdgFQyLA4aTk3idkgBt43y6iBa0XWor8H7pWKwMxA 7ZK9+0agggx3dK/NBp9Na/VmkfZp/3V+0xmTr47o= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:04 +0200 Subject: [PATCH 10/18] media: rcar-csi2: Optimize rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-10-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=2170; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=viJXLf5qesszZisZjfDfCS6B8SB7JofUtDlzQmb2wWg=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFz2itzgqVD1jVMjzPHBPjeEYU16vWCtR4qw aWzFEueyayJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcwAKCRD6PaqMvJYe 9WANEACEZxzbcWF6noX7DGwaYrMe6e6FGGGy1afvEikmWWbRG/I9bT+ynbOVAAncwAIDL5IBE0f S5TYBRDiiqLjOk3OMTWRbFYAj6DWwtw7foGHnvcSeRkch861GmcxsVCdmjamVOosUR1Tc1KWpcH aeLpU1Cyi2g8HjmrlWkZ5AxUaCv8S0eM4idTi+l1TsMYlw6Z017coSrTzEfJkz3rKH7CkRWHKnp T+vrSuil1zzwAf0rANUU7GH8lR2Ehaw+tacZOabNNgPi3vxl0z8dQO7O9ZKzcwqU9rtRdUgzHq1 y5Lm5NcMZdtD+ghhwdc3JXA5UThPTLA/GKvrf0mPSF0+6DDFsVHNc+W3Lr14B71uqAmfa72FHQW cPGJ6XWCKzAGvXUnLWNPSDzW7rTQ6iJg7fpL6JahTNQ3+YDGHPdIfaMHdOyd6APpSjh9mdW3Erk dH/Wq1BdtZgy3mQpj6ACNvuIGbBaGJlR4D+odX+qlA4P2UG7hMlICEJwuY2bGy+vu3r5B/7FxHi w8/ScEmz6ymppDbltp4agzS4TuD83g5HsxESLeJqFsLQHJEvq5T5EeGCvE8ZLU6xdnGGmjGl2O/ meNGxFfz+ePXhPhc7mOjMvq28pZlzP9HsJcYHQZ7V5ZhOItsDjQGqk2YV/+nmv3/7ZQMCzTFumP i8G+bB1SbHkewqw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 With modern drivers supporting V4L2_CID_LINK_FREQ, we don't need to do any calculations based on the bpp and number of lanes when figuring out the link frequency. However, the code currently always runs code to get the bpp and number of lanes. Optimize the rcsi2_calc_mbps() so that we only do that when needed, i.e. when V4L2_CID_LINK_FREQ is not supported by the upstream subdevice. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 32 ++++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index f8b581e10886..d6d5c18b0b4c 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1001,33 +1001,39 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv, static int rcsi2_calc_mbps(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - struct v4l2_mbus_framefmt *fmt; struct v4l2_subdev *source; unsigned int lanes; unsigned int bpp; s64 freq; u64 mbps; - int ret; if (!priv->remote) return -ENODEV; source = priv->remote; - ret = rcsi2_get_active_lanes(priv, &lanes); - if (ret) - return ret; + if (v4l2_ctrl_find(source->ctrl_handler, V4L2_CID_LINK_FREQ)) { + bpp = 0; + lanes = 0; + } else { + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; + int ret; - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); - if (!fmt) - return -EINVAL; + ret = rcsi2_get_active_lanes(priv, &lanes); + if (ret) + return ret; - format = rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + if (!fmt) + return -EINVAL; + + format = rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; - bpp = format->bpp; + bpp = format->bpp; + } freq = v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes); if (freq < 0) { From patchwork Wed Feb 19 13:49:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982252 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 620451F5849; Wed, 19 Feb 2025 13:50:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973004; cv=none; b=G27niOCJ3EZvDBiS5TAKgcbC6h6+7oYN2kwi2Fue4d7ktyTf72nDvx7bpY9E/dhMr/T9WBgJFMBZjzDJoKU84h1He9/2SJVTvoA/5S1Cox5gAmh71WTvrqdgGeVnM2LVaLTKruN8sR2z9JktbgdxOyBUrAMinrglwkgHWXfKFR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973004; c=relaxed/simple; bh=JZv36af1jW5uhq9uaijH/ZEQNL7NFCncVCynBQYUP3o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X/K8dqhza/vUFNw4iVIhyjP+WiaNQ+1MhqkEUMJHpBNj5bPPwh9QOmCjlH+HiM0asna0pBBen3sBJnTXY3SwoVqL2dWSgngwdcVHbpcqmoD2rkTNl65+ZoaQH3nxHQWpxlslu/M4gQA6JsbApvGPbXnCD3xkVE1V9F23/Fkip74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=CALPf+Ej; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CALPf+Ej" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 698251349; Wed, 19 Feb 2025 14:48:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972909; bh=JZv36af1jW5uhq9uaijH/ZEQNL7NFCncVCynBQYUP3o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CALPf+Ej9dH0L76hkGAORd7E5YHtnBM7LtsAfdFoECgQ34Sj/jLa5vYLfkSOiBmSV nM4FnH9CyzHMr5wcqmRwYrRzdCDLfGaFZCTDnVgZCL4UXGPzraUIi2LO8RQoxAw9n2 UKdVRfNtCoA2syqKFUBH7J1eLotfRQzXJBjhumdE= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:05 +0200 Subject: [PATCH 11/18] media: rcar-csi2: Switch to Streams API Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-11-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=4215; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=JZv36af1jW5uhq9uaijH/ZEQNL7NFCncVCynBQYUP3o=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteFzSJMH1cGiXVYSjb23UJvk/F0Xz2gKI10je qih0J1i0y+JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhcwAKCRD6PaqMvJYe 9dzrD/9CbbAqGM8SmE4ZCZR6ejOE5N3lBvUTZoOHhnEH4xI8EbBIn9x8FkNva6vjm7GPbhHrN37 JUmUctUenKNLgAbMZ5uByW+wAPm+h0syCNqfshT4t9ZuL7GVc5eJ8sRcne2WpC9rp3OLYq9r+VK 6i/yo0QXzHnPGbD6KQkZWSH1vxaKg2H01n9Jltr/oESKwDz4EHxepdaCNGMKqBCVA0haRlg3fjY 9WeDBabKxf4OeySSq/iKUCImtxzf10oPEXWPWHobfS9ZP0xzxRrLl6ssp6n7yEFXHMvgl7xLhXh ZnfZiglbhjjlX30yqLw41NTmtl9V7LVm+UgZl7yxmCRaSWAWxMufwoc4FQdBfPxDAYuZvZPbQNs i5t3vnPSraH+ggb3FUkYhsMTXEpo/2V+0ZJsWq8o4lpQkFpkaNBNuvzjYo3SFhORtFRgDkRSGJ1 Jwt+ZF8dhkMt1wE1uwM8XOSWXprjf9TCpae1LoxmLLdEKXlvkmk8iA8smkhXoL4tv6jlAEoaX+d 2YoTA7jQ3mD0U5XEbJgt6ol3j4Mj5AXVevafat1N0J1Drm6uvjEFR5651gtVHdO2pi6UNsOGjbd WsxxfFZITwfoE6BwtLiDOoGPycsgwIq1NuTdjT7vho9ll0YDXvbfPo5yByPuttdiQzoV480vuLz 6buFPxVs4csO+JQ== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. This breaks any existing userspace which depended on the custom rcar streams implementation, but a single camera use case should continue to work. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 47 +++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index d6d5c18b0b4c..71836a9e063b 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1024,7 +1024,7 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, if (ret) return ret; - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); if (!fmt) return -EINVAL; @@ -1065,7 +1065,7 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, int mbps, ret; /* Use the format on the sink pad to compute the receiver config. */ - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK); + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); dev_dbg(priv->dev, "Input size (%ux%u%c)\n", fmt->width, fmt->height, @@ -1646,8 +1646,7 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format) { - struct rcar_csi2 *priv = sd_to_csi2(sd); - unsigned int num_pads = rcsi2_num_pads(priv); + struct v4l2_mbus_framefmt *fmt; if (format->pad > RCAR_CSI2_SINK) return v4l2_subdev_get_fmt(sd, state, format); @@ -1655,11 +1654,20 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd, if (!rcsi2_code_to_fmt(format->format.code)) format->format.code = rcar_csi2_formats[0].code; - *v4l2_subdev_state_get_format(state, format->pad) = format->format; + /* Set sink format */ + fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); + if (!fmt) + return -EINVAL; + + *fmt = format->format; + + /* Propagate to source format */ + fmt = v4l2_subdev_state_get_opposite_stream_format(state, format->pad, + format->stream); + if (!fmt) + return -EINVAL; - /* Propagate the format to the source pads. */ - for (unsigned int i = RCAR_CSI2_SOURCE_VC0; i < num_pads; i++) - *v4l2_subdev_state_get_format(state, i) = format->format; + *fmt = format->format; return 0; } @@ -1679,8 +1687,15 @@ static const struct v4l2_subdev_ops rcar_csi2_subdev_ops = { static int rcsi2_init_state(struct v4l2_subdev *sd, struct v4l2_subdev_state *state) { - struct rcar_csi2 *priv = sd_to_csi2(sd); - unsigned int num_pads = rcsi2_num_pads(priv); + static struct v4l2_subdev_route routes[] = { + { + .sink_pad = RCAR_CSI2_SINK, + .sink_stream = 0, + .source_pad = RCAR_CSI2_SOURCE_VC0, + .source_stream = 0, + .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE, + }, + }; static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt = { .width = 1920, @@ -1693,10 +1708,13 @@ static int rcsi2_init_state(struct v4l2_subdev *sd, .xfer_func = V4L2_XFER_FUNC_DEFAULT, }; - for (unsigned int i = RCAR_CSI2_SINK; i < num_pads; i++) - *v4l2_subdev_state_get_format(state, i) = rcar_csi2_default_fmt; + static const struct v4l2_subdev_krouting routing = { + .num_routes = ARRAY_SIZE(routes), + .routes = routes, + }; - return 0; + return v4l2_subdev_set_routing_with_fmt(sd, state, &routing, + &rcar_csi2_default_fmt); } static const struct v4l2_subdev_internal_ops rcar_csi2_internal_ops = { @@ -2352,7 +2370,8 @@ static int rcsi2_probe(struct platform_device *pdev) v4l2_set_subdevdata(&priv->subdev, &pdev->dev); snprintf(priv->subdev.name, sizeof(priv->subdev.name), "%s %s", KBUILD_MODNAME, dev_name(&pdev->dev)); - priv->subdev.flags = V4L2_SUBDEV_FL_HAS_DEVNODE; + priv->subdev.flags = V4L2_SUBDEV_FL_HAS_DEVNODE | + V4L2_SUBDEV_FL_STREAMS; priv->subdev.entity.function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER; priv->subdev.entity.ops = &rcar_csi2_entity_ops; From patchwork Wed Feb 19 13:49:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982254 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C0AD1F8BAF; Wed, 19 Feb 2025 13:50:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973007; cv=none; b=qo1FJAGhmCyyLsQ6D7k9c3ku2CYsikfqEPHykAgirxlmKJkdi3zDrBsfdZXjyoEeTJpTH5P3zW7vFPndvstD9AMn5oFHJsAOorlHR4r/mstWPlSB3JTUBYG5kpDJ7+dbs7TujKrfm/2uSpq5YeZ3IzsQO7pUDgKCbyvbdADMrJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973007; c=relaxed/simple; bh=m4eAQoWiz6TenXAjyN+I8pDhDV1KbKicqLmlxA8ZIe8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sXxnPcJ5dwF3NAvZBiXVTV5Zyj6hEzXmV79TGUhJEglhoc9bJfmAO9DVqVKSzcTAzFUyLe9KeQeJKsE0aV9d92nP4xkigttS3O7jB37bsElHG8Hw1lvITmQcgGnPcNmswC0Lc0vVTEx3v5QjjyeIR7ZQLTUWC8MzCR5E4MSq+Fk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=dmM1/pYd; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="dmM1/pYd" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 298E7193E; Wed, 19 Feb 2025 14:48:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972909; bh=m4eAQoWiz6TenXAjyN+I8pDhDV1KbKicqLmlxA8ZIe8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dmM1/pYd9LzPD2hBu4BNHrjVXWsK4oVD89UVBDM2nfIppNcfN//LpAPVmABLcQSq/ fFCShv647peKn+/YTstHwRmTMjo7BIbGzZw6jh+CIhQGbtoYTgjgiN6QIKXcZ6eyWC BZWjPZzryoUh9G6RrioCRxxobX57WNVjMKTE5K+Q= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:06 +0200 Subject: [PATCH 12/18] media: rcar-isp: Switch to Streams API Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-12-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=4119; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=m4eAQoWiz6TenXAjyN+I8pDhDV1KbKicqLmlxA8ZIe8=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF0BPuDAkU+raNhMcx+jc51L44Ey/A+MNFVu zfWyg/JlsaJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdAAKCRD6PaqMvJYe 9RRlEACWTyfywoNncmwtz7mPvXiDfXr4XAStp39UJ8yFdhZeqgSvjx9XbsfQozgR9WjlS+HhKE4 BDKLKcvYCuMGV74k0hvmcclxBDeHZ4XJNpYKacsz3UQfBvpUUlT4P050Evpy6nIHQUM83IVLVfa GOQzUDNtGowv5/C5QWa32nTxqzZbRQakmdcy6mS7KfSzZ5qgr/fVG4VGxaMxWdPlb8vBooSgPzp 4pNgwfGxKB2Kyekotqpihpo3cEE4f+j0A8apNC9CeVF66OO61GieUiESULDfwxTBiR34X/nNbO1 MQ1TXanB2bmteMiHxjb9dDZNmVxIH2YY8baKA4cNgxZg2PcbreULIhW3uu+FAIo2LcOZ8c74OUi bJW1yKsnlEgGmzSVY3KwK6UctzQtPmsokzvU9vgvN0GNiwLIFHxKh4NQHknxAt4mY9nWASg9cNh d5w3kICuD8LiqSAAwyXp/v5oGKQ0rHc2OyS+zg8oBCE4q01adgtbB8+6wqODm6JmeHsrmgZPzCO noLV9+4XZoz0yq0SwDKliI0NAVyjZIJe7crrjSi9warUBofTe/SgaX5yqb8A22uJaoPNsE91Gcr CaqUwMOWXQOzUSqWoZckQiPHbTcKDlLMqBVG1EeOnrYjm5WolkOBpVYN0k9WQpAEVOol6l+qADw J9HNq6AGFyxwP8Q== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Switch to Streams API with a single hardcoded route. This breaks any existing userspace which depended on the custom rcar streams implementation, but a single camera use case should continue to work. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp.c | 62 +++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp.c b/drivers/media/platform/renesas/rcar-isp.c index 8e222c9ec604..5f3fcdb7e37e 100644 --- a/drivers/media/platform/renesas/rcar-isp.c +++ b/drivers/media/platform/renesas/rcar-isp.c @@ -124,6 +124,17 @@ static const struct rcar_isp_format rcar_isp_formats[] = { }, }; +static const struct v4l2_mbus_framefmt risp_default_fmt = { + .width = 1920, + .height = 1080, + .code = MEDIA_BUS_FMT_RGB888_1X24, + .colorspace = V4L2_COLORSPACE_SRGB, + .field = V4L2_FIELD_NONE, + .ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT, + .quantization = V4L2_QUANTIZATION_DEFAULT, + .xfer_func = V4L2_XFER_FUNC_DEFAULT, +}; + static const struct rcar_isp_format *risp_code_to_fmt(unsigned int code) { unsigned int i; @@ -222,7 +233,7 @@ static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) u32 sel_csi = 0; int ret; - fmt = v4l2_subdev_state_get_format(state, RCAR_ISP_SINK); + fmt = v4l2_subdev_state_get_format(state, RCAR_ISP_SINK, 0); if (!fmt) return -EINVAL; @@ -336,7 +347,7 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, struct v4l2_subdev_format *format) { - struct v4l2_mbus_framefmt *framefmt; + struct v4l2_mbus_framefmt *fmt; if (format->pad > RCAR_ISP_SINK) return v4l2_subdev_get_fmt(sd, state, format); @@ -344,10 +355,20 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, if (!risp_code_to_fmt(format->format.code)) format->format.code = rcar_isp_formats[0].code; - for (unsigned int i = 0; i < RCAR_ISP_NUM_PADS; i++) { - framefmt = v4l2_subdev_state_get_format(state, i); - *framefmt = format->format; - } + /* Set sink format */ + fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); + if (!fmt) + return -EINVAL; + + *fmt = format->format; + + /* Propagate to source format */ + fmt = v4l2_subdev_state_get_opposite_stream_format(state, format->pad, + format->stream); + if (!fmt) + return -EINVAL; + + *fmt = format->format; return 0; } @@ -364,6 +385,32 @@ static const struct v4l2_subdev_ops rcar_isp_subdev_ops = { .pad = &risp_pad_ops, }; +static int risp_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + static struct v4l2_subdev_route routes[] = { + { + .sink_pad = RCAR_ISP_SINK, + .sink_stream = 0, + .source_pad = RCAR_ISP_PORT0, + .source_stream = 0, + .flags = V4L2_SUBDEV_ROUTE_FL_ACTIVE, + }, + }; + + static const struct v4l2_subdev_krouting routing = { + .num_routes = ARRAY_SIZE(routes), + .routes = routes, + }; + + return v4l2_subdev_set_routing_with_fmt(sd, state, &routing, + &risp_default_fmt); +} + +static const struct v4l2_subdev_internal_ops risp_internal_ops = { + .init_state = risp_init_state, +}; + /* ----------------------------------------------------------------------------- * Async handling and registration of subdevices and links */ @@ -510,11 +557,12 @@ static int risp_probe(struct platform_device *pdev) isp->subdev.owner = THIS_MODULE; isp->subdev.dev = &pdev->dev; + isp->subdev.internal_ops = &risp_internal_ops; v4l2_subdev_init(&isp->subdev, &rcar_isp_subdev_ops); v4l2_set_subdevdata(&isp->subdev, &pdev->dev); snprintf(isp->subdev.name, sizeof(isp->subdev.name), "%s %s", KBUILD_MODNAME, dev_name(&pdev->dev)); - isp->subdev.flags = V4L2_SUBDEV_FL_HAS_DEVNODE; + isp->subdev.flags = V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_STREAMS; isp->subdev.entity.function = MEDIA_ENT_F_VID_MUX; isp->subdev.entity.ops = &risp_entity_ops; From patchwork Wed Feb 19 13:49:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982253 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72E0A1F891D; Wed, 19 Feb 2025 13:50:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973006; cv=none; b=lK8BZurEBe2t85vgiCxxxkcDo9gQTafLsBYapFS6nYMWNmstzIXbW65+83K0/MU9xwhAagJxWUkG2eRgvPHKFeO7jX4ns9hWvfuu138UNRgpK5MKaMP+oFq8mWwwWcvbQSgfc5WGO8JVP+0nDZfeKWyoF+FRITZGZZ7qQYKlhak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973006; c=relaxed/simple; bh=vL1OANKaXYDEK1GHNVhZ9Igmc1X5JgHGxsFyphi/a3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IVU+Uq8r9zIdeWt06agZskRDKMkOniNh2PXgDEHPyleSoRyBmoOyWvNMEm9gjv4xMMpvlg/j8x0F6fAgb2LdG+muITxzLYAnIObbk5xQFTlOXB8CARdbaJd/djEymn28ofSDo/lmLwlyU+HizyLZ7F7q5mbFSKvL+x/j8oWn9pg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=WzMrdpWb; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="WzMrdpWb" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DD1F31980; Wed, 19 Feb 2025 14:48:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972910; bh=vL1OANKaXYDEK1GHNVhZ9Igmc1X5JgHGxsFyphi/a3s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WzMrdpWbku8/DC9r4jyDU278X5KXK52EZCzMG0dzaeIZdErMeE0ecrfnggJut7iYr 4wIurYmLHMm7YdxZl7sTKl9iBoXCpIyeqemH4Eg/vB/3vWUX++LLPJgHQuPTlekf41 +tyIMtgBDbS7p1BiSOyan/MFDVHx2bRMys/Z9hNA= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:07 +0200 Subject: [PATCH 13/18] media: rcar-csi2: Add .get_frame_desc op Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-13-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=2464; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=vL1OANKaXYDEK1GHNVhZ9Igmc1X5JgHGxsFyphi/a3s=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF0Q2QWo/N8SvBzqo71J7n0uHTDsyh8m9Otw wDqdnB3HYOJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdAAKCRD6PaqMvJYe 9XevEACnJdyamtEl7qbglLToACR/jkmcU/wPCYH/t5hDEM0+TW6zWYBGQIC7e1ndQuYk1d2ncLr pMvMbaJKWsurp0aZ061Hw51Lz1ykyHgDurg/pk7BulVybaszrCfdhrJBnCBz3FCEYD/uFg46m8J e5o6oWgDtdHxE5sqMTzoxA4gYV9x1lq/XOk1Udo9F8gB4azmlzAMYOvxg6Q8bTHQD3SW1UadV34 5f0IbzpPxFpxhdAIHx2btdKhv/Xvq7bABoaaCGn/ae9ha2mCfshReGg5o6gG7ELEZqOj61tqDR3 pbZloPmRTevpvUXrpRxQonGRjZ+Za+cwG1nWCDLgNSyJNEDnSdJwrZkNj9ye2H0jyWOWSYdZh6o 9sVj1/82/ruLNKR6eFQmpT3EwOn/+b6vfPyaoKaQjyhAFPplZyu88C1s9ZKowJJ6T4QVDhOjkWO r4pCQLhtPZLamDvpPSbS7R+sCKZVdyAfZxvNHrQFHr05yxsctK8n/jnMm5L5h1WrGWEEZQishUP RRfKKOL1dksiIcmYTcSwkw1t6HUcV5mkTfbkUwCkBu5CkESlhHjz+83KVWlaYzkOhwMtEcJO3rF lAhdy3Wp0jxNeW5Bv2VGzGIhftkqmEYfCzgKG51Yo2ESkyh7I/ZtDoJdmp607bpVDBfC9hfHGzH wIU9t2G24mrNX8Q== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add v4l2_subdev_pad_ops.get_frame_desc() implementation. We also implement a fallback for the case where the upstream subdevice does not implement .get_frame_desc. It assumes a single stream with VC = 0 and DT based on the configured stream mbus format. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 71836a9e063b..17ded37d5ca7 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1672,12 +1672,68 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd, return 0; } +static int rcsi2_get_frame_desc_fallback(struct v4l2_subdev *sd, + unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + const struct rcar_csi2_format *format; + struct v4l2_subdev_state *state; + struct v4l2_mbus_framefmt *fmt; + int ret = 0; + + state = v4l2_subdev_lock_and_get_active_state(sd); + + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + if (!fmt) { + ret = -EINVAL; + goto out; + } + + format = rcsi2_code_to_fmt(fmt->code); + if (!format) { + ret = -EINVAL; + goto out; + } + + fd->num_entries = 1; + fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2; + fd->entry[0].stream = 0; + fd->entry[0].pixelcode = fmt->code; + fd->entry[0].bus.csi2.vc = 0; + fd->entry[0].bus.csi2.dt = format->datatype; + +out: + v4l2_subdev_unlock_state(state); + + return ret; +} + +static int rcsi2_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + struct rcar_csi2 *priv = sd_to_csi2(sd); + int ret; + + if (WARN_ON(!priv->info->use_isp)) + return -ENOTTY; + + if (WARN_ON(pad != RCAR_CSI2_SOURCE_VC0)) + return -EINVAL; + + ret = v4l2_get_frame_desc_passthrough(sd, pad, fd); + if (ret == -ENOIOCTLCMD) + ret = rcsi2_get_frame_desc_fallback(sd, pad, fd); + return ret; +} + static const struct v4l2_subdev_pad_ops rcar_csi2_pad_ops = { .enable_streams = rcsi2_enable_streams, .disable_streams = rcsi2_disable_streams, .set_fmt = rcsi2_set_pad_format, .get_fmt = v4l2_subdev_get_fmt, + + .get_frame_desc = rcsi2_get_frame_desc, }; static const struct v4l2_subdev_ops rcar_csi2_subdev_ops = { From patchwork Wed Feb 19 13:49:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982255 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A16761FC7C1; Wed, 19 Feb 2025 13:50:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973010; cv=none; b=pxDO+u3HCKCFfLO/MzyNDOzi8JA46FVfIsgkCRIQOB11DGjj4+rE3XGwGnpvIVyI88U8TsHLa/BQt98ja68/tPN1dm8q/eb0qbGWDJzSfXMQxi7UuX26DXUjpQkb3SPUHLCdrCXVMDS9oAGY5433ZGsq9jOO1CZ6nYp2/yzXQ4M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973010; c=relaxed/simple; bh=AAoZrLKhCu46h4eqW0AD+WoWoaATspJrEVsuJ1Kip4g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HXN8w+kAUf52WCj/P3xySWLOReGqkev7bZxxZ2EkFltv/kR/iOxmCaekxLQFE0wcfLDYIOResglAATnlxIDbsGm/0C/r85Knt8exrxv6x8SiwdDoyCpMIrk5Zep3h0uUv+AIFQs7EcjjXLCvr7r5s+xzd02NOsda6XZrQHNbYeA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=OH3nXeXA; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="OH3nXeXA" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id A0A2E1986; Wed, 19 Feb 2025 14:48:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972911; bh=AAoZrLKhCu46h4eqW0AD+WoWoaATspJrEVsuJ1Kip4g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OH3nXeXAaNVgx9uPkqoPIJWkCJf9ESZsenmFOfG8tmL0osXVdEa/JxRfx4G9juOGo pYdRQAyjBb0+5vaQiQ9gW2WX2+gMqdUWp2QfV+Mwtwc+PANK/8d+2jpDRK2kwl6mCz sgIANGR9uOm7d0fvcUjqrOmjmYRk/39FJiowqL1E= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:08 +0200 Subject: [PATCH 14/18] media: rcar-isp: Call get_frame_desc to find out VC & DT Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-14-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=4530; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=AAoZrLKhCu46h4eqW0AD+WoWoaATspJrEVsuJ1Kip4g=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF0Se4pPB1mnuS889UKp4TxEYYL1TZt7iDK0 nMNS9CkLFSJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdAAKCRD6PaqMvJYe 9XHPD/9vJy4tUDRFXLDWzbvXqJQF1M1W8pS4me4gl6u25mVbtshAFGPBa/9foJFtJJNwLT0kL/T WnuBOBiS28Pc0DacZ+d8RGGuKNwojG23sSMaIYAZgMwX8MGIIERLe8pXM4FUvt7ZbBw+6wIMBaX vTKVdVZyssrs4Ln7y4r4R2Uw7laPOmcbXPXi0v55TobBbUX75aTtJ6bvpawYzviQdLeb4siSkHO 0Oe9YZAUAIO7HeifaVm9yIv0tHwr+ycSHEX+fh3dIpXQ8of9JX06u4oMELqq/NR8tShOG5nNyOv Qc8D/FqQTWU+T1FLH1jfPWoMN+1aYyXu1Rzg2NAWauSjzOopuEh20dZvVdcUkNER70Wrk38YtL6 VkVghVxmYzdIrOuDZN6Vm7kFoc8IS2fJS6/uWwbCYn7Qs3nImoVzXeED94sjciP60JA9hsdWfwG CFzi4m3Dr0NWQIliGGVqunW1uX6SbOGtjhjVWr3pCTFbfBK/qZKklU6/B+sobc/nnUVVeqEfdu0 FsZyyGcWbHKh/6lgEZbgDlWJrvIpSmXtoq9u+Ilqxfc4ujSy+IPmbX0xYwQTAVigETKYWIrhZqI jCorKZH11+i1S2vFxCs55/3oqaT6YWwrpVe4g+K9k73iWmPTyypXJH+6o1jXVNsM/HJFOA1qJJc xJgwFVH4Wi4TPRg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Call get_frame_desc to find out VC & DT, instead of hardcoding the VC routing and deducing the DT based on the mbus format. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp.c | 108 +++++++++++++++++++++--------- 1 file changed, 77 insertions(+), 31 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp.c b/drivers/media/platform/renesas/rcar-isp.c index 5f3fcdb7e37e..53927954ba73 100644 --- a/drivers/media/platform/renesas/rcar-isp.c +++ b/drivers/media/platform/renesas/rcar-isp.c @@ -225,24 +225,86 @@ static void risp_power_off(struct rcar_isp *isp) pm_runtime_put(isp->dev); } -static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) +static int risp_configure_routing(struct rcar_isp *isp, + struct v4l2_subdev_state *state) { - const struct v4l2_mbus_framefmt *fmt; - const struct rcar_isp_format *format; - unsigned int vc; - u32 sel_csi = 0; + struct v4l2_mbus_frame_desc source_fd; + struct v4l2_subdev_route *route; int ret; - fmt = v4l2_subdev_state_get_format(state, RCAR_ISP_SINK, 0); - if (!fmt) - return -EINVAL; + ret = v4l2_subdev_call(isp->remote, pad, get_frame_desc, + isp->remote_pad, &source_fd); + if (ret) + return ret; - format = risp_code_to_fmt(fmt->code); - if (!format) { - dev_err(isp->dev, "Unsupported bus format\n"); - return -EINVAL; + /* Clear the channel registers */ + for (unsigned int ch = 0; ch < 12; ++ch) { + risp_write(isp, ISPCS_FILTER_ID_CH_REG(ch), 0); + risp_write(isp, ISPCS_DT_CODE03_CH_REG(ch), 0); } + /* Clear the proc mode registers */ + for (unsigned int dt = 0; dt < 64; ++dt) + risp_write(isp, ISPPROCMODE_DT_REG(dt), 0); + + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc_entry *source_entry = NULL; + const struct rcar_isp_format *format; + const struct v4l2_mbus_framefmt *fmt; + unsigned int i; + u8 vc, dt, ch; + u32 v; + + for (i = 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream == route->sink_stream) { + source_entry = &source_fd.entry[i]; + break; + } + } + + if (!source_entry) { + dev_err(isp->dev, + "Failed to find stream from source frame desc\n"); + return -EPIPE; + } + + vc = source_entry->bus.csi2.vc; + dt = source_entry->bus.csi2.dt; + /* Channels 4 - 11 go to VIN */ + ch = route->source_pad - 1 + 4; + + fmt = v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); + if (!fmt) + return -EINVAL; + + format = risp_code_to_fmt(fmt->code); + if (!format) { + dev_err(isp->dev, "Unsupported bus format\n"); + return -EINVAL; + } + + /* VC Filtering */ + risp_write(isp, ISPCS_FILTER_ID_CH_REG(ch), BIT(vc)); + + /* DT Filtering */ + risp_write(isp, ISPCS_DT_CODE03_CH_REG(ch), + ISPCS_DT_CODE03_EN0 | ISPCS_DT_CODE03_DT0(dt)); + + /* Proc mode */ + v = risp_read(isp, ISPPROCMODE_DT_REG(dt)); + v |= ISPPROCMODE_DT_PROC_MODE_VCn(vc, format->procmode); + risp_write(isp, ISPPROCMODE_DT_REG(dt), v); + } + + return 0; +} + +static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) +{ + u32 sel_csi = 0; + int ret; + ret = risp_power_on(isp); if (ret) { dev_err(isp->dev, "Failed to power on ISP\n"); @@ -256,25 +318,9 @@ static int risp_start(struct rcar_isp *isp, struct v4l2_subdev_state *state) risp_write(isp, ISPINPUTSEL0_REG, risp_read(isp, ISPINPUTSEL0_REG) | sel_csi); - /* Configure Channel Selector. */ - for (vc = 0; vc < 4; vc++) { - u8 ch = vc + 4; - u8 dt = format->datatype; - - risp_write(isp, ISPCS_FILTER_ID_CH_REG(ch), BIT(vc)); - risp_write(isp, ISPCS_DT_CODE03_CH_REG(ch), - ISPCS_DT_CODE03_EN3 | ISPCS_DT_CODE03_DT3(dt) | - ISPCS_DT_CODE03_EN2 | ISPCS_DT_CODE03_DT2(dt) | - ISPCS_DT_CODE03_EN1 | ISPCS_DT_CODE03_DT1(dt) | - ISPCS_DT_CODE03_EN0 | ISPCS_DT_CODE03_DT0(dt)); - } - - /* Setup processing method. */ - risp_write(isp, ISPPROCMODE_DT_REG(format->datatype), - ISPPROCMODE_DT_PROC_MODE_VCn(3, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(2, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(1, format->procmode) | - ISPPROCMODE_DT_PROC_MODE_VCn(0, format->procmode)); + ret = risp_configure_routing(isp, state); + if (ret) + return ret; /* Start ISP. */ risp_write(isp, ISPSTART_REG, ISPSTART_START); From patchwork Wed Feb 19 13:49:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982256 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57DD31FCCE4; Wed, 19 Feb 2025 13:50:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973010; cv=none; b=ZFyrMaRDGeJshVXkJ2CaXlO2/IJN+sEALqP4kny76q4998heXK7PPXJPVzreOq35BI06CRQAqmL7KKBiESNtVH4vQPPrTGqLhtRcIxpmM/1IzYVwfp1Txav6otNIppKG54507AOAfGPeEJJVxEVP/HZ7jqC0gkpRNbw+mfA1d5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973010; c=relaxed/simple; bh=+8ateqMN21I0Gq5bsJ9NzgLNYYCHIEXxrMxyrObnok0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DO0krKtzpKZKJQA6/7ow+W97Ls1khgqiczbNgEa3z5hIS0QHRkIRVOqXgiJUqJxyP8jYncwQ9LQ0tYDekRHVfp9G9B8KDfU2aOj1a+XZTeuxBhawnTgOkpleaklFoiCezv8xZNtZGKNS7BK/GyfqT8HLYpTpuqkJoYPqSsPtbX8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=PY5rLgbN; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="PY5rLgbN" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6605F6D5; Wed, 19 Feb 2025 14:48:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972912; bh=+8ateqMN21I0Gq5bsJ9NzgLNYYCHIEXxrMxyrObnok0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PY5rLgbNDxFxMVXCimTIHU/ZuNg5nfXXYumYteJbV1diImLw1T3Hl8uVNfnQx1ExG uvDVp/Z0hoqEh5cF12I0iXZOYn8CkkS8VQoWAfr51YarNKq1gnFaFtpJfXn6IjkftM BIL9Yl1CgZig0cdzLZF4CT+M9ysq1yheMT4yqHec= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:09 +0200 Subject: [PATCH 15/18] media: rcar-csi2: Add more stream support to rcsi2_calc_mbps() Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-15-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=1250; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=+8ateqMN21I0Gq5bsJ9NzgLNYYCHIEXxrMxyrObnok0=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF1w/NKsVWrQBeuuvKI4HZ8XybS4keZqp431 K5f3QEwHeuJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdQAKCRD6PaqMvJYe 9eYqD/9qdo2rAw/ovsECkeQbf/O/QOAQzR9JBSMKFuuHvaDM+yKBuWRYpONFMBz6bbVFLYT8tw5 j11ZvdrLd2+em1CvS3kuXszOX2bba4JgAziAp/m55uGTxV2Y/btkwLXSwOTePVmwLHvrlGQarkY UWzXWoTYfDURqWGP4jBWmx26mZtgx4BLLEUVGW3MKK0woP8tLE9r73MynACqBjK5/K5HVCx+FC9 jkamN9MdU18R4TXjG9rX6ro4ywiHYdr4ufwNZjZqPYWma4e5uUhbBebg2HbHOHugh/bD91nGaGd 2iiVSRjp08G2O4+3eDTSWReB3muLnZ+XyWF807HJPjH0RXYuyOioVH7x1i+U4Ag2dDzk1CbYc8q 8k8rSSrsgM0G3StX+oNWJ0mHTt6HGISyJxN2igdTcTe7hmRFgaJXHDOqWK9vOrg637/XZdcgqU0 WYXEIhw3Oz2xE26sE+CFU42lBVNxFpzmP5poUUkyUWonlODVD/s/LdQhXP1ryvN7csCOOkHE83L X4ySbw8Md7paQ7yNmYjU+OYJE0jeVU77qdcQdsI6LYhfEc4E4SgTerMciTnpcS2pUDtOtRb6f8g PDSbMUjnJo+2ZK+5Kik2OaR6Xuv7fws8oPUP+PhH6YFbu//PlFHLoQUcwf/kFyc1PziiRn7FLOK V+77UxD9RWn5I1w== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 In the case where V4L2_CID_LINK_FREQ is not available, make sure we fail if there are more than one stream configured, and also use the correct stream number for that single stream. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 17ded37d5ca7..3608437b72cd 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -1016,15 +1016,20 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, bpp = 0; lanes = 0; } else { + struct v4l2_subdev_route *route = &state->routing.routes[0]; const struct rcar_csi2_format *format; struct v4l2_mbus_framefmt *fmt; int ret; + if (state->routing.num_routes > 1) + return -EINVAL; + ret = rcsi2_get_active_lanes(priv, &lanes); if (ret) return ret; - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + fmt = v4l2_subdev_state_get_format(state, route->sink_pad, + route->sink_stream); if (!fmt) return -EINVAL; From patchwork Wed Feb 19 13:49:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982257 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7F751FDE19; Wed, 19 Feb 2025 13:50:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973013; cv=none; b=DzeisYwPTVqPnRO8srHXXQipnTPiQ6PFysLI+2g+y1uOgk0ZLjkYcuSJxuQbh4cf/XML8MqMequ0GUHRkUsSQiBSho4SHan7nBH0ZN1oUwejXmlJysn4tpc9PzascoxvvjKxGdhym29CdWqJrsbx9G1aKhSkWPH2N1bULjoVVpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973013; c=relaxed/simple; bh=HdwDoEf2d8eMZPBqZKxvlleSLILLadwCx8/Rw6rD3G0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OtsPybCdAPCm76wnDOnsanEUpbWFIkwCjnZowgCWd0KOnU+bPpvNeJrj4a6V7U+Ac/qdWBl0fUupItSdFo8pet1AC7d9cgXECIBrRVmt4it+ACkLv9JJMTQ0uRnVG86gBtwvM2BH4qxblmzzWD0yjvCHk90bJIWCWcnEcmy+W7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=DnbKb9aG; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="DnbKb9aG" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 298AD75A; Wed, 19 Feb 2025 14:48:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972912; bh=HdwDoEf2d8eMZPBqZKxvlleSLILLadwCx8/Rw6rD3G0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DnbKb9aGOltM1jDd65cxktvgY8hgnvNRQLU7ejMeAnmdzvbnJGVR5lgwsmoZRTN/U EoAKnKCulxJz4gta6j2bg5Rn43TRphJj8LQtfqYk8B9Q7qcjvLoUgoUch6Dhta9fHc mDYOpvM78ZW7C3vRKXUPtw2k7cDTfKsh3qY6DKl8= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:10 +0200 Subject: [PATCH 16/18] media: rcar-csi2: Call get_frame_desc to find out VC & DT (Gen3) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-16-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=5089; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=HdwDoEf2d8eMZPBqZKxvlleSLILLadwCx8/Rw6rD3G0=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF1ptw/vtQUH4p8ZlH7GcG1JvXVLeMTcMQce xPmMHD/XO+JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdQAKCRD6PaqMvJYe 9R/pEACedTK4i7QQZlbVCO8EhKeEis1ZrSOwALf5PLUQiKLBfYSBnhBM9XIVsSF+PN/yeppGj6V uSGYJXSC57xCj//w5x5pbvPX9tYaggw7h1fIp3Wq5NTwF+Ry9uBAqX2+ywETKabRmi43nsDDvlC /k1o2S5KwsCe43mg3BXCT50EjqSh5QW0slApBmgs2LW3UcEFF87vWUuEV45EXh92h/H/tWQGUe/ tJGLbI6H/HQAKOzZse41QgOA1bgG5oLk2PvmYeVjg8Z+8mDaqjiSXrDQaxYG4x64NSRALYV3D/F NLFhi6e8IudLZOGOv9N6fjGI4mKh4U5gBGI/dqKNiEt/nan7W/QfflQcAtT1WzXUFK3BM9oq4Qk 1zbn/NfpdEw3681ha55vxw8JVRQ1O6q5SdrFtz2uEBxKuWfs62/7R/Ihfke0kz6hyPiBJFAq6BX tkicxhJucUF4FGT4BgzbvY0XMNmyAtQqCeIjsFHwT0jqldXTC7J05+X6ll3kkAH/zCURtmNFbQ8 ewB8GLZuVMk9iuWBOs4S1l3+/kW3D4JFm6Dz1JAVRIzKzVmeYIA7bVjY2mTuRA9zuJIPMgHWf52 f3yKNuhjD2DdjZMebPcks2JSjTn1UW4sjZcZvMDLARLo9EubHFY4hqiTtk7T7nTU7UkmK7ggBGn LPnci++Cn1HSfLw== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Call get_frame_desc to find out VC & DT, for Gen3 platforms, instead of hardcoding the VC routing and deducing the DT based on the mbus format. If the source subdevice doesn't implement .get_frame_desc, we use a fallback case where we assume there's a single stream with VC = 0 and DT based on the mbus format. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 113 +++++++++++++++++++---------- 1 file changed, 76 insertions(+), 37 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 3608437b72cd..627b116a96c4 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -71,10 +71,7 @@ struct rcar_csi2; #define FLD_REG 0x1c #define FLD_FLD_NUM(n) (((n) & 0xff) << 16) #define FLD_DET_SEL(n) (((n) & 0x3) << 4) -#define FLD_FLD_EN4 BIT(3) -#define FLD_FLD_EN3 BIT(2) -#define FLD_FLD_EN2 BIT(1) -#define FLD_FLD_EN BIT(0) +#define FLD_FLD_EN(ch) BIT(ch) /* Automatic Standby Control */ #define ASTBY_REG 0x20 @@ -1062,52 +1059,94 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv, struct v4l2_subdev_state *state) { - const struct rcar_csi2_format *format; - u32 phycnt, vcdt = 0, vcdt2 = 0, fld = 0; - const struct v4l2_mbus_framefmt *fmt; + u32 phycnt, vcdt = 0, vcdt2 = 0; + u32 fld = FLD_DET_SEL(1); + struct v4l2_mbus_frame_desc source_fd; + struct v4l2_subdev_route *route; unsigned int lanes; - unsigned int i; int mbps, ret; + u8 ch = 0; - /* Use the format on the sink pad to compute the receiver config. */ - fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + ret = v4l2_subdev_call(priv->remote, pad, get_frame_desc, + priv->remote_pad, &source_fd); + if (ret && ret != -ENOIOCTLCMD) { + return ret; + } else if (ret == -ENOIOCTLCMD) { + /* Create a fallback source_fd */ + struct v4l2_mbus_frame_desc *fd = &source_fd; + const struct rcar_csi2_format *format; + struct v4l2_mbus_framefmt *fmt; - dev_dbg(priv->dev, "Input size (%ux%u%c)\n", - fmt->width, fmt->height, - fmt->field == V4L2_FIELD_NONE ? 'p' : 'i'); + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, 0); + if (!fmt) + return -EINVAL; - /* Code is validated in set_fmt. */ - format = rcsi2_code_to_fmt(fmt->code); - if (!format) - return -EINVAL; + format = rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; - /* - * Enable all supported CSI-2 channels with virtual channel and - * data type matching. - * - * NOTE: It's not possible to get individual datatype for each - * source virtual channel. Once this is possible in V4L2 - * it should be used here. - */ - for (i = 0; i < priv->info->num_channels; i++) { + memset(fd, 0, sizeof(*fd)); + + fd->num_entries = 1; + fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2; + fd->entry[0].stream = 0; + fd->entry[0].pixelcode = fmt->code; + fd->entry[0].bus.csi2.vc = 0; + fd->entry[0].bus.csi2.dt = format->datatype; + } + + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc_entry *source_entry = NULL; + const struct v4l2_mbus_framefmt *fmt; + const struct rcar_csi2_format *format; + unsigned int i; + u8 vc, dt; u32 vcdt_part; - if (priv->channel_vc[i] < 0) - continue; + for (i = 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream == route->sink_stream) { + source_entry = &source_fd.entry[i]; + break; + } + } + + if (!source_entry) { + dev_err(priv->dev, + "Failed to find stream from source frame desc\n"); + return -EPIPE; + } - vcdt_part = VCDT_SEL_VC(priv->channel_vc[i]) | VCDT_VCDTN_EN | - VCDT_SEL_DTN_ON | VCDT_SEL_DT(format->datatype); + vc = source_entry->bus.csi2.vc; + dt = source_entry->bus.csi2.dt; + + vcdt_part = VCDT_SEL_VC(vc) | VCDT_VCDTN_EN | + VCDT_SEL_DTN_ON | VCDT_SEL_DT(dt); /* Store in correct reg and offset. */ - if (i < 2) - vcdt |= vcdt_part << ((i % 2) * 16); + if (ch < 2) + vcdt |= vcdt_part << ((ch % 2) * 16); else - vcdt2 |= vcdt_part << ((i % 2) * 16); - } + vcdt2 |= vcdt_part << ((ch % 2) * 16); + + fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK, + route->sink_stream); + if (!fmt) + return -EINVAL; + + dev_dbg(priv->dev, "Input size (%ux%u%c)\n", + fmt->width, fmt->height, + fmt->field == V4L2_FIELD_NONE ? 'p' : 'i'); - if (fmt->field == V4L2_FIELD_ALTERNATE) - fld = FLD_DET_SEL(1) | FLD_FLD_EN4 | FLD_FLD_EN3 | FLD_FLD_EN2 - | FLD_FLD_EN; + /* Code is validated in set_fmt. */ + format = rcsi2_code_to_fmt(fmt->code); + if (!format) + return -EINVAL; + + if (fmt->field == V4L2_FIELD_ALTERNATE) + fld |= FLD_FLD_EN(ch); + + ch++; + } /* * Get the number of active data lanes inspecting the remote mbus From patchwork Wed Feb 19 13:49:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982258 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DBC91FDE38; Wed, 19 Feb 2025 13:50:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973014; cv=none; b=XHTWrpsXVd3/cTFHEI38LXXMdWhiP90AhIdrc12YKflFDYwAthwP7AVhEYxzoRm3QeOftQABIoaFctBrbqPFlCp1oB54ap1wZ6TtJ0zsoon9/K9z1rR53ERN+z3HfgCR37V4pfBpQEPXQCsCXhO5ZkkoVeh+eI3ppmBSh1DRkFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973014; c=relaxed/simple; bh=MyVXZINKxIvzpHnwFdS/BFqyvn30vZ3xOm/nU5P+/00=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kef7+4W1iUohCgpeUJ/fA/nmrfN4N8KZ/QWtqxtcgJ64hpGEqlvBvdc1NiffxW+sRWRmE4Bd40c1ytvh1Xx4sF27Q2bMs3y87kxU6fLMNtSBNoxO6DrlGOEtyrY7b6LADupXyJPAjkb43tf3xIg0kcoEgb7/mPXi5EZSkRFZtRY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=neEZaQUk; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="neEZaQUk" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DD6EBBEB; Wed, 19 Feb 2025 14:48:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972913; bh=MyVXZINKxIvzpHnwFdS/BFqyvn30vZ3xOm/nU5P+/00=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=neEZaQUklMI7QdeoSbtQsMDw3EQjfkBzIQqkKzyvA7tSST2bSP5Vzpo8hEcosGHTX quXDeeK0NNjuay8wMpzJw9EnyQK7dZyaLys+7ygr03E78tK2HmcdEB6TtjE9mFRWbp 8N7qUeaPnXFYGCdjbZSRO2/vAdprQk4Cn6MUIQ7E= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:11 +0200 Subject: [PATCH 17/18] media: rcar-csi2: Add full streams support Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-17-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=4751; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=MyVXZINKxIvzpHnwFdS/BFqyvn30vZ3xOm/nU5P+/00=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF1LVFL86/nvBCb21LXia4UcDTIt3q+PeWQy vBlof+2bI+JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdQAKCRD6PaqMvJYe 9TCmD/wP/sIBxz3R5oyDTgEOqI8w+LXKMWVJxKzauy2x2smvUgsCgI3LhH+NQEa30TpSbmHfkX/ 8SvBT+YZw1GjnYjPUoo3WqhSDgqusdh5xJnfrnnbOdSZlZvz3lUjlnhp+DxbdW8Fkonddxt8ns3 CUQoR77WPR6/YxjLqN0YfSb4RlQOswpr82a5AxvhGqE8rzS+kP1HZWHWLAd8jGj/i3FRpNgs4l/ 9oHfBytliOkOHDP/xQmaax0OhIiYv4Fj2wH9ivpmkNjcPv6vL3vivtjpDNEuUzx8bQHp0sN4LAZ h1tpKobaO4/3yzs5GA1R1TtAxWHRGpi5+aAO3zYGxCZLcBDQ4dd2X8T1HcoBBGqnGjv3bYDvHi/ yqPfWIuNEmnhTIcbBNjOk8IQvgJVTIoJVbsAACsY3EM3XC2OXOo9Uw+eRXas+JJx3x6cS7luYvZ E9Lc8ggjoA4yp3LwhfCP+mcFcP/LHvlJeXf+esY7TbQGuizkwPUf1Xm2fRHXI8rMNTuKft31j2p neVHjS8Ih2/OiOt5U3nP7l4leK1aWigecTFx+0h9fGguQdVgkTJ6AlYM0o97j23rYSzw1KD9jxT 03mlVIaLuyylM0TSXQcFFAlv64G0r3YSDuSZUR28l4aeMFnxJVsXfvMNMObrkcIIWcRkNuwz/Bz WYlgBDAld3RQxlA== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add the missing pieces to enable full streams support: - Add set_routing - Drop the explicit uses of a single stream, and instead use the streams mask. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-csi2.c | 85 ++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 22 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c index 627b116a96c4..357840753601 100644 --- a/drivers/media/platform/renesas/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-csi2.c @@ -694,6 +694,17 @@ static const struct rcar_csi2_format rcar_csi2_formats[] = { }, }; +static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt = { + .width = 1920, + .height = 1080, + .code = MEDIA_BUS_FMT_RGB888_1X24, + .colorspace = V4L2_COLORSPACE_SRGB, + .field = V4L2_FIELD_NONE, + .ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT, + .quantization = V4L2_QUANTIZATION_DEFAULT, + .xfer_func = V4L2_XFER_FUNC_DEFAULT, +}; + static const struct rcar_csi2_format *rcsi2_code_to_fmt(unsigned int code) { unsigned int i; @@ -1637,10 +1648,8 @@ static int rcsi2_enable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_csi2 *priv = sd_to_csi2(sd); - int ret = 0; - - if (source_streams_mask != 1) - return -EINVAL; + u64 sink_streams; + int ret; if (!priv->remote) return -ENODEV; @@ -1651,8 +1660,13 @@ static int rcsi2_enable_streams(struct v4l2_subdev *sd, return ret; } + sink_streams = v4l2_subdev_state_xlate_streams(state, + RCAR_CSI2_SOURCE_VC0, + RCAR_CSI2_SINK, + &source_streams_mask); + ret = v4l2_subdev_enable_streams(priv->remote, priv->remote_pad, - BIT_ULL(0)); + sink_streams); if (ret) { rcsi2_stop(priv); return ret; @@ -1668,10 +1682,7 @@ static int rcsi2_disable_streams(struct v4l2_subdev *sd, u32 source_pad, u64 source_streams_mask) { struct rcar_csi2 *priv = sd_to_csi2(sd); - int ret = 0; - - if (source_streams_mask != 1) - return -EINVAL; + u64 sink_streams; if (!priv->remote) return -ENODEV; @@ -1679,11 +1690,17 @@ static int rcsi2_disable_streams(struct v4l2_subdev *sd, if (priv->stream_count == 1) rcsi2_stop(priv); - v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, BIT_ULL(0)); + sink_streams = v4l2_subdev_state_xlate_streams(state, + RCAR_CSI2_SOURCE_VC0, + RCAR_CSI2_SINK, + &source_streams_mask); + + v4l2_subdev_disable_streams(priv->remote, priv->remote_pad, + sink_streams); priv->stream_count -= 1; - return ret; + return 0; } static int rcsi2_set_pad_format(struct v4l2_subdev *sd, @@ -1716,6 +1733,40 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd, return 0; } +static int rcsi2_set_routing(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + enum v4l2_subdev_format_whence which, + struct v4l2_subdev_krouting *routing) +{ + struct rcar_csi2 *priv = sd_to_csi2(sd); + int ret; + + if (!priv->info->use_isp) + return -ENOTTY; + + if (routing->num_routes > V4L2_FRAME_DESC_ENTRY_MAX) + return -EINVAL; + + if (priv->info->use_isp) { + ret = v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1); + } else { + ret = v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 | + V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING); + } + + if (ret) + return ret; + + ret = v4l2_subdev_set_routing_with_fmt(sd, state, routing, + &rcar_csi2_default_fmt); + if (ret) + return ret; + + return 0; +} + static int rcsi2_get_frame_desc_fallback(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_frame_desc *fd) @@ -1777,6 +1828,7 @@ static const struct v4l2_subdev_pad_ops rcar_csi2_pad_ops = { .set_fmt = rcsi2_set_pad_format, .get_fmt = v4l2_subdev_get_fmt, + .set_routing = rcsi2_set_routing, .get_frame_desc = rcsi2_get_frame_desc, }; @@ -1797,17 +1849,6 @@ static int rcsi2_init_state(struct v4l2_subdev *sd, }, }; - static const struct v4l2_mbus_framefmt rcar_csi2_default_fmt = { - .width = 1920, - .height = 1080, - .code = MEDIA_BUS_FMT_RGB888_1X24, - .colorspace = V4L2_COLORSPACE_SRGB, - .field = V4L2_FIELD_NONE, - .ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT, - .quantization = V4L2_QUANTIZATION_DEFAULT, - .xfer_func = V4L2_XFER_FUNC_DEFAULT, - }; - static const struct v4l2_subdev_krouting routing = { .num_routes = ARRAY_SIZE(routes), .routes = routes, From patchwork Wed Feb 19 13:49:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomi Valkeinen X-Patchwork-Id: 13982259 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36D301FECBB; Wed, 19 Feb 2025 13:50:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973016; cv=none; b=EnH1NTM9gjwTJqI8TOmqv7IaYOeLKHIOg1OomRp2UEjtb/JBRhmq8T7WkBJY7aR/xRc7hLECIBu7zx7OuhQrFF8fP1ApCJfdCmTFTQcCj8GwTRrCbKKQWmcAhqr1MGPTXTw8nSpQQMmUf9j3pxAZj4D/E9Yf6jNnwxKYpNnGIjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739973016; c=relaxed/simple; bh=Smanb1nxDtTi2Zz0q9/a7xzSW0wrYV97VOh/qP6VxeE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iTVIPIWRQ/uAizuFHeqAVKgPVWk6/yskjf6m8nCTpRRewo24RN1J16nI2Xa0CHroAwG+OfRlvsCRL+PQGQB7Al4VYBPh7MyN8+4IhQD4wh/d4j1ThdDDqJ5sNzED92+DnDt5R9HAQ4yNvBTOuPLWazibtNALqKE3shTrSGCRlPs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=nshLEZ4e; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="nshLEZ4e" Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 99F86D21; Wed, 19 Feb 2025 14:48:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1739972914; bh=Smanb1nxDtTi2Zz0q9/a7xzSW0wrYV97VOh/qP6VxeE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nshLEZ4em0TViY1OPTIr4VJ0p4XwSX2RmakEqFz5B2s4lEPCXUF2YLaZHxZn5BgWD 0yNCq0FcEkHeiM2ar/FU0bUqaUcJ56gpefFjC3c50Q6xutgZiUEDuV+vv/pdY9gH46 j7zyw+5y5XJebumqUv9XY6wiZkGF8iDyOASdWwwI= From: Tomi Valkeinen Date: Wed, 19 Feb 2025 15:49:12 +0200 Subject: [PATCH 18/18] media: rcar-isp: Add full streams support Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250219-rcar-streams-v1-18-f1b93e370aab@ideasonboard.com> References: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> In-Reply-To: <20250219-rcar-streams-v1-0-f1b93e370aab@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Sakari Ailus Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?Niklas_S=C3=B6derlund?= , Mauro Carvalho Chehab , Laurent Pinchart , Jacopo Mondi , Tomi Valkeinen X-Mailer: b4 0.15-dev-42535 X-Developer-Signature: v=1; a=openpgp-sha256; l=3060; i=tomi.valkeinen+renesas@ideasonboard.com; h=from:subject:message-id; bh=Smanb1nxDtTi2Zz0q9/a7xzSW0wrYV97VOh/qP6VxeE=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBnteF2TKP55dh9y4fRAgzn5VEG7cB9lTg/djK8H F0h7bqdTX2JAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCZ7XhdgAKCRD6PaqMvJYe 9ZakD/431OIpfc5/fs1J7MrnfGxvhNgTlfcrBD3tigwuGvyVLL2m0BEMVaiysdI5vxuSL7wFKAR Y/woicudI8aeLOIQI3n6PrwAd643+00Ud2he9rsXY0YmBW+noupBcUV1Pjquvy+rZ4cW4ZfqOkT xaTR+6lLon/HYdjlX+eLRrQMaK60as/DWpvWw9+E30q/eSqy6Lr13o/0AQLbQm4n1Ge5qhD9YfP KUxM2vBqqyWcVkCzbD61+tUMTfwQ0JLfilvIW6/aR/BavHk3kaqk/nn5hlLZxoXZP+TDeU6JCTU IKfAZ/f/p5X0FCEIwghddDX138m7e3UoUG5wgbbFy82Or1ayW9JxzqMz45b2Oki1+zmEvc5jHsC 74ZaJTCYcLKpGOZkl5tz/MFzA8VtFDN//MN/ysatuIozk36yF3wnLidBWIuo+fMYHR7IELXO2or cf99U4oXgB1Ei87CO61DkOFsC3rKvzYiSby3a0lxO1trg/P9rBbw/QIgPxr4cGV0Lsu51Rkt82Q sMcho3Xmbj5XyA0A+aYVkuVyGEWfzi03RciiIN0TMFm58+nJxqGNNEdYfSQPnIm7lopUA5uoZOr 8DI9qluCFpkdNeNIPpN9YrXo66K7Rd48c2f/BUQyqIY4QwXbWpBoGRpQ7J2vaeet2HnJ1/owET0 MZkvfszaaNR7+Kg== X-Developer-Key: i=tomi.valkeinen+renesas@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 Add the missing pieces to enable full streams support: - Add set_routing - Drop the explicit uses of a single stream, and instead use the streams mask. Signed-off-by: Tomi Valkeinen --- drivers/media/platform/renesas/rcar-isp.c | 41 +++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/renesas/rcar-isp.c b/drivers/media/platform/renesas/rcar-isp.c index 53927954ba73..20aa451cc64f 100644 --- a/drivers/media/platform/renesas/rcar-isp.c +++ b/drivers/media/platform/renesas/rcar-isp.c @@ -342,6 +342,7 @@ static int risp_enable_streams(struct v4l2_subdev *sd, { struct rcar_isp *isp = sd_to_isp(sd); int ret = 0; + u64 sink_streams; if (source_streams_mask != 1) return -EINVAL; @@ -355,8 +356,13 @@ static int risp_enable_streams(struct v4l2_subdev *sd, return ret; } + sink_streams = v4l2_subdev_state_xlate_streams(state, + source_pad, + RCAR_ISP_SINK, + &source_streams_mask); + ret = v4l2_subdev_enable_streams(isp->remote, isp->remote_pad, - BIT_ULL(0)); + sink_streams); if (ret) { risp_stop(isp); return ret; @@ -372,6 +378,7 @@ static int risp_disable_streams(struct v4l2_subdev *sd, u64 source_streams_mask) { struct rcar_isp *isp = sd_to_isp(sd); + u64 sink_streams; if (source_streams_mask != 1) return -EINVAL; @@ -379,7 +386,12 @@ static int risp_disable_streams(struct v4l2_subdev *sd, if (!isp->remote) return -ENODEV; - v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, BIT_ULL(0)); + sink_streams = v4l2_subdev_state_xlate_streams(state, + source_pad, + RCAR_ISP_SINK, + &source_streams_mask); + + v4l2_subdev_disable_streams(isp->remote, isp->remote_pad, sink_streams); if (isp->stream_count == 1) risp_stop(isp); @@ -419,12 +431,37 @@ static int risp_set_pad_format(struct v4l2_subdev *sd, return 0; } +static int risp_set_routing(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + enum v4l2_subdev_format_whence which, + struct v4l2_subdev_krouting *routing) +{ + int ret; + + if (routing->num_routes > V4L2_FRAME_DESC_ENTRY_MAX) + return -EINVAL; + + ret = v4l2_subdev_routing_validate(sd, routing, + V4L2_SUBDEV_ROUTING_ONLY_1_TO_1 | + V4L2_SUBDEV_ROUTING_NO_SOURCE_MULTIPLEXING); + if (ret) + return ret; + + ret = v4l2_subdev_set_routing_with_fmt(sd, state, routing, + &risp_default_fmt); + if (ret) + return ret; + + return 0; +} + static const struct v4l2_subdev_pad_ops risp_pad_ops = { .enable_streams = risp_enable_streams, .disable_streams = risp_disable_streams, .set_fmt = risp_set_pad_format, .get_fmt = v4l2_subdev_get_fmt, .link_validate = v4l2_subdev_link_validate_default, + .set_routing = risp_set_routing, }; static const struct v4l2_subdev_ops rcar_isp_subdev_ops = {