From nobody Thu Apr 2 14:10:40 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011070.outbound.protection.outlook.com [40.107.130.70]) (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 25FDF375F67; Sat, 28 Mar 2026 08:26:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774686402; cv=fail; b=dbBtC6AsvT5sBz2bsquQP7l9verZX1e3QYRlIL89WWQZWCY7Im34v/LZvVmpphMYEiOFucgyDgb+XLniRveZfrEJowEn7OKlaR1xQEG6YVBGTZkJOkv8vLMZtFNtFfe8LwLB4LIp1jpBdAD4WKSUT9Jlrr9ci5h9busK4p5EayE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774686402; c=relaxed/simple; bh=NPcgxVzS7xWqM2cwdpjVhEIh8K1PmnUQSrcIpHJzth0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=BPP5oTAv9ntWqrZlO0xJ1LVpkaK3LsdfGGsBMIiTA3hJpIzzxEvKZDtNsaQXEHo1LZNdP1mO6WBLY1Eb40c2253X6RMmR9aLsFZJwGBibQRHmIDNEqJhlUfk4QWDJtWr7k+sN+sn9p42D8JpoxReIgI1Om1RTpLt574Ce29vPWc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=lD2L6Jjq; arc=fail smtp.client-ip=40.107.130.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="lD2L6Jjq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tgyg8GMJOQHwR4i3dgh69M1rIumNG54Ng3T0cjXWAD+8QSzuRVphayw6TWIrqwfHL97FdMbEc5CkPZy+VefVB5TJxV7kYVhUmXd1M1liPRuhtyfHcYlwPI9/Xv9kocG61IAXE7pwoxy2GiUZy3KhPDEbmcKE/FFZxHxBR0HY01bibEPdNtR23yo4W2tyPDAQjFC1wsaHWCJOFaTDSmR8+X1lVjbfUqMQWmQjd0y2u+de9oZa0hKFEM+8jYhv4GggQ2HxyVjdG6mQNSe52SYyc6rn0QZMBPPXG92Cn0kpWOT2S6mZ19+WpDVdj4/4nnmk0CVUEYYdKtyC3OasFUDmSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9pPMMvarXXUEHNz1LGK/NI03PkPJpqWsU0t8mZpQwjA=; b=KINH6prtBSftf0q1XybxWHxdH1wybhjjBybmdOTUUpWmmAfvcujaN1irnuo8+6w/XaZk/rGmFDcc6NajTxn2/ZSAKrVU6O1rzdtXfKMUb/pXlQ8NXFmVCQ9UT+p1bl4gZ90xYUvCYIXi2Ww8buqcf3Qi7yojrUhuNUU/T7Zo94SpDMTgWEb0XWlAGY+wFr8dw+1pfhmWaXuGkRi5fKUiy8L9FQWWkqHZZGfYg61HCkoD96+xdOY8LFxYiq+oJJJA/EB22WLv1/odDDbOG/+fGDphgTsVwWwbWwvCEGE6n9hvFl+nY71aMqVyICfsqwsR7tiwWNrwJUPyRsGYgzzd7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9pPMMvarXXUEHNz1LGK/NI03PkPJpqWsU0t8mZpQwjA=; b=lD2L6JjqDen186T1J61h5Ax6NoDzvQI779VkNYang62iQnEAR/BGbGxHgNyUdX1wcpH9pikuaBWw77JsSyX6quYij8yG/2XSYOt52Ls/Pq/+nUQLV1GVezMFjoloDzn7YUrrLdeak4zI/H05fc3rnGFWsTkCtmsEU8RzGeCbyuuokQ6Z7uy9kvp6ZQm8o+KYLy7XFHsDHNwLWJeS4T/1jSw7E6Hqi1StbIX//zPUFjP8k38X1xZpD/T8dowlmO4m+V+yC+xx3VOQfA0i73dXAhBYDrXOSjmfJ+uyDWdHF8u+ajynzswVSKXomWHaqZN0y3P7GBTSlIFAUzSZT55r8g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS8PR04MB9080.eurprd04.prod.outlook.com (2603:10a6:20b:447::16) by VI2PR04MB10569.eurprd04.prod.outlook.com (2603:10a6:800:273::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Sat, 28 Mar 2026 08:26:37 +0000 Received: from AS8PR04MB9080.eurprd04.prod.outlook.com ([fe80::92c2:2e03:bf99:68eb]) by AS8PR04MB9080.eurprd04.prod.outlook.com ([fe80::92c2:2e03:bf99:68eb%6]) with mapi id 15.20.9745.024; Sat, 28 Mar 2026 08:26:37 +0000 From: Guoniu Zhou Date: Sat, 28 Mar 2026 16:28:31 +0800 Subject: [PATCH v3 1/2] media: nxp: imx8-isi: Add virtual channel support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260328-isi_vc-v3-1-a03b9a6fe117@oss.nxp.com> References: <20260328-isi_vc-v3-0-a03b9a6fe117@oss.nxp.com> In-Reply-To: <20260328-isi_vc-v3-0-a03b9a6fe117@oss.nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Aisheng Dong , linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Guoniu Zhou X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774686533; l=7729; i=guoniu.zhou@oss.nxp.com; s=20250815; h=from:subject:message-id; bh=r7kN8Es4d3B8tUpsbOBDyNgGHyO06V271u3x7nfJM1E=; b=lIlRAHlM9R0s1Td2z+iOuGXEHszb66hM8nmco1bBH6EBtykq9+GhMGDcHK8qtrqVYiXCsEcIA sUoAgBTnqavCByqgM05o7tkWZ20b7D2zjFwZwuQVoammIs1DMAcZXUq X-Developer-Key: i=guoniu.zhou@oss.nxp.com; a=ed25519; pk=MM+/XICg5S78/gs+f9wtGP6yIvkyjTdZwfaxXeu5rlo= X-ClientProxiedBy: SG2P153CA0019.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::6) To DU2PR04MB9081.eurprd04.prod.outlook.com (2603:10a6:10:2f0::13) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB9080:EE_|VI2PR04MB10569:EE_ X-MS-Office365-Filtering-Correlation-Id: 38d12969-93ba-425b-cfb6-08de8ca3bacd X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|52116014|376014|1800799024|366016|38350700014|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: BURwpLkXf48+wr1JjoC1JHvbaXrHHTgd+ocui754Ji5gC1sCqbVj3DDKdT2rUkCAu5R70rNcJylj4o+VBM7iSBZwmqvH1QiACVsZl24HEooP2Ibgw6phTc7oJ3/XkO8eqZjll5Q9hgerfIkWJCREnVi2K+aGU6x5z3gsXr1q4zdICrtnEvwAd4hKtBB40hLpk8Wkeiij2m8gcM5MMi04XKESYZpSSrdI0ExeoBV8Hvedtt+1bb8YyBq9e90ZeFdasJ5nAsNdwRIOwnN1zVdC5wMAvKiDo5FHDEYCmNmdvVFkwnVbEwdH8cOGb+IBUqwAb/4Geq0hy6bx1/8H5Ud3WjgZz1psoAksxOazM3KmeX3noGYqEVwyMldzbGgnolurT3onLv/0G8wUzOmTJPIDe574QezLw/bJCUgI57hr9reqn+zUYHgZDO3Tnv814+7PI277syLSlEsUcnfOn6F4hMnAvNd8yvQpASy7ZUj6sN95rYbZevoQrOoR2pb5eSUW6oylZaxH5FKqIqAFJoFnajlMOOKfm1ao36qSF4eaT9C70Syt02S1ab2H2kf6H6jiA9n4ingIzwbb+bkKUPFGgfpZX9bybqycwlm/UplVSYcGSs5WQZrp2MyP+fEzlzUVzcK3joJY6NJ6iITg0mgTxxKfXCU0m1dg8ei4rjMXrd8qTqB86qBA4Yt+GT0EQGtugsElG1G0Jgh0UH4HHfQjFcXz/BcL/1d9odrKna3ZOUo50vgt2pJgyuq26+Nz0+Y4m54GO9dQlgAB9K425yHgNKt5ShLn/XccE4atE9yAOSc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB9080.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(1800799024)(366016)(38350700014)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y0gwbk1XWE5ERld3Q1JqNEtoSDdpZ0R3Rno5bHJGQnlTYnh5QWhWNTRKcGI0?= =?utf-8?B?ZjROR3dLc29QYUpxS3FUOEZwUEEvUElpR0Y1SGJvUEFBc1hwcURBRVIrQjhl?= =?utf-8?B?U2Z5anVtRGcwNXNTSi9QSm5ZNmFXNkM0ZEVRVHEyNWRYWDcyQmIxTG5Zdmtr?= =?utf-8?B?TlZLNGRMT29Zb2xXdXlxUnFaSm9XTnhlSWhyRk52STNGWlhqVW5PaEJyVmVE?= =?utf-8?B?SmFLYmUxTHNXaEFueHVwS3IySTJ6VCtLMFFYZTVwWDJockY1TVk3WXY0TW1M?= =?utf-8?B?WTNxcmlmdEJsT3Y2SWs2NXoyQ2Z1N1hZZ09hWWxpVXJOb2dVS2JOZ3k0OXRo?= =?utf-8?B?dVRNZXNLai9XYVJXRDNWem9ER01OS3dMWUFUWEFsWlZzQ2ZqcjlUcXZNaitC?= =?utf-8?B?TWJJUHcyRGhkYmRPdjFlOFR6NlJ2Qm5lTFVJN2VEaFlnQURZZ2R3VFVLN0JR?= =?utf-8?B?K0hjTjZqeVBZbkZkekN0ZC96d2VKL3pWaUxZRXFKeFMvWEsvMCsxS1h4c243?= =?utf-8?B?WGtRWENWelVpUCtuSlQwMGVVU1l6NlNXZ2tLMWlPSXNrQXM4MGVMYXM5aENp?= =?utf-8?B?VDJBWENUWFVBM3psSjcycTcyYlYvVmpOTGJKR3NNYnRYb3VnVzQ5c2lWRU1l?= =?utf-8?B?a3BocHloeFVBQ3V2di9Kd3ZZdklqaVc4NUdEZTdJS2VDdjNnc1ZLNU54dThV?= =?utf-8?B?N2dVZnozdDBpQ1dRbHRtcDladEJGNk40U1ArSHpUK05ETlp3NjduOVdDcWtn?= =?utf-8?B?YnlHakRiR3VCTEZBV0EyMDFDaDIyWEtzUWxvTEptM1I1OWpCSVFYY2hpOHNB?= =?utf-8?B?cWFSaHB4eVovSWsveFhtMkRYOUYxQnZWdEJnbGNlYWw4RlZTdVhSbmtXalVh?= =?utf-8?B?VG5ZcEZUUzhiSnc3NXQwWHcrR2MrWXE4dEJGZlN0dVV4MGxHdXFGOVNkcWk1?= =?utf-8?B?dnl0azFVbmZMOWxrMW5UTnVXYW9NaklQRmJBQXByd2huQTFOaW02cks1ZThL?= =?utf-8?B?UjA2d2lQcEszclhITzZDNjVsTk1VTnhkTEl0SDFhTzZHZWdOVitqZlA3Q25I?= =?utf-8?B?WVZDNzJpUDdOcHM3UWxDQUNVTDdTNi9MWC92SVRPNEJkcTNGNk55Z3dRTnBQ?= =?utf-8?B?ZERXbnR1UzJleE10UGxBRWo2RnZiVkdKNW1RVmpoM3docHIzNmpkUlJ2cGVT?= =?utf-8?B?bzhpQjcvV0ZMcTJFVVhjYnNBcFRVVXZVK3dJSUo5aGJYcHZNU0JiUkd6aDBT?= =?utf-8?B?TU4xVDRvTzVBRk1sVm5lVUp5M2t3Wm9nWDR2b3puQ280bGcrbWNmd0ZJa0ow?= =?utf-8?B?S0RRb0kxelM4a1FXTDA1cHNnb2gvOTE1L3dWQW9OUm9ETjJLd2FrMGZ5RGs1?= =?utf-8?B?emVVNjRpSFgxbklvaXdJNDJRWmZLUHNlS0Z0NDVFblJBYTRuTFpQS2NPOWxH?= =?utf-8?B?NzBEVitzZ0RrdWt0U3lobjN3ZzBwNnZCYWx1Nk15RWpvdUVWb25MWisxL2R6?= =?utf-8?B?SW0yblVDeDl0MS85WlhvaURsOUkrL3VNVFlzWmxXblZ3NFhuVTQ0a25kbU9a?= =?utf-8?B?bWgyelNmYWNUOW9JZGx4ek0wdmZHaGswV203UGpqbFEyQUU4aHpzTHlNUmNE?= =?utf-8?B?VkUxaXZZWHVSNHJmZktWZjRuZDZFUk5qNDRFMDhtWkVBdWtpZVdoekNhQmhi?= =?utf-8?B?T2JUa09KTmlWNGVtcE5QeUdnRFp0eG1VL055clBoK0QvYW9NY296V3M2eXlj?= =?utf-8?B?dWJvb2FIOERldmtKNVN6bnlvUytEY3R5SHZ4RnhHdFo4UDRUbW9leUI1Qy9Z?= =?utf-8?B?NzIzcFhrTDNqUXVMaXlNanpaU0xQZXpHZDFkZGc1alU5MkVTTlE4cU53eXdU?= =?utf-8?B?UjcwcUhyallTSnMxV25jYi9zMGIvbjRJbjJpclNxSmd0b2U5QTM4bm4yZzAz?= =?utf-8?B?QytHejFwYmxMYUs0WVlhZDRNb1cyQTZCdTNUdGJ1WXVrMWxMWWx6R2sxa0N3?= =?utf-8?B?cmh6SXVuUnhwbGtBMlJEL2E4dTFvcDdlUU5nejlRUlBsVWkzWnZNZWFOa2pK?= =?utf-8?B?Sk1xQUV6TDB4MjBubTBzRlNQSU1OZFNrNW5TSEkxdXZOZExVb1lKbERiNzI5?= =?utf-8?B?RXp1TU9vUzRWYzJoTXRkcllDZm1FNHQyd01mNVhpQnd4TGFTbHdXMm9EanYr?= =?utf-8?B?Rlh5cEtqd1N3NGdiWUh6U0lMTTJLTUVxNjI2b0owRStTVk5WQ21FN1pwWm9X?= =?utf-8?B?Y1FMK2lmWDgwVWo3ZTJaN0ZEQWVsQXFMNENsZjFrdGRwVUhmK1FvK0NWR3M1?= =?utf-8?B?c2RRZXh3dkpuWTdHeFhCOVBoN0NhUnZ6dS9CbXFOK0RJNmo0dmdjQT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 38d12969-93ba-425b-cfb6-08de8ca3bacd X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB9081.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2026 08:26:37.7773 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p19JP04+GPCtjV0fhD7cT9fwul575NG1CcSg7k5iMNo4LAICKCllE9bL5od7In81h9ASgsBtYFS1L48Fd/qDqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB10569 From: Guoniu Zhou The ISI supports different numbers of virtual channels depending on the platform. i.MX95 supports 8 virtual channels, and i.MX8QXP/QM support 4 virtual channels. They are used in multiple camera use cases, such as surround view. Other platforms (such as i.MX8/MN/MP/ULP/91/93) don't support virtual channels, and the VC_ID bits are marked as read-only. Reviewed-by: Frank Li Signed-off-by: Guoniu Zhou --- Changes in v3: - Add num_vc field to platform data to indicate VC support - Clear VC_ID_1 bit after reading CHNL_CTRL for proper VC switching - Set VC_ID_1 only on platforms with num_vc > 4 - Improve mxc_isi_get_vc() error handling - Add back CHNL_CTRL_BLANK_PXL and document platform-specific register fiel= ds --- .../media/platform/nxp/imx8-isi/imx8-isi-core.c | 3 ++ .../media/platform/nxp/imx8-isi/imx8-isi-core.h | 4 ++ drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c | 14 +++++- .../media/platform/nxp/imx8-isi/imx8-isi-pipe.c | 52 ++++++++++++++++++= ++++ .../media/platform/nxp/imx8-isi/imx8-isi-regs.h | 8 ++-- 5 files changed, 77 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/= media/platform/nxp/imx8-isi/imx8-isi-core.c index 4bf8570e1b9e..837ac7046cf2 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c @@ -318,6 +318,7 @@ static const struct mxc_isi_plat_data mxc_imx95_data = =3D { .model =3D MXC_ISI_IMX95, .num_ports =3D 4, .num_channels =3D 8, + .num_vc =3D 8, .reg_offset =3D 0x10000, .ier_reg =3D &mxc_imx8_isi_ier_v2, .set_thd =3D &mxc_imx8_isi_thd_v1, @@ -329,6 +330,7 @@ static const struct mxc_isi_plat_data mxc_imx8qm_data = =3D { .model =3D MXC_ISI_IMX8QM, .num_ports =3D 5, .num_channels =3D 8, + .num_vc =3D 4, .reg_offset =3D 0x10000, .ier_reg =3D &mxc_imx8_isi_ier_qm, .set_thd =3D &mxc_imx8_isi_thd_v1, @@ -340,6 +342,7 @@ static const struct mxc_isi_plat_data mxc_imx8qxp_data = =3D { .model =3D MXC_ISI_IMX8QXP, .num_ports =3D 5, .num_channels =3D 6, + .num_vc =3D 4, .reg_offset =3D 0x10000, .ier_reg =3D &mxc_imx8_isi_ier_v2, .set_thd =3D &mxc_imx8_isi_thd_v1, diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/= media/platform/nxp/imx8-isi/imx8-isi-core.h index 14d63ec36416..195c28dbd151 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h @@ -169,6 +169,7 @@ struct mxc_isi_plat_data { enum model model; unsigned int num_ports; unsigned int num_channels; + unsigned int num_vc; /* Number of VCs, 0 =3D no VC support */ unsigned int reg_offset; const struct mxc_isi_ier_reg *ier_reg; const struct mxc_isi_set_thd *set_thd; @@ -257,6 +258,9 @@ struct mxc_isi_pipe { u8 acquired_res; u8 chained_res; bool chained; + + /* Virtual channel ID for the ISI channel */ + u8 vc; }; =20 struct mxc_isi_m2m { diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c b/drivers/me= dia/platform/nxp/imx8-isi/imx8-isi-hw.c index 0187d4ab97e8..ecd0c2ef28b6 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c @@ -308,6 +308,11 @@ static void mxc_isi_channel_set_control(struct mxc_isi= _pipe *pipe, mutex_lock(&pipe->lock); =20 val =3D mxc_isi_read(pipe, CHNL_CTRL); + + /* Clear the VC_ID_1 bit on platforms supporting more than 4 VCs. */ + if (pipe->isi->pdata->num_vc > 4) + val &=3D ~CHNL_CTRL_VC_ID_1_MASK; + val &=3D ~(CHNL_CTRL_CHNL_BYPASS | CHNL_CTRL_CHAIN_BUF_MASK | CHNL_CTRL_SRC_TYPE_MASK | CHNL_CTRL_MIPI_VC_ID_MASK | CHNL_CTRL_SRC_INPUT_MASK); @@ -338,7 +343,14 @@ static void mxc_isi_channel_set_control(struct mxc_isi= _pipe *pipe, } else { val |=3D CHNL_CTRL_SRC_TYPE(CHNL_CTRL_SRC_TYPE_DEVICE); val |=3D CHNL_CTRL_SRC_INPUT(input); - val |=3D CHNL_CTRL_MIPI_VC_ID(0); /* FIXME: For CSI-2 only */ + val |=3D CHNL_CTRL_MIPI_VC_ID(pipe->vc); /* FIXME: For CSI-2 only */ + + /* + * On platforms with more than 4 VCs (i.MX95), the VC ID is + * split across VC_ID_0 (bits 7:6) and VC_ID_1 (bit 16). + */ + if (pipe->isi->pdata->num_vc > 4) + val |=3D CHNL_CTRL_VC_ID_1(pipe->vc >> 2); } =20 mxc_isi_write(pipe, CHNL_CTRL, val); diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-pipe.c b/drivers/= media/platform/nxp/imx8-isi/imx8-isi-pipe.c index a41c51dd9ce0..879193dc1766 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-pipe.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-pipe.c @@ -232,6 +232,54 @@ static inline struct mxc_isi_pipe *to_isi_pipe(struct = v4l2_subdev *sd) return container_of(sd, struct mxc_isi_pipe, sd); } =20 +static int mxc_isi_get_vc(struct mxc_isi_pipe *pipe) +{ + struct mxc_isi_crossbar *xbar =3D &pipe->isi->crossbar; + struct device *dev =3D pipe->isi->dev; + struct v4l2_mbus_frame_desc fd =3D { }; + unsigned int source_pad =3D xbar->num_sinks + pipe->id; + unsigned int i; + int ret; + + ret =3D v4l2_subdev_call(&xbar->sd, pad, get_frame_desc, + source_pad, &fd); + if (ret =3D=3D -ENOIOCTLCMD) { + /* + * If remote subdev doesn't implement get_frame_desc. + * Assume virtual channel 0. + */ + pipe->vc =3D 0; + return 0; + } + if (ret < 0) { + dev_err(dev, "Failed to get source frame desc from pad %u\n", + source_pad); + return ret; + } + + /* Find stream 0 in the frame descriptor */ + for (i =3D 0; i < fd.num_entries; i++) { + if (fd.entry[i].stream =3D=3D 0) + break; + } + + if (i =3D=3D fd.num_entries) { + dev_err(dev, "Failed to find stream from source frame desc\n"); + return -EINVAL; + } + + /* Check virtual channel range */ + if (fd.entry[i].bus.csi2.vc >=3D pipe->isi->pdata->num_channels) { + dev_err(dev, "Virtual channel %u exceeds maximum %u\n", + fd.entry[i].bus.csi2.vc, + pipe->isi->pdata->num_channels - 1); + return -EINVAL; + } + + pipe->vc =3D fd.entry[i].bus.csi2.vc; + return 0; +} + int mxc_isi_pipe_enable(struct mxc_isi_pipe *pipe) { struct mxc_isi_crossbar *xbar =3D &pipe->isi->crossbar; @@ -280,6 +328,10 @@ int mxc_isi_pipe_enable(struct mxc_isi_pipe *pipe) =20 v4l2_subdev_unlock_state(state); =20 + ret =3D mxc_isi_get_vc(pipe); + if (ret) + return ret; + /* Configure the ISI channel. */ mxc_isi_channel_config(pipe, input, &in_size, &scale, &crop, sink_info->encoding, src_info->encoding); diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h b/drivers/= media/platform/nxp/imx8-isi/imx8-isi-regs.h index 1b65eccdf0da..bbac2ba6b5d1 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-regs.h @@ -6,6 +6,7 @@ #ifndef __IMX8_ISI_REGS_H__ #define __IMX8_ISI_REGS_H__ =20 +#include #include =20 /* ISI Registers Define */ @@ -19,9 +20,10 @@ #define CHNL_CTRL_CHAIN_BUF_NO_CHAIN 0 #define CHNL_CTRL_CHAIN_BUF_2_CHAIN 1 #define CHNL_CTRL_SW_RST BIT(24) -#define CHNL_CTRL_BLANK_PXL(n) ((n) << 16) -#define CHNL_CTRL_BLANK_PXL_MASK GENMASK(23, 16) -#define CHNL_CTRL_MIPI_VC_ID(n) ((n) << 6) +#define CHNL_CTRL_BLANK_PXL(n) FIELD_PREP(GENMASK(23, 16), (n)) /* i.M= X8{QM,QXP} */ +#define CHNL_CTRL_VC_ID_1(n) FIELD_PREP(BIT(16), (n)) /* i.MX95 */ +#define CHNL_CTRL_VC_ID_1_MASK BIT(16) /* i.MX95 */ +#define CHNL_CTRL_MIPI_VC_ID(n) FIELD_PREP(GENMASK(7, 6), (n)) #define CHNL_CTRL_MIPI_VC_ID_MASK GENMASK(7, 6) #define CHNL_CTRL_SRC_TYPE(n) ((n) << 4) #define CHNL_CTRL_SRC_TYPE_MASK BIT(4) --=20 2.34.1 From nobody Thu Apr 2 14:10:40 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013033.outbound.protection.outlook.com [52.101.83.33]) (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 99F8437472B; Sat, 28 Mar 2026 08:26:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774686407; cv=fail; b=HUWwKTM67dO36XUApgVPUtSwWHsG+0SAQ34Myry9yxNXZ0O6kmx92NAgjXMyHd4QY2LWlTjxrJlISTX7VmFbSpehttyUPpICRwd37/TfedV7iJrj9pBjBeMw+6WpfllkNxgPTUk9K2bXCIbivkMFf5mKfqKCdYTX+Nt3neMSXcM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774686407; c=relaxed/simple; bh=17QV5jAcv852NLZSV1QDM4exj3j3/QP4oT5e+71t4Zw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WXVgqvqLDG1Jf4o/WQcDJBanvDYTGEhBXBn9UfVhb9EPgfoq8VVMcVBGD5diAmd5uVJI1Y+zvS1xLnO/lx3jwurnK+Q3VBeKQhOVcikIrye0AIxLAEF06pFEBtsk5Fzys3QiNonA4qUkMz5C2Zrv0BD5t7YHAggQCetwXCytvbA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=tn0GT3WG; arc=fail smtp.client-ip=52.101.83.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="tn0GT3WG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HXzEsfBnezCWF8fAnOFvVXUZHxvT4OjM9A+m83NlJCT7CxIWaIRMcMwQV8BVSfIFXIX+pf6CfdVsq/GkAqViyCG9AtQ7VbuxQFgqprTH10WiOhnZkprb1RvQcQu/9cvZ27fEVLywyahJlUDkPNxmXsbHCKrqAthec2nIZMm9rh5HZ5U0dnpOwHrH+s0B2XGsh65+ySjuzm1uOZfZ68UlNZyGZ2pm4OU3B3Am5bQfjMj4sRUyT+egjdeXg7Qwo8cnjnmA1kyHBMMeVmW4VA3dfnYLHkKJnCWInWilQLncK1In/2XNorEJsNvwwjHpOM+vc6eroCnlptmyCStYv9dhjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=r+cNd1zjbqfXQPVcuJDWIh4a5RZFpw+GYf3QtvMfaxs=; b=yrpmAhCIiUQWMK+QV+bgR1QeYfBurZdxo1a+4EfCYo3Y7MT8/tqpfFsPXwHrCZqYe9o4hR/3vRjBFbjH6HC/s8mLKvBoWiyikJ4wdwNtdhY1JytNqfj3hOUwXvlg+AkJ/3y3HOAutp0Ft1pzPTNT6f0Se3LjT+JroGXEYu5WVM6b09zrHifeGh+FTXPjPrQCN4F3HAKtU2cU/WQPD+dFGxmEvl0Bh4gKpjrTQN4i7boT/EH1Pe/6SoRguXfyew+9aVcvZGR4/yegR/41DArb7IysVSlVVvGF4XWJDp1hp0Gmm+vjHS3ZZslvM+nA6SIL6P8vrFB+HrolPd8ijv55EA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r+cNd1zjbqfXQPVcuJDWIh4a5RZFpw+GYf3QtvMfaxs=; b=tn0GT3WG0K8TEwuKsrDLHy8ELVUhUiS1ESFS/3bbA5ceFa7DKyziXeFxpCRb5bggqPlpaeg3KSyqNDr2HfwWS7WBaw1v6wXKXh0Y5ScHBOEoF0Do51UkpAONUngUf5vnjSC3CyGqL04bQezbvOGKpGGrKAqMCMoNAREtMtCVh1jPdDogtdJtH46ccjSEc+r6oiZbRQ+UgQAD9EqaCRzu7BT5Iaf59rmlTLo/1EioZD+z+EhqAZIcYFu63IN4CydRkxGyn/qvSpNlABq/QsttI2rh/C9OcgCvUOxpA4yXfl8x4DwBbA7j+dsaAMlF0h7eYUtbP1DbLqNYqhO3smcAsQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AS8PR04MB9080.eurprd04.prod.outlook.com (2603:10a6:20b:447::16) by VI2PR04MB10569.eurprd04.prod.outlook.com (2603:10a6:800:273::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Sat, 28 Mar 2026 08:26:42 +0000 Received: from AS8PR04MB9080.eurprd04.prod.outlook.com ([fe80::92c2:2e03:bf99:68eb]) by AS8PR04MB9080.eurprd04.prod.outlook.com ([fe80::92c2:2e03:bf99:68eb%6]) with mapi id 15.20.9745.024; Sat, 28 Mar 2026 08:26:42 +0000 From: Guoniu Zhou Date: Sat, 28 Mar 2026 16:28:32 +0800 Subject: [PATCH v3 2/2] media: nxp: imx8-isi: Implement get_frame_desc for crossbar subdev Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260328-isi_vc-v3-2-a03b9a6fe117@oss.nxp.com> References: <20260328-isi_vc-v3-0-a03b9a6fe117@oss.nxp.com> In-Reply-To: <20260328-isi_vc-v3-0-a03b9a6fe117@oss.nxp.com> To: Laurent Pinchart , Mauro Carvalho Chehab , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Aisheng Dong , linux-media@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Guoniu Zhou X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774686533; l=4533; i=guoniu.zhou@oss.nxp.com; s=20250815; h=from:subject:message-id; bh=w7S1A8iPdc97eTpGmkhOdDTok5hCAvrqm502P4xAX80=; b=qwJEuDfWvEh3lQe814hPgnqwgU4bGbfZ40Cd7f4lfuZ/z8/ZwUwES+tNoGCMfrMhgF8kRAUee R5V6dSehuu1AqEWL0KxxH/UqEXGjI9mn27BsduvX6EHG4L+vFbo0eP7 X-Developer-Key: i=guoniu.zhou@oss.nxp.com; a=ed25519; pk=MM+/XICg5S78/gs+f9wtGP6yIvkyjTdZwfaxXeu5rlo= X-ClientProxiedBy: SG2P153CA0019.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::6) To DU2PR04MB9081.eurprd04.prod.outlook.com (2603:10a6:10:2f0::13) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB9080:EE_|VI2PR04MB10569:EE_ X-MS-Office365-Filtering-Correlation-Id: c17a948b-adf8-43d9-c251-08de8ca3bd69 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|52116014|376014|1800799024|366016|38350700014|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: Sr2U2l3pW9a2pZ/R4D0pA1M3e1+rC16boQb3IWVtLcfLrHXprc1ATjrIdaB6Pnb/vH4UYTCrNk24fY308/fVxCFhWwCXYizkqPVrxLISZjQPY2XUzEaU6sQtxRSB+gttf/ordyeo633zfYGmwABXPspVTgyh1pSxefgZ3US+F/fxve0KOGyGaZ0T/bmbJLuDwwv/yB9c7cEOhwde2mHPzLisy8kPRz6N3qHrbcFHJT8hfLnAvuwnSx2gVy2pfJVL8gqCBBVoUi9qBMub7S3DVUYR+zJXjsF7QugLbVJCnqy89gAzw8ZInZkge6FvQkvF6JUD3xP0u+aJqDvDWo5CNXCKKJl8vPeOlKLNXson15HeF7AyF+vTGMR6i+4WMYqS/kOlMSbZwxrVJM3I9bO2dQd2ImRwjetfRjFdEx+IAQz/ukJAdw0WH86n/kfGO/VMsoW0bXdZGaz9JxmYenTbuozfC+vTieQ8pxhruk2O8xkHoZuELNgEuQ6/xyNQHTtt8tvlidH+uuoQty5VyCFjGgXg9vMGPJmuE5qUvtvPd6KqXKrOqm3jnADql/KOou9tRMu2yrIgYlFz5eiKw/6XpW+UPfALchGoYtShE+sgIrOHo5qRwNlx5aDsxVUNM7xZeW4pMbregODEQoZV8QULY1XSHh8E2sx/rxfrfp4GCYYI5b3gGKjFqXLEGxvFrH92CDIiRJ05EWWK0n2QFpNXjgVxRqKYStv4WKTeIua8LR1r7RjUCf8KBd3bbiC6TQF3kMhWHCXrHNwwJyq60p7/vrQf1LugGXxRh1suXP3NbS0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB9080.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(52116014)(376014)(1800799024)(366016)(38350700014)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?alBXc0YxOU56dHpQTERsTmVYbFUyU2NtbEk5MHVBb0tNQkw2aUg2bnpLZmJN?= =?utf-8?B?MmZiSUpQdWlDUVNuR3NQanNIRFErWUxERVZ5M3I2Z3ZoK3dUT3JWbmltZEhK?= =?utf-8?B?eUhQSThqN214VkxmdFRYNGp6UFJWRmlZMHZKamczaE1jTmJ4cDlBQk1GZm03?= =?utf-8?B?dTNTWk9NT0VNTHRYd0N1NHZQSGVkbVl4ZEJJVDNNUmZCZW9ZaW9abWFybUxp?= =?utf-8?B?YWNMK2J4ZkY1amlsTHl5aU40NTJzMFN2K0xZYUtIWmNyaXBGeTRFYW91dlJM?= =?utf-8?B?aWxGNjVhV2VRMG1pQXZONldNNEtCTDVVbUx0empwSGsvQTkxUStvbklicUdq?= =?utf-8?B?UnZNRURjZ0I5elNoTmY1V0t2Q283SFBYRkkySm55QnhhTTVzMWhKTFBndFNT?= =?utf-8?B?UlpUcmV0QXZRQ1dZSFFSdnlwOURDcThsMy9iaXBCcThueTR3SWNpUm1zTUJa?= =?utf-8?B?K3VVaWdnZlo3NDA0bHZPeEl2U1V0M1lxNytaQjFrS3FlNzQxeUlldXpMN0U0?= =?utf-8?B?eEJETEtjUis4WU9xSmpiN3VLTjdCYk0vWExyMG93WUFwSnE1aHNHajI5ZSth?= =?utf-8?B?STZra1BOVHR0TFMrR0xwRVlYaUlXbzZHNlFlVnRTZVNjOVZhQjhlUzJhQ1N2?= =?utf-8?B?enRHcGtrUlNXRWJXbCtUbXdwREkzNlBDVXFjajFnTXlseWkzMFVOa3FRai9j?= =?utf-8?B?SDVzK0JvbkZwTUNCSVdNbVlDajVJZVdPR1FqMTIzZjVPU2ZsdFJIdWxKUEdG?= =?utf-8?B?Z3Y0ZXZuZ1M4MzZJVDNPeTdDdXY3eHhrQnBoV1hrbm5OUHhNYVBDVllLTCtP?= =?utf-8?B?UkVFaUJQSkgzMWJkWlJEdUN5ZnFleTFPQVdQRVNjOFdnaDBwSVV4clpneFZK?= =?utf-8?B?SzJlUTVtOXpJZ2FpSkF0S3VzZGtrMU9OSXlMckRnK2UzNmVuanVIeGtndkFY?= =?utf-8?B?dElQM0lQdDdpMjRpcTl0TnZTekVzOU1NUUxPT0w5WEJUWEtHNFJrcytSRUpJ?= =?utf-8?B?d1VRM1BPc1BVakpLQWVRVU9zOFYxNElNSkQyUERVSkg0b0xwZTR6ODREOXNT?= =?utf-8?B?UkVST3ZacVRZc2VmSVVCU0d2SFlza1RiK0ZTWlR1QlFiR0J5WndUR1pNZlY0?= =?utf-8?B?eFAxbzF4OUlhczVmZ2Fhand5MjFSRHBQR0syTGpaMWJ6dy9jZU1USklYVDVz?= =?utf-8?B?ZmRwUWVETTUyMWd4UTJ5c3JBME5LODJUT0w3MXAwNnJ0ZDV2ZmdVb2pLT1Mx?= =?utf-8?B?RUM0YXlpMjkzODRVRm5BOTVEeVNEWC9tVTJoVTVuM0xUSFFSV1Iwc2k3dzZv?= =?utf-8?B?YkoyOG9kNkVGZ0FTZXlsWHZ4OEJoeVBicXN4MFZQamlSdWlWaXhETDY5UkRS?= =?utf-8?B?UGd3OUNHSEV1TkgwejYrcXBVOFpJaXFQYTNUcmxDZ1VidmwyalJCa3d2c015?= =?utf-8?B?OWorV093VWNsclJKeU9iVjFadFQrcGNKVFIrWHlTTjM4U29nbW14MDlZNWFq?= =?utf-8?B?eTRmUldWWnVKVm4reDFCQ1p6aC9PSWFEcm5vSVBJSkpnRHFJdjZuYXVBTks2?= =?utf-8?B?WmoxdEczMnd5M0NBcHJZOTNFMkhob2JOTVo5cFAwZk9zMnZZRDVDRWV5UHdY?= =?utf-8?B?NHZxd09pL3BBcmNFaTVDaXhsc1pGb0tnb2FiVExlZkc1N0Nqd2ZGejI1WU1P?= =?utf-8?B?aWlGSjQyV01rWHQyZWhFRmJLU1A1ajJLQWJjeWoxMzB2ODhOcnRhWHRYWFB4?= =?utf-8?B?NnVVOTh2eGpmQXg0dGZHM1dSZ2w2SGlEMDBMZlkwSExIRXViMmxCYWhXYlVp?= =?utf-8?B?NlBTZ0xPK3crbVdCK2ViRVRXUEtOc1U3U3RnS0xlYy9NN0VsK0hJQW1Kc3py?= =?utf-8?B?NkhOeldiUSsvUzlMYzFtNnN5L1Uzak5JclliS1RlN0ZHMVNzblZGcEtCU28w?= =?utf-8?B?NHVoazR5UUNzV3gwdCtDQW11am1YeXdaRWswTGwrOXd1NGxPOStQQVpXOFlt?= =?utf-8?B?L0V6dEhVSDVFbUxTUTNnOVFRQ3h6elQzdUxpOHZUL0pmd2QrQ29xQkVtYktu?= =?utf-8?B?TzI2ZEJHUXhuNUREajlmWGxPMUJkM2R1bG5EOUpQOEllRTdSbmhLSW95cndW?= =?utf-8?B?QlgzaWw2OFA0azJEcmJ3Yis3d0JBYzltclIvcDZMT0JzWXVLQlczSXBsQmZ6?= =?utf-8?B?VE5CQnQyTU5uY3lvTmtGM0liNHpZaVBJWEVjeWRGVHV3WCthLysvdXZjczly?= =?utf-8?B?WEF0bHBBS0RRaWNLeDhEcndOWjNkdkNlRkFNS2V0dUgvK1pDK1BmU0lqdDh5?= =?utf-8?B?d3NoZVZDSW55dm9IMEJZRnFpTTdDLzlhTXJnUVJtWGgyRHE4bE0xZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c17a948b-adf8-43d9-c251-08de8ca3bd69 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB9081.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2026 08:26:42.1456 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: u8YAXpKZ1qtk2i7JC6iGXuK+Cf5SeVNthwGOzlB6F3XXdtqJLIuypncsr5bobrhA/A9JeVI1POKqbDIsfvNckQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB10569 From: "Guoniu.zhou" Implement the get_frame_desc pad operation for the crossbar subdevice to propagate frame descriptor information from the source subdevice to downstream ISI channels. This allows the ISI driver to retrieve virtual channel information and other stream parameters from the connected upstream, which is required for proper virtual channel routing on platforms supporting multiple VCs. Signed-off-by: Guoniu.zhou --- Changes in v3: - New patch added based on feedback from Laurent Pinchart --- .../platform/nxp/imx8-isi/imx8-isi-crossbar.c | 97 ++++++++++++++++++= ++++ 1 file changed, 97 insertions(+) diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c b/driv= ers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c index 605a45124103..2e98fedbabc2 100644 --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-crossbar.c @@ -306,6 +306,102 @@ static int mxc_isi_crossbar_set_fmt(struct v4l2_subde= v *sd, return 0; } =20 +static int mxc_isi_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_frame_desc *fd) +{ + struct mxc_isi_crossbar *xbar =3D to_isi_crossbar(sd); + struct device *dev =3D xbar->isi->dev; + struct v4l2_subdev_route *route; + struct v4l2_subdev_state *state; + int ret =3D 0; + + if (pad < xbar->num_sinks) + return -EINVAL; + + memset(fd, 0, sizeof(*fd)); + + state =3D v4l2_subdev_lock_and_get_active_state(sd); + + /* + * Iterate over all active routes. For each route going through the + * requested source pad, get the frame descriptor from the connected + * source subdev, find the corresponding stream entry, and add it to + * the output frame descriptor with the routed stream ID. + */ + for_each_active_route(&state->routing, route) { + struct v4l2_mbus_frame_desc source_fd; + struct v4l2_subdev *remote_sd; + struct media_pad *remote_pad; + unsigned int i; + + if (route->source_pad !=3D pad) + continue; + + /* Find the remote subdev connected to this sink pad */ + remote_pad =3D media_pad_remote_pad_first(&xbar->pads[route->sink_pad]); + if (!remote_pad) { + dev_dbg(dev, "no remote pad connected to crossbar input %u\n", + route->sink_pad); + continue; + } + + remote_sd =3D media_entity_to_v4l2_subdev(remote_pad->entity); + if (!remote_sd) { + dev_err(dev, "no subdev connected to crossbar input %u\n", + route->sink_pad); + ret =3D -EPIPE; + goto out_unlock; + } + + /* Get frame descriptor from the remote subdev */ + ret =3D v4l2_subdev_call(remote_sd, pad, get_frame_desc, + remote_pad->index, &source_fd); + if (ret =3D=3D -ENOIOCTLCMD) { + dev_dbg(dev, "%s:%u does not support frame descriptors\n", + remote_sd->entity.name, remote_pad->index); + continue; + } + if (ret < 0) { + dev_err(dev, "failed to get frame desc from %s:%u: %u\n", + remote_sd->entity.name, remote_pad->index, ret); + goto out_unlock; + } + + if (fd->num_entries =3D=3D 0) + fd->type =3D source_fd.type; + + /* Find the source frame descriptor entry matching the sink stream */ + for (i =3D 0; i < source_fd.num_entries; i++) { + if (source_fd.entry[i].stream =3D=3D route->sink_stream) + break; + } + + if (i =3D=3D source_fd.num_entries) { + dev_err(dev, "stream %u not found in frame desc from %s:%u\n", + route->sink_stream, remote_sd->entity.name, + remote_pad->index); + ret =3D -EPIPE; + goto out_unlock; + } + + if (fd->num_entries >=3D ARRAY_SIZE(fd->entry)) { + dev_err(dev, "frame descriptor is full\n"); + ret =3D -ENOSPC; + goto out_unlock; + } + + /* Copy the entry and update the stream ID */ + fd->entry[fd->num_entries] =3D source_fd.entry[i]; + fd->entry[fd->num_entries].stream =3D route->source_stream; + fd->num_entries++; + } + +out_unlock: + v4l2_subdev_unlock_state(state); + + return ret; +} + static int mxc_isi_crossbar_set_routing(struct v4l2_subdev *sd, struct v4l2_subdev_state *state, enum v4l2_subdev_format_whence which, @@ -404,6 +500,7 @@ static const struct v4l2_subdev_pad_ops mxc_isi_crossba= r_subdev_pad_ops =3D { .enum_mbus_code =3D mxc_isi_crossbar_enum_mbus_code, .get_fmt =3D v4l2_subdev_get_fmt, .set_fmt =3D mxc_isi_crossbar_set_fmt, + .get_frame_desc =3D mxc_isi_get_frame_desc, .set_routing =3D mxc_isi_crossbar_set_routing, .enable_streams =3D mxc_isi_crossbar_enable_streams, .disable_streams =3D mxc_isi_crossbar_disable_streams, --=20 2.34.1