From nobody Fri Oct 3 07:42:41 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010009.outbound.protection.outlook.com [52.101.84.9]) (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 57C882FC016; Wed, 3 Sep 2025 12:33:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902840; cv=fail; b=ghusPgF95DDrNwG0Gqhq3OFDIYlD4qeLkhqnddRcNfl/QP3IaIJg45ETZLuLUzobrUPBwfRDoe1aieWi2Q1NKqOz8lon62dy60BeVa8IBjRKRX66Spp0Q+zoYPXGE6pcKFABc1tNF5PfOBVWPoFrY+ddk0RR8eQt5FBy0uvSG/s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902840; c=relaxed/simple; bh=PNRiy1KPWirxPD/XLJ3her2qxpjBl0q/Rr/kp7EJ1/c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=smFFzeSBWAf6MpdOrEzc2AbtQekpc3UukacDOe+/o+kQsbz0YI5zOSo6NVsppx+NppKiGa4AgNLwxnF9eY+EYUZF+ZJWIksmjWjw44IDsOj9s0woOc9+3QZFp6fsA8fOpaj+54Sj2FtQSE/2QM209dbLQgBI51tF7GzHtRaeRos= 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=B12gxrBP; arc=fail smtp.client-ip=52.101.84.9 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="B12gxrBP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DhagCQLwiUJ3AkY69SUlbN4naRk7ltSgl8GPB51qHmpHkyB35WIj0saajA1f5AbK1JzmBtnGSxgNSQOAew6lwe6kKmyVWv/10dXW7LMMp14P6IN9OIqruFj6GzG3v59Kt4w3rxp32jfV8s+Okuqs2McVq4+F34nTbe+dXD04DWS2FQM5fnyVTRaQpfzWL4Sj/x4LnTVWR9eT/9Exm4g08krQxHOLvkXtXKlcYAtIt12xcf04eGgRxUAfk12ZTV1HRhwAjnqU8Y5e92nCiQbyJ9dy9MaUNga8jXKvJH2tdXoV+GPrXbrFP8aNX6JyZpS1glYDr3I1Zrcn64/xFwY1yg== 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=pPt4MLYCAEQPYANek9L1QQlfFcs2JxPa21INawyIleQ=; b=WqRq3MOSxKFWR/ZDGo6HgEpkjBnkY3hhhhVfiR+Qbx4wCfqJ3RwBRx6nWx6sgX8c6XT8MMFQMzZ1rGvl2Gum3YbhjNRK4W2uGhwQnTinQP3wQmJ3+nNrHR+b+O3uil2IzqshOfTKd//BbbV05mXK5FoKGmAjerhStjiKA9Mkd+k7DgqHUl4fpLIpLZIJcZVeGmqJrfjyJX6eWOvD30loV2l6L9eOksnKCjaKrRqKw5+3dVdzvXgEQZaEvzUiyTQJjClnMMMCqQS26fRVzpePVdf6EmmwxIGUrpLnUFBg1KZC5xMedrdfMM6zvYFh5/8Sx79sjyLUH9M5R3JHcbnwFw== 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=pPt4MLYCAEQPYANek9L1QQlfFcs2JxPa21INawyIleQ=; b=B12gxrBPcgLxgjQRDKzGaAt3IDiVHpShlvHCvdhlnOlpF5Javfw1jpC7POUjzEJy6ujK12h7Dt8rbbFDNqjXkK8ZqyBCjEEqmgb2rw80TWdANwuoJUq6M9VBQt3zzklsVNQNZkHZWIDQSntTsVP0AAyCLcN1RCgdvLz47f/s1e/eKADiA3ULLNBo5kGsUrgWIt4xc+//rTm7tVsteOazCXhj49PhWY/1aJxZufmT1nh63zOOpIYDjI3FFNj44WUIkkSG4SGWLWrGCaHnV541Z1EDtnfv79Dx2drAF8LNC6h6ZL7hW+9O+Nqvt9/O+Fxy28n7QYp5+tNUD/7YZlVluA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:33:55 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:33:55 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Marek Vasut Cc: Frank Li , Laurentiu Palcu , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/9] dt-bindings: display: fsl,ldb: Add i.MX94 LDB Date: Wed, 3 Sep 2025 15:33:19 +0300 Message-Id: <20250903123332.2569241-2-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P191CA0022.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d9::13) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 23706a6e-029a-4c0f-ac5b-08ddeae62561 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|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?pDQi4zFs/CLGS3oXIx1xNqrRkhhVH1tSQ44HSYBq7LhNq+XJSiF7f+pLpi2C?= =?us-ascii?Q?uHTW4IALVxOd91Rs0DILmEgRsI4nmanRx+eko5rjspPv0Q6f6bihFis4Um2Y?= =?us-ascii?Q?aY7isnvAbQFdl4Gg4eAUFKDq1poTZ3yntG3CL8BoQJc7aYepBI1Lrm822fuU?= =?us-ascii?Q?kG6/5pFzPFpXrrsW/mlGb7X21Khwqrucs1IX2riwCBZVeDiaaVBxiJtYkGHn?= =?us-ascii?Q?upyO2dnvMDcQziF6ArLqeGHpmBYP/5eGCb473QeePaaXdcMdHnTWypg4BxXz?= =?us-ascii?Q?He8OFBS+dZU/xkMvBjtx4q6X98yEQS+BpHAXVn8XtnURrM8R4o1NMVYd3U2A?= =?us-ascii?Q?Wxd2gJozY12nSLPSUzm/n/KSsI55DcqIEIdFXKrwlbgnnR8qOn0ECgu89BNn?= =?us-ascii?Q?BOHlnCD8pIofkL2WTWSJLSafKoFvpfJS4URRHHb4G+zuru/1BJv3Fq9Yd7bP?= =?us-ascii?Q?byILHP4OU0WqoluDU6HvZCmNZYnw6v6YlFUJURdDbh0BD1RIWzyaxKghe7ZE?= =?us-ascii?Q?nFXuSCC5bN5q7T/bww9rJCSW5ZKWlkyDx6E3RC0P69E6yWcnIiSnlchwaKu9?= =?us-ascii?Q?32EsTj4UsCGgkixBgAIQlhjXNl78/i1YoT5luTlLppTk9xPpKhLz1Lw7h7fO?= =?us-ascii?Q?nDDc7FLOFYPtqX1IRbe2/gJ9Em/l67QfeLL8UTe5t3TXsudkGpew9xto1/pv?= =?us-ascii?Q?bb4hWdB3CcjseYvubOgcIc1YS+M1m/Ith3MQI12LX6dyfTk0Xr5TbT0uOfM3?= =?us-ascii?Q?FkPlP8FZ+5wczbxI80VVxahHeMYs0hPsiwlhuhp5iDtUeORqw3MgSTE98pK2?= =?us-ascii?Q?/LZzY1VbJZCYiggj7j1KPW1jPB5JjHMFrMaLcJEciXMIDhBglYmumbUH+TUB?= =?us-ascii?Q?l2HxU6ypNEkVx93cdTNbniTNt+69tOzPHA+weaU4eDUSqzaMXbEMIARlfeqi?= =?us-ascii?Q?mSpcfGS7rPs+lb5iPRVsMMdfPvbQPwdvjBWws7b8uaX/PIJlgnMa7FYbZnAg?= =?us-ascii?Q?niokaSgD1uBV4DZixl21pEuvtmwjrWuDgiWGgqEatlgwYoz7ViblhzjPIU1/?= =?us-ascii?Q?ISnd5+8cl563YGDtAOBecXPciQrw2qsNNt++4d3gX1wYxTwP5N5xtMdIgewr?= =?us-ascii?Q?So402HOzfhQNwgTQ1iNfOVytxvPLUgDLyUSWCR20dQgsTW2q5P4Ew3bB7YWc?= =?us-ascii?Q?KWF2Mi8Bv9j83X3UI78XWeKMMsIg+dkFydCateIEuvEbM4WqoQdrFYWYZY1d?= =?us-ascii?Q?GRkBsaSh0DU1cyEJC+jEZ4lpDLkzY6TnJ/C8iGDPzURdb+V39iuNGORYSxyT?= =?us-ascii?Q?JFJkn6302kQAJPUyZecJnEpMGEHBMBMWujjyV4pcy0DELfYGJnJMDXTV5MTz?= =?us-ascii?Q?NNNh+yENNfgPZTNBP7S3c3BInrPAq7SA+vVJDIvzRnintG3Q9UUt5Uo/ADHx?= =?us-ascii?Q?x+SKwmMn6bHRUZhHGfWLYkroLDQVAl23D/IAmDLBSwE68DpHrvzf4A=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KoRcyIZwE0+bZ/071zH7QaVP/Smfa7oosik5Wpn+IMrpqkEjfsGYZp5RbjQC?= =?us-ascii?Q?80xVKCW+v6do+GZvoiPM10z/EHZeEIaDnIkHoRp3haA/gxhpn0LjD2QG0Txm?= =?us-ascii?Q?FEXlpkTcaVBAkI2UQYAZM69GumWmdc6gFiNEV6l4KMx7UWdLfckaeM3GgHBd?= =?us-ascii?Q?CQL0JK9RSbJmRqfIHIWU1l5+CEDfnmAUIa/L68B2DHfZbtpPq8r2VTwNIdRj?= =?us-ascii?Q?UwlOB1lZYmjU6Z8vOhvpGm+TtTXXEQXke92hstzXJUK5wspYATs7BXatm1U1?= =?us-ascii?Q?9/vvUt47pQapjsyB6knHMplhTeaS+qDB4NSXsGI8Q/emSAbhv14mURJ02Zq/?= =?us-ascii?Q?6Sa/l3T59i7oXtWb/yk01ZSkjBTH1MrSSjtGKq6UA9E+Qh3glzzJVLM8oygU?= =?us-ascii?Q?qFOkiSknud4C6fbGIhbsOOj+FR2S/lH9bPN34WBWcGfDKUjiz5+lSFdOBSCz?= =?us-ascii?Q?VWetx2oWV5rC5/LhcwfXHSlWWyim3W6AWTI4nxL1WVu8oIj0ijr1yfVpEedX?= =?us-ascii?Q?NT1uITWaMDxim2HQYJn1oZp7RpHPIN40+pIS9yMaqZCVbfLTtf98z3DZTR0i?= =?us-ascii?Q?gRGmzeikIOXxV85yWQ4NFvfMiVQRQMnqweoLCInuO6uQcLoTKIE7wB22mqrO?= =?us-ascii?Q?Mpw7AlGrnKshZAU+GrzZYymSycprA7SLEKmusNEe5awDW0ryJeGA8QVQ93OJ?= =?us-ascii?Q?1bzNGfuFOipG56aXpprXuv5tV4QGkwhuanxqNnetVGZjTziiyyhSM7UvLr+X?= =?us-ascii?Q?pPSdPzufYZm1rnnGvsbps91Jj5MbWqyXqeum/mQ9ShqG40mODboX/xHR78kw?= =?us-ascii?Q?0SlDHKuUzkl/T6xHFXjOpW2I3QE4qor9WCvvSj1d8c1GKwyOfemWKN24W/qB?= =?us-ascii?Q?sFV6wwNp1bH53ENw3TRiXYibd7JGJMR5hSa3TfmkVVm4sn395kaLy8PWsZu/?= =?us-ascii?Q?EDIs/Oail+mJNiqr0tBRf0PUbUNrVOivRfIFsIXnV/TpuosTbxDIjUwIM+zW?= =?us-ascii?Q?h93WZDen64NnLyCTd6x8brzvdqKWfLpGzkptG1HHLK14rIH1iXDUPJpfJlvr?= =?us-ascii?Q?THMqMoMWPrPGa7ZMbipixGDRLp3NWVA6KzmssZEgXiw7o3flCkmTZCG+GJgS?= =?us-ascii?Q?viKCvnzPauBdJvTkwETKskQHdWDORi8AZMMdTibwv2LfYOrhADr8bXp5MO1U?= =?us-ascii?Q?882DbN6Lrorny+7yAXsAf5OfVqMq5+9AJahHi7kCrUdVz5koX1koePPv6/Sv?= =?us-ascii?Q?MiAc4qAHtfLvBWA6GrVO90AJQHBZNNB5r40AmbGB6DDeQ+1jNUTApocuSJcz?= =?us-ascii?Q?a4F3a4ALrwgZSiZK+G+Q7NRr1eSIhzxUtZaW9Q865LoNNWBwzuoRLH+qgm+O?= =?us-ascii?Q?wqNxwore3hnP0w16p4KTk3WIdB0Zhs6LtF3/RL/1pUBK2A67Sn9ErDLrpzHh?= =?us-ascii?Q?H7AML1XLxv7Q8JrMvr6L+Mt06vykWog8eW8QLse1VRZtxwVFtyDZKHrQNpmx?= =?us-ascii?Q?xiwpd6oieJ8JpkeZiQyn0He1kz1MCuzwSrbOLwK38pQUpPUmiLZw4TwuyvPQ?= =?us-ascii?Q?4XKLnzEQ9tCCgVSlbJQet7mjPLER7NksOVerGPr/f/Dy5yQxNxHF6FIntq7N?= =?us-ascii?Q?Lw=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23706a6e-029a-4c0f-ac5b-08ddeae62561 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:33:54.9444 (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: wyxvd4MqvlV+hmKe5yrDzbz4bwdNaArvoAcwNzXnGWNS8eMeG8GrQAHprMQ8Hwy66E1iOU+B0k3+C7EujbLeLQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" i.MX94 has a single LVDS port and share similar LDB and LVDS control registers as i.MX8MP and i.MX93. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li Reviewed-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml = b/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml index 07388bf2b90df..a54b8f1478049 100644 --- a/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml +++ b/Documentation/devicetree/bindings/display/bridge/fsl,ldb.yaml @@ -20,6 +20,7 @@ properties: - fsl,imx6sx-ldb - fsl,imx8mp-ldb - fsl,imx93-ldb + - fsl,imx94-ldb =20 clocks: maxItems: 1 @@ -68,6 +69,7 @@ allOf: enum: - fsl,imx6sx-ldb - fsl,imx93-ldb + - fsl,imx94-ldb then: properties: ports: --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010046.outbound.protection.outlook.com [52.101.69.46]) (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 A29DB2FF150 for ; Wed, 3 Sep 2025 12:34:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902845; cv=fail; b=D1XLR6A2q+1U/g/WqA0OeEIgqoqMcc4fxSj27W8x82Mx35mE1/qZD+9nDQ7U+KN8W6k7tcZ0Bfkfs/GdXbohFaekxu2HlGI+8hB6N7UboVl94Pip/xWDFz4/gG0t5+W4SdVlml3UZqNSWQBA8CBJiG/Tnj36FnNM1UBKid8fKuM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902845; c=relaxed/simple; bh=Dgh93iv4zHJ/ah5K+sOH5SpG4ToUu8+SU8m+t/hF8rE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pbbg2dxuUUuVsYsQvq/xb+0npc/8iHgRfRJrK7Oz/EFYoPk2r7CZLVNQJ9cf/50bQPgl4KFHf8p32lf4o5hA9snJLCdGqSiPtt6pR5sPfkirN/eWiPVk3ABrlSturKknYoZaeBUDTLc5WuIoM488aM3eZ+/C0XCrvtrEMpCq0rY= 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=bjLJlfk6; arc=fail smtp.client-ip=52.101.69.46 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="bjLJlfk6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pBbBrbNCjrxvuEiQohSEgovsD6sq+rQRyJOKM8MGJYhq10Hijl6RJBbd/MT5j28rVyn1zNf3Z11Y2bPq1vMVdg2DDvpL9AJ/8c0yut/b3muLSrU0Qe7s83L0pMl94vOyNmYjwflbXgOWEq2AlHwOW6KzVhH5ZC47jou1BcU2RwhXsbC/Q/l3kr/HhhCgM4K8lb/YqEB1swxneAqvw13I7jtNcePrJ0snVKHj53FtEMYacBdvYDb4O4qPSVnmqjvadTzarzfdCPg6ucR6BgqRB50a68mzjNl+K3rPLcIVWtNKHlw1QUX1pNZyx6ElsrznZvsO2skegkwQZzS0xY49tQ== 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=IsDPSogKdraXlHGr1e7onfM1VjHceIUnll/74HIenSY=; b=tzwJcCIh0j5cFugmHqklgQSqlDQ+Pr2kVu0xXQlaElnxgnsQkjA4Bjq49nhz+QrjViUDsHr8wqfvhRGa6TSb9ylWomB314aSp8ZImWSDb/R5NBBLKsjOCD3KTcjLhH2IDwcnoNMcyc5ojMTZhsMmYJGjObP713kSBwYyu5c0Xg7lRdDZS+Y9ow0ONWjcwKmq7066XKh1MQvsImUpkmsRhDE9e04cCWp5nYRuSW2q/BSBXpyKHnx60TlNHmgyRnKir8ue/Iixn7ynJtcQvAjor2fgZdZ/7Wpr7iNAz73daSa1xKd49kY5sv/2V7l9WiyoPAdnG5UiYQBWRCcbTOf1oA== 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=IsDPSogKdraXlHGr1e7onfM1VjHceIUnll/74HIenSY=; b=bjLJlfk60Prgkxoo85KDoKS3bOmMmhrUDUFY8gbT7ulShf9qLxRhOlHmVjIKO9Z0JT0kVp0mWE9wv6BjbIumK4pYuDxYaobXk9le46fIieh6sWrD6NXj3FlweBrqUD5o9rfLbUc34Lm4DqkJUNErDrw7uvp7zqVkUXmBRJ7Au0Y56GPnbPrGkIvctLVB/GQnJs19gzaGvl6n729KYetHRkDiYIAr76qO+bFi8eiq8qVC02tBbQAKv0Wcb+c4FqvsxNoUxVaIkGa2U3hz3HrAYDPG0jj3IAR2MroXgE/y7VgpTSgkBlR89l0PKwDsBwq2CpwnPidAV3Umcns6kWz4Mw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:33:58 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:33:58 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Frank Li , Liu Ying , Laurentiu Palcu , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/9] drm/bridge: fsl-ldb: Get the next non-panel bridge Date: Wed, 3 Sep 2025 15:33:20 +0300 Message-Id: <20250903123332.2569241-3-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0380.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f7::8) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: e1b2128b-44e0-4f69-8659-08ddeae6271d 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|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6n0hdF+yXQtgg4G0HwncccuYqDc/H39AFdWNt+B4+Kt1q33j/9mNFSZU35PO?= =?us-ascii?Q?BpwqwrWPKAT2zqPnrB/ZmNtDCY5njBMqSneHRuc62kr1XP8kU5p6clcnl+jS?= =?us-ascii?Q?S0u8waUwxP/b0jduCm21/D8w8n0TKs7qulPWB3E/I7uz7ifBF938jYsK/HRk?= =?us-ascii?Q?M7NBukj1AEJGZf98a7GoaEFAyQmZvXDH4sJT3pmgMBXMn4Ma/KVk1LYglLKS?= =?us-ascii?Q?hh3GY2zBWI4uLZiOPgodQMW4A8x4HaUMvMj6sEJi5BGPD89MC0o360NozuCv?= =?us-ascii?Q?4LyFFMDgtpUhmsMnni2BmRADMuorJ2dfy58qZWFw/EGF2a+rKUDTaZq2iosq?= =?us-ascii?Q?geUNNi8OEtvJWksDlbDG0hE+TkDygupOy+KFOVA+HulKQc79l7K7Mf0OAsZS?= =?us-ascii?Q?VWKPgDDZrVd2eYMWSeXibLhX5vs5/SZ9qXjwnVIWMuFrqXaCt1TdfODY7jxB?= =?us-ascii?Q?dckhW1XuTYxU6V5dYakiBUH0vDxkDyoTkdm2AZOidicXCmLD98mO8pH9ARG4?= =?us-ascii?Q?EPlLx9GWOElknDQ5NyjNzK/vZj5nHr+++zS00+DbH5x7n98hmwxcN6oezbaf?= =?us-ascii?Q?vCvb2/VZFpY0Xz9lx9FPCt7fabz1HchBVkUUc6Pvx5yaYb5kpg00RSrvyURK?= =?us-ascii?Q?5ftWFA2TSPjLuRbWBHWVj4zNPI6mMvQ63iWl3RtgXWGd1BCYgZrOvAaRx+K5?= =?us-ascii?Q?8k4qsgjESIkkyKKVTSCKQU5E84PPGSMJgjVAoEGfl65+tar9lhySvCNPF+GY?= =?us-ascii?Q?8ViU/rsqm4Hna3fF36lNQXbr39w5NehxgHOJM5FxlkLN+bGray1XFhs9XYbk?= =?us-ascii?Q?oC9Sw0zh/aUpsSeJTn6aW+Vsj9r25UI6AaGPfTt4bPsx9SNGCQznPmijqLf9?= =?us-ascii?Q?VPlQ8YuNGJClDVdUefQ88DmWLOaNzywriyWD15JOropa3Gx7cW/RiMgrhSLr?= =?us-ascii?Q?g/CumQEX4qrUwd/LUvwocv6lFg4PzDXu56XURWgAp+2+O/lHnKAu9CtsNlXR?= =?us-ascii?Q?FboFO7ktjtZrm6uj1aXWm2Qj36kMvmd29AT4P9S/YZoQr2EwsQub3sZTahED?= =?us-ascii?Q?2CX/CNUAUL5hqmv+k8kuhFQX+65bjTmsWl3K0g58tOs5DsRNs67/CS1PykJe?= =?us-ascii?Q?ViNK88l0debADvXgoZTpfIWjbTxwXEhkXiPRZ5S8SWouplS07+TbSqq2eMYN?= =?us-ascii?Q?WneiZPw8i2hjJT+fTfqbYXMpaWX4GzLH0JQiRkQSjxUck3MM+NHGjk4EfpI3?= =?us-ascii?Q?34H4Tiyvti3I1sr9o+pRfvtWE9KhBdxpJAM108uYmQkIm9pPwPDY0uzBr4zy?= =?us-ascii?Q?WW8mb7SIifpF6t5oK/dAQE0cNGTSTbXZLnyhiFy+8cgVSI3J3TfC2uMKrme1?= =?us-ascii?Q?jg/D6uwRQSA4kor73EU6OZEGnE9DOtoGFXPYD5zoucw5q1jBZ9HkGEsnRja7?= =?us-ascii?Q?GPAv73llJ/7bRNDatXk4BHEVLbW+/inzLobtE35ABoE8GV0J5Wghvg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cKQZSQTu/4yH4g08XwkZkFUU48NWfY2t9YXTDU4EtDOaDubncvQSVeNkM4wn?= =?us-ascii?Q?ANQc1sfgt2SUNB9VvOv99+3ZDioMUemPdEuEz5G91dIqELnAakqg4AjV4MTA?= =?us-ascii?Q?ui7xLz8R8KEpoF2p1nzTOiD/gt1EQqJ6Aahd/auHCHscfeKtk2fZU7+AxVWR?= =?us-ascii?Q?UHlWiEQJBo76LMXdO1hxnMY//JLL8orj+OYdjVl2/hPS91G0R16CB0wPJlTs?= =?us-ascii?Q?Oc1XPkXwGZubB1ZsvR5LGmTUEOOmgTXgMIZnfvJoFWG7EMhUU0LigEnNSKCj?= =?us-ascii?Q?crB9z6buNJYDHBcAoYdj5HrpOAvZBUQuWMczqICe0SbIUsw87ZCwVhbPsvmY?= =?us-ascii?Q?3CNIQU88FIr1m6/2NDdOLqEwqMGtDmqmggxBBaQ2kcgYF4dwIGrz4BQiTS64?= =?us-ascii?Q?ii+7LyOkVvQl6Ay8U+icMn0RBNrS+3uvA1nnh/Aau2li0mIP9HkUvl2IftfJ?= =?us-ascii?Q?HCl9yb1V8CWGDjRvLHgkhHR581OPfEF4TwTMmKGZMNr6vPfivtdjSH4aqdca?= =?us-ascii?Q?VF8Dfje0ZJEv/rsqDpadNbcWDJ79zprI8gLxS0rTmGqPx8bvATn5BSv6kykb?= =?us-ascii?Q?6lNilQPlmquItCWu6cO6WE65iOrGshsEViInyqpe0rveU0DGlDvpX6TY9VTG?= =?us-ascii?Q?63iFQoNBWWMoet+NeXI6NdBucgS/cKIWIvPFiaO4tqC6YqzCjfkRuqM10bEQ?= =?us-ascii?Q?rfbiGuoVNR8oHciypzvkj5LmdsWQntCs/bwGpW6wCwmE6HaQunKpVKUCH9IO?= =?us-ascii?Q?PiYf2WxUxJlnYBxFrZDXQCXhc7y0h06/u0RRy5ymOSnsECDlZOzz51WrqplK?= =?us-ascii?Q?hP9RhT/05rwb98xrrNCb/gDXpoJ4A0nE0rp1k+wlgBp1EbkfBkOijF6M2H02?= =?us-ascii?Q?q3A8UtkRn8qLDRfoB0N+JIVkWSlQAM7QaKrojPBPwZWV2BLxAO3IaNGNxHQE?= =?us-ascii?Q?uhQE0xuxe0selDPxIKq46ExcCB917oZp4FFfkSguwDZQkYAC0EeiL/JCKjUG?= =?us-ascii?Q?hbF5PlTcroz3vdLoebBNbZ0jZKWXuPdfrEvEu3o0FA2F2bCzsx5v/Bhopc24?= =?us-ascii?Q?92p/1ioEtXf9eb4SYk8YJWZdbUM0v1Oop8aC4HV4hhMyreI9x5R/vV2nZRzf?= =?us-ascii?Q?cpD9wGVU4zLBeENi9sk7jG0of3ZAAJBtho/bvByxOxIDwh3Qi1153Or2jBIr?= =?us-ascii?Q?X8gCiER3EgyyIytJid8LkG2THLnHnf6QhluoF6pVSU5YjAksGwC2rXdxOuf8?= =?us-ascii?Q?+JnYM+OF7+cS1MtjIqToGoQyCkVsB04CNypMiQbhghX+LpQQ5CDdfZ4H0TEw?= =?us-ascii?Q?/P3m8EYRBki9U3O96vUDgU4lF+/Ok9UjLkOyf0HOeIT75I050sGZRqLuGEdh?= =?us-ascii?Q?iP/b4gU60DmeLliX8CLGP7h6pU4jI1LossjVhg42hZJu2EBGoRLLWfwXF6Gg?= =?us-ascii?Q?Apj320O3X9UC0ezOUZNzzuLfM4JyLLXWtntDjkqcQuYvZm+H2qEOipwnOMUk?= =?us-ascii?Q?tK4vuB4QSsT3Ce7A5AvKpEpZ+9Iv48lSNS4D9bxqQqj8ZPv2FL8EYpRR+Ulw?= =?us-ascii?Q?5BCk+M6gfgUpZf+uCi0WUdZDSoPVdYrHwgVHCsD6fn0HLWqf9mOxyh0epKiP?= =?us-ascii?Q?bw=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1b2128b-44e0-4f69-8659-08ddeae6271d X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:33:57.8427 (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: yLOo+iruJrli8OYYNCtEt9HHPsxClG0CLBL80gYTUjEzu3u6d9Isq+1G+/QKhAygFhzrH2gjajW8QrCGN34+2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" From: Liu Ying The next bridge in bridge chain could be a panel bridge or a non-panel bridge. Use devm_drm_of_get_bridge() to replace the combination function calls of of_drm_find_panel() and devm_drm_panel_bridge_add() to get either a panel bridge or a non-panel bridge, instead of getting a panel bridge only. Signed-off-by: Liu Ying Signed-off-by: Laurentiu Palcu Reviewed-by: Dmitry Baryshkov Reviewed-by: Frank Li --- drivers/gpu/drm/bridge/fsl-ldb.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-= ldb.c index 5c3cf37200bce..665053d0cb79d 100644 --- a/drivers/gpu/drm/bridge/fsl-ldb.c +++ b/drivers/gpu/drm/bridge/fsl-ldb.c @@ -15,7 +15,6 @@ #include #include #include -#include =20 #define LDB_CTRL_CH0_ENABLE BIT(0) #define LDB_CTRL_CH0_DI_SELECT BIT(1) @@ -86,7 +85,7 @@ static const struct fsl_ldb_devdata fsl_ldb_devdata[] =3D= { struct fsl_ldb { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *panel_bridge; + struct drm_bridge *next_bridge; struct clk *clk; struct regmap *regmap; const struct fsl_ldb_devdata *devdata; @@ -118,7 +117,7 @@ static int fsl_ldb_attach(struct drm_bridge *bridge, { struct fsl_ldb *fsl_ldb =3D to_fsl_ldb(bridge); =20 - return drm_bridge_attach(encoder, fsl_ldb->panel_bridge, + return drm_bridge_attach(encoder, fsl_ldb->next_bridge, bridge, flags); } =20 @@ -292,9 +291,7 @@ static const struct drm_bridge_funcs funcs =3D { static int fsl_ldb_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; - struct device_node *panel_node; struct device_node *remote1, *remote2; - struct drm_panel *panel; struct fsl_ldb *fsl_ldb; int dual_link; =20 @@ -317,33 +314,27 @@ static int fsl_ldb_probe(struct platform_device *pdev) if (IS_ERR(fsl_ldb->regmap)) return PTR_ERR(fsl_ldb->regmap); =20 - /* Locate the remote ports and the panel node */ + /* Locate the remote ports. */ remote1 =3D of_graph_get_remote_node(dev->of_node, 1, 0); remote2 =3D of_graph_get_remote_node(dev->of_node, 2, 0); fsl_ldb->ch0_enabled =3D (remote1 !=3D NULL); fsl_ldb->ch1_enabled =3D (remote2 !=3D NULL); - panel_node =3D of_node_get(remote1 ? remote1 : remote2); of_node_put(remote1); of_node_put(remote2); =20 - if (!fsl_ldb->ch0_enabled && !fsl_ldb->ch1_enabled) { - of_node_put(panel_node); - return dev_err_probe(dev, -ENXIO, "No panel node found"); - } + if (!fsl_ldb->ch0_enabled && !fsl_ldb->ch1_enabled) + return dev_err_probe(dev, -ENXIO, "No next bridge node found"); =20 dev_dbg(dev, "Using %s\n", fsl_ldb_is_dual(fsl_ldb) ? "dual-link mode" : fsl_ldb->ch0_enabled ? "channel 0" : "channel 1"); =20 - panel =3D of_drm_find_panel(panel_node); - of_node_put(panel_node); - if (IS_ERR(panel)) - return PTR_ERR(panel); - - fsl_ldb->panel_bridge =3D devm_drm_panel_bridge_add(dev, panel); - if (IS_ERR(fsl_ldb->panel_bridge)) - return PTR_ERR(fsl_ldb->panel_bridge); - + fsl_ldb->next_bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, + fsl_ldb->ch0_enabled ? 1 : 2, + 0); + if (IS_ERR(fsl_ldb->next_bridge)) + return dev_err_probe(dev, PTR_ERR(fsl_ldb->next_bridge), + "failed to get next bridge\n"); =20 if (fsl_ldb_is_dual(fsl_ldb)) { struct device_node *port1, *port2; --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010046.outbound.protection.outlook.com [52.101.69.46]) (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 2EBDF2FF17D for ; Wed, 3 Sep 2025 12:34:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902848; cv=fail; b=hkkOsrwOJ/jymP1uKeixTlPTHj4rOWR98/Hl6z3K8LXehEy7rOOc8uxGvJi2V1Go+vf/bMz4EFPYHLh2cDmsiF1BB4tk1QmAm9W/A1UWwwGtW+v8QOdCs+VHWiyMAM/BFs/pRsh4Cqq9oU3vgjnJcIOFr4pOeoed0dS2dRZb/VQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902848; c=relaxed/simple; bh=bX4EaAUrJxLyl5mliJELiMUCng0PLLGqtvJ6mIu1Aks=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Y8WX0tFc8kHAdnTT4OAWs8syqTYIY3G7ueF4AmWN9ap2lpvjsD/N0519dB0pkBL5fyvYffg3j/Z2xlXpBD63TeVN0arYFbXWJM81/vp9tnu6RP+wvPlZt/EcK08zgrLxFQqayoL89TZa4vHYiBVxDALMscHM3XX2I3tERW4fA5E= 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=tPOEFL7p; arc=fail smtp.client-ip=52.101.69.46 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="tPOEFL7p" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fhos/zlF3bVbYzDQwiVeMXMneZb+15bR6V7l5Ev8snEE3uxI/mt4QGOQjky82/+fUyv/AZrLJnuFp5Udh4Bl3SwclENZ3aN0X50xjmDNapqpNatyrNTOWby4+5wD7cg/0JdvX4YnY/tbu3C0sIDAxIk10vz64eoJIrlUe6U8D4ycCgFzmfkESim71eFJIzRQlvk3zPm98jI21QqTpEA2JQx0LXcQRQED1hP0/JG859WkEVtIfarYIYJeZxK9S4Efs6b3xPpF33cV7CdQUdVuWvjMO26mbDMf5wzyxKbT8Mvd3Mpt1QVMKkiqS0WMhDbvAFUk4XoHac3rv1kY54w+dQ== 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=+wAqzozR9mQY7UCjYuq7xSSmQQkrUEiQKSdwY9ILyag=; b=yqBW/NcAWzUwJBhDE5mTb3be7sA3kaSBlWL4gikX1vySlMaginoTbS67FI9nmCOKym4ZgxUdQwya54Gu+g2r03lGDKIPtiOZ+qFCyndsjkKgkiVQZJQjqNsO16hYjZr7MUwfqOGx2kFI+33bdiiovRM+QEW2TgIq9wojOLRJrcnWg5Zg3eInIN7ZkRhyQCZqNAL/x6tBKs18EfV4vzkIOPn58+HhJ8LIbvAsE/6bp8o+HZnaz5u3b0X6Yzq3dN54fDrw0UvfZxthqZGu6m6TfJMjTHIKbpdzvQN7o2jLS8VuY+yQWw1rsYlvZm6Lf5X7rzI+MnENQCUHChfvbvJMVQ== 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=+wAqzozR9mQY7UCjYuq7xSSmQQkrUEiQKSdwY9ILyag=; b=tPOEFL7psP0bI/AR0mA6ydrhJgDacfMCpVp8AbThBmMDVhjekmxSQtz6Yg+IzXIaEWCx6HAvTmJdB52tvz+0cgyhhHXN/hPTAUfWcys8mHs6JjVpdTMnVnzUjjl7PoSNqCVOnwf7Bnrc9b2PGGQ07ezq7kmTw74ryV4vu/evP8HZBP2ctVGo2kNGo58hdLZd8VxWZsPB7q1xyC9wn0ICpfEdEUyiIYQaxtBSVnKf0nVWSDyYVYfbWYWSLSya2Id8Swgx29xS8eevLb+r0ns6xkS013hK5V2TpIC23FOmwO7axG9x3YRyhhuAvqYBOyfypZVTXYIOhuUe5z01D6ZJMQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:01 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:01 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Frank Li , Laurentiu Palcu , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/9] drm/bridge: fsl-ldb: Add support for i.MX94 Date: Wed, 3 Sep 2025 15:33:21 +0300 Message-Id: <20250903123332.2569241-4-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0381.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f7::9) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 3eda89fb-2a76-456d-080b-08ddeae628ac 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|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kPdVHW9uiosuW7x+cIEwtJdrOVqbEaLtU5PMSEtxJfehC36xTLvUe0NFrIYf?= =?us-ascii?Q?f1yQ/NOSHRZcTsmM6+jF6gBIVpBWdSLbiNmriS/OuFoTfaW0Bm1ZnXi4dkxk?= =?us-ascii?Q?HH+CBEFmnnaSzUZBK1SL7KmkeFgU6ovWn1sG9yK+d12ztEdAzvxYFiOrUehu?= =?us-ascii?Q?L8j9KrkqzLqOJ+1K4gZ2ikcMQlKrO8R2ZqZMmLG2EwBtI6VO02vnCKWLxA8W?= =?us-ascii?Q?4eKzBxZt5CvFzYcQxoTPsYms/UHcEmnq8KdAuMKwXECYc6vY0EJjwG8b4hzr?= =?us-ascii?Q?XnMF8G9vDsozAlKBZDIBiSR5gzMvqGSm/P3KXbUcKgSNNSNNhsPaQ+RlAXIA?= =?us-ascii?Q?5QMRsN0dtIQ2pn4FblZ76wui3PJIAJNimLxDNXMcOtDw/0OgnvG2ArK/zEIY?= =?us-ascii?Q?aZ0qJMESEucb7dBWvaLoOz30TuiE5ST5ilVGJuFvsyLbdPeGB2q0NIuyKU5y?= =?us-ascii?Q?5txeX2kWJwy4vDwYzhcetLOL18yJrUGd7QcZDY/mUjPA0BoaMM7RAa6kiUl/?= =?us-ascii?Q?0mdInzTCIZjq9b0urnnqaDXSbn+drU56Voun4pxmsm+yHGrnBExd3kUSY+Tc?= =?us-ascii?Q?Z9sW5PdByt10HdaY2ZWKbezAgIm0mimu4Fg3j19VMR6RqsOpySP23M4q4pbZ?= =?us-ascii?Q?N/DyrlBZPFLwO4hNt+sjtUiOmKeNMFJko1ctDhEz73xTdfDHCl0bMSNN8+nc?= =?us-ascii?Q?qKXBKMrZH2ipg6wf1auV1U84VKDxG2dQ4d7yaolMUDwUxRrww1Tk43VDbq6X?= =?us-ascii?Q?fgJ5icUB6oGdsYb5ZIpwFdLeRjAPQxy6jUgmht0cT9ebPjIlw+luQwabR7KL?= =?us-ascii?Q?hAMO0dsihufp/4E+YZTff0G6KOw5w1g2lk63tvf6XZFpLK7tj77W6gUnmwT7?= =?us-ascii?Q?2uL6nq3tSEJAoIro4zDFDzIJu/oAtC8WbsdoJ786J7oWLQ2PlyC2Ze/4aJVZ?= =?us-ascii?Q?ADckLV7nzq2WAC0uWwCZZZJYbNF5QvSjLsb522EMSddfFh3vh8GvPBdCJ2yC?= =?us-ascii?Q?VdQKUKiyTgiXjUXn24MVb48pXNfDLlfoYj7mEXTb7QN5L+gEY31ZVDb2d8uG?= =?us-ascii?Q?f4Xrr5kNBehjj8jT0crwP96d+w8rymTKCcDFvGAEqtVWEOnYLjFAS/dO9H1S?= =?us-ascii?Q?4kBJ80LaOB2aKcyDqd31opBHKYamMfao3m3StLtPBw9J48fG05yD4wyCBy8P?= =?us-ascii?Q?xKli4ZU9SSoSPL3FPJVQ0NSiTY6jE/MgxDhJHlcSDUWstl3FRSG3oAzfFOoh?= =?us-ascii?Q?TwjZ9yicNhyLK6O6Ywg/g9eOkh5TQk/FwlcTreWcFS2DWQUxtCPC4HqG6Oap?= =?us-ascii?Q?hs8I57Tphknb/m6X5twpWfEvqG/iXft5c71MdbBy1wVz11SXiV5VMearEfOU?= =?us-ascii?Q?CPeAPgPs1dLyzThaf8fwIbuQiLiFrZtohBg1yTZyyT1FcNEwu1giLjhTmTxR?= =?us-ascii?Q?fnSsjRt7hkBvgXOTKLAV7M2cgSAKd5dT?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JVrlzz6mH8GEp0Q7/XphPF/XPP5/DDbtJmv5nd4gmB7HgarbuzTRWmy7w4YJ?= =?us-ascii?Q?s6pB1TFj7UBYBnjcIfMT7wQdiySW+RBC09//TNbmzV0znlZ7UyiErrXSJFuA?= =?us-ascii?Q?I3OQ2IU6yIvpzIMDMtb/YbFjjgW+c2pbSHeSJ4pDZVaGWvs0B19g+8wZnfOW?= =?us-ascii?Q?zxDx0G8ANgPO2pc0a5LwBhVcDEZCreca+H2AHsR5kWEUnM1A2eNb3oUN0593?= =?us-ascii?Q?mMmozuQ2dWXNixCI9KgGfCF/GS126bjx5djrGOIfJMNQOt/CePr7vCM0ZtyT?= =?us-ascii?Q?ZzaZum4j/D9Tvsr4x9DSxoeIxD9fcK3K5FoeH3MyHNdEQAAMEqKcOpiU0dtN?= =?us-ascii?Q?2OXRsABMQL7L8u9Ftpb3poQo908wU2ep+KTa68lvquiep/kWsyjAjwoJxHAr?= =?us-ascii?Q?VxLUcayxLkzzlk0Xn+0idCtQFFDtMCk4BOV6ktL9hoGfiUvi1GLGpWmZ4rP0?= =?us-ascii?Q?iHAqhbhJfUIPbb4gIQk1+vvEZ9sJTfCj+gxrxV0veoszryz7QeGc2Sjz9FiY?= =?us-ascii?Q?c8yLsBWdi7jl2TmXucw5ovfFeToFm3UIwvEgq7AZgkSjih49rC3dMjPWXQXG?= =?us-ascii?Q?NTR+D70Co26iz3s/NywyTZa/soSWQy3FnLoYLFiwJ/CamikTWFZu0enj7LJi?= =?us-ascii?Q?ihnncFQzNjooX1u4K9C82KvG/7M3jQyQw3fA/K7ce8rcYrxH2aCo4j8wd5cL?= =?us-ascii?Q?HUnwEuruWQ6kGGU6SzIhJjCB/6A4tWR9NO6szmjRLNQVYXP/MBFtoCCmsGqQ?= =?us-ascii?Q?0he69p8jC5ha1iOt703O+lH0uIKObAc5oC3DtYKyoVRwR1SwlrJSNyhQiVI4?= =?us-ascii?Q?IUpsRT0O3igwACCxGvJ5NqP7BUppsdbN27nwhgx0ntpwt9qmQ7ZpMygfQWVz?= =?us-ascii?Q?RZ10WinsjO6nldoa/2jyNh0DgguNJ3B+gxXnyGq9UmaT2miWR13OvqNA362r?= =?us-ascii?Q?aDhlCMZVKh9yw8J2vAV8vLgAfo5070VLzeM/pFmn3JY41a38ncSIgppk8EP5?= =?us-ascii?Q?qpw1sltx2EYyh/VnvIitVu0Vw6mxsFmOfANw/gnC2AcU+56cThaaA55P1EdL?= =?us-ascii?Q?lZ4q0kk5+QhziQLLjxSgLaoBYy3zatgjd94/YDlB4pdu5duIlxrPC0kZq0ep?= =?us-ascii?Q?Z98ukLXaLa1MWYHS+X79MZw82Nrn356ssEAmZsKyRW2aePEHxN/Wdih9w/Bo?= =?us-ascii?Q?zJgMk61dIdyYw5bj3ylI1tsLM3/Iv8g3gyGz4X38Oun5yZMHddjOw+u3eoOL?= =?us-ascii?Q?FTeutBMFby5zCiQVrDnwdiaAY/i9+yfuJSL3YVS0nhFtEMHlILdzUg7fYe7x?= =?us-ascii?Q?QC5B+T6lJJk+50ltoR9tdR4+Z9cgJonv22gRpM49M7U2EoM06QkPf11ZeKUm?= =?us-ascii?Q?6VankI7Wi8p6tnJE2DsHWe8odrzmz4RflpeiDGpvGYRZPNRKDTQ/NshVhHNr?= =?us-ascii?Q?D2g3zBREZGEI0nCqiLWCXSR4F13lX3vt5T3hUpig+1tfJO/Snw+cEv2MSPLk?= =?us-ascii?Q?xlefROn+wJ5SS+/ShGrIhMRxYr9ZXtWlF+ipbJaZ4Yu8i8+jIKZYF6Tw6M5s?= =?us-ascii?Q?evrWMorcRdpT7mjGGFJgelCw3HB1syCOF6+Cmg8A4FeGwmtDZC42eDJ1xtGx?= =?us-ascii?Q?HA=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3eda89fb-2a76-456d-080b-08ddeae628ac X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:00.5812 (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: euSymTbyOMYWuiEE8R2VAuiWS2CNWk/g8i8jNFWvz+hRGJRMDBBFDuxJ/xjZ2bagQF0AyXj9TclvF/TbBdfnQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" i.MX94 series LDB controller shares the same LDB and LVDS control registers as i.MX8MP and i.MX93 but supports a higher maximum clock frequency. Add a 'max_clk_khz' member to the fsl_ldb_devdata structure in order to be able to set different max frequencies for other platforms. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li --- drivers/gpu/drm/bridge/fsl-ldb.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-= ldb.c index 665053d0cb79d..4052e1ea9201f 100644 --- a/drivers/gpu/drm/bridge/fsl-ldb.c +++ b/drivers/gpu/drm/bridge/fsl-ldb.c @@ -57,6 +57,7 @@ enum fsl_ldb_devtype { IMX6SX_LDB, IMX8MP_LDB, IMX93_LDB, + IMX94_LDB, }; =20 struct fsl_ldb_devdata { @@ -64,21 +65,31 @@ struct fsl_ldb_devdata { u32 lvds_ctrl; bool lvds_en_bit; bool single_ctrl_reg; + u32 max_clk_khz; }; =20 static const struct fsl_ldb_devdata fsl_ldb_devdata[] =3D { [IMX6SX_LDB] =3D { .ldb_ctrl =3D 0x18, .single_ctrl_reg =3D true, + .max_clk_khz =3D 80000, }, [IMX8MP_LDB] =3D { .ldb_ctrl =3D 0x5c, .lvds_ctrl =3D 0x128, + .max_clk_khz =3D 80000, }, [IMX93_LDB] =3D { .ldb_ctrl =3D 0x20, .lvds_ctrl =3D 0x24, .lvds_en_bit =3D true, + .max_clk_khz =3D 80000, + }, + [IMX94_LDB] =3D { + .ldb_ctrl =3D 0x04, + .lvds_ctrl =3D 0x08, + .lvds_en_bit =3D true, + .max_clk_khz =3D 165000, }, }; =20 @@ -270,8 +281,9 @@ fsl_ldb_mode_valid(struct drm_bridge *bridge, const struct drm_display_mode *mode) { struct fsl_ldb *fsl_ldb =3D to_fsl_ldb(bridge); + u32 ch_max_clk_khz =3D fsl_ldb->devdata->max_clk_khz; =20 - if (mode->clock > (fsl_ldb_is_dual(fsl_ldb) ? 160000 : 80000)) + if (mode->clock > (fsl_ldb_is_dual(fsl_ldb) ? 2 * ch_max_clk_khz : ch_max= _clk_khz)) return MODE_CLOCK_HIGH; =20 return MODE_OK; @@ -377,6 +389,8 @@ static const struct of_device_id fsl_ldb_match[] =3D { .data =3D &fsl_ldb_devdata[IMX8MP_LDB], }, { .compatible =3D "fsl,imx93-ldb", .data =3D &fsl_ldb_devdata[IMX93_LDB], }, + { .compatible =3D "fsl,imx94-ldb", + .data =3D &fsl_ldb_devdata[IMX94_LDB], }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, fsl_ldb_match); --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010046.outbound.protection.outlook.com [52.101.69.46]) (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 4F3372FF669; Wed, 3 Sep 2025 12:34:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902850; cv=fail; b=uc7zvZJjt/5+W0G9PwcciHgbbRrkZuCT6wFO3R88kptHOrPuygiWYNyW81n1K1XxxoAAyx+WW5IfSpBegFLt39DBKuXcsdiAZGCQTgg6joctGO8+rUuE1/uE2nlcilvyM4aF8Iy7kW/5CbChzvFbs2X7rCM7nwKXFBIc+dU3clk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902850; c=relaxed/simple; bh=HHQW7hv6TUUXsWsFmKQ9tTGplqjBFVz/btBRvZCNqM8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=J06NwVuHP+NnzuhYTXpThuL56fzPNOP8Y1B4k9fiecXeX0OuuMFUYi6pS3P8d/m1SDzNYQzARgr9xtrlgnxb+ez6YuYtwujQSygbD8/DlT3R1XZMOCpbHeN48BHb4UDII4WrNZOHyIYEzYaN5p+9BXcVDTdFqEbcg2AE7HQA2Do= 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=ZzLre4iG; arc=fail smtp.client-ip=52.101.69.46 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="ZzLre4iG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IvESAWX2p+6R8hI2JZcFEAKxBVZUjMtkwVJwuB6i8xFWrs26kK85v/sCn2T89VP08pgbsDUu8Itg3ovmtN1oyakEITbokJEIN7rXspfyDigumbpgIAljcqEUxgoN4pXupf+hYFHi4NV3jK72yCSwTL7U4tqDZmKpJZQY4Uqq5/04ZBaLxqHcK76hEG6aPSaCViBSn1tbHSUth/WV1f3X5IkAGDY44hiE0+msoN+qc2pM+tOoKYoG5aE8irSeElcw3ITTQdwDREMBlQRW/aSW+i2lcDvwwxdXzv+4+wv5WzD8NxN9mzw1TUbPQPx0guX0UhcwFg1I9Mgwc0LjNHXMdw== 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=uvNJvdnuYL6rjw5LY0fKwamRArZ8aIt0mEWbFpknP+o=; b=m8nSFY4/JYbC3yhVKN6eutrOJDO9M5SiFfJOT3xObqwSUvNmQt4JnJwDP4RTxSxzKt3e+10b4O02BC8I7c+2XhbjjOZ80o6hKPlgL9eGh1+g6OQdtWkpu+2j2ZBVWS1PCC4sWbM+oa/uVAqeuSIt/4r2OeZ9gu4X9LU1kt2RXR3so7uTRssHPHZrD6pqp9lk6uM+rECDw+UawO1HIspXg55PqRoqPLP5Rp4VixKMWw6BF3K6WIfQ7L5L8OYLeU+tsEzIb9fuRiNvQWrd4wPtjCLu8AM4M1OoNOoN7Y9roN8kCb3HBpDF8lWSaJbmmeL5AL5veo36ZLHtbJD1HTieew== 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=uvNJvdnuYL6rjw5LY0fKwamRArZ8aIt0mEWbFpknP+o=; b=ZzLre4iGUHRw38L1Y3VrUdBytC4XVZva4SMSVZdeiCkNIEvYoAGnt+wRlaD2K2gPiTzluHrSOq11mrDex3C8LT+gQQ0altDOYiAo2D4lfYsjfHizGcSacE18sZ7kI+Qr1320lV8f0RRx1hJTGETSTK7NjPiBE5nxnErR0O8a7SEWqJPdxAgXHclT0xHPctJVM11LirBRQvHzhWoz4AiDCY128fwqZonR1DM/W+XJWPj1Jxxq9E1zTb+K0uZtIUB11cMR2O5Wn9oaTkaRKIsIIVRIr+CDjLrRqFO/gcn03o3m3Bj0lEczqKq2pFCb3V4rGVfmLQZDsrKoy5Si4cbrUg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:03 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:03 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Laurentiu Palcu , Philipp Zabel , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Frank Li , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 4/9] dt-bindings: display: imx: Add bindings for i.MX94 DCIF Date: Wed, 3 Sep 2025 15:33:22 +0300 Message-Id: <20250903123332.2569241-5-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0030.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:c9::7) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 6247828f-4dd7-4069-1181-08ddeae62a64 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Md/aTfYJYHMbolPSXah5VA1UEa10CU2CMqk8B6y+ffkDWU0PmH6pduaAszVV?= =?us-ascii?Q?pPpjj9TU04bteVmp4uRK8sVF5jxR9tVA8tUGu1BDqnxsRhgAxr541XxG3DBk?= =?us-ascii?Q?zQv8ZqcbGLoMF7tQowS5nwQWWzTn6VxndAldJVYBcS2Bw4/s2GhGDckV3K+/?= =?us-ascii?Q?Wp/La1SlO8XKgLNuaGlVi+i/chGfNBHyI5qxbJusHWzxQXggyF5WmrK3CyLD?= =?us-ascii?Q?VkVlE+mZn03KrSX4M4KcVDvNnmICqVyMRF/3TofIndFWc4rjOPmyhmMhORdk?= =?us-ascii?Q?GK4y5+rF9uymV2pyIxJSDTR12HkeUrQxPDTwSi/BpE4htuW0k9Rky+ozbXtA?= =?us-ascii?Q?etlC3AlkgN1ist5cPfqGp/xLndzk3jpQOkRuyBZZ3rv7Gz+DmCFM3uTEMw4i?= =?us-ascii?Q?5bebrRLHkhpMYupiCd5llz3Zb4UmKJRj3KGNKCcOb0Lc7V6nqSMbENVJqFeB?= =?us-ascii?Q?hIGT0EEv9HWna8GSvPVO7tuKOQcX0OsE/0tWDdDukFgtIM+9Le30gKMeQlpc?= =?us-ascii?Q?19Wdwcd8AUHoN3z/wy2FYIucUuWFOKOMLKv/ZSpgxAYsbJFWJR/tyel6JSjX?= =?us-ascii?Q?MfM/NUW4V5gn2R8pqvN6YYKsqeUGK0yDw+AC2sISpceKlixod86UjZIWAQaf?= =?us-ascii?Q?MMNouq+CCYt7dnrJFdwraTF2UWSCm8ijNBSDVNpkE0DjYay1Y4o1OZO13RJI?= =?us-ascii?Q?JcH0v3uLUi8NP1mNDSFp9YegBM4xAmDg4H1SGIltTX3w1T63FJgTmcNxQtsG?= =?us-ascii?Q?HjZxvPxlLkALax+9Oe77gcHzQ4RYrnb/93mvtYnRK6rVv17AAFI8ONLwCcSh?= =?us-ascii?Q?WyUXdcyCqD1nuuIxotkHzfylPAq+FIwQEoBCx0VvUmSnsS+3mTVSTytXUxyj?= =?us-ascii?Q?6XXWgb9rnfRmt+EoCJiliJUpKPd35AKAXjYJpkjyFiSwOHs+l2lIczCTK56O?= =?us-ascii?Q?ydDsOp/7snrnbndiWzFoBFusdOBUrO3dT4eer0v+ZR5NlOr6c7nfbp+1spTo?= =?us-ascii?Q?h56wtix1hwg4dS7krnJymxNwUIAWpocUfCx/9dRg37mW9FO1IuiiYOqugiQV?= =?us-ascii?Q?+RhIIPl38EsiYq/iJq23fDqNoyDrogXBsztVpAawhdyouOQzTVl3WRL/dDwV?= =?us-ascii?Q?ZxfuN/+WWMxstE2TQYUmS+YB/0VlRqct271thwPt82LGWC9y0Mq7qkeWfCoB?= =?us-ascii?Q?3e1hMD/dw+OOOblKKH/mTJtnu29sKidKUyoxe+nJkJSOkVdDnE+BJMqO+tUQ?= =?us-ascii?Q?BezS41zoq/Eapx/7pI8HeuKPM/dpkR5nGCNxk3Y5fRs6v0ypInmiwLkPj0vp?= =?us-ascii?Q?CXNdGpKpJeQHBeov6KGxc06RnazIT56Vy8qf5kzxzBF4YEjwTgWcNNoNvlHj?= =?us-ascii?Q?rGjf9zMxRarfEciCNC1ir0Vn8PX9fFsIC0iPzMZCj3UuBruOCjl5SARZNQcc?= =?us-ascii?Q?QCctPMFA28U=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3PV0jvmKIxGrIbapqrS1isNyU+68k+S+O//AMj3xSaQZxcrkW6DVe54VrylG?= =?us-ascii?Q?A4B3RdeekZCGtKPqWly5XHOFJDYLL+uUEvZBJ3xXjA33NlZ/SUAu02ogCdqp?= =?us-ascii?Q?Hc5vr+CyxSRtM52M1m0TRNr6zTZjnE0hl5VzBIuYkbYQ9CGYMMnuDvI6eEFP?= =?us-ascii?Q?jqyIIHG0mWsa/O0wFwuLMzUEvkZKUJXUm4T+4EKKayundou6xHH459UAAt9H?= =?us-ascii?Q?01xKOxICSlhpg1KBTGgSrXCRcQO1auUY6F2m0HInH421ENilGoSHFERbBUmE?= =?us-ascii?Q?Mgeq06dffxtBrj8ZeCEbnIeDjYWluJ4bqw6WlAmD3vmVKXyyPw1qgKNuP5EL?= =?us-ascii?Q?99Rhf+hUwIoCOHaeM2qR/M684FSoGCHzO/8u5Q/rbQlaqzeigVL8UgKXF3rI?= =?us-ascii?Q?U6eLs15XSAjBAkIBHeTamsPm5sXMupGdVWrMfuOGNkL4771nh2qv7kXcv5t7?= =?us-ascii?Q?a6zhjtP4rW6rNiVunBHfRuNAEnESTw10eW0KvTtn7NPKGetVw9t5kcMOZrSU?= =?us-ascii?Q?Y0l4zfO3BPkTZfFQs+u72eGznq4TN6hoZ/HfJ1qqYWGP5I362e4QVhwB1wAg?= =?us-ascii?Q?o+y0WMvzamQk29prcIQAHIta6NU7XIjLkXMF8K0cGueL7+/QJEXsZs+ppVkh?= =?us-ascii?Q?pFXW2dJAElckabRi3cCyKfWku41wbuhu65vpIrTBk5Kv1Tmb+qKJ1Gw6PZ52?= =?us-ascii?Q?2lNA30xSLv5Zoocy9biVLVKPenNz0sIE0iVn8nE9fwpzseixeKdJsLvbKmI4?= =?us-ascii?Q?MBPoe+PkfEjdMMHHu7Xy2ITJsJbTdLrNAo0/mZRoxZTyrOu+7rA9XbxO0Tl0?= =?us-ascii?Q?dEfAcm3bwhHJhh1G5fisGOxh6HtKBbtbxKJE35bdwSyrr5kUAvzjXv9NPuJj?= =?us-ascii?Q?CIx4PKzi/o5AOKX6QOr+GSabHEyHCwXy6mmXRseqWbJpMVDoQHbYfV/xYOek?= =?us-ascii?Q?hrWvuiCokl3QgW7Fgog9AOzZfuJ5xP1q5Fwz0G9KhnBWU0OBzeH0miVWgKyD?= =?us-ascii?Q?iYJL/YBA5n1jLQkkmoYQw1dlYTXTbqlGakAh6rvQnSViILjOA8Wh3gjaZxjZ?= =?us-ascii?Q?2D4QOTOGdyfAiihwGrq78SFNqF/lwcNzxwW5I41vqcSmpBERagOTNgtzyxGp?= =?us-ascii?Q?1GRDKuaG1xMXPDZK6WHIN63r4LvBVSO6nOF3gRE9lmsKvt9nPCLwWj1DscfP?= =?us-ascii?Q?ahg9JXy9jkDz2mGJvOPvwA89uWJj7+xIC0A4dtY0Nyxt6dBpuA8VQKHKd0YL?= =?us-ascii?Q?LaYFiLeR/fKS4pPxmZZm0E0Cz3H6SAbAnGCsk+P0F/6bF6beDcxJAs/bZmVY?= =?us-ascii?Q?7awMkdIoulzpodnFd5Iz40sdUe414RGRMHD4kqN+DDU7VlAVZPO5paRGW4md?= =?us-ascii?Q?GyULdVow2vEObrqwa6lsaUBaUzYaTwM1VN/xpHhWC/QYlFGb8hpHl/QD+kbQ?= =?us-ascii?Q?iosR/HIacSLDtQslcAVPdrPqZE+g9BZZngQQzhKhcUb8kzuf5HQIYAMahpFo?= =?us-ascii?Q?XDNHmWf+VWO//nCtwwhxMLuG1aXWM/iooTRc+wPfg629lXyasW2Xf2Aa3/tv?= =?us-ascii?Q?3u0alrwnJnSOQmAJvdPx5frGNFNvxKu0uXuUhnm58knOPW81mO3oblDeba4b?= =?us-ascii?Q?kQ=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6247828f-4dd7-4069-1181-08ddeae62a64 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:03.5414 (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: lzD5BnpHpG8W574GqDOzC/l2EfRrDuvvztt2kV0R9T7MGT1sOBtlYpDUwFGYVRsdtdgXI6Xna6jQlUCBx4mg0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" DCIF is the i.MX94 Display Controller Interface which is used to drive a TFT LCD panel or connects to a display interface depending on the chip configuration. Signed-off-by: Laurentiu Palcu --- .../bindings/display/imx/nxp,imx94-dcif.yaml | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/imx/nxp,imx94= -dcif.yaml diff --git a/Documentation/devicetree/bindings/display/imx/nxp,imx94-dcif.y= aml b/Documentation/devicetree/bindings/display/imx/nxp,imx94-dcif.yaml new file mode 100644 index 0000000000000..54419c589ef74 --- /dev/null +++ b/Documentation/devicetree/bindings/display/imx/nxp,imx94-dcif.yaml @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +# Copyright 2025 NXP +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/display/imx/nxp,imx94-dcif.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: i.MX94 Display Control Interface (DCIF) + +maintainers: + - Laurentiu Palcu + +description: + The Display Control Interface(DCIF) is a system master that fetches grap= hics + stored in memory and displays them on a TFT LCD panel or connects to a + display interface depending on the chip configuration. + +properties: + compatible: + const: nxp,imx94-dcif + + reg: + maxItems: 1 + + interrupts: + items: + - description: CPU domain 0 (controlled by common registers group). + - description: CPU domain 1 (controlled by background layer register= s group). + - description: CPU domain 2 (controlled by foreground layer register= s group). + + interrupt-names: + items: + - const: common + - const: bg_layer + - const: fg_layer + + clocks: + maxItems: 3 + + clock-names: + items: + - const: apb + - const: axi + - const: pix + + power-domains: + maxItems: 1 + + port: + $ref: /schemas/graph.yaml#/properties/port + description: Display Pixel Interface(DPI) output port + +additionalProperties: false + +examples: + - | + #include + + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + display-controller@4b120000 { + compatible =3D "nxp,imx94-dcif"; + reg =3D <0x0 0x4b120000 0x0 0x300000>; + interrupts =3D , + , + ; + interrupt-names =3D "common", "bg_layer", "fg_layer"; + clocks =3D <&scmi_clk 69>, <&scmi_clk 70>, <&dispmix_csr 0>; + clock-names =3D "apb", "axi", "pix"; + assigned-clocks =3D <&dispmix_csr 0>; + assigned-clock-parents =3D <&ldb_pll_pixel>; + power-domains =3D <&scmi_devpd 11>; + + port { + dcif_out: endpoint { + remote-endpoint =3D <&ldb_in>; + }; + }; + }; + }; --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011060.outbound.protection.outlook.com [52.101.65.60]) (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 2553A3002B0 for ; Wed, 3 Sep 2025 12:34:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902858; cv=fail; b=RDrw5eBLN6RALfSFhLkxddZgATq0OfaLiLGLG8qll7sfUINV7I5wTQb/hNlaXLfgP3tQIRYdmKVESO5Dftk4ZZ2a/LB1KwIBsqe0NwNLFMi2kdLSpxy1ErRJjd0oT0r/fHT5cBEo+7wvxChvMwR2UO4a7ngs3EloohjqFWy1FWA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902858; c=relaxed/simple; bh=tnzBK1ReslxyH0fxQ9fG6TZ+bz2LizxHe9DCZlkicsw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=jfQEgi73pVaQk+yF+Lpm3iF5M3zDR8X7OF1mbwpLUni/zq+Et+zLyKTd5RPCar13jtkzr9RyFqOYCQ607jsOGvQIbNkhkCmH44eWwNd77oYvWni/jakwmRptlSrDc6OP+qf9jVIq3Ts9aW7KvciTeXuZ/RqNUluFoNqAeUOaAQM= 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=Any2RP+9; arc=fail smtp.client-ip=52.101.65.60 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="Any2RP+9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pkHtbtZUnmtDa/aJDUWblwWEyT6i7ldLmOxEI4dbaSHNDzIAQgBa8KS/czewS1+BNPzJL/E/RdJAXWgruLlrqyJ3LLSjCqBnw4ebjIa3Nin1uhCSMl7EtD2bJZvcDF2DmZ8RSO+qZqyGDDTZN6UekLSrmhaVVxuUhBGrrI1PSQCzVIIJbKtYLpVSkLJFe4ICxYQ8XL2MygvP5sdYjVeeBSegtLZ/uzZdfdKE3OoxOdVZ8/ZhhJPMoXnyMfnfMHaEeab+xzLDTF85WRXMmtAVyxJQA3MRr9zlrOyXWPAkT18Drh/lSblKVeeffBtGuBC6679Gl0uPzDwkix81KgDANQ== 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=fP667cL/k/z9zX0Ch9906xvcEQsle/vbAWLvsMoUhho=; b=SYk+8Gk00iMp7xIYck/2PXPxxQ69hbDWEEJ58YHmRsucbyKkuhPTT934rCun1EFxLEry8hwfXYH7Jz/BJJzOPOdHY6dII5QSohtcqTFj3G/Ru80Ee22pTnngHVb8vv8Eq7myhVPQvcidfO5pp7Ci7BzdNssWiVJdOoDAmOqW4haZkwFul28t8ajiZpo4qiSf6tNupzKQSfJQzcRqcJPBKGuNXu2207Ceqz8dzY1YjnWspNimQt9Uvy4zlrc2O1f3Q4pj0g/XynDEj+h/N41+zB/zA4uzD7ziyXQu06jLHawLg6daTU/t1zVYAtlKhyrwy+5O3nwTSfQ7xJexvRn74w== 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=fP667cL/k/z9zX0Ch9906xvcEQsle/vbAWLvsMoUhho=; b=Any2RP+9IZXOr8mt2sJkrDaANE3vuJOe79IAwzjfCrkJb/HSByEpaaEdPQZV4WYs/T8O6zDHP3e0ja20xH+sNgeUFJEtjMjqEGKSZsh/VXkC4zGWdNACnfQTBsWK7TfyL4EN5gGhZRZYaaj8Zw+PqPyzy0zlxO3acBWljXd6VPuKFYQTg6Egm3K0A3ghG3LN/Q5866N1eNY+TCDnUx/obgRv4zC9e/U6mxwTpn+4Lp+fG3W1MLNCxh0aLpPOiCp9b01PW5HHpNRsOlB54xkyg/tHowhycoBUd9GbAa8MIr2oK1427KRL1GjK65Pv6jOYTiLDAsCWqEY4+IhbO4LPWg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:09 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:09 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Laurentiu Palcu Cc: Frank Li , Sandor Yu , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 5/9] drm/imx: Add support for i.MX94 DCIF Date: Wed, 3 Sep 2025 15:33:23 +0300 Message-Id: <20250903123332.2569241-6-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FRYP281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::26) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 29e47d15-eb8e-45ea-0ee0-08ddeae62df3 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4E2AcVgRuMz8bRyUXN3tIsI2zwtFEMJxy02yCWJizGY7lAAObOZ2L4TfV9qQ?= =?us-ascii?Q?AVPsxaTY3KzWRX/XNvguQcFn2R8cO717sZ5We96OpgvrjpRD2YNurT/kuxHB?= =?us-ascii?Q?DnY2RcTGNIqAQWIIOtLUDDM2nPdMNkJ2Quwj6lMEOtCkPKhLbdTm5D0XAfhJ?= =?us-ascii?Q?eQFJVaIzowv3LVhDi+S6x8J+yAok3m3PqtC/K3opoKZUgpaG9zkK7uOWrPUq?= =?us-ascii?Q?GngrWx8UAL2tp/QBwTSc7hB9v81BkXwyziqXFQrXLLPzu8WQenjyF1xUtZ2J?= =?us-ascii?Q?8npBV+Uj+aRs/LOAhf3N2kkN5nP415FXIa6qS7IHh6FbC6oAgeLhwOwV8Mby?= =?us-ascii?Q?5nWWvXakc3Oah6ZKFWYC78els9tY+ew+e9SValsretDfJ2XEV2k2QBfP2Um0?= =?us-ascii?Q?nFjwpHYTMOY6QoMtqxbZq1ZBtxwgQ5voyBEj/JXzVlH74vLh+5PRJ3Doc5bZ?= =?us-ascii?Q?Mq/N2DbekrbzpGCBHrxd4R2hbKb0+vCHfq8f5J9F33Mggv2Ga5z7wqkoliWY?= =?us-ascii?Q?nivDwVARvmiBK2OgYAr2lfx1TZ37wSRnS4cIVXz+oOfe49Wb8gQuvspaNgZj?= =?us-ascii?Q?xFWMYQyELcQ4u7Wwr8JzLRvZ9NPtnKHmLuFsGwBzhW9s6IVfZSpR+52Whoa1?= =?us-ascii?Q?3p8O/21ocQTY3+Ylj8nqUbcxwXds9uaHKGFsVy0b1UijTIrVq8prusmNAFjJ?= =?us-ascii?Q?zD+c4Ag8I4+Dl6wHmbByAi9TbCLU0u7tkCNcgi89/yC684e2y8Fb0Woz1mjj?= =?us-ascii?Q?zXQBSLXR3IIMChRsp1XE5aEvr2zfj8FfppHaOKe04V56Twj6frllmbQa0qnS?= =?us-ascii?Q?lKHT1XBrAuOj/AURMQ5zDGTaKdnAuhkrzfuKfgxlCTqKxAHEXZhO2nE9Ar+1?= =?us-ascii?Q?8puZInZGGTOZ89G/N/zfPHIdi3Mob/sC+GIgYPgVhGmYWndj50hitN93Jrsf?= =?us-ascii?Q?MbVcARudb0Kk08nF8RpCW24kRhyTwgwprbjq9FVJoxhcrS5eUA8LA/6oZVXx?= =?us-ascii?Q?BYLytMKkSkwXEGnW8L13EvuTM20IBZ8W3pfzYyhnDHSe4AHR2+OC6YAHzVEe?= =?us-ascii?Q?q8YWxko3nkVlCLSwbviFRIf5jenz0FDByKoTWyrdLQMePwiOizlk5ztOhUI8?= =?us-ascii?Q?86l1tF7fJeqcHQtoSrj0zVqNxKn9ImbRks2qBXGrxT24WbXptlgFdlW++gNY?= =?us-ascii?Q?kdRMf8OwxckHFKe8w3AlLsLCRb+MsCAuOLM3QYfiIRjoVFySP1Cczk7Klt3y?= =?us-ascii?Q?6eu3G4qqQZwthYxXtXZahDO5Tq4wiRHEPL+kasPMV4QyNXqBivmdHoNijmtW?= =?us-ascii?Q?y9hSxtrpmfNwnm9THiIlnlPkJZosUjvxEMkkdzu2ygeH3uWmhcer9OPlael6?= =?us-ascii?Q?oWYZYYTqEmSWXP7AgRqGbGsIRbHKyt1HollhApMeA9kLZZAdkS1yDePhr74q?= =?us-ascii?Q?lfoiHCkD8qf2q4hGtRTp9s8bvvhoxUFAkKKmMnG41aEdEVEtpRtclQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?42BG1/tHRdjfiFEZykCtSznZZ2uaYopp31O+uKy4o202cDewHeC1MA9Wyr40?= =?us-ascii?Q?6calPYF/At1ardBGs/J3QKe4iNYpIZ8IpoSWs6PzBVZdXwCgD6tZOHsq03It?= =?us-ascii?Q?a+65lPcIfnK/OFwUZVb1WljM8JTIjWOinqmw1UtHbE6zyCnuQrOe/NyzpF2u?= =?us-ascii?Q?fw76luOCF/19wQP3W8eNqqoYCWHBxwFcX9O2zqORasVdUbkpVbJMWUAjh6Sz?= =?us-ascii?Q?I0qyinMA6cJIsfPAngyNkm3NTByMUNbiO0C1RSPPCT8hBXaUsKC6VTy1gu6t?= =?us-ascii?Q?XG2FyBSg8jLt4WCLzt7eV9RbqQ2gGQewjbAF7sNnSwV7WKD2IDy7KmJ/AlFj?= =?us-ascii?Q?4ZpCaiYp0CToMTaNxUl0uiCWTw8yiJAZ/8RGcwK3EaUA3tDU9InoGFf54NRH?= =?us-ascii?Q?IMwomVQFu4XJaIfYAvGLE4fFUm6S/bzmHI5yJby6f26jT+HtD1Mpm7YD9/oo?= =?us-ascii?Q?ESLPSF0f+pGR2BL9LXf+bJFv6CbdsKWiSmfO7EV4a9UNOyXlLutx93+q0PcM?= =?us-ascii?Q?y/N1HIDgQfN/Ayl9UgrqRGOGVBgn0LPpwChdQxlIDPuh2qPpx1dypw867Sf6?= =?us-ascii?Q?WQRhKCieoLI7Vc0B8mctdL4M2TpczkNKr0NEyd1wNd2bLwMPRUN3A2PQDeiQ?= =?us-ascii?Q?w7YdPHXfVhh2Ko93ObqHMUvi0sScfKTalq8bdmu4cUvlpdKbqNbDh9YgNSel?= =?us-ascii?Q?yyyz+UNlVC1KGrTOj4/jc1GTikjG0p3+MTOYgrhCRK22rLYOzfXhr1ORp+MQ?= =?us-ascii?Q?PbLsDIjMfWXAAJyfiKq5HRcn12HhWceulHxnNRjbSJbPtvlVf3pNyuv/ZKqu?= =?us-ascii?Q?pADLKIGtunP2c5f7qhDqUeoIm/gQnngN7m1BfVf3IYLnucroSr7wECu2nNK+?= =?us-ascii?Q?jr0iORHM+w1TC1O63fnq5PxpOUaeV/ufWMj/PXqrhhTh7xXr2gkv420hUeaz?= =?us-ascii?Q?Vvl0LZkUd5VPjHqAm2QPLJwl8zDlEtmCpkfkyAdGoIxReTr7ILF0ZHlkhbDK?= =?us-ascii?Q?h0s9bccq2ybL4SJpRV6+14F/lzdPswn/u4U2BawoWzX1Vj9ZaIK5Z3lB4Yvv?= =?us-ascii?Q?6qxSnY4bzn6W7k+0eWzM6ji9Azn0cN9Bj4lly0cFlKWRuGguZ3BPQNafRkl4?= =?us-ascii?Q?hqr4VKPJ1yhTBBlm+gyy+g/R2cAnuducuOHA3MF/4Pa2CmHcfKMfE8MlLC+1?= =?us-ascii?Q?GTw8WEOeLMW5sP0DX5REPH8UsaTXDkAkxSgf7qiMLpULhWB76VHzYrgtBV03?= =?us-ascii?Q?nrmjwIw9lNCCXKnJMjSof+OaqAVqMXijqmYfWWA7RyZ1uKkvi02ySACtIuUg?= =?us-ascii?Q?spHxERZqiXZ9aZ/bW/O8swK51+vhx9Ij1euuKg0h6F5aXD9d4FyLs22YCA1q?= =?us-ascii?Q?Iq3pwEQ13WklMwRFNgpMiU55wXSfTupWRm/uzLydy9msnJifym4H6e6Et20V?= =?us-ascii?Q?75EuB1JGIfRrNMA/3pLF4nLheXFzNjPWy2RoZ86Zw2DHeQTnN4kyYyZXFzdo?= =?us-ascii?Q?Cq5f+Z5LCIJCbKCqkOae1zHpriQUYvk5Qfpv9mJwQCExxbLmeCDB7uQUaBjj?= =?us-ascii?Q?leRjx05apWAuRCB9sW1urHvBaU7T4/2/4GH9jTH5uh0n0t07fllQyRmrSx86?= =?us-ascii?Q?IA=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29e47d15-eb8e-45ea-0ee0-08ddeae62df3 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:09.5422 (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: ixJRj357923GViyLWlmg+O4Vka3vLtjIDjncJxNl7A+sNDmNF29ad3PR6RxUUAlrLi2vjiS6Em/TZd7tPHOQzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" From: Sandor Yu The i.MX94 Display Control Interface features: * Up to maximum 3 layers of alpha blending: - 1 background layer(Layer 0); - 1 foreground layer(Layer 1); - A programmable constant color behind the background layer; * Each layer supports: - programmable plane size; - programmable background color; - embedded alpha and global alpha; * Data output with CRC checksum for 4 programmable regions; Signed-off-by: Sandor Yu Signed-off-by: Laurentiu Palcu --- drivers/gpu/drm/imx/Kconfig | 1 + drivers/gpu/drm/imx/Makefile | 1 + drivers/gpu/drm/imx/dcif/Kconfig | 15 + drivers/gpu/drm/imx/dcif/Makefile | 5 + drivers/gpu/drm/imx/dcif/dcif-crc.c | 211 ++++++++ drivers/gpu/drm/imx/dcif/dcif-crc.h | 52 ++ drivers/gpu/drm/imx/dcif/dcif-crtc.c | 695 ++++++++++++++++++++++++++ drivers/gpu/drm/imx/dcif/dcif-drv.c | 226 +++++++++ drivers/gpu/drm/imx/dcif/dcif-drv.h | 86 ++++ drivers/gpu/drm/imx/dcif/dcif-kms.c | 100 ++++ drivers/gpu/drm/imx/dcif/dcif-plane.c | 269 ++++++++++ drivers/gpu/drm/imx/dcif/dcif-reg.h | 267 ++++++++++ 12 files changed, 1928 insertions(+) create mode 100644 drivers/gpu/drm/imx/dcif/Kconfig create mode 100644 drivers/gpu/drm/imx/dcif/Makefile create mode 100644 drivers/gpu/drm/imx/dcif/dcif-crc.c create mode 100644 drivers/gpu/drm/imx/dcif/dcif-crc.h create mode 100644 drivers/gpu/drm/imx/dcif/dcif-crtc.c create mode 100644 drivers/gpu/drm/imx/dcif/dcif-drv.c create mode 100644 drivers/gpu/drm/imx/dcif/dcif-drv.h create mode 100644 drivers/gpu/drm/imx/dcif/dcif-kms.c create mode 100644 drivers/gpu/drm/imx/dcif/dcif-plane.c create mode 100644 drivers/gpu/drm/imx/dcif/dcif-reg.h diff --git a/drivers/gpu/drm/imx/Kconfig b/drivers/gpu/drm/imx/Kconfig index 3e8c6edbc17c2..1b6ced5c60b51 100644 --- a/drivers/gpu/drm/imx/Kconfig +++ b/drivers/gpu/drm/imx/Kconfig @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only =20 source "drivers/gpu/drm/imx/dc/Kconfig" +source "drivers/gpu/drm/imx/dcif/Kconfig" source "drivers/gpu/drm/imx/dcss/Kconfig" source "drivers/gpu/drm/imx/ipuv3/Kconfig" source "drivers/gpu/drm/imx/lcdc/Kconfig" diff --git a/drivers/gpu/drm/imx/Makefile b/drivers/gpu/drm/imx/Makefile index c7b317640d71d..2b9fd85eefaa3 100644 --- a/drivers/gpu/drm/imx/Makefile +++ b/drivers/gpu/drm/imx/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 =20 obj-$(CONFIG_DRM_IMX8_DC) +=3D dc/ +obj-$(CONFIG_DRM_IMX_DCIF) +=3D dcif/ obj-$(CONFIG_DRM_IMX_DCSS) +=3D dcss/ obj-$(CONFIG_DRM_IMX) +=3D ipuv3/ obj-$(CONFIG_DRM_IMX_LCDC) +=3D lcdc/ diff --git a/drivers/gpu/drm/imx/dcif/Kconfig b/drivers/gpu/drm/imx/dcif/Kc= onfig new file mode 100644 index 0000000000000..c33c662721d36 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/Kconfig @@ -0,0 +1,15 @@ +config DRM_IMX_DCIF + tristate "DRM support for NXP i.MX94 DCIF" + select DRM_KMS_HELPER + select VIDEOMODE_HELPERS + select DRM_GEM_DMA_HELPER + select DRM_DISPLAY_HELPER + select DRM_BRIDGE_CONNECTOR + select DRM_CLIENT_SELECTION + depends on DRM && OF && ARCH_MXC + depends on COMMON_CLK + help + Enable NXP i.MX94 Display Control Interface(DCIF) support. The DCIF is + a system master that fetches graphics stored in memory and displays + them on a TFT LCD panel or connects to a display interface depending + on the chip configuration. diff --git a/drivers/gpu/drm/imx/dcif/Makefile b/drivers/gpu/drm/imx/dcif/M= akefile new file mode 100644 index 0000000000000..b429572040f0e --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +imx-dcif-drm-objs :=3D dcif-crc.o dcif-crtc.o dcif-drv.o dcif-kms.o dcif-p= lane.o + +obj-$(CONFIG_DRM_IMX_DCIF) +=3D imx-dcif-drm.o diff --git a/drivers/gpu/drm/imx/dcif/dcif-crc.c b/drivers/gpu/drm/imx/dcif= /dcif-crc.c new file mode 100644 index 0000000000000..35743130ccc14 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crc.c @@ -0,0 +1,211 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright 2025 NXP + */ + +#include + +#include +#include + +#include "dcif-crc.h" +#include "dcif-reg.h" + +#define MAX_DCIF_CRC_NUM 4 + +static int dcif_crc_config(struct dcif_dev *dcif, struct drm_rect *roi, in= t ncrc) +{ + int pos, size; + + if (ncrc >=3D MAX_DCIF_CRC_NUM) + return -EINVAL; + + pos =3D DCIF_CRC_POS_CRC_HOR_POS(roi->x1) | + DCIF_CRC_POS_CRC_VER_POS(roi->y1); + size =3D DCIF_CRC_SIZE_CRC_HOR_SIZE(roi->x2 - roi->x1) | + DCIF_CRC_SIZE_CRC_VER_SIZE(roi->y2 - roi->y1); + + regmap_write(dcif->regmap, DCIF_CRC_POS_R(ncrc), pos); + regmap_write(dcif->regmap, DCIF_CRC_SIZE_R(ncrc), size); + + regmap_set_bits(dcif->regmap, DCIF_CRC_CTRL, + DCIF_CRC_CTRL_CRC_EN(ncrc) | DCIF_CRC_CTRL_CRC_ERR_CNT_RST); + + return 0; +} + +void dcif_crtc_enable_crc_source(struct dcif_dev *dcif, + enum dcif_crc_source source, + struct drm_rect *roi, + int ncrc) +{ + if (ncrc >=3D MAX_DCIF_CRC_NUM) + return; + + if (source =3D=3D DCIF_CRC_SRC_NONE) + return; + + if (dcif->crc_is_enabled) + return; + + dcif_crc_config(dcif, roi, ncrc); + + regmap_set_bits(dcif->regmap, DCIF_CRC_CTRL, + DCIF_CRC_CTRL_CRC_MODE | DCIF_CRC_CTRL_CRC_SHADOW_LOAD_EN | + DCIF_CRC_CTRL_CRC_TRIG); + + dcif->crc_is_enabled =3D true; +} + +void dcif_crtc_disable_crc_source(struct dcif_dev *dcif, int ncrc) +{ + if (!dcif->crc_is_enabled) + return; + + if (ncrc >=3D MAX_DCIF_CRC_NUM) + return; + + regmap_clear_bits(dcif->regmap, DCIF_CRC_CTRL, DCIF_CRC_CTRL_CRC_EN(ncrc)= ); + + dcif->crc_is_enabled =3D false; +} + +/* + * Supported modes and source names: + * 1) auto mode: + * "auto" should be selected as the source name. + * The evaluation window is the same to the display region as + * indicated by drm_crtc_state->adjusted_mode. + * + * 2) region of interest(ROI) mode: + * "roi:x1,y1,x2,y2" should be selected as the source name. + * The region of interest is defined by the inclusive upper left + * position at (x1, y1) and the exclusive lower right position + * at (x2, y2), see struct drm_rect for the same idea. + * The evaluation window is the region of interest. + */ +static int +dcif_crc_parse_source(const char *source_name, enum dcif_crc_source *s, + struct drm_rect *roi) +{ + static const char roi_prefix[] =3D "roi:"; + + if (!source_name) { + *s =3D DCIF_CRC_SRC_NONE; + } else if (!strcmp(source_name, "auto")) { + *s =3D DCIF_CRC_SRC_FRAME; + } else if (strstarts(source_name, roi_prefix)) { + char *options __free(kfree) =3D NULL, *opt; + int len =3D strlen(roi_prefix); + int params[4]; + int i =3D 0, ret; + + options =3D kstrdup(source_name + len, GFP_KERNEL); + + while ((opt =3D strsep(&options, ",")) !=3D NULL) { + if (i > 3) + return -EINVAL; + + ret =3D kstrtouint(opt, 10, ¶ms[i]); + if (ret < 0) + return ret; + + if (params[i] < 0) + return -EINVAL; + + i++; + } + + if (i !=3D 4) + return -EINVAL; + + roi->x1 =3D params[0]; + roi->y1 =3D params[1]; + roi->x2 =3D params[2]; + roi->y2 =3D params[3]; + + if (!drm_rect_visible(roi)) + return -EINVAL; + + *s =3D DCIF_CRC_SRC_FRAME_ROI; + } else { + return -EINVAL; + } + + return 0; +} + +int dcif_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_= name, + size_t *values_cnt) +{ + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + enum dcif_crc_source source; + struct drm_rect roi; + + if (dcif_crc_parse_source(source_name, &source, &roi) < 0) { + dev_dbg(dcif->drm.dev, "unknown source %s\n", source_name); + return -EINVAL; + } + + *values_cnt =3D 1; + + return 0; +} + +int dcif_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_nam= e) +{ + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + struct drm_modeset_acquire_ctx ctx; + struct drm_crtc_state *crtc_state; + struct drm_atomic_state *state; + struct drm_rect roi =3D {0, 0, 0, 0}; + enum dcif_crc_source source; + int ret; + + if (dcif_crc_parse_source(source_name, &source, &roi) < 0) { + dev_dbg(dcif->drm.dev, "unknown source %s\n", source_name); + return -EINVAL; + } + + /* Perform an atomic commit to set the CRC source. */ + drm_modeset_acquire_init(&ctx, 0); + + state =3D drm_atomic_state_alloc(crtc->dev); + if (!state) { + ret =3D -ENOMEM; + goto unlock; + } + + state->acquire_ctx =3D &ctx; + +retry: + crtc_state =3D drm_atomic_get_crtc_state(state, crtc); + if (!IS_ERR(crtc_state)) { + struct dcif_crtc_state *dcif_crtc_state; + + dcif_crtc_state =3D to_dcif_crtc_state(crtc_state); + + dcif_crtc_state->crc.source =3D source; + dcif_copy_roi(&roi, &dcif_crtc_state->crc.roi); + + ret =3D drm_atomic_commit(state); + } else { + ret =3D PTR_ERR(crtc_state); + } + + if (ret =3D=3D -EDEADLK) { + drm_atomic_state_clear(state); + drm_modeset_backoff(&ctx); + goto retry; + } + + drm_atomic_state_put(state); + +unlock: + drm_modeset_drop_locks(&ctx); + drm_modeset_acquire_fini(&ctx); + + return ret; +} + diff --git a/drivers/gpu/drm/imx/dcif/dcif-crc.h b/drivers/gpu/drm/imx/dcif= /dcif-crc.h new file mode 100644 index 0000000000000..a51b44165d564 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crc.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ + +#ifndef __DCIF_CRC_H__ +#define __DCIF_CRC_H__ + +#include + +#include "dcif-drv.h" + +static inline bool to_enable_dcif_crc(struct dcif_crtc_state *new_dcstate, + struct dcif_crtc_state *old_dcstate) +{ + return old_dcstate->crc.source =3D=3D DCIF_CRC_SRC_NONE && + new_dcstate->crc.source !=3D DCIF_CRC_SRC_NONE; +} + +static inline bool to_disable_dcif_crc(struct dcif_crtc_state *new_dcstate, + struct dcif_crtc_state *old_dcstate) +{ + return old_dcstate->crc.source !=3D DCIF_CRC_SRC_NONE && + new_dcstate->crc.source =3D=3D DCIF_CRC_SRC_NONE; +} + +static inline void dcif_copy_roi(struct drm_rect *from, struct drm_rect *t= o) +{ + to->x1 =3D from->x1; + to->y1 =3D from->y1; + to->x2 =3D from->x2; + to->y2 =3D from->y2; +} + +#ifdef CONFIG_DEBUG_FS +int dcif_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_= name, + size_t *values_cnt); +int dcif_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_nam= e); +void dcif_crtc_enable_crc_source(struct dcif_dev *dcif, + enum dcif_crc_source source, + struct drm_rect *roi, + int ncrc); +void dcif_crtc_disable_crc_source(struct dcif_dev *dcif, int ncrc); +#else +#define dcif_crtc_verify_crc_source NULL +#define dcif_crtc_set_crc_source NULL +#define dcif_crtc_enable_crc_source NULL +#define dcif_crtc_disable_crc_source NULL +#endif + +#endif /* __DCIF_CRC_H__ */ diff --git a/drivers/gpu/drm/imx/dcif/dcif-crtc.c b/drivers/gpu/drm/imx/dci= f/dcif-crtc.c new file mode 100644 index 0000000000000..acf378a0ad180 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crtc.c @@ -0,0 +1,695 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright 2025 NXP + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dcif-crc.h" +#include "dcif-drv.h" +#include "dcif-reg.h" + +#define DCIF_MAX_PIXEL_CLOCK 148500000 + +/* -----------------------------------------------------------------------= ------ + * CRTC + */ + +/* + * For conversion from YCbCr to RGB, the CSC operates as follows: + * + * |R| |A1 A2 A3| |Y + D1| + * |G| =3D |B1 B2 B3| * |Cb + D2| + * |B| |C1 C2 C3| |Cr + D3| + * + * The A, B and C coefficients are expressed as signed Q3.8 fixed point va= lues and + * the D coefficients as signed Q9.0. + */ +static const u32 dcif_yuv2rgb_coeffs[3][2][6] =3D { + [DRM_COLOR_YCBCR_BT601] =3D { + [DRM_COLOR_YCBCR_LIMITED_RANGE] =3D { + /* + * BT.601 limited range: + * + * |R| |1.1644 0.0000 1.5960| |Y - 16 | + * |G| =3D |1.1644 -0.3917 -0.8129| * |Cb - 128| + * |B| |1.1644 2.0172 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x12a) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x199) | DCIF_CSC_COEF1_L0_B1(0x12a), + DCIF_CSC_COEF2_L0_B2(0x79c) | DCIF_CSC_COEF2_L0_B3(0x730), + DCIF_CSC_COEF3_L0_C1(0x12a) | DCIF_CSC_COEF3_L0_C2(0x204), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x1f0), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + [DRM_COLOR_YCBCR_FULL_RANGE] =3D { + /* + * BT.601 full range: + * + * |R| |1.0000 0.0000 1.4020| |Y - 0 | + * |G| =3D |1.0000 -0.3441 -0.7141| * |Cb - 128| + * |B| |1.0000 1.7720 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x100) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x167) | DCIF_CSC_COEF1_L0_B1(0x100), + DCIF_CSC_COEF2_L0_B2(0x7a8) | DCIF_CSC_COEF2_L0_B3(0x749), + DCIF_CSC_COEF3_L0_C1(0x100) | DCIF_CSC_COEF3_L0_C2(0x1c6), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x000), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + }, + [DRM_COLOR_YCBCR_BT709] =3D { + [DRM_COLOR_YCBCR_LIMITED_RANGE] =3D { + /* + * Rec.709 limited range: + * + * |R| |1.1644 0.0000 1.7927| |Y - 16 | + * |G| =3D |1.1644 -0.2132 -0.5329| * |Cb - 128| + * |B| |1.1644 2.1124 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x12a) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x1cb) | DCIF_CSC_COEF1_L0_B1(0x12a), + DCIF_CSC_COEF2_L0_B2(0x7c9) | DCIF_CSC_COEF2_L0_B3(0x778), + DCIF_CSC_COEF3_L0_C1(0x12a) | DCIF_CSC_COEF3_L0_C2(0x21d), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x1f0), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + [DRM_COLOR_YCBCR_FULL_RANGE] =3D { + /* + * Rec.709 full range: + * + * |R| |1.0000 0.0000 1.5748| |Y - 0 | + * |G| =3D |1.0000 -0.1873 -0.4681| * |Cb - 128| + * |B| |1.0000 1.8556 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x100) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x193) | DCIF_CSC_COEF1_L0_B1(0x100), + DCIF_CSC_COEF2_L0_B2(0x7d0) | DCIF_CSC_COEF2_L0_B3(0x788), + DCIF_CSC_COEF3_L0_C1(0x100) | DCIF_CSC_COEF3_L0_C2(0x1db), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x000), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + }, + [DRM_COLOR_YCBCR_BT2020] =3D { + [DRM_COLOR_YCBCR_LIMITED_RANGE] =3D { + /* + * BT.2020 limited range: + * + * |R| |1.1644 0.0000 1.6787| |Y - 16 | + * |G| =3D |1.1644 -0.1874 -0.6505| * |Cb - 128| + * |B| |1.1644 2.1418 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x12a) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x1ae) | DCIF_CSC_COEF1_L0_B1(0x12a), + DCIF_CSC_COEF2_L0_B2(0x7d0) | DCIF_CSC_COEF2_L0_B3(0x759), + DCIF_CSC_COEF3_L0_C1(0x12a) | DCIF_CSC_COEF3_L0_C2(0x224), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x1f0), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + [DRM_COLOR_YCBCR_FULL_RANGE] =3D { + /* + * BT.2020 full range: + * + * |R| |1.0000 0.0000 1.4746| |Y - 0 | + * |G| =3D |1.0000 -0.1646 -0.5714| * |Cb - 128| + * |B| |1.0000 1.8814 0.0000| |Cr - 128| + */ + DCIF_CSC_COEF0_L0_A1(0x100) | DCIF_CSC_COEF0_L0_A2(0x000), + DCIF_CSC_COEF1_L0_A3(0x179) | DCIF_CSC_COEF1_L0_B1(0x100), + DCIF_CSC_COEF2_L0_B2(0x7d6) | DCIF_CSC_COEF2_L0_B3(0x76e), + DCIF_CSC_COEF3_L0_C1(0x100) | DCIF_CSC_COEF3_L0_C2(0x1e2), + DCIF_CSC_COEF4_L0_C3(0x000) | DCIF_CSC_COEF4_L0_D1(0x000), + DCIF_CSC_COEF5_L0_D2(0x180) | DCIF_CSC_COEF5_L0_D3(0x180), + }, + }, +}; + +static enum drm_mode_status dcif_crtc_mode_valid(struct drm_crtc *crtc, + const struct drm_display_mode *mode) +{ + if (mode->crtc_clock > DCIF_MAX_PIXEL_CLOCK) + return MODE_CLOCK_HIGH; + + return MODE_OK; +} + +static void dcif_set_formats(struct dcif_dev *dcif, struct drm_plane_state= *plane_state, + const u32 bus_format) +{ + const u32 format =3D plane_state->fb->format->format; + struct drm_device *drm =3D &dcif->drm; + bool in_yuv =3D false; + u32 reg =3D 0; + + switch (bus_format) { + case MEDIA_BUS_FMT_RGB565_1X16: + reg |=3D DCIF_DPI_CTRL_DATA_PATTERN(PATTERN_RGB565); + break; + case MEDIA_BUS_FMT_RGB888_1X24: + reg |=3D DCIF_DPI_CTRL_DATA_PATTERN(PATTERN_RGB888); + break; + case MEDIA_BUS_FMT_RBG888_1X24: + reg |=3D DCIF_DPI_CTRL_DATA_PATTERN(PATTERN_RBG888); + break; + case MEDIA_BUS_FMT_BGR888_1X24: + reg |=3D DCIF_DPI_CTRL_DATA_PATTERN(PATTERN_BGR888); + break; + case MEDIA_BUS_FMT_GBR888_1X24: + reg |=3D DCIF_DPI_CTRL_DATA_PATTERN(PATTERN_GBR888); + break; + default: + dev_err(drm->dev, "Unknown media bus format 0x%x\n", bus_format); + break; + } + + regmap_update_bits(dcif->regmap, DCIF_DPI_CTRL, DCIF_DPI_CTRL_DATA_PATTER= N_MASK, reg); + + reg =3D 0; + switch (format) { + /* RGB Formats */ + case DRM_FORMAT_RGB565: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_RGB565); + break; + case DRM_FORMAT_RGB888: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_RGB888); + break; + case DRM_FORMAT_XRGB1555: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ARGB1555); + break; + case DRM_FORMAT_XRGB4444: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ARGB4444); + break; + case DRM_FORMAT_XBGR8888: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ABGR8888); + break; + case DRM_FORMAT_XRGB8888: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ARGB8888); + break; + + /* YUV Formats */ + case DRM_FORMAT_YUYV: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_YCBCR422) | + DCIF_CTRLDESC0_YUV_FORMAT(CTRLDESCL0_YUV_FORMAT_VY2UY1); + in_yuv =3D true; + break; + case DRM_FORMAT_YVYU: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_YCBCR422) | + DCIF_CTRLDESC0_YUV_FORMAT(CTRLDESCL0_YUV_FORMAT_UY2VY1); + in_yuv =3D true; + break; + case DRM_FORMAT_UYVY: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_YCBCR422) | + DCIF_CTRLDESC0_YUV_FORMAT(CTRLDESCL0_YUV_FORMAT_Y2VY1U); + in_yuv =3D true; + break; + case DRM_FORMAT_VYUY: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_YCBCR422) | + DCIF_CTRLDESC0_YUV_FORMAT(CTRLDESCL0_YUV_FORMAT_Y2UY1V); + in_yuv =3D true; + break; + + default: + dev_err(drm->dev, "Unknown pixel format 0x%x\n", format); + break; + } + + regmap_update_bits(dcif->regmap, DCIF_CTRLDESC0(0), + DCIF_CTRLDESC0_FORMAT_MASK | DCIF_CTRLDESC0_YUV_FORMAT_MASK, + reg); + + if (in_yuv) { + /* Enable CSC YCbCr -> RGB */ + const u32 *coeffs =3D + dcif_yuv2rgb_coeffs[plane_state->color_encoding][plane_state->color_ran= ge]; + + regmap_bulk_write(dcif->regmap, DCIF_CSC_COEF0_L0, coeffs, 6); + + regmap_write(dcif->regmap, DCIF_CSC_CTRL_L0, + DCIF_CSC_CTRL_L0_CSC_EN | + DCIF_CSC_CTRL_L0_CSC_MODE_YCBCR2RGB); + } else { + regmap_write(dcif->regmap, DCIF_CSC_CTRL_L0, 0); + } +} + +static void dcif_set_mode(struct dcif_dev *dcif, u32 bus_flags) +{ + struct drm_display_mode *m =3D &dcif->crtc.state->adjusted_mode; + u32 reg =3D 0; + + if (m->flags & DRM_MODE_FLAG_NHSYNC) + reg |=3D DCIF_DPI_CTRL_HSYNC_POL_LOW; + if (m->flags & DRM_MODE_FLAG_NVSYNC) + reg |=3D DCIF_DPI_CTRL_VSYNC_POL_LOW; + if (bus_flags & DRM_BUS_FLAG_DE_LOW) + reg |=3D DCIF_DPI_CTRL_DE_POL_LOW; + if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) + reg |=3D DCIF_DPI_CTRL_PCLK_EDGE_FALLING; + + regmap_update_bits(dcif->regmap, DCIF_DPI_CTRL, DCIF_DPI_CTRL_POL_MASK, r= eg); + + /* config display timings */ + reg =3D DCIF_DISP_SIZE_DISP_WIDTH(m->hdisplay) | + DCIF_DISP_SIZE_DISP_HEIGHT(m->vdisplay); + regmap_write(dcif->regmap, DCIF_DISP_SIZE, reg); + + reg =3D DCIF_DPI_HSYN_PAR_BP_H(m->htotal - m->hsync_end) | + DCIF_DPI_HSYN_PAR_FP_H(m->hsync_start - m->hdisplay); + regmap_write(dcif->regmap, DCIF_DPI_HSYN_PAR, reg); + + reg =3D DCIF_DPI_VSYN_PAR_BP_V(m->vtotal - m->vsync_end) | + DCIF_DPI_VSYN_PAR_FP_V(m->vsync_start - m->vdisplay); + regmap_write(dcif->regmap, DCIF_DPI_VSYN_PAR, reg); + + reg =3D DCIF_DPI_VSYN_HSYN_WIDTH_PW_V(m->vsync_end - m->vsync_start) | + DCIF_DPI_VSYN_HSYN_WIDTH_PW_H(m->hsync_end - m->hsync_start); + regmap_write(dcif->regmap, DCIF_DPI_VSYN_HSYN_WIDTH, reg); + + /* Layer 0 frame size */ + reg =3D DCIF_CTRLDESC2_HEIGHT(m->vdisplay) | + DCIF_CTRLDESC2_WIDTH(m->hdisplay); + regmap_write(dcif->regmap, DCIF_CTRLDESC2(0), reg); + + /* + * Configure P_SIZE, T_SIZE and pitch + * 1. P_SIZE and T_SIZE should never be less than AXI bus width. + * 2. P_SIZE should never be less than T_SIZE. + */ + reg =3D DCIF_CTRLDESC3_P_SIZE(2) | DCIF_CTRLDESC3_T_SIZE(2) | + DCIF_CTRLDESC3_PITCH(dcif->crtc.primary->state->fb->pitches[0]); + regmap_write(dcif->regmap, DCIF_CTRLDESC3(0), reg); +} + +static void dcif_enable_plane_panic(struct dcif_dev *dcif) +{ + u32 reg; + + /* Set FIFO Panic watermarks, low 1/3, high 2/3. */ + reg =3D DCIF_PANIC_THRES_LOW(1 * PANIC0_THRES_MAX / 3) | + DCIF_PANIC_THRES_HIGH(2 * PANIC0_THRES_MAX / 3) | + DCIF_PANIC_THRES_REQ_EN; + regmap_write(dcif->regmap, DCIF_PANIC_THRES(0), reg); + regmap_write(dcif->regmap, DCIF_PANIC_THRES(1), reg); + + regmap_set_bits(dcif->regmap, DCIF_IE1(dcif->cpu_domain), + DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1); +} + +static void dcif_disable_plane_panic(struct dcif_dev *dcif) +{ + regmap_clear_bits(dcif->regmap, DCIF_IE1(dcif->cpu_domain), + DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1); + regmap_clear_bits(dcif->regmap, DCIF_PANIC_THRES(0), DCIF_PANIC_THRES_REQ= _EN); + regmap_clear_bits(dcif->regmap, DCIF_PANIC_THRES(1), DCIF_PANIC_THRES_REQ= _EN); +} + +static void dcif_enable_controller(struct dcif_dev *dcif) +{ + /* Enable Display */ + regmap_set_bits(dcif->regmap, DCIF_DISP_CTRL, DCIF_DISP_CTRL_DISP_ON); + + /* Enable layer 0 */ + regmap_set_bits(dcif->regmap, DCIF_CTRLDESC0(0), DCIF_CTRLDESC0_EN); +} + +static void dcif_disable_controller(struct dcif_dev *dcif) +{ + u32 reg; + int ret; + + /* Disable layer 0 */ + regmap_clear_bits(dcif->regmap, DCIF_CTRLDESC0(0), DCIF_CTRLDESC0_EN); + + ret =3D regmap_read_poll_timeout(dcif->regmap, DCIF_CTRLDESC0(0), reg, + !(reg & DCIF_CTRLDESC0_EN), 0, + 36000); /* Wait ~2 frame times max */ + if (ret) + drm_err(&dcif->drm, "Failed to disable controller!\n"); + + /* Disable Display */ + regmap_clear_bits(dcif->regmap, DCIF_DISP_CTRL, DCIF_DISP_CTRL_DISP_ON); +} + +static void dcif_shadow_load_enable(struct dcif_dev *dcif) +{ + regmap_write_bits(dcif->regmap, DCIF_CTRLDESC0(0), DCIF_CTRLDESC0_SHADOW_= LOAD_EN, + DCIF_CTRLDESC0_SHADOW_LOAD_EN); +} + +static void dcif_reset_block(struct dcif_dev *dcif) +{ + regmap_set_bits(dcif->regmap, DCIF_DISP_CTRL, DCIF_DISP_CTRL_SW_RST); + + regmap_clear_bits(dcif->regmap, DCIF_DISP_CTRL, DCIF_DISP_CTRL_SW_RST); +} + +static void dcif_crtc_atomic_destroy_state(struct drm_crtc *crtc, + struct drm_crtc_state *state) +{ + __drm_atomic_helper_crtc_destroy_state(state); + kfree(to_dcif_crtc_state(state)); +} + +static void dcif_crtc_reset(struct drm_crtc *crtc) +{ + struct dcif_crtc_state *state; + + if (crtc->state) + dcif_crtc_atomic_destroy_state(crtc, crtc->state); + + crtc->state =3D NULL; + + state =3D kzalloc(sizeof(*state), GFP_KERNEL); + if (state) + __drm_atomic_helper_crtc_reset(crtc, &state->base); +} + +static struct drm_crtc_state *dcif_crtc_atomic_duplicate_state(struct drm_= crtc *crtc) +{ + struct dcif_crtc_state *old =3D to_dcif_crtc_state(crtc->state); + struct dcif_crtc_state *new; + + if (WARN_ON(!crtc->state)) + return NULL; + + new =3D kzalloc(sizeof(*new), GFP_KERNEL); + if (!new) + return NULL; + + __drm_atomic_helper_crtc_duplicate_state(crtc, &new->base); + + new->bus_format =3D old->bus_format; + new->bus_flags =3D old->bus_flags; + new->crc.source =3D old->crc.source; + dcif_copy_roi(&old->crc.roi, &new->crc.roi); + + return &new->base; +} + +static void dcif_crtc_mode_set_nofb(struct drm_crtc_state *crtc_state, + struct drm_plane_state *plane_state) +{ + struct dcif_crtc_state *dcif_crtc_state =3D to_dcif_crtc_state(crtc_state= ); + struct drm_device *drm =3D crtc_state->crtc->dev; + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc_state->crtc); + struct drm_display_mode *m =3D &crtc_state->adjusted_mode; + + dev_dbg(drm->dev, "Pixel clock: %dkHz\n", m->crtc_clock); + dev_dbg(drm->dev, "Bridge bus_flags: 0x%08X\n", dcif_crtc_state->bus_flag= s); + dev_dbg(drm->dev, "Mode flags: 0x%08X\n", m->flags); + + dcif_reset_block(dcif); + + dcif_set_formats(dcif, plane_state, dcif_crtc_state->bus_format); + + dcif_set_mode(dcif, dcif_crtc_state->bus_flags); +} + +static void dcif_crtc_queue_state_event(struct drm_crtc *crtc) +{ + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + + scoped_guard(spinlock, &crtc->dev->event_lock) { + if (crtc->state->event) { + WARN_ON(drm_crtc_vblank_get(crtc)); + WARN_ON(dcif->event); + dcif->event =3D crtc->state->event; + crtc->state->event =3D NULL; + } + } +} + +static struct drm_bridge *dcif_crtc_get_bridge(struct drm_crtc *crtc, + struct drm_crtc_state *crtc_state) +{ + struct drm_connector_state *conn_state; + struct drm_encoder *encoder; + struct drm_connector *conn; + struct drm_bridge *bridge; + int i; + + for_each_new_connector_in_state(crtc_state->state, conn, conn_state, i) { + if (crtc !=3D conn_state->crtc) + continue; + + encoder =3D conn_state->best_encoder; + + bridge =3D drm_bridge_chain_get_first_bridge(encoder); + if (bridge) + return bridge; + } + + return NULL; +} + +static void dcif_crtc_query_output_bus_format(struct drm_crtc *crtc, + struct drm_crtc_state *crtc_state) +{ + struct dcif_crtc_state *dcif_state =3D to_dcif_crtc_state(crtc_state); + struct drm_bridge_state *bridge_state; + struct drm_bridge *bridge; + + dcif_state->bus_format =3D MEDIA_BUS_FMT_RGB888_1X24; + dcif_state->bus_flags =3D 0; + + bridge =3D dcif_crtc_get_bridge(crtc, crtc_state); + if (!bridge) + return; + + bridge_state =3D drm_atomic_get_new_bridge_state(crtc_state->state, bridg= e); + if (!bridge_state) + return; + + dcif_state->bus_format =3D bridge_state->input_bus_cfg.format; + dcif_state->bus_flags =3D bridge_state->input_bus_cfg.flags; +} + +static int dcif_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic= _state *state) +{ + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + bool enable_primary =3D crtc_state->plane_mask & drm_plane_mask(crtc->pri= mary); + int ret; + + if (crtc_state->active && !enable_primary) + return -EINVAL; + + dcif_crtc_query_output_bus_format(crtc, crtc_state); + + if (crtc_state->active_changed && crtc_state->active) { + if (!crtc_state->mode_changed) { + crtc_state->mode_changed =3D true; + ret =3D drm_atomic_helper_check_modeset(crtc->dev, state); + if (ret) + return ret; + } + } + + return 0; +} + +static void dcif_crtc_atomic_flush(struct drm_crtc *crtc, + struct drm_atomic_state *state) +{ + struct drm_crtc_state *old_crtc_state =3D drm_atomic_get_old_crtc_state(s= tate, crtc); + struct dcif_crtc_state *old_dcif_crtc_state =3D to_dcif_crtc_state(old_cr= tc_state); + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + struct dcif_crtc_state *dcif_crtc_state =3D to_dcif_crtc_state(crtc_state= ); + bool need_modeset =3D drm_atomic_crtc_needs_modeset(crtc->state); + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + + dcif_shadow_load_enable(dcif); + + if (!crtc->state->active && !old_crtc_state->active) + return; + + if (!need_modeset && to_disable_dcif_crc(dcif_crtc_state, old_dcif_crtc_s= tate)) + dcif_crtc_disable_crc_source(dcif, 0); + + if (!need_modeset) + dcif_crtc_queue_state_event(crtc); + + if (!need_modeset && to_enable_dcif_crc(dcif_crtc_state, old_dcif_crtc_st= ate)) + dcif_crtc_enable_crc_source(dcif, dcif_crtc_state->crc.source, + &dcif_crtc_state->crc.roi, 0); +} + +static void dcif_crtc_atomic_enable(struct drm_crtc *crtc, + struct drm_atomic_state *state) +{ + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + struct drm_plane_state *plane_state =3D drm_atomic_get_new_plane_state(st= ate, crtc->primary); + struct dcif_crtc_state *dcif_crtc_state =3D to_dcif_crtc_state(crtc_state= ); + struct drm_display_mode *adj =3D &crtc_state->adjusted_mode; + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + struct drm_device *drm =3D crtc->dev; + dma_addr_t baseaddr; + int ret; + + dev_dbg(drm->dev, "mode " DRM_MODE_FMT "\n", DRM_MODE_ARG(adj)); + + /* enable power when we start to set mode for CRTC */ + ret =3D pm_runtime_resume_and_get(drm->dev); + if (ret < 0) + drm_err(drm, "failed to resume DCIF, ret =3D %d\n", ret); + + drm_crtc_vblank_on(crtc); + + dcif_crtc_mode_set_nofb(crtc_state, plane_state); + + baseaddr =3D drm_fb_dma_get_gem_addr(plane_state->fb, plane_state, 0); + if (baseaddr) + regmap_write(dcif->regmap, DCIF_CTRLDESC4(0), baseaddr); + + dcif_enable_plane_panic(dcif); + dcif_enable_controller(dcif); + + dcif_crtc_queue_state_event(crtc); + + if (dcif->has_crc && dcif_crtc_state->crc.source !=3D DCIF_CRC_SRC_NONE) + dcif_crtc_enable_crc_source(dcif, dcif_crtc_state->crc.source, + &dcif_crtc_state->crc.roi, 0); +} + +static void dcif_crtc_atomic_disable(struct drm_crtc *crtc, + struct drm_atomic_state *state) +{ + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + struct dcif_crtc_state *dcif_crtc_state =3D to_dcif_crtc_state(crtc_state= ); + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + struct drm_device *drm =3D crtc->dev; + + if (dcif->has_crc && dcif_crtc_state->crc.source !=3D DCIF_CRC_SRC_NONE) + dcif_crtc_disable_crc_source(dcif, 0); + + dcif_disable_controller(dcif); + dcif_disable_plane_panic(dcif); + + drm_crtc_vblank_off(crtc); + + pm_runtime_put_sync(drm->dev); + + scoped_guard(spinlock, &crtc->dev->event_lock) { + if (crtc->state->event && !crtc->state->active) { + drm_crtc_send_vblank_event(crtc, crtc->state->event); + crtc->state->event =3D NULL; + } + } +} + +static const struct drm_crtc_helper_funcs dcif_crtc_helper_funcs =3D { + .mode_valid =3D dcif_crtc_mode_valid, + .atomic_check =3D dcif_crtc_atomic_check, + .atomic_flush =3D dcif_crtc_atomic_flush, + .atomic_enable =3D dcif_crtc_atomic_enable, + .atomic_disable =3D dcif_crtc_atomic_disable, +}; + +static int dcif_crtc_enable_vblank(struct drm_crtc *crtc) +{ + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + int domain =3D dcif->cpu_domain; + + /* Clear and enable VS_BLANK IRQ */ + regmap_set_bits(dcif->regmap, DCIF_IS0(domain), DCIF_INT0_VS_BLANK); + regmap_set_bits(dcif->regmap, DCIF_IE0(domain), DCIF_INT0_VS_BLANK); + + return 0; +} + +static void dcif_crtc_disable_vblank(struct drm_crtc *crtc) +{ + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + int domain =3D dcif->cpu_domain; + + /* Disable and clear VS_BLANK IRQ */ + regmap_clear_bits(dcif->regmap, DCIF_IE0(domain), DCIF_INT0_VS_BLANK); + regmap_clear_bits(dcif->regmap, DCIF_IS0(domain), DCIF_INT0_VS_BLANK); +} + +static const struct drm_crtc_funcs dcif_crtc_funcs =3D { + .reset =3D dcif_crtc_reset, + .destroy =3D drm_crtc_cleanup, + .set_config =3D drm_atomic_helper_set_config, + .page_flip =3D drm_atomic_helper_page_flip, + .atomic_duplicate_state =3D dcif_crtc_atomic_duplicate_state, + .atomic_destroy_state =3D dcif_crtc_atomic_destroy_state, + .enable_vblank =3D dcif_crtc_enable_vblank, + .disable_vblank =3D dcif_crtc_disable_vblank, + .set_crc_source =3D dcif_crtc_set_crc_source, + .verify_crc_source =3D dcif_crtc_verify_crc_source, +}; + +irqreturn_t dcif_irq_handler(int irq, void *data) +{ + struct drm_device *drm =3D data; + struct dcif_dev *dcif =3D to_dcif_dev(drm); + int domain =3D dcif->cpu_domain; + u32 stat0, stat1, crc; + + regmap_read(dcif->regmap, DCIF_IS0(domain), &stat0); + regmap_read(dcif->regmap, DCIF_IS1(domain), &stat1); + regmap_write(dcif->regmap, DCIF_IS0(domain), stat0); + regmap_write(dcif->regmap, DCIF_IS1(domain), stat1); + + if (stat0 & DCIF_INT0_VS_BLANK) { + drm_crtc_handle_vblank(&dcif->crtc); + + scoped_guard(spinlock_irqsave, &drm->event_lock) { + if (dcif->event) { + drm_crtc_send_vblank_event(&dcif->crtc, dcif->event); + dcif->event =3D NULL; + drm_crtc_vblank_put(&dcif->crtc); + } + if (dcif->crc_is_enabled) { + regmap_read(dcif->regmap, DCIF_CRC_VAL_R(0), &crc); + drm_crtc_add_crc_entry(&dcif->crtc, false, 0, &crc); + dev_dbg(drm->dev, "crc=3D0x%x\n", crc); + } + } + } + + if (stat1 & (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1)) { + u32 panic =3D stat1 & (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1); + + dev_dbg_ratelimited(drm->dev, "FIFO panic on %s\n", + panic =3D=3D (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1) ? + "layers 0 & 1" : panic =3D=3D DCIF_INT1_FIFO_PANIC0 ? "layer 0" : + "layer 1"); + } + + return IRQ_HANDLED; +} + +int dcif_crtc_init(struct dcif_dev *dcif) +{ + int ret; + + ret =3D dcif_plane_init(dcif); + if (ret) + return ret; + + drm_crtc_helper_add(&dcif->crtc, &dcif_crtc_helper_funcs); + ret =3D drm_crtc_init_with_planes(&dcif->drm, &dcif->crtc, &dcif->planes.= primary, NULL, + &dcif_crtc_funcs, NULL); + if (ret) { + drm_err(&dcif->drm, "failed to initialize CRTC: %d\n", ret); + return ret; + } + + return 0; +} diff --git a/drivers/gpu/drm/imx/dcif/dcif-drv.c b/drivers/gpu/drm/imx/dcif= /dcif-drv.c new file mode 100644 index 0000000000000..893d94f7dd4ea --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-drv.c @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright 2025 NXP + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "dcif-drv.h" +#include "dcif-reg.h" + +#define DCIF_CPU_DOMAIN 0 + +DEFINE_DRM_GEM_DMA_FOPS(dcif_driver_fops); + +static struct drm_driver dcif_driver =3D { + .driver_features =3D DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC, + DRM_GEM_DMA_DRIVER_OPS, + DRM_FBDEV_DMA_DRIVER_OPS, + .fops =3D &dcif_driver_fops, + .name =3D "imx-dcif", + .desc =3D "i.MX DCIF DRM graphics", + .major =3D 1, + .minor =3D 0, + .patchlevel =3D 0, +}; + +static void dcif_read_chip_info(struct dcif_dev *dcif) +{ + struct drm_device *drm =3D &dcif->drm; + u32 val, vmin, vmaj; + + pm_runtime_get_sync(drm->dev); + + regmap_read(dcif->regmap, DCIF_VER, &val); + + dcif->has_crc =3D val & DCIF_FEATURE_CRC; + + vmin =3D DCIF_VER_GET_MINOR(val); + vmaj =3D DCIF_VER_GET_MAJOR(val); + DRM_DEV_DEBUG(drm->dev, "DCIF version is %d.%d\n", vmaj, vmin); + + pm_runtime_put_sync(drm->dev); +} + +static const struct regmap_config dcif_regmap_config =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .fast_io =3D true, + .max_register =3D 0x20250, + .cache_type =3D REGCACHE_NONE, + .disable_locking =3D true, +}; + +static int dcif_probe(struct platform_device *pdev) +{ + struct dcif_dev *dcif; + struct drm_device *drm; + int ret; + int i; + + dcif =3D devm_drm_dev_alloc(&pdev->dev, &dcif_driver, struct dcif_dev, dr= m); + if (IS_ERR(dcif)) + return PTR_ERR(dcif); + + /* CPU 0 domain for interrupt control */ + dcif->cpu_domain =3D DCIF_CPU_DOMAIN; + + drm =3D &dcif->drm; + dev_set_drvdata(&pdev->dev, dcif); + + dcif->reg_base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(dcif->reg_base)) + return dev_err_probe(drm->dev, PTR_ERR(dcif->reg_base), + "failed to get reg base\n"); + + for (i =3D 0; i < 3; i++) { + dcif->irq[i] =3D platform_get_irq(pdev, i); + if (dcif->irq[i] < 0) + return dev_err_probe(drm->dev, dcif->irq[i], + "failed to get domain%d irq\n", i); + } + + dcif->regmap =3D devm_regmap_init_mmio(drm->dev, dcif->reg_base, &dcif_re= gmap_config); + if (IS_ERR(dcif->regmap)) + return dev_err_probe(drm->dev, PTR_ERR(dcif->regmap), + "failed to init DCIF regmap\n"); + + dcif->num_clks =3D devm_clk_bulk_get_all(drm->dev, &dcif->clks); + if (dcif->num_clks < 0) + return dev_err_probe(drm->dev, ret, "cannot get required clocks\n"); + + dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32)); + + devm_pm_runtime_enable(drm->dev); + + ret =3D devm_request_irq(drm->dev, dcif->irq[dcif->cpu_domain], + dcif_irq_handler, 0, drm->driver->name, drm); + if (ret < 0) + return dev_err_probe(drm->dev, ret, "failed to install IRQ handler\n"); + + dcif_read_chip_info(dcif); + + ret =3D dcif_kms_prepare(dcif); + if (ret) + return ret; + + ret =3D drm_dev_register(drm, 0); + if (ret) + return dev_err_probe(drm->dev, ret, "failed to register drm device\n"); + + drm_client_setup(drm, NULL); + + return 0; +} + +static void dcif_remove(struct platform_device *pdev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(&pdev->dev); + struct drm_device *drm =3D &dcif->drm; + + drm_dev_unregister(drm); + + drm_atomic_helper_shutdown(drm); +} + +static void dcif_shutdown(struct platform_device *pdev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(&pdev->dev); + struct drm_device *drm =3D &dcif->drm; + + drm_atomic_helper_shutdown(drm); +} + +static int dcif_runtime_suspend(struct device *dev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(dev); + + clk_bulk_disable_unprepare(dcif->num_clks, dcif->clks); + + return 0; +} + +static int dcif_runtime_resume(struct device *dev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(dev); + int ret; + + ret =3D clk_bulk_prepare_enable(dcif->num_clks, dcif->clks); + if (ret) { + dev_err(dev, "failed to enable clocks: %d\n", ret); + return ret; + } + + return 0; +} + +static int dcif_suspend(struct device *dev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(dev); + int ret; + + ret =3D drm_mode_config_helper_suspend(&dcif->drm); + if (ret < 0) + return ret; + + if (pm_runtime_suspended(dev)) + return 0; + + return dcif_runtime_suspend(dev); +} + +static int dcif_resume(struct device *dev) +{ + struct dcif_dev *dcif =3D dev_get_drvdata(dev); + int ret; + + if (!pm_runtime_suspended(dev)) { + ret =3D dcif_runtime_resume(dev); + if (ret < 0) + return ret; + } + + return drm_mode_config_helper_resume(&dcif->drm); +} + +static const struct dev_pm_ops dcif_pm_ops =3D { + SET_SYSTEM_SLEEP_PM_OPS(dcif_suspend, dcif_resume) + SET_RUNTIME_PM_OPS(dcif_runtime_suspend, dcif_runtime_resume, NULL) +}; + +static const struct of_device_id dcif_dt_ids[] =3D { + { .compatible =3D "nxp,imx94-dcif", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, dcif_dt_ids); + +static struct platform_driver dcif_platform_driver =3D { + .probe =3D dcif_probe, + .remove =3D dcif_remove, + .shutdown =3D dcif_shutdown, + .driver =3D { + .name =3D "imx-dcif-drm", + .of_match_table =3D dcif_dt_ids, + .pm =3D pm_ptr(&dcif_pm_ops), + }, +}; +module_platform_driver(dcif_platform_driver); + +MODULE_AUTHOR("NXP Semiconductor"); +MODULE_DESCRIPTION("i.MX94 DCIF DRM driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/imx/dcif/dcif-drv.h b/drivers/gpu/drm/imx/dcif= /dcif-drv.h new file mode 100644 index 0000000000000..8eb0790734ab9 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-drv.h @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ + +#ifndef __DCIF_DRV_H__ +#define __DCIF_DRV_H__ + +#include +#include + +#include +#include +#include +#include +#include + +#define DCIF_CPU_DOMAINS 3 + +struct dcif_dev { + struct drm_device drm; + void __iomem *reg_base; + + struct regmap *regmap; + int irq[DCIF_CPU_DOMAINS]; + + unsigned int num_clks; + struct clk_bulk_data *clks; + + struct drm_crtc crtc; + struct { + struct drm_plane primary; + struct drm_plane overlay; + } planes; + struct drm_encoder encoder; + + struct drm_pending_vblank_event *event; + + /* Implement crc */ + bool has_crc; + bool crc_is_enabled; + + /* CPU domain for interrupt control */ + int cpu_domain; +}; + +enum dcif_crc_source { + DCIF_CRC_SRC_NONE, + DCIF_CRC_SRC_FRAME, + DCIF_CRC_SRC_FRAME_ROI, +}; + +struct dcif_crc { + enum dcif_crc_source source; + struct drm_rect roi; +}; + +struct dcif_crtc_state { + struct drm_crtc_state base; + struct dcif_crc crc; + u32 bus_format; + u32 bus_flags; +}; + +static inline struct dcif_dev *to_dcif_dev(struct drm_device *drm_dev) +{ + return container_of(drm_dev, struct dcif_dev, drm); +} + +static inline struct dcif_dev *crtc_to_dcif_dev(struct drm_crtc *crtc) +{ + return to_dcif_dev(crtc->dev); +} + +static inline struct dcif_crtc_state *to_dcif_crtc_state(struct drm_crtc_s= tate *s) +{ + return container_of(s, struct dcif_crtc_state, base); +} + +irqreturn_t dcif_irq_handler(int irq, void *data); +int dcif_crtc_init(struct dcif_dev *dcif); +int dcif_plane_init(struct dcif_dev *dcif); +int dcif_kms_prepare(struct dcif_dev *dcif); + +#endif diff --git a/drivers/gpu/drm/imx/dcif/dcif-kms.c b/drivers/gpu/drm/imx/dcif= /dcif-kms.c new file mode 100644 index 0000000000000..69d999d178b0b --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-kms.c @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright 2025 NXP + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "dcif-drv.h" + +static int dcif_kms_init(struct dcif_dev *dcif) +{ + struct drm_device *drm =3D &dcif->drm; + struct device_node *np =3D drm->dev->of_node; + struct drm_connector *connector; + struct drm_bridge *bridge; + int ret; + + ret =3D dcif_crtc_init(dcif); + if (ret) + return ret; + + bridge =3D devm_drm_of_get_bridge(drm->dev, np, 0, 0); + if (IS_ERR(bridge)) + return dev_err_probe(drm->dev, PTR_ERR(bridge), "Failed to find bridge\n= "); + + dcif->encoder.possible_crtcs =3D drm_crtc_mask(&dcif->crtc); + ret =3D drm_simple_encoder_init(drm, &dcif->encoder, DRM_MODE_ENCODER_NON= E); + if (ret) { + drm_err(drm, "failed to initialize encoder: %d\n", ret); + return ret; + } + + ret =3D drm_bridge_attach(&dcif->encoder, bridge, NULL, DRM_BRIDGE_ATTACH= _NO_CONNECTOR); + if (ret) { + drm_err(drm, "failed to attach bridge to encoder: %d\n", ret); + return ret; + } + + connector =3D drm_bridge_connector_init(drm, &dcif->encoder); + if (IS_ERR(connector)) { + drm_err(drm, "failed to initialize bridge connector: %d\n", ret); + return PTR_ERR(connector); + } + + ret =3D drm_connector_attach_encoder(connector, &dcif->encoder); + if (ret) + drm_err(drm, "failed to attach encoder to connector: %d\n", ret); + + return ret; +} + +static const struct drm_mode_config_funcs dcif_mode_config_funcs =3D { + .fb_create =3D drm_gem_fb_create, + .atomic_check =3D drm_atomic_helper_check, + .atomic_commit =3D drm_atomic_helper_commit, +}; + +static const struct drm_mode_config_helper_funcs dcif_mode_config_helpers = =3D { + .atomic_commit_tail =3D drm_atomic_helper_commit_tail_rpm, +}; + +int dcif_kms_prepare(struct dcif_dev *dcif) +{ + struct drm_device *drm =3D &dcif->drm; + int ret; + + ret =3D drmm_mode_config_init(drm); + if (ret) + return ret; + + ret =3D dcif_kms_init(dcif); + if (ret) + return ret; + + drm->mode_config.min_width =3D 1; + drm->mode_config.min_height =3D 1; + drm->mode_config.max_width =3D 1920; + drm->mode_config.max_height =3D 1920; + drm->mode_config.funcs =3D &dcif_mode_config_funcs; + drm->mode_config.helper_private =3D &dcif_mode_config_helpers; + + ret =3D drm_vblank_init(drm, 1); + if (ret < 0) { + drm_err(drm, "failed to initialize vblank: %d\n", ret); + return ret; + } + + drm_mode_config_reset(drm); + + drmm_kms_helper_poll_init(drm); + + return 0; +} diff --git a/drivers/gpu/drm/imx/dcif/dcif-plane.c b/drivers/gpu/drm/imx/dc= if/dcif-plane.c new file mode 100644 index 0000000000000..54ab8edd11e0c --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-plane.c @@ -0,0 +1,269 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Copyright 2025 NXP + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dcif-drv.h" +#include "dcif-reg.h" + +static const u32 dcif_primary_plane_formats[] =3D { + /* RGB */ + DRM_FORMAT_RGB565, + DRM_FORMAT_RGB888, + DRM_FORMAT_XBGR8888, + DRM_FORMAT_XRGB1555, + DRM_FORMAT_XRGB4444, + DRM_FORMAT_XRGB8888, + + /* Packed YCbCr */ + DRM_FORMAT_YUYV, + DRM_FORMAT_YVYU, + DRM_FORMAT_UYVY, + DRM_FORMAT_VYUY, +}; + +static const u32 dcif_overlay_plane_formats[] =3D { + /* RGB */ + DRM_FORMAT_RGB565, + DRM_FORMAT_RGB888, + DRM_FORMAT_XBGR8888, + DRM_FORMAT_XRGB1555, + DRM_FORMAT_XRGB4444, + DRM_FORMAT_XRGB8888, +}; + +static inline struct dcif_dev *plane_to_dcif_dev(struct drm_plane *plane) +{ + return to_dcif_dev(plane->dev); +} + +static inline dma_addr_t drm_plane_state_to_baseaddr(struct drm_plane_stat= e *state) +{ + struct drm_framebuffer *fb =3D state->fb; + struct drm_gem_dma_object *dma_obj; + unsigned int x =3D state->src.x1 >> 16; + unsigned int y =3D state->src.y1 >> 16; + + dma_obj =3D drm_fb_dma_get_gem_obj(fb, 0); + + return dma_obj->dma_addr + fb->offsets[0] + fb->pitches[0] * y + fb->form= at->cpp[0] * x; +} + +static int dcif_plane_get_layer_id(struct drm_plane *plane) +{ + return (plane->type =3D=3D DRM_PLANE_TYPE_PRIMARY) ? 0 : 1; +} + +static int dcif_plane_atomic_check(struct drm_plane *plane, struct drm_ato= mic_state *state) +{ + struct drm_plane_state *new_plane_state =3D drm_atomic_get_new_plane_stat= e(state, plane); + struct drm_plane_state *old_plane_state =3D drm_atomic_get_old_plane_stat= e(state, plane); + struct dcif_dev *dcif =3D plane_to_dcif_dev(plane); + struct drm_framebuffer *fb =3D new_plane_state->fb; + struct drm_framebuffer *old_fb =3D old_plane_state->fb; + struct drm_crtc_state *crtc_state; + + if (!fb) + return 0; + + crtc_state =3D drm_atomic_get_new_crtc_state(state, &dcif->crtc); + if (WARN_ON(!crtc_state)) + return -EINVAL; + + /* + * Force CRTC mode change if framebuffer stride or pixel format have chan= ged. + */ + if (plane->type =3D=3D DRM_PLANE_TYPE_PRIMARY && old_fb && + (fb->pitches[0] !=3D old_fb->pitches[0] || fb->format->format !=3D ol= d_fb->format->format)) + crtc_state->mode_changed =3D true; + + return drm_atomic_helper_check_plane_state(new_plane_state, crtc_state, + DRM_PLANE_NO_SCALING, DRM_PLANE_NO_SCALING, true, + true); +} + +static void dcif_plane_atomic_update(struct drm_plane *plane, struct drm_a= tomic_state *state) +{ + struct drm_plane_state *new_state =3D drm_atomic_get_new_plane_state(stat= e, plane); + struct dcif_dev *dcif =3D plane_to_dcif_dev(plane); + int layer_id =3D dcif_plane_get_layer_id(plane); + struct drm_framebuffer *fb =3D new_state->fb; + u32 crtc_x, crtc_y, crtc_h, crtc_w; + u32 layer_fmt =3D 0, yuv_fmt =3D 0; + dma_addr_t baseaddr; + u32 reg; + + if (!fb) + return; + + crtc_x =3D new_state->crtc_x; + crtc_y =3D new_state->crtc_y; + crtc_h =3D new_state->crtc_h; + crtc_w =3D new_state->crtc_w; + + /* visible portion of plane on crtc */ + regmap_write(dcif->regmap, DCIF_CTRLDESC1(layer_id), + DCIF_CTRLDESC1_POSX(crtc_x) | DCIF_CTRLDESC1_POSY(crtc_y)); + regmap_write(dcif->regmap, DCIF_CTRLDESC2(layer_id), + DCIF_CTRLDESC2_WIDTH(crtc_w) | DCIF_CTRLDESC2_HEIGHT(crtc_h)); + + /* pitch size */ + reg =3D DCIF_CTRLDESC3_P_SIZE(2) | DCIF_CTRLDESC3_T_SIZE(2) | + DCIF_CTRLDESC3_PITCH(fb->pitches[0]); + regmap_write(dcif->regmap, DCIF_CTRLDESC3(layer_id), reg); + + /* address */ + baseaddr =3D drm_fb_dma_get_gem_addr(new_state->fb, new_state, 0); + + drm_dbg_kms(plane->dev, "[PLANE:%d:%s] fb address %pad, pitch 0x%08x\n", + plane->base.id, plane->name, &baseaddr, fb->pitches[0]); + + regmap_write(dcif->regmap, DCIF_CTRLDESC4(layer_id), baseaddr); + + /* Format */ + switch (fb->format->format) { + /* RGB Formats */ + case DRM_FORMAT_RGB565: + layer_fmt =3D CTRLDESCL0_FORMAT_RGB565; + break; + case DRM_FORMAT_RGB888: + layer_fmt =3D CTRLDESCL0_FORMAT_RGB888; + break; + case DRM_FORMAT_XRGB1555: + layer_fmt =3D CTRLDESCL0_FORMAT_ARGB1555; + break; + case DRM_FORMAT_XRGB4444: + layer_fmt =3D CTRLDESCL0_FORMAT_ARGB4444; + break; + case DRM_FORMAT_XBGR8888: + layer_fmt =3D CTRLDESCL0_FORMAT_ABGR8888; + break; + case DRM_FORMAT_XRGB8888: + layer_fmt =3D CTRLDESCL0_FORMAT_ARGB8888; + break; + + /* YUV Formats */ + case DRM_FORMAT_YUYV: + layer_fmt =3D CTRLDESCL0_FORMAT_YCBCR422; + yuv_fmt =3D CTRLDESCL0_YUV_FORMAT_VY2UY1; + break; + case DRM_FORMAT_YVYU: + layer_fmt =3D CTRLDESCL0_FORMAT_YCBCR422; + yuv_fmt =3D CTRLDESCL0_YUV_FORMAT_UY2VY1; + break; + case DRM_FORMAT_UYVY: + layer_fmt =3D CTRLDESCL0_FORMAT_YCBCR422; + yuv_fmt =3D CTRLDESCL0_YUV_FORMAT_Y2VY1U; + break; + case DRM_FORMAT_VYUY: + layer_fmt =3D CTRLDESCL0_FORMAT_YCBCR422; + yuv_fmt =3D CTRLDESCL0_YUV_FORMAT_Y2UY1V; + break; + + default: + dev_err(dcif->drm.dev, "Unknown pixel format 0x%x\n", fb->format->format= ); + break; + } + + if (plane->type =3D=3D DRM_PLANE_TYPE_OVERLAY && yuv_fmt =3D=3D CTRLDESCL= 0_YUV_FORMAT_Y2UY1V) { + dev_err(dcif->drm.dev, "Overlay plane could not support YUV format\n"); + return; + } + + reg =3D DCIF_CTRLDESC0_EN | DCIF_CTRLDESC0_SHADOW_LOAD_EN | + DCIF_CTRLDESC0_FORMAT(layer_fmt) | DCIF_CTRLDESC0_YUV_FORMAT(yuv_fm= t); + + /* Alpha */ + reg |=3D DCIF_CTRLDESC0_GLOBAL_ALPHA(new_state->alpha >> 8) | ALPHA_GLOBA= L; + + regmap_write(dcif->regmap, DCIF_CTRLDESC0(layer_id), reg); +} + +static void dcif_overlay_plane_atomic_disable(struct drm_plane *plane, + struct drm_atomic_state *state) +{ + struct dcif_dev *dcif =3D plane_to_dcif_dev(plane); + + regmap_update_bits(dcif->regmap, DCIF_CTRLDESC0(1), + DCIF_CTRLDESC0_EN | DCIF_CTRLDESC0_SHADOW_LOAD_EN, + DCIF_CTRLDESC0_SHADOW_LOAD_EN); +} + +static const struct drm_plane_helper_funcs dcif_primary_plane_helper_funcs= =3D { + .prepare_fb =3D drm_gem_plane_helper_prepare_fb, + .atomic_check =3D dcif_plane_atomic_check, + .atomic_update =3D dcif_plane_atomic_update, +}; + +static const struct drm_plane_helper_funcs dcif_overlay_plane_helper_funcs= =3D { + .atomic_check =3D dcif_plane_atomic_check, + .atomic_update =3D dcif_plane_atomic_update, + .atomic_disable =3D dcif_overlay_plane_atomic_disable, +}; + +static const struct drm_plane_funcs dcif_plane_funcs =3D { + .update_plane =3D drm_atomic_helper_update_plane, + .disable_plane =3D drm_atomic_helper_disable_plane, + .destroy =3D drm_plane_cleanup, + .reset =3D drm_atomic_helper_plane_reset, + .atomic_duplicate_state =3D drm_atomic_helper_plane_duplicate_state, + .atomic_destroy_state =3D drm_atomic_helper_plane_destroy_state, +}; + +int dcif_plane_init(struct dcif_dev *dcif) +{ + const u32 supported_encodings =3D BIT(DRM_COLOR_YCBCR_BT601) | + BIT(DRM_COLOR_YCBCR_BT709) | + BIT(DRM_COLOR_YCBCR_BT2020); + const u32 supported_ranges =3D BIT(DRM_COLOR_YCBCR_LIMITED_RANGE) | + BIT(DRM_COLOR_YCBCR_FULL_RANGE); + int ret; + + /* primary plane */ + drm_plane_helper_add(&dcif->planes.primary, &dcif_primary_plane_helper_fu= ncs); + ret =3D drm_universal_plane_init(&dcif->drm, &dcif->planes.primary, 1, &d= cif_plane_funcs, + dcif_primary_plane_formats, + ARRAY_SIZE(dcif_primary_plane_formats), NULL, + DRM_PLANE_TYPE_PRIMARY, NULL); + if (ret) { + drm_err(&dcif->drm, "failed to initialize primary plane: %d\n", ret); + return ret; + } + + ret =3D drm_plane_create_color_properties(&dcif->planes.primary, supporte= d_encodings, + supported_ranges, DRM_COLOR_YCBCR_BT601, + DRM_COLOR_YCBCR_LIMITED_RANGE); + if (ret) + return ret; + + ret =3D drm_plane_create_alpha_property(&dcif->planes.primary); + if (ret) + return ret; + + /* overlay plane */ + drm_plane_helper_add(&dcif->planes.overlay, &dcif_overlay_plane_helper_fu= ncs); + ret =3D drm_universal_plane_init(&dcif->drm, &dcif->planes.overlay, 1, &d= cif_plane_funcs, + dcif_overlay_plane_formats, + ARRAY_SIZE(dcif_overlay_plane_formats), NULL, + DRM_PLANE_TYPE_OVERLAY, NULL); + if (ret) { + drm_err(&dcif->drm, "failed to initialize overlay plane: %d\n", ret); + return ret; + } + + return drm_plane_create_alpha_property(&dcif->planes.overlay); +} diff --git a/drivers/gpu/drm/imx/dcif/dcif-reg.h b/drivers/gpu/drm/imx/dcif= /dcif-reg.h new file mode 100644 index 0000000000000..acf9e3071aa52 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-reg.h @@ -0,0 +1,267 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ +#ifndef __DCIF_REG_H__ +#define __DCIF_REG_H__ + +#include + +/* Version ID Register */ +#define DCIF_VER 0x0 +#define DCIF_VER_GET_FEATURE(x) FIELD_GET(GENMASK(15, 0), x) +#define DCIF_VER_GET_MINOR(x) FIELD_GET(GENMASK(23, 16), x) +#define DCIF_VER_GET_MAJOR(x) FIELD_GET(GENMASK(31, 24), x) +#define DCIF_FEATURE_CRC BIT(1) + +/* Parameter Registers */ +#define DCIF_PAR_0 0x4 +#define DCIF_PAR_0_LAYER_NUM(x) FIELD_PREP(GENMASK(3, 0), x) +#define DCIF_PAR_0_DOMAIN_NUM(x) FIELD_PREP(GENMASK(5, 4), x) +#define DCIF_PAR_0_AXI_DATA_WIDTH(x) FIELD_PREP(GENMASK(7, 6), x) +#define DCIF_PAR_0_CLUT_RAM_NUM(x) FIELD_PREP(GENMASK(11, 8), x) +#define DCIF_PAR_0_CSC_NUM(x) FIELD_PREP(GENMASK(13, 12), x) +#define DCIF_PAR_0_CRC_REGION_NUM(x) FIELD_PREP(GENMASK(18, 16), x) +#define DCIF_PAR_0_BACKUP(x) FIELD_PREP(GENMASK(31, 28), x) + +#define DCIF_PAR_1 0x8 +#define DCIF_PAR_1_LAYER0_FIFO_SIZE(x) FIELD_PREP(GENMASK(3, 0), x) +#define DCIF_PAR_1_LAYER1_FIFO_SIZE(x) FIELD_PREP(GENMASK(7, 4), x) + +/* Display Control and Parameter Registers */ +#define DCIF_DISP_CTRL 0x10 +#define DCIF_DISP_CTRL_DISP_ON BIT(0) +#define DCIF_DISP_CTRL_AXI_RD_HOLD BIT(30) +#define DCIF_DISP_CTRL_SW_RST BIT(31) +#define DCIF_DISP_PAR 0x14 +#define DCIF_DISP_PAR_BGND_B(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_DISP_PAR_BGND_G(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_DISP_PAR_BGND_R(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_DISP_SIZE 0x18 +#define DCIF_DISP_SIZE_DISP_WIDTH(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DISP_SIZE_DISP_HEIGHT(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Display Status Registers */ +#define DCIF_DISP_SR0 0x1C +#define DCIF_DISP_SR0_AXI_RD_PEND(x) FIELD_PREP(GENMASK(4, 0), x) +#define DCIF_DISP_SR0_DPI_BUSY(x) FIELD_PREP(GENMASK(14, 14), x) +#define DCIF_DISP_SR0_AXI_RD_BUSY(x) FIELD_PREP(GENMASK(15, 15), x) +#define DCIF_DISP_SR0_TXFIFO_CNT(x) FIELD_PREP(GENMASK(23, 16), x) + +#define DCIF_DISP_SR1 0x20 +#define DCIF_DISP_SR1_H_CNT(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DISP_SR1_V_CNT(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Interrupt Enable and Status Registers, n=3D0-2*/ +#define DCIF_IE0(n) (0x24 + (n) * 0x10000) +#define DCIF_IS0(n) (0x28 + (n) * 0x10000) +#define DCIF_INT0_VSYNC BIT(0) +#define DCIF_INT0_UNDERRUN BIT(1) +#define DCIF_INT0_VS_BLANK BIT(2) +#define DCIF_INT0_HIST_DONE BIT(5) +#define DCIF_INT0_CRC_ERR BIT(6) +#define DCIF_INT0_CRC_ERR_SAT BIT(7) + +#define DCIF_IE1(n) (0x2C + (n) * 0x10000) +#define DCIF_IS1(n) (0x30 + (n) * 0x10000) +#define DCIF_INT1_FIFO_PANIC0 BIT(0) +#define DCIF_INT1_FIFO_PANIC1 BIT(1) +#define DCIF_INT1_DMA_ERR0 BIT(8) +#define DCIF_INT1_DMA_ERR1 BIT(9) +#define DCIF_INT1_DMA_DONE0 BIT(16) +#define DCIF_INT1_DMA_DONE1 BIT(17) +#define DCIF_INT1_FIFO_EMPTY0 BIT(24) +#define DCIF_INT1_FIFO_EMPTY1 BIT(25) + +/* DPI Control and Sync Parameter Registers */ +#define DCIF_DPI_CTRL 0x40 +#define DCIF_DPI_CTRL_HSYNC_POL_LOW BIT(0) +#define DCIF_DPI_CTRL_VSYNC_POL_LOW BIT(1) +#define DCIF_DPI_CTRL_DE_POL_LOW BIT(2) +#define DCIF_DPI_CTRL_PCLK_EDGE_FALLING BIT(3) +#define DCIF_DPI_CTRL_POL_MASK GENMASK(3, 0) +#define DCIF_DPI_CTRL_DATA_INV(x) FIELD_PREP(GENMASK(4, 4), x) +#define DCIF_DPI_CTRL_DEF_BGND_EN(x) FIELD_PREP(GENMASK(5, 5), x) +#define DCIF_DPI_CTRL_FETCH_OPT(x) FIELD_PREP(GENMASK(9, 8), x) +#define DCIF_DPI_CTRL_DISP_MODE(x) FIELD_PREP(GENMASK(13, 12), x) +#define DCIF_DPI_CTRL_DATA_PATTERN_MASK GENMASK(18, 16) +#define DCIF_DPI_CTRL_DATA_PATTERN(x) FIELD_PREP(GENMASK(18, 16), x) +#define PATTERN_RGB888 0 +#define PATTERN_RBG888 1 +#define PATTERN_GBR888 2 +#define PATTERN_GRB888 3 +#define PATTERN_BRG888 4 +#define PATTERN_BGR888 5 +#define PATTERN_RGB555 6 +#define PATTERN_RGB565 7 + +#define DCIF_DPI_HSYN_PAR 0x44 +#define DCIF_DPI_HSYN_PAR_FP_H(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_HSYN_PAR_BP_H(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_DPI_VSYN_PAR 0x48 +#define DCIF_DPI_VSYN_PAR_FP_V(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_VSYN_PAR_BP_V(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_DPI_VSYN_HSYN_WIDTH 0x4C +#define DCIF_DPI_VSYN_HSYN_WIDTH_PW_H(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_VSYN_HSYN_WIDTH_PW_V(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Control Descriptor Registers, n=3D0-1*/ +#define DCIF_CTRLDESC0(n) (0x10000 + (n) * 0x10000) +#define DCIF_CTRLDESC0_AB_MODE(x) FIELD_PREP(GENMASK(1, 0), x) +#define ALPHA_EMBEDDED 0 +#define ALPHA_GLOBAL 1 +#define DCIF_CTRLDESC0_YUV_FORMAT_MASK GENMASK(15, 14) +#define DCIF_CTRLDESC0_YUV_FORMAT(x) FIELD_PREP(GENMASK(15, 14), x) +#define CTRLDESCL0_YUV_FORMAT_Y2VY1U 0x0 +#define CTRLDESCL0_YUV_FORMAT_Y2UY1V 0x1 +#define CTRLDESCL0_YUV_FORMAT_VY2UY1 0x2 +#define CTRLDESCL0_YUV_FORMAT_UY2VY1 0x3 +#define DCIF_CTRLDESC0_GLOBAL_ALPHA(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_CTRLDESC0_FORMAT_MASK GENMASK(27, 24) +#define DCIF_CTRLDESC0_FORMAT(x) FIELD_PREP(GENMASK(27, 24), x) +#define CTRLDESCL0_FORMAT_RGB565 0x4 +#define CTRLDESCL0_FORMAT_ARGB1555 0x5 +#define CTRLDESCL0_FORMAT_ARGB4444 0x6 +#define CTRLDESCL0_FORMAT_YCBCR422 0x7 +#define CTRLDESCL0_FORMAT_RGB888 0x8 +#define CTRLDESCL0_FORMAT_ARGB8888 0x9 +#define CTRLDESCL0_FORMAT_ABGR8888 0xa +#define DCIF_CTRLDESC0_SHADOW_LOAD_EN BIT(30) +#define DCIF_CTRLDESC0_EN BIT(31) + +#define DCIF_CTRLDESC1(n) (0x10004 + (n) * 0x10000) +#define DCIF_CTRLDESC1_POSX(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CTRLDESC1_POSY(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CTRLDESC2(n) (0x10008 + (n) * 0x10000) +#define DCIF_CTRLDESC2_WIDTH(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CTRLDESC2_HEIGHT(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CTRLDESC3(n) (0x1000C + (n) * 0x10000) +#define DCIF_CTRLDESC3_PITCH(x) FIELD_PREP(GENMASK(15, 0), x) +#define DCIF_CTRLDESC3_T_SIZE(x) FIELD_PREP(GENMASK(17, 16), x) +#define DCIF_CTRLDESC3_P_SIZE(x) FIELD_PREP(GENMASK(22, 20), x) + +#define DCIF_CTRLDESC4(n) (0x10010 + (n) * 0x10000) +#define DCIF_CTRLDESC4_ADDR(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CTRLDESC5(n) (0x10014 + (n) * 0x10000) +#define DCIF_CTRLDESC6(n) (0x10018 + (n) * 0x10000) +#define DCIF_CTRLDESC6_BCLR_B(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_CTRLDESC6_BCLR_G(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_CTRLDESC6_BCLR_R(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_CTRLDESC6_BCLR_A(x) FIELD_PREP(GENMASK(31, 24), x) + +/* CLUT control Register */ +#define DCIF_CLUT_CTRL 0x1003C +#define DCIF_CLUT_CTRL_CLUT0_SEL(x) FIELD_PREP(GENMASK(0, 0), x) +#define DCIF_CLUT_CTRL_CLUT1_SEL(x) FIELD_PREP(GENMASK(3, 3), x) +#define DCIF_CLUT_CTRL_CLUT_MUX(x) FIELD_PREP(GENMASK(29, 28), x) +#define DCIF_CLUT_CTRL_CLUT_SHADOW_LOAD_EN(x) FIELD_PREP(GENMASK(31, 31)= , x) + +/* FIFO Panic Threshold Register, n=3D0-1 */ +#define DCIF_PANIC_THRES(n) (0x10040 + (n) * 0x10000) +#define DCIF_PANIC_THRES_LOW_MASK GENMASK(11, 0) +#define DCIF_PANIC_THRES_LOW(x) FIELD_PREP(GENMASK(11, 00), x) +#define DCIF_PANIC_THRES_HIGH_MASK GENMASK(27, 16) +#define DCIF_PANIC_THRES_HIGH(x) FIELD_PREP(GENMASK(27, 16), x) +#define DCIF_PANIC_THRES_REQ_EN BIT(31) +#define PANIC0_THRES_MAX 511 + +/* Layer Status Register 0, n=3D0-1 */ +#define DCIF_LAYER_SR0(n) (0x10044 + (n) * 0x10000) +#define DCIF_LAYER_SR0_L0_FIFO_CNT_MASK GENMASK(9, 0) +#define DCIF_LAYER_SR0_L0_FIFO_CNT(x) FIELD_PREP(GENMASK(9, 0), x) + +/* Color Space Conversion Control and Coefficient Registers for Layer 0 */ +#define DCIF_CSC_CTRL_L0 0x10050 +#define DCIF_CSC_CTRL_L0_CSC_EN BIT(0) +#define DCIF_CSC_CTRL_L0_CSC_MODE_YCBCR2RGB BIT(1) + +#define DCIF_CSC_COEF0_L0 0x10054 +#define DCIF_CSC_COEF0_L0_A1(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF0_L0_A2(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF1_L0 0x10058 +#define DCIF_CSC_COEF1_L0_A3(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF1_L0_B1(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF2_L0 0x1005C +#define DCIF_CSC_COEF2_L0_B2(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF2_L0_B3(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF3_L0 0x10060 +#define DCIF_CSC_COEF3_L0_C1(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF3_L0_C2(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF4_L0 0x10064 +#define DCIF_CSC_COEF4_L0_C3(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF4_L0_D1(x) FIELD_PREP_CONST(GENMASK(24, 16), x) + +#define DCIF_CSC_COEF5_L0 0x10068 +#define DCIF_CSC_COEF5_L0_D2(x) FIELD_PREP_CONST(GENMASK(8, 0), x) +#define DCIF_CSC_COEF5_L0_D3(x) FIELD_PREP_CONST(GENMASK(24, 16), x) + +/* CRC Control, Threshold, and Histogram Coefficient Registers */ +#define DCIF_CRC_CTRL 0x20100 +#define DCIF_CRC_CTRL_CRC_EN(x) (1 << (x)) +#define DCIF_CRC_CTRL_HIST_REGION_SEL(x) FIELD_PREP(GENMASK(17, 16), x) +#define DCIF_CRC_CTRL_HIST_MODE BIT(21) +#define DCIF_CRC_CTRL_HIST_TRIG BIT(22) +#define DCIF_CRC_CTRL_HIST_EN BIT(23) +#define DCIF_CRC_CTRL_CRC_MODE BIT(28) +#define DCIF_CRC_CTRL_CRC_TRIG BIT(29) +#define DCIF_CRC_CTRL_CRC_ERR_CNT_RST BIT(30) +#define DCIF_CRC_CTRL_CRC_SHADOW_LOAD_EN BIT(31) + +#define DCIF_CRC_THRES 0x20104 +#define DCIF_CRC_THRES_CRC_THRESHOLD_MASK GENMASK(31, 0) +#define DCIF_CRC_THRES_CRC_THRESHOLD(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_HIST_COEF 0x20108 +#define DCIF_CRC_HIST_COEF_HIST_WB_MASK GENMASK(7, 0) +#define DCIF_CRC_HIST_COEF_HIST_WB(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_CRC_HIST_COEF_HIST_WG_MASK GENMASK(15, 8) +#define DCIF_CRC_HIST_COEF_HIST_WG(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_CRC_HIST_COEF_HIST_WR_MASK GENMASK(23, 16) +#define DCIF_CRC_HIST_COEF_HIST_WR(x) FIELD_PREP(GENMASK(23, 16), x) + +#define DCIF_CRC_ERR_CNT 0x2010C +#define DCIF_CRC_ERR_CNT_CRC_ERR_CNT_MASK GENMASK(31, 0) +#define DCIF_CRC_ERR_CNT_CRC_ERR_CNT(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_SR 0x20110 +#define DCIF_CRC_SR_HIST_CNT_SAT_MASK BIT(13) +#define DCIF_CRC_SR_HIST_CNT_SAT(x) FIELD_PREP(GENMASK(13, 13), x) +#define DCIF_CRC_SR_HIST_SAT_MASK BIT(14) +#define DCIF_CRC_SR_HIST_SAT(x) FIELD_PREP(GENMASK(14, 14), x) +#define DCIF_CRC_SR_HIST_BUSY_MASK BIT(15) +#define DCIF_CRC_SR_HIST_BUSY(x) FIELD_PREP(GENMASK(15, 15), x) +#define DCIF_CRC_SR_CRC_STATUS_MASK BIT(31) +#define DCIF_CRC_SR_CRC_STATUS(x) FIELD_PREP(GENMASK(31, 31), x) + +#define DCIF_CRC_HIST_CNT_B(n) (0x20114 + (n) * 4) +#define DCIF_B_BIN_CNT_MASK GENMASK(20, 0) +#define DCIF_B_BIN_CNT(x) FIELD_PREP(GENMASK(20, 0), x) + +/* CRC Region Position, Size, Value, and Expected Value Registers, n=3D0-3= */ +#define DCIF_CRC_POS_R(n) (0x20214 + (n) * 0x10) +#define DCIF_CRC_POS_CRC_HOR_POS(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CRC_POS_CRC_VER_POS(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CRC_SIZE_R(n) (0x20218 + (n) * 0x10) +#define DCIF_CRC_SIZE_CRC_HOR_SIZE(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CRC_SIZE_CRC_VER_SIZE(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CRC_VAL_R(n) (0x2021C + (n) * 0x10) +#define DCIF_CRC_VAL_CRC_VAL_MASK GENMASK(31, 0) +#define DCIF_CRC_VAL_CRC_VAL(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_EXP_VAL_R(n) (0x20220 + (n) * 0x10) +#define DCIF_CRC_EXP_VAL_CRC_EXP_VAL_MASK GENMASK(31, 0) +#define DCIF_CRC_EXP_VAL_CRC_EXP_VAL(x) FIELD_PREP(GENMASK(31, 0), x) + +#endif /* __DCIF_REG_H__ */ --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011060.outbound.protection.outlook.com [52.101.65.60]) (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 8A3292FE56B; Wed, 3 Sep 2025 12:34:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902860; cv=fail; b=TR9hJogZnEKrfjI+2gkXPXUC7sc860MfSN70vlAkqWR3PIQ1riWpLE6xg9mbmYf5ReWotJlfMNphsOnMGGZzN+L0mZAKlbwFKRfiFsVAR/IL1LzMx2R+weai5A6zqiIOw4T97OjVXm3WwRe2LzGmWR0ZNmobe9KJ7+kipNdAQ70= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902860; c=relaxed/simple; bh=KfGqWxTUnDuWaWzZIZdXqL3ttOsnHfQh4DY3apDYQyQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=tyGmONPCI3uJb6TuWZn8BEF3dR1JZKt8rQXGQhK7/5nYU7uPUKVN7VqJiZCYivRDLRNpXeuHki439YLnU5Son/2i6WuWuwZiDjy/VFN0Gfi5yR92F1Y1hiQ1IAI4VLVU3YTdUf1dHl1Sg/CVu2Kp4ZS2QEXs3jIeR7pMOlu4f34= 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=D4Uumf9/; arc=fail smtp.client-ip=52.101.65.60 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="D4Uumf9/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YJ0/Mw8zcRhgVUmIokYXx9Jb93s7lpqinQKcSgCJOdHcgSRg/p6wFxFqrCmORVlrbCH+c27J1Wldp0H0V83tN8/4GiXnrofiWRr1qEyWEXMo2Ez3eZ1pcgfQK0dVbByvhlB30Hzm42v9c2nqXHjxsMFfKHbh0B6uEGI2Nm/zg4eVMYNmpF9AiXWz/6FSvISWQVe2MVcy9jRMd/UEAdUpG2KsDVFYmnpc+lppZ/fJ8sGofvQLwU9Au5YNgTLpz5wukvzaUc20Wb8Dqet6QGk9KEboWDkiEMWtg8QsOox0yRNkNRr/tggPS8jN08lAUYhto9v76UbykRScyZEjlhgYvw== 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=wA9zkKdHgTb6Ev8Gys77iOI3pUNdkdBVMd8BP3h6hK4=; b=qBq3FjjpvrtzWMS3nt0pvf+0SoOGdbUpycKGU49/HFFcBX2IAZgKBnJqmztYA2wFHuKaqZXwGH3ntXwTf3CZE7unwuKy9PFSEvD3dyL8u0U2u6F0Qy/+RL74znjsnRmCwhi/6YAnW8ZyKcn0L/w+hNVM8m+tE2wuxWgSMPoGtdcQ/3LOzhHvVXrVQrg0p7QQzFKdQGZqSpDHdnyaJxBtm4kHQP9gH6i7ACz3s3jHgPzlOpJg/OpKxz++pgOC8x8EY1sTC7inf9P6uQByUlaxGIa91VHcv06AI9r7zr0O8CwVivLwn2C5bDggiUKibGZQSBa4i1u+wpo0/qPIbslPtg== 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=wA9zkKdHgTb6Ev8Gys77iOI3pUNdkdBVMd8BP3h6hK4=; b=D4Uumf9/4/ZWfZK9F6QgEGmE1TdL4YiUAFtIFQJEBnH7XrEzV08K/HyMTVVrr0p3fW8uVuEI/DJzLlTvo1Zi3NyBrWyiw/S7Vi2nv2EPHip3fzdxPqEPyaLdxE65zBtIvIKBPyuxSjgEp/C5em/VW/OhOhHNDC39wO6sMiWT3DnD2zH8VMee2rdoE4jf7G2Rrg8RQioLR5r4a7QzENBbEHybeS8fd1ACVvQct1VCwygfIVBsR3G5Y8iLTHzCI5p2V0cpfv9W2VlHzQUMFU0V7sPf+eAMESdGUDEUu8SZk3hYfagHmB+wssVvV1y1TFPMjkeeFi8G77o8Kj259w8obg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:13 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:13 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Abel Vesa , Peng Fan , Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Frank Li , Laurentiu Palcu , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 6/9] dt-bindings: clock: nxp,imx95-blk-ctl: Add ldb child node Date: Wed, 3 Sep 2025 15:33:24 +0300 Message-Id: <20250903123332.2569241-7-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0227.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::8) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 114f07f6-d52a-4749-7b48-08ddeae62fc6 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|19092799006|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?yMSISmCktJVs3C4UoHjh3A30UiRv0KSuDj9hjlIjpa8iIMSnfrpP55GEQ+V1?= =?us-ascii?Q?BkdXl0sgu/0pL7VW0C78wTnEksTW/8JY2x9SQ5d/bZTXEsRqmABmetWpRikz?= =?us-ascii?Q?VmF8Vm9h5mKRrlvnaGPdNjFKnzrh1NtiuH1UInNLXCH3SkQnThfku9GTPjIk?= =?us-ascii?Q?5ltl3NemLx6EIplJ2UQO4cY157gB/HVrQoxsdoJsDkeiyS5UhYxMQEFtrcpU?= =?us-ascii?Q?syN0yIJpQRtADaR/OJTF0AdI1XuIEp8T+eWO3jvgvSt5cqWUfKlrF401Xe0O?= =?us-ascii?Q?5VbmcT6oB9JFwrfqIxGct8btLZzbsTdxeoJOoSd6P8FV45zJCA2Ug2+MduDn?= =?us-ascii?Q?1jdoTXRp1y5Mpd8q/XguM1/T8RP1V7tNNf5/BnZprnJGb+TRFQ5xH0WyyywZ?= =?us-ascii?Q?UV1GaHTDcetruYRllZkcu5KzdDfzp/tze2lyEK7+0yD9gSkkK1HP2Sklmm1q?= =?us-ascii?Q?uyueG4tcb5xXBzLgFDb2KqsbFRUByNWwgzLsqPzi4UaLLYWNh0Khu8vxvoL1?= =?us-ascii?Q?0HIZYgZNYJwbKibauFOSAt1tgOnB5DmzD+iebufdL3WML2kV+5zgj+Hv0Q5l?= =?us-ascii?Q?lyspk+bOO+1ph0NLoozkSR541uUQO+CXzs3oWGqRso5OQ4AdhW+zuQk8wKi7?= =?us-ascii?Q?W626gk9yprIlUXdLv3LFkbdYcx8NDp+EVVOxcM2T5s7juP5jRc7Gsw+0jiNR?= =?us-ascii?Q?AptW7Q3bIA5GuP7cpMJ9ufLbWStpEJpmTKDUTXsqcWZVAWcaP0fl1PfdrkvM?= =?us-ascii?Q?WoD1veGhNJS/7WmBwoay7NvxkiBQ/6YuLQj9bulyqzXdC2bBd3pf72uvkynX?= =?us-ascii?Q?GH7j5xeR5kUle/K/eaeMY09k161u77zKOOUbhqrFjWIMMZDbwkwc1wz997ee?= =?us-ascii?Q?9lclS+gCkRFmPyMnPTyM+xvQjYTP6CHkfCh0iNeTZZeKnikctbSm/9r7c5ah?= =?us-ascii?Q?lkLifWok8ZqGFWfjP4PPepa8OjrgNmOBKDjmJc59jIPC+yBN7J2EFg98TrcB?= =?us-ascii?Q?QFrNxSjp4IsIc2tLzMoep2GzT8V9W9C2sOXcTJGBgsRU3SZit4fJs2P6azvp?= =?us-ascii?Q?MWKpnJazBL+BcALmn5nEI2GE55ij7Nq5rwaF8fjk3xGUNz+uZLLZtExfB3YM?= =?us-ascii?Q?sJuAnetDTJDYZaqZQYWA/bkFNhVN3uZ2P0FVSyBDJUbCvjbHuvF7GI/fxrzr?= =?us-ascii?Q?1QQU46qANwLpKZONGH9FpPAZltkUHICK3gxC+6dfz1XFnFw1GtzXXVpWyzTr?= =?us-ascii?Q?KX5T7Q1UrLL2+PzpH6wKgePy0S/SxX2ugfiyzPgIkkmxUZ2Kh2r0eqAdIEdN?= =?us-ascii?Q?7bvmQHy7iB9wWNFXXPvjXDR4L47kQTvLw7sIvc3/6ktTg5La9hq4DzRNoD84?= =?us-ascii?Q?AtNqRezvG3o7zSCPfBvXSFb4eakRtLENstk8zQoMiJKn+kE+dSWMFTwc738Q?= =?us-ascii?Q?qk8ksFTssoPia0C5XkK+4YgTDg2mxoIBo67yapVYBqpyim9CKVfKoQ=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?mrqfmd2OHCFR/isEEaDgWyiM+h0l4e0nnLx6fsXoZsXDQg1WEbktQMWDWBs5?= =?us-ascii?Q?Z/XciW7JaXtU1U7mUIyfwACXwbhu2M6+LlnJBSkZIBzFYNLBxuKio6bvMU/Z?= =?us-ascii?Q?lPUIfHi8Bkn0FuffuKs+q22uYI1QJXBC+2KRBVk9Z623CMMsIpeevLmY9yl0?= =?us-ascii?Q?ADM1iYZ3Q+4+VwcqaRAoYN8Fo9OSIHod1JqvqJ/hyHs3/SIhnPeDvHX0baRs?= =?us-ascii?Q?xBjA1u1j6vv/+chuahZi/bmEvjIFb1nDJ+UfuXkr0SpyABrW0ndgAaftvdmm?= =?us-ascii?Q?doKhrXGJPe+vY+HF10RYiVUy+MaJgUk4zOeBm9qJJgXgzpImewgvivNj8Uoy?= =?us-ascii?Q?tamsTsjXRX7QqW+5i3nMrPBHa5SIA8U8Rm33AVbMwerVn6HnHg6ua0fuE2Iz?= =?us-ascii?Q?Ijs0upgECRur2yzrocDglNQlPMvXLHOnvpQPEweARF9M4RJR2Ag9saR/0VUs?= =?us-ascii?Q?4ew+del3gmOQVCGrDdo6TIW7qSGrzGX18zivCK+WGv7DmLLq+kE7+ddAboYN?= =?us-ascii?Q?U7cQPdXA7W62ICD5Z+Cl5kCPG07/b1CkAgpz/ID5yE3r/7b2TiuRko1qwP2z?= =?us-ascii?Q?jkEMid14I/8qtLNw2nfFafcG7v1yyZDzWCKuL3iRgps0o9rMAqKWBKifnEN+?= =?us-ascii?Q?tKbD9LU2D1/eZbQ+vPUidP5CLx4racq0neFKvZxFOZ8rdD2yWatJKlwDQoS0?= =?us-ascii?Q?yGpYmdjgeWuTFEN6AhKllBik41NwIi7gUMKZ/ADJDTJ8ujTxb/MiDnqYYaQc?= =?us-ascii?Q?K1mrOivo3jqJO3UrNFlMWdn7yVDwJdwWFPg4JDEEApfMF3tlgpVc84uh5Okp?= =?us-ascii?Q?w4Xoz0THAohz1w9poLlUv4Mk/+I1mgErknTpJn9K5jEvoR9+a6wkuZ722uKi?= =?us-ascii?Q?g/XM2EFHJkoccNhHem54SwYKvSPWCcnSlw8wmeULvHsYLCxboX6UwOH0m+MA?= =?us-ascii?Q?Yp3DxOjEpCMH6xAqLmVCUEIuqsvL1esQOfEUmtylPMO+OFKvYRiJvchBMIGH?= =?us-ascii?Q?zMX+ojnbsfIe04F7v7xwGoz1y0FlNM80QnplBe3AlfdfJlNDvhkrL4+eXg1Q?= =?us-ascii?Q?LNQOE4bDzso/4nRNPD9H11ZQvMNpifflxhR1PEehGtdTQQpgPMjnAnpElhAG?= =?us-ascii?Q?QnsaJbRtaWBL2soJtR7VD4qbFXQX86SMg33+QWcAUaFtO1qVLDH5uNzLH5Sb?= =?us-ascii?Q?15IUGcZEj17QlkoaGovx0buIY1QPbCUekbbQ9IWM6zIq8txgwqyn94kzEwRj?= =?us-ascii?Q?BtsbHdKT5hxU4HKygiFCHwd5PzYgPIY12DpsKVUfsZ9SAz2DOcYY7lEcrbPZ?= =?us-ascii?Q?HZvw/w4rnIGaXk29wERiobVhe5aehuGdSu57xN+h7LDCEOJHzB90qrEn+jxo?= =?us-ascii?Q?Z8+hE/OWbYUn+ksJkhbO+Khsd0vB/0MFe9fPfDsoJAOP1YQ2V9IdYtP9YWok?= =?us-ascii?Q?m0Z7Qdao41F/h4qj3Pt+Lr3nnZt5baHdIwPar+jrDeotfxsCHIyLhHHe0OqL?= =?us-ascii?Q?bsZ0Q2q5OKuXCRj6tUToqOGgIPWCRrTzSzlkJHWNKUPNCLrrznaljb85S+dx?= =?us-ascii?Q?5yXZAy5S9l+1FmnydWwYv0V1IA4Q8ZOeoNITX3Z9cUw4XOUxMqXMFG2S0/8d?= =?us-ascii?Q?PQ=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 114f07f6-d52a-4749-7b48-08ddeae62fc6 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:12.9359 (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: IjPnaqRlw4A3JnB646f5t00TJrix0z191+57JMa14+ntCUvEti4q2jtKIUWeZnMoCqoI8jRoeESHNeK8GkVmqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" Since the BLK CTL registers, like the LVDS CSR, can be used to control the LVDS Display Bridge controllers, add 'ldb' child node to handle these use cases. Signed-off-by: Laurentiu Palcu --- .../bindings/clock/nxp,imx95-blk-ctl.yaml | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml= b/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml index 27403b4c52d62..f83d96701bb04 100644 --- a/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml +++ b/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml @@ -39,6 +39,28 @@ properties: ID in its "clocks" phandle cell. See include/dt-bindings/clock/nxp,imx95-clock.h =20 +if: + properties: + compatible: + contains: + const: nxp,imx94-lvds-csr +then: + properties: + "#address-cells": + const: 1 + + "#size-cells": + const: 1 + + patternProperties: + "^ldb@[0-9a-f]+$": + type: object + $ref: /schemas/display/bridge/fsl,ldb.yaml# + + required: + - '#address-cells' + - '#size-cells' + required: - compatible - reg @@ -46,7 +68,7 @@ required: - power-domains - clocks =20 -additionalProperties: false +unevaluatedProperties: false =20 examples: - | --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011060.outbound.protection.outlook.com [52.101.65.60]) (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 A2F793002C6; Wed, 3 Sep 2025 12:34:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902862; cv=fail; b=X+FIP02B1b0GYWUNMRGq09x0eZuD+0OfL+0R7n3csmplilPxSM9i+sBfU+qXh7Cw96KGPzthUQ+vtX7f1u9QeG+WA1txsj8cYmHIpOHs6WRsxdSt4Oi+k3qJT1RsLimKuBDtoQ0BEu1wvsIh0CdLKP+ZQvc5z9E0YKOpU8zzGLg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902862; c=relaxed/simple; bh=/bXQIfbcSZ83Dh7dAf2+mrw2OBVgHHCQSb00htHTyZQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XoGNrdCoLbrE+De3ygLJ2bWHLUV49w3G9aaTcxu43D4zysDfDFGmVUsmkNyWipUNSSRAYW9dpuuhD7ow1WuVbRCLSfyIk/Aynsc1hwXK/iyNzlUvwVNTbhF1v+y3QL5aHhU9TF1PrEtE/q3T6mf/PFOU4nY3PFcY58or9psmN+4= 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=qIXoPSGc; arc=fail smtp.client-ip=52.101.65.60 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="qIXoPSGc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w25c27zN8MH/DvCSws6tL5+WW80NxqjXKXxRfQkG5wbwI8Jrn9C/G5k/ziQCxIaF8O4cGvO1N8l2y08WDX/mfKBYXxDisgFRmNJQRIm2uQdpWiKBKsyL5ziArR6gVcN/GukHeCPwi/ajaTO/JhtBcW2e48vApLjwv4D18hQXrvOYIt97S1ryqTU/msmPEgSpw0sdoaQGjReONJRwZLXh1EUlyX8fbLksSyN3XyhyOAauReMWbCaHCSFA1PPyFwpFrm44OWYJRRYvDy1qj2reFaNdeHaXEVgPDq50Bc5iGxGBBSQ+Hu/UEDWjUJ82XUBWnAWOqW1x0uTRwSXUqSkzig== 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=aBcQZkZP3ZSJeXLm7DZuf+5QVEXu+I/XZtZSUW9EIv4=; b=pjoL+BI9zRjCOnLhlw9MRSehSY5IiwiStu5IkvpK8pOAP2v9DYhXeuccHfhByLgt8RmgN8kspXgRSXhmjWeTkv6FPJVkKqDYa5sA+mwgWjK9ELcRYUKDhQSq1Q2TA67HOYyFMculf9QSKlv4St1u0MSGD+qJuDTmoCR1wVAf1qGBbRX54B9mv373bQq+4bcguFCnIcVR4GN6kcesOjM2JdSSEon6Snc4PGUhCM+g7B7Y7/2T4UwDSmzG+Wm8R2S/D4liLlE7N1hYzFA9z+OYiWXvPK67ens8P6i2yFVCE48FrOiT2ExEF1pbK4VXmsZOo5Hw4JyVaRzt/3p7ZNhgRQ== 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=aBcQZkZP3ZSJeXLm7DZuf+5QVEXu+I/XZtZSUW9EIv4=; b=qIXoPSGcxTuc+0BQaSa82WYOAFAMe5YqnA98NPUr0ccCBn9gpjKHKljUPRrsZL/msc7CKlPp5bC6AZPNMDaplPirFD2D8yqXgVcfSURwVVKG+tPJCS6Ht8bUsaDgkiexURjWiOLbT7JsBJ1f3mN7p1EAdzoorv68T/0gtTBP20HQUZ0WHPjW+dlRKJXVvpJZFX8g5Y+InW6SR/z0QeeOHvtlRKPfrAJcUimoDQ/HHVyt5jXwEcBtg5qZZT92qUuIzt6vCFhZYgin0JFXMdB+RVGbxzktOChlt5xXd4Grup8d/shIwYNLn2ONUabKcKQZQBCGZpAOkyIzaYonwd5BAg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:16 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:16 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Frank Li , Laurentiu Palcu , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 7/9] arm64: dts: imx943: Add display pipeline nodes Date: Wed, 3 Sep 2025 15:33:25 +0300 Message-Id: <20250903123332.2569241-8-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR4P281CA0229.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:e9::7) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 785eefa3-41db-4935-afc6-08ddeae631cf X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|19092799006|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bdAj9het0i5R1SA4WJ2TDh7bGSG+a4ltCQ/wC58J5od0jjINmj3G3OhK6uUF?= =?us-ascii?Q?AQjidyQLoaLLqM8Hx2CefEA0N9oLJ8BZT919e6VNlyd2+PkXEBxVQIh9cBA3?= =?us-ascii?Q?OoKtPaSeJoknOL/4t9mflSaYUFgZLb+UP9Tn1Ynuyxe8nqHuRjNcwmppBJ3R?= =?us-ascii?Q?8WHuSeAP13eb4S2l/6jHLsuhHIbJbr3rLJOsR/RMufZta76r/t21asIHyJMo?= =?us-ascii?Q?6ExYoohCjLSShnXlMq5bMjYj9Cx78EE4RWg00hFsZfO/65hBGbtEcsnsugL4?= =?us-ascii?Q?uV9cwBMjo+phUrkAlu+dmw1q/yMl+XSJstrp74NJD4NleSnBuR0qvW97rKLx?= =?us-ascii?Q?Lo7KTCRSgyo/EgxDD66ngSoUT2cXoKekAGAa42l/fEsnq8KH+uP9I8axFyiM?= =?us-ascii?Q?i8tIa0KNLhKPvCHZXwlG4Mtk9s6uSnJclXxjr4Ptp2Umdb45XKTeF2pHk1e9?= =?us-ascii?Q?thBcw3FppWbGHjKeSCZWIIv/J4oKXsKcNPrhGI9E2QIGN5wYm8XNOitkSrnf?= =?us-ascii?Q?2ANafFQ9n7NptB3VjVWp8KeMynI9H3DsSDDCuujF4A5ejsBrT89Q8HA965rw?= =?us-ascii?Q?1X155qfTJGbLLIZSRd5l6E883K5qab9HdmYwK5Y1PNEotchoV2UkI0cjOeYK?= =?us-ascii?Q?sjXlUAcr5Bbzjea7z0O8hJ4is1qZtrfCYBeHsh+RgEnpOY5lmuTNhWVfo3o6?= =?us-ascii?Q?BSacxojFoZ0k74T171oNsIyg52HZuIbXaz5nYsm2dBz6EmMmvDwmfOw3jpLh?= =?us-ascii?Q?ch/z4ARGbjsnUF9a/b3mQ8uf19K6IgroyJAnYO6TwIFeomRoE2OhK+tmwBZ8?= =?us-ascii?Q?IN4w7uaUjEodUON8ziDvylaHpL+SHSQL5KdwPIFUCxW9g8qfce19PzBIvQoG?= =?us-ascii?Q?BDCuIkiBUV2oo0Cm4aHJkAej1pBWS85818uq+RSa611lo/cbrbo7rAfX3zA7?= =?us-ascii?Q?6eLJyH089U19knl84qxZhZDiG7nHB22/EK9vddF1Cnzc1hA2zmFYGfepVtY7?= =?us-ascii?Q?Vngy4ndhzOW3joIVGBU22V13MTQpJLojVupuGCcFOIRXeupzanrN/u+vtZ0O?= =?us-ascii?Q?ySo2Oj4mRSClf/zKyqGAmTRimJkiFDcJx41Q+wXnzJ9eu20AFuEYvy/r1DYL?= =?us-ascii?Q?cb5niXoa4oudSn84qIndbBvDDgvgMUhBu3c3dR166tQePzwtsAYnwft8NXWs?= =?us-ascii?Q?x798YyYruCvSZDTemZLXlMTZ1Q0tfUb6oxW1yoCjQhwgCjpmHEBOnTjBOTlC?= =?us-ascii?Q?4s72Jb3fxyPcmLpnCFBQ5fU/zh0xa0Gf8zJQBZt09S6Hx2aw8ha2h3MvNlef?= =?us-ascii?Q?u7gFtYPhwznhDCLSA/FlFrxZeqDyyrBFl9SSmqzQrUcA1TCyZqzsHZhQYGYK?= =?us-ascii?Q?/Yz1Hln6SKTC0nKTAxA7F7o5iL3uL6xr2JwwRKmfuqNuCqicrqSQR7mumNyw?= =?us-ascii?Q?p4yB41OCw3k=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?E8RJtkI9YuJjn+gdapyqA/jtBj8Y88+rIDrpFsfvxop0VK4DtL1+MCSHxKvy?= =?us-ascii?Q?cBxqRoHuEmlnZ3T91Qyj0kGWC72hGTV7oh3rwLYTP3cOfocS89dVRO1Wx/Kk?= =?us-ascii?Q?vd9fyUFzMgnl13JpR/iazeNibsTsFEjcDenS0pSOlrccRjOHA9oTQCUDu5U+?= =?us-ascii?Q?MHKLfDmvxRHapdq/ZurZ79JGUOih/OWddVNUuu44HIEb9E+WigjGxyxkwFUB?= =?us-ascii?Q?Hd5npXoMEkqRPwJZGCzLUNzBJrDFNHD61BsEqN33qBD4ZiH5tCuRLh9wPULn?= =?us-ascii?Q?aAs8h8PakqX9SGdFd/dkkdF+xdH6F+0URqJ4uEk78kyvVVHd43DuEur6IUQU?= =?us-ascii?Q?XZA8Il46zUsoMrJsSIJKuMYQ1MGnW9yUvyMNik765S8ucWF4qVurJcE6wO+2?= =?us-ascii?Q?Putu2rHE8pK6ur41qnHe8/aehem6KHHVa1XnfAIIh23+P8rJMWtnlZJkvhKT?= =?us-ascii?Q?9hNisv3iNcOJORwOd1jONydSIpm8jCYmyhL9uy3+VyXFZsrppa66DRM9Vhw9?= =?us-ascii?Q?WOJ4cL/xRiu8q+2NQcEuPC4BXUlUBDjyI/Lt1Sbcbbxxx74pzC37SZF9kCpF?= =?us-ascii?Q?Dqi1FsrP2tUWSXkh5KG2Vn7b8ef8Qrd0fuxZyRXUXfOgTjnZM7Y+eM2YRgji?= =?us-ascii?Q?gXvtm2VTZlrJ0Y8voT0CNf/7PdX+JX99wIH27O2KSHmgNW8GFpw+jDMECjtq?= =?us-ascii?Q?vv3oydWiBbsNlbBtKJeC6WwA2wQZt7Ujysmno2TF+KFUcSdSI/dSNPOlCvee?= =?us-ascii?Q?Wxc81jUXYGdJlFXaNonEjzhN8JaSFr/8YvGRHf6g/EmpoywXEEey9JUAWOaz?= =?us-ascii?Q?uVor1BS5+nyRnQgN5jYxo+pLTKeCW5OseIBc62KeZ5qgR/dQnmntbDwHyFbd?= =?us-ascii?Q?Br5JTQ677PZNk4zDLGRS3Kg4Km5JPbAbrYYgy2ZFo9/7N6yucZMY9n9lPvg6?= =?us-ascii?Q?G+wTd/d9Hcwn79wkUYDMr9aZa4t6+FPwpfk6kJsn3cufpfJ908sEe0rOd2s1?= =?us-ascii?Q?RWfQuQ9FAMZuAkn+9teMW/NLvraQ3EvCYVkxb6cnIMwfDHx0H4r2S/yvm5OQ?= =?us-ascii?Q?awp7+PPRZX94130o/9NZrzcWOFPH9Vrt55oY0qnNkkh2Nxu8hhWwelMTBfmv?= =?us-ascii?Q?JMfiTrEfKg2ThFAGG6zTZkX1TSnrulYawDf8gPi9CDm5cwuPayq9TRmVMsvG?= =?us-ascii?Q?FQyOAh5VblCT+n08MsBBftoJmhV4c3rD7bFK3ou8AsFob21aMDjc0YAtmjop?= =?us-ascii?Q?vpuz9hFNEfzldspR9lMvJPdQbygp1MgCnTz6zw/5SzvQkYbkVili5gl2NOwT?= =?us-ascii?Q?tSq0nE6FVh0SOarCs6PATg/+75hOqAA7YqWazXVPMfT7131Vx/anKA+PvJeH?= =?us-ascii?Q?8L89GrzvXVxoS5Wca3Iw92qMsRjUqRuGF3R+FAHRjh1luEY4JYdyT4jTUVRu?= =?us-ascii?Q?2VckXNDDkJ+hlcLf/yf7WVWon5mzDwK8B0j3wQYbxXlRejdnysByxAgHYLwx?= =?us-ascii?Q?8JehxwXHQLnx6QdUhK4j70VDT9EBUB8dcnmVyHUgBvuQoMrHOM9Ly+FsXr0T?= =?us-ascii?Q?V+E60hD4lNR++xXC3S7H8oIbOOqFSiYm9uDUTEGS4ofs1pXDbmm4/hMhzoe4?= =?us-ascii?Q?oA=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 785eefa3-41db-4935-afc6-08ddeae631cf X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:16.1084 (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: tG05M8RMxWsKAeXRYyL50rgW3xtTWHHq8xfCnEqNzonyINsn57Q/jrQAMu1zc3UKPsWIqBuyoKHVG3LZwv75LA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" Add display controller and LDB support in imx943. Signed-off-by: Laurentiu Palcu --- arch/arm64/boot/dts/freescale/imx943.dtsi | 53 ++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/imx943.dtsi b/arch/arm64/boot/dt= s/freescale/imx943.dtsi index 657c81b6016f2..9a91beef54e86 100644 --- a/arch/arm64/boot/dts/freescale/imx943.dtsi +++ b/arch/arm64/boot/dts/freescale/imx943.dtsi @@ -148,7 +148,7 @@ l3_cache: l3-cache { }; }; =20 - clock-ldb-pll-div7 { + clock_ldb_pll_div7: clock-ldb-pll-div7 { compatible =3D "fixed-factor-clock"; #clock-cells =3D <0>; clocks =3D <&scmi_clk IMX94_CLK_LDBPLL>; @@ -174,9 +174,60 @@ dispmix_csr: syscon@4b010000 { lvds_csr: syscon@4b0c0000 { compatible =3D "nxp,imx94-lvds-csr", "syscon"; reg =3D <0x0 0x4b0c0000 0x0 0x10000>; + #address-cells =3D <1>; + #size-cells =3D <1>; clocks =3D <&scmi_clk IMX94_CLK_DISPAPB>; #clock-cells =3D <1>; power-domains =3D <&scmi_devpd IMX94_PD_DISPLAY>; + + ldb: ldb@4 { + compatible =3D "fsl,imx94-ldb"; + reg =3D <0x4 0x4>, <0x8 0x4>; + reg-names =3D "ldb", "lvds"; + clocks =3D <&lvds_csr IMX94_CLK_DISPMIX_LVDS_CLK_GATE>; + clock-names =3D "ldb"; + status =3D "disabled"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + lvds_in: endpoint { + remote-endpoint =3D <&dcif_out>; + }; + }; + + port@1 { + reg =3D <1>; + }; + }; + }; + }; + + dcif: display-controller@4b120000 { + compatible =3D "nxp,imx94-dcif"; + reg =3D <0x0 0x4b120000 0x0 0x300000>; + interrupts =3D , + , + ; + interrupt-names =3D "common", "bg_layer", "fg_layer"; + clocks =3D <&scmi_clk IMX94_CLK_DISPAPB>, + <&scmi_clk IMX94_CLK_DISPAXI>, + <&dispmix_csr IMX94_CLK_DISPMIX_CLK_SEL>; + clock-names =3D "apb", "axi", "pix"; + assigned-clocks =3D <&dispmix_csr IMX94_CLK_DISPMIX_CLK_SEL>; + assigned-clock-parents =3D <&clock_ldb_pll_div7>; + power-domains =3D <&scmi_devpd IMX94_PD_DISPLAY>; + status =3D "disabled"; + + port { + dcif_out: endpoint { + remote-endpoint =3D <&lvds_in>; + }; + }; }; }; }; --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011060.outbound.protection.outlook.com [52.101.65.60]) (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 C624E3009D2; Wed, 3 Sep 2025 12:34:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902864; cv=fail; b=crET/2uztLMRuN/mHqrE9SyOitEFMKphSnBlb1859jQbSg1Y8xNl4t/lWSDpMUQPD7+8QFR18Q9OFiGjYJnJI526vFFGuREw5P8X7TKGHH0RzdOe0P/M9SBempToKKdGPcqLa/Bgh/ToRi7lLRYe0rCPE2PR6I74QeDyr9UcA+Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902864; c=relaxed/simple; bh=pi81G8PylagKh1H/FHExwvFZJ1CqxDA7nY2YWzrECj0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=kur3LCTLoQsz2Gl6nnhZG4COZ/cRPCrCxhSc54dEQ4MQYzUbMcVFXw82VgPppGkahh6uHHY1A7mwZva1RWJMYPZ6PkNgNp436zAoxSM5DMayzFAyuvP6yp1miYKQB3nSBU+t16hgJPKXSynTaJV95/iZOiDFsnFHk0jgOV3Mmeo= 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=XOWmVRYd; arc=fail smtp.client-ip=52.101.65.60 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="XOWmVRYd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aK75Eoz0wE5312UDZ/dAk1Wt+jwzQ+RC0cO7wDSw1EPXBwut2I+cz1+agCmdy9WWwArfw24GDZSXTyMhPcYNo1TiL7AdNjbnt9rF+zsFuM/1gbUK84jbte6OfCmjMAwFU+MJwFu5dnqY7GpC6yEzdnlWex7Q37Ir4nTlZScndpMsGEQnegf6YTFRB9YOrjYNVWJb6kXjpX/O5dki7C4Y+OIxJnuGitFB/5h+q0dvtRQqdgRClHIFnV0Llb8Pv/iwthHq7EYOuj7TXeaoM4/8gWFQvQ90ldd2vdzatpdJ5v5Z+iIWFoq8V/xZZMmqkwTRwWX23blL7/b+4qQd1pqAgQ== 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=+pKz+WlvrYJ+fPEt2bgu3jtniyOiD0UOJU/vbSrbWmw=; b=TfonscUcNPdVxn9ysSQ7apSap4fDHz5SVNZNwGEbPXCTXbOh8a4K7xwV6p9LPEL2MltDD10pbHqJo9oEe+kOYs89sQFMikH+f6heSw6Xx7cRUy+zT7oBN6aMiDaeVWPiVnCV3/15X7H09tkLeUQYbq4/iiwdoga8JgCjkTNmNo2ZdFuU4ZEOmik8CAegnvjwPwG8HY45U8B+UE9m5Px87x/xRlETvnZoY0FG6w/JP1IOWy5JZHZyNlB9fhf3zvFMygb7TXXRQHUoUqIpSkldtjzj8OFMcYXrlptFZ7kzk/va7qf8P94KMAIaMpstlXQYGHSfS+fcYCtitYdI9yDjEg== 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=+pKz+WlvrYJ+fPEt2bgu3jtniyOiD0UOJU/vbSrbWmw=; b=XOWmVRYdBE918FGSrP0Uv5ROrkdfyWh7sXgF3OoSD2lXPtrUxBb2n3ak+gGNXkD/WPLW5jw7B+/p89tSG+C6hRNSrUY3PHtvCh7tDLaT0aEXmVxVH7nRx3XbmmHTOZACVUZgkJNX36Htyq7LrSG1Pmh9ItKi43cSYTc8Vl8gAznbjpUT7vIRvVDw2fmXAM2VglGjPmDWXcgBlM1n6Qlbvb3zM4ye6wS5KcBpTmhjrZUEfCotb12ZG7LIrEjf10saInDG6oIBgoUzK2XEunbKxuPjR98QjCRlx6gIx5EEuBcytJicp9uxkX1YHeXgCSBzU3vPJFRG5esbM3sHgHGvmQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:19 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:19 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev, Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Frank Li , Laurentiu Palcu , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 8/9] arm64: dts: imx943-evk: Add display support using IT6263 Date: Wed, 3 Sep 2025 15:33:26 +0300 Message-Id: <20250903123332.2569241-9-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0149.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:98::10) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: ee64a4e5-4b0f-46d6-d374-08ddeae633bb X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|19092799006|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gOBDJDqcLAWgLIWUIJpqZOt/rZPUv8rL4LhH9NVWtH/M7UBh+GrFoblvOeFo?= =?us-ascii?Q?0CobmN2sPs+/LHC5sioG9Bvg1zepeAXAnjoL/Xg1+Q9wIuJAXheJa1R+Ehjk?= =?us-ascii?Q?+5Jju/PjltI61mF9KCmXthm+wwSgeOLN5y812h6PtpB/FLnQ6JcAauKFWq4F?= =?us-ascii?Q?QAwhWCNtLa0kCeb2fu/estIviKfP50z6qcNseSeXSlj/C8mFUmm/LWwQwCXd?= =?us-ascii?Q?hrkZnyXP6t4tWhJgJRYHI76St/DfXTQOLkXBtidlJVHWrLpAUNVhLCSHiEDU?= =?us-ascii?Q?23vIm1vNYHOgDNFcmYEcu0sT3nDWRB2M8ZUasdVpuYqCtddc8vX9ruohnMJe?= =?us-ascii?Q?esGMdWfdrkIAqWhg5eSCJTwnXGH+VsQd/Bc5arEkpaTnt46DPS/dDTzKYb+i?= =?us-ascii?Q?7kjSJDOC8u1nUF4C7vr4KtBVeYeb0KMGpyaUyd0YoiMTDk4HThkvW6syj2D/?= =?us-ascii?Q?wGGbkrZTOnejHH81kYIpskXbO4xw1REsvK4UfIafVgT/rqv31gIYpkT0GUdj?= =?us-ascii?Q?DKhKOJnCH7vp5nwrA9or3vKfVqOvDW0wCxDjxuC4Gfj0v2RWONCdpgNMY5J0?= =?us-ascii?Q?M+gD4EcaZD3TLcuHw5/Bp7jO10A0GIHmPaZ813/gNKKBK9f7EWlVR3DGAV0c?= =?us-ascii?Q?n7wNxPHgF7MioWbNW8jocWLANJh48eymdR32TbbjEn7iUibYVQxec/PbZ1FT?= =?us-ascii?Q?7e8/7Pj7rs/yPX62PQkmoaweonD79r2O/1V3qCxMzRbw8zS8vqwCoO6obzea?= =?us-ascii?Q?vao2qlMzY7L42bJyC1r/x1aSLxahyeXgSquu1ucACDATu6TWLJ+XJmXfgcva?= =?us-ascii?Q?jZtcRijVSStNHmnGLtlvOxplVpTA8KyGsLR5LovRs/oHAqvA54jd026pO3C6?= =?us-ascii?Q?TZ2tAcstcTKwiltz/2Sd3vztuHBqhAupq498at8p/ZekjQusC+oGeM2/p+Tb?= =?us-ascii?Q?yrJEreJwUMcrKpCk29d15nU+v1RF5PiKRNSWwGj63+uqJXUZDtVHO4qthcwX?= =?us-ascii?Q?VaI/LbXQgxrqMhqcyJBiO7Nl/AsNwp8xPyRWwZFC8CUkybUGIj3Vt1lpVC9v?= =?us-ascii?Q?lrpSoT7z3wJf+UndREnL9OjJGlrSrLBAZk0ILAUFZ528Z0Ck8FJRP1O4RyHw?= =?us-ascii?Q?Ose2grmJALXPaUmNwXgOJRH7aFm+Xv6P/AEvkOILytRGqhuS059P0BcBfBLw?= =?us-ascii?Q?bxpWSQZtOue/XXGUiYztFMKi0IkX1ud86IOc9ioseYR2ao4Q6KMc7pUstDYF?= =?us-ascii?Q?ZPxnpdbz+5245ZaRMYlRsGX/gRQco60iB5pzEc38C8yQqN91pVaPNCI+Zwcn?= =?us-ascii?Q?l90H5tLnGGQwulHbeU3UXT9O779KWJW15IsQ3yvdPdnGIxyJDzgCnaAFph7G?= =?us-ascii?Q?5JnzquaiapqAWLpqThvrW2cMD4PZb15HFX75exUV0TBmNhV1Rw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(19092799006)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TMk7blbCR2Eyn9woOAGbS0eoMFkCCxNBUt0v8S6nvM9MqcjWLB2Sb1f2gFPc?= =?us-ascii?Q?7ByYX+UvkVZXDTAxvPmDDKKQjxkIJBZZdUuyPvL4Po+vbQDR1VW97WL0c5TG?= =?us-ascii?Q?E9r2bE7ldxgNL98v0HH1xVnm07HyCMEWGSK/u9MHp5cjngFCc+2y9jBEZru8?= =?us-ascii?Q?yi4Bp07FwcOLdMx/XfGkDUbDaP53bFePZq99vp1qiOtCQ9nqQ7dR8y7IdWyL?= =?us-ascii?Q?HlvntoqR06zBBi0Vxi40n/7X7OdaIwZb2GAa10JlikZoUlk6MrTr5ae/LnUM?= =?us-ascii?Q?u/oEbF5AyGK6NW6g4AWxW/lSIc0sp5yrGE43wjO71sbCC5lrsjrygTtn37Tg?= =?us-ascii?Q?bKXbyzmhJ7vY6fA3WuAMfd206BbnDt1QJBW19aaIZ1sduqz6yxnfoTLVrA2H?= =?us-ascii?Q?SFzAvr0z20wiGf+Mz9KxMS4oDYyikslpgRe3bYNGV0fLhrnVsSp+O5DWxIFU?= =?us-ascii?Q?5OyYtACVDsz0Lu4EebHDRrosrKvZ4JpoZH44dQnqzqRfbQeuZHYUZc+Cso2L?= =?us-ascii?Q?CqckP8LSzF0kANS96gOq+WxDsnao+FACKek4fB0hYVF0QD9LcLCTY9sQ/ROw?= =?us-ascii?Q?eNJNYYEs6OuoS2PzaPVru3NSbacyoXOaqp2yB9/LBda95a1KzY9pz3mP0Rz3?= =?us-ascii?Q?FV2tV4FYzwouWKW4KR3k+BM5qKzvivV71ZB0SIqlWgAS8jD3th+NZjBjyINL?= =?us-ascii?Q?fWX5qQ1eEqu5zpWGAiiCnAROI/Tsv1XhfTepbNJ9UyPxAUxeg3eF4m+w6aMd?= =?us-ascii?Q?PdsC1eHVs+Xbz2hGp98ampQqPRj7MBOIjdOkP+GzHaMiOR47q4rQeDCZKbEj?= =?us-ascii?Q?1UDb2GZTGEyzegb0AhPVvGyRwZyg6ndC+XkuvkrLqZSNJXKLJhmUvMNLGZPw?= =?us-ascii?Q?s7p2BB+oscUUUoCcFinMwmvmmY1GH395dAseAe1ZtacVWTOm5fPErilrB9oG?= =?us-ascii?Q?RjFePcDFY4AYxO+TyWGckRNpDyXJmhzPo9TWMJZ7aFb0GjGtw93020puXPOs?= =?us-ascii?Q?k8flKTP8QLeqjEEkSJCFgfhFOQHZ1jcxn8weQGXZoC0HbJvsde50ztX+FVys?= =?us-ascii?Q?KGZUAeaOYQxWEwbW1z5BD8oJOQsw1TpCta1cFfkeYtx3qFwFP9+IlvPl78C9?= =?us-ascii?Q?vi1L6mvik/p4L8BqIWmdnIE97gW+BS9SQimstxQqz3bqMNw884bGIOODI7Ls?= =?us-ascii?Q?Z7phyf4JaR9VUTZHXqKgnlG4L5Fv/8/Rje8ix85nfc5bMrAuZUGkwG4ni5aj?= =?us-ascii?Q?jvDAizvUAnexqJ4pe7Iw+4NO1gcEmDvFv3SeidypnXNDtKfvQNvqyWG9ACsM?= =?us-ascii?Q?xyKM73tUT6a+UV325xYg6osM17b8QlN5x9zHTd2YTHiuveZa1KPgSWTRjSaJ?= =?us-ascii?Q?nzjcQRBjPsgfEMrMDTL4UNCWlE0P2kYTfrVlM57pEtkPPSSqdF86BIpl/p+5?= =?us-ascii?Q?bWoWBaVa0HlsEojO366Yq+B00lyE63VmainIfE73MPHwS3/dzNlhzdZOaZ7G?= =?us-ascii?Q?6XbykwncFxdV3Q/nC0AOS3+Ic1DMuGtcKlhSzLb9Fib+0eYusyz/YB3K3C82?= =?us-ascii?Q?s5Q7vRl2F83pqgETJRP2lHtj7t6ZLc/6uTuh2n2GRWQ+72ftHy5Ylg2yO7BR?= =?us-ascii?Q?Nw=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ee64a4e5-4b0f-46d6-d374-08ddeae633bb X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:19.2386 (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: 8tQZWoVrqwc3KoLc3KXDVdD2QiPseuXYg+frBdcevALPTmuP28DGiEC6GBTLgilTzcrs4ndN5kVDMpNPvXHcKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" The ITE IT6263 based NXP LVDS to HDMI converter can be attached to the i.MX943 EVK board LVDS port using the mini-SAS connector. Since this is the default configuration for the EVK, add support for it here. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li --- arch/arm64/boot/dts/freescale/imx943-evk.dts | 121 +++++++++++++++++++ 1 file changed, 121 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx943-evk.dts b/arch/arm64/boot= /dts/freescale/imx943-evk.dts index c8c3eff9df1a2..5900ff355abc2 100644 --- a/arch/arm64/boot/dts/freescale/imx943-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx943-evk.dts @@ -34,6 +34,18 @@ dmic: dmic { #sound-dai-cells =3D <0>; }; =20 + hdmi-connector { + compatible =3D "hdmi-connector"; + label =3D "hdmi"; + type =3D "a"; + + port { + hdmi_connector_in: endpoint { + remote-endpoint =3D <&it6263_out>; + }; + }; + }; + reg_usdhc2_vmmc: regulator-usdhc2 { compatible =3D "regulator-fixed"; off-on-delay-us =3D <12000>; @@ -127,6 +139,115 @@ memory@80000000 { }; }; =20 +&dcif { + status =3D "okay"; +}; + +&ldb { + assigned-clocks =3D <&scmi_clk IMX94_CLK_LDBPLL_VCO>, + <&scmi_clk IMX94_CLK_LDBPLL>; + assigned-clock-rates =3D <4158000000>, <1039500000>; + status =3D "okay"; + + ports { + port@1 { + lvds_out: endpoint { + remote-endpoint =3D <&it6263_in>; + }; + }; + }; +}; + +&lpi2c3 { + clock-frequency =3D <400000>; + pinctrl-0 =3D <&pinctrl_lpi2c3>; + pinctrl-names =3D "default"; + status =3D "okay"; + + pca9548_i2c3: i2c-mux@77 { + compatible =3D "nxp,pca9548"; + reg =3D <0x77>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + i2c@0 { + reg =3D <0>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@1 { + reg =3D <1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@2 { + reg =3D <2>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@3 { + reg =3D <3>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + lvds-to-hdmi-bridge@4c { + compatible =3D "ite,it6263"; + reg =3D <0x4c>; + data-mapping =3D "jeida-24"; + reset-gpios =3D <&pcal6416_i2c3_u171 8 GPIO_ACTIVE_HIGH>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + it6263_in: endpoint { + remote-endpoint =3D <&lvds_out>; + }; + }; + + port@2 { + reg =3D <2>; + + it6263_out: endpoint { + remote-endpoint =3D <&hdmi_connector_in>; + }; + }; + }; + }; + }; + + i2c@4 { + reg =3D <4>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@5 { + reg =3D <5>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@6 { + reg =3D <6>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + + i2c@7 { + reg =3D <7>; + #address-cells =3D <1>; + #size-cells =3D <0>; + }; + }; +}; + &lpi2c3 { clock-frequency =3D <400000>; pinctrl-0 =3D <&pinctrl_lpi2c3>; --=20 2.49.0 From nobody Fri Oct 3 07:42:41 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011060.outbound.protection.outlook.com [52.101.65.60]) (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 028B530101A for ; Wed, 3 Sep 2025 12:34:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902866; cv=fail; b=XzQX8RR+4xxNYBwx4CqhwF/tPjqRYYnSpGK7zNLSQ/RXMyftIuA4Gx9yJLxKDUKk3Bq22O3tghV9SvxWlpFA+Ji+WVUsdXdXy4a6WfiNE7IeVQAXiMijzbo43P1IZL3Nz4Vtt5d3gZtS7bjfmWDm3Opm5I/CdBqtEvAL4tQLd5o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756902866; c=relaxed/simple; bh=HAXIQszgEbgcuVo6Is5uSb8flg19YMshRhxydjAzSZ8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dwVFhfn4OhOTQsrmLCPj7UIQIyn5G2PUC4tYLMw0adQYzrUAZc9ay7sK5CghON/D2MepewOMU5lsiWiWrQqbp57eyqgHbyaBbfUb55bljSWIOwY3YZOdL+IQm26lss3O/k2/V8chKxBMLEheo5hnrjuhuyHJyVuV2A4slAIt0kA= 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=p3bs7scC; arc=fail smtp.client-ip=52.101.65.60 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="p3bs7scC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JwT5S/ceONRnuh5U/V4JuMJiSyniWTsI+jkaBZTTEOodoXAOitq5wV2H3td71TMJqK3qHiqW81C2K/qLM9Czf0T5u0b4xJsMgnNXBnFNEwYF+pLVbgMIpcNS4NKR5NhYuES+M8shaWR1s3kidMByF/lT1t/gZ/7cYxRR/zdIGvDjx5mIuwraoG4mz1jLp+nvxX5zyS9+QweKR7jt+XdJe2R5OqOaBCnNlCNjwnZDy4jN3A+XUG11jgaBpMO08Y5ZEebL4A3R2AsUyI6F0O3m8Vslq4cG0b8X+MmsBrwqm9WXKo2FpFs8udgGVL9RxCnEJw9fDPGgRi8/9FMBpMWYpw== 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=Frp2GD8hwiHOtp/3E4Vt5ehBnzpCzRS6f/alAqw+U1U=; b=ELxDuQjxJUbF9ksV8ARYwP7ZYkXCUjRaRdEWe+GRZb6ng0b6h5ah5PjauEvs1a5wTHrDhtAn1jeHEo86nyuNviE6PeLiMNFuCzmEdktDkvmNc7kWB1Q4l1Oe2IBeZr/ISq9zKfNSFeY2rAAuGnFSg5iSSXv3J6joA6pbbZHtAxiYceNewm437lpHgpvBiVp16sBR04wlR6Bhp0UQkpl8TTFOOFufEbJcm2VunwTkoSJ3juDz16rXNwUTuGvnbiTYqFjG/CNbkolTs49iX12NjhHyvTZa5vSsxU0ibC5suhcz983Y/+JWEAa+BJo6NU85nD+k9UzFNsYZ4iA6jnya+Q== 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=Frp2GD8hwiHOtp/3E4Vt5ehBnzpCzRS6f/alAqw+U1U=; b=p3bs7scCo46LRfJrNPSb7Yz3mvzCq84wStSVOG6DozzkYZ7xt1RGsTziSTB6UApY8HVpDVN4bZE0mAu9UDFiRo7NXoxOyHIA3njjEMGPeOneLx9ctU+BYb1XuUamVzzW6AvK+Qk5sTCpB/FUkxo5gcW2QWgMJ1IqRR+DgW4dxudwXmiTfLBRyIigu8aMK7fw5LcjeQ/q2Y8SNjCZR29TkA68+FmMgxO5IX8/35NFIAoTu9x0oqRFN6pNe27Neljxc/0WrBmrsqL9k3a9pItTiC6a4gnfw6G2k3WXlEjCJ3qpzsvCd1wphEUcDptAPdwaYCdvTyPlcFoAZnEI59lbjA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) by DB9PR04MB8233.eurprd04.prod.outlook.com (2603:10a6:10:24b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9073.27; Wed, 3 Sep 2025 12:34:22 +0000 Received: from GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442]) by GV1PR04MB9135.eurprd04.prod.outlook.com ([fe80::b1f6:475e:de5d:8442%5]) with mapi id 15.20.9094.015; Wed, 3 Sep 2025 12:34:22 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev Cc: Frank Li , Laurentiu Palcu , linux-kernel@vger.kernel.org Subject: [PATCH v4 9/9] MAINTAINERS: Add entry for i.MX94 DCIF driver Date: Wed, 3 Sep 2025 15:33:27 +0300 Message-Id: <20250903123332.2569241-10-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> References: <20250903123332.2569241-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0153.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:98::20) To GV1PR04MB9135.eurprd04.prod.outlook.com (2603:10a6:150:26::19) 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: GV1PR04MB9135:EE_|DB9PR04MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: f2b50b3f-452c-4968-64dc-08ddeae63571 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|376014|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?VmQq7bPqcYLN11Wqn9pa1ItM+TkJRiVxqr6WLUCuOLU7/+mc6UYHx9kjp0xM?= =?us-ascii?Q?NDDjHj/LnTXon4OhJKAua6qQroiRRiQG/SVyNhJdyEHZcjDSkD32mjm3SXxu?= =?us-ascii?Q?vD8Wjjci0DXrjlCRZhC3vsKJFcdDToZEoXxucL31+QRH5iqhimjTP2ZleNaV?= =?us-ascii?Q?5vcuPHkgvZvuCF5ExoF+y7bOH7/DDOGjBwrh6rc1tVWg8RklsM3ujY5P/5sN?= =?us-ascii?Q?wQjFKSXqHz00v3jUrtQW/aRqrBtLGSqdwMKgakctOyoVy1xjiu7p90+L5RGZ?= =?us-ascii?Q?r0OEg8aDDJDhr6CsVHxK2K3OZbsfN83NInL2bFkjaTYAWEsRF4wKSRpk/ScS?= =?us-ascii?Q?AVMoVf43XnaAv2xtvUIxo9xCwSdqn+YMY92PEu2jSJTZYDA1YzIrDAhBJ7Wp?= =?us-ascii?Q?Rcq4L0GT0iiUzpr9Ib7CVYTgDDQMJHBazXsvyPGPzNHMD8sWzQ0yhNuskmYR?= =?us-ascii?Q?4/Wggpp8G+GB6qqnsB9cuK/wGtxbfbhnXyIrnOG0j1XZHJytUgtBJw4VaRSZ?= =?us-ascii?Q?mCKc7WJnio6Y/QZ4omczbdimVSxmvBw8nEVACOKIm6A+si3Y0yE1P8cHAmg4?= =?us-ascii?Q?ulwvBMcio5nJxNK7JfViLJAT7h0mlpv588WogytcaxehK373QQwjM2LuQXfm?= =?us-ascii?Q?pgAdWvaXT1pKKJMoCWq9tIxCkTfxHiCgkfZswhYAt6p1/0VdimBgLnA0lm/y?= =?us-ascii?Q?rLa7kn8nXhYePeq8lRr6uIHY0a5iQTxuJewzGrEAc4G6QmGAtkV2NZb7lhkW?= =?us-ascii?Q?1UFj7p5x1sBRwXWX+ck2fS6mwth7eWw/C+h+PbSRu+Rf31oJ1ws1QGlrKxuS?= =?us-ascii?Q?2R6At8g0pHH7m6HX4SJCa6/a8MC3hAuHea409/gpGnFtXakFpx9c/VCBWK2D?= =?us-ascii?Q?3OKnl4k6r4hbDKCjxJ01mGLINnQiTzSBuDip6niZUfTDsmfCS9GrhyoWs0UH?= =?us-ascii?Q?jz3h3NLdWjSJarLUCSGK7XGwalbYFfJDX+kCG2dYTEfglOz+fr3S8iESirTC?= =?us-ascii?Q?fAJQ4WRYwcrwVHZhO/9DvxjCw18hzajJvN0ZjHnBOYETE1PESFby2EGXH5F+?= =?us-ascii?Q?v1SQjdGK/aqkyM/WAXF8mqga2BvnDXCSvBFtBSAP5pH6vGfbLSlEY0/3J753?= =?us-ascii?Q?Hrw6lmz0xugsHixwGn2Re0Ii4rAopHKJgnw6edx0jkspnivq95lfuHg2rqio?= =?us-ascii?Q?O350cLtKOlnkSLHSIUZAOuxrgbC2dOgsmM4tTFUT6wi0p5C7eVBXa3RIcnpf?= =?us-ascii?Q?o0qbXgkWzj2H2H0fIwQgKdKAa9E2jRkwkrFjdbWvQJbwtqCVXCoMYuksflks?= =?us-ascii?Q?uGFBN4No/qeHhtbdFrl/VihC46TvvhZ98VcXgrio/RmUM7jmgwfva+beNtb9?= =?us-ascii?Q?UYf9uhM=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV1PR04MB9135.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(376014)(1800799024)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RkgvbqIKec4mhij2xo30i0moqo9IbYtATlwEb4/+Fy5Ze/hT7dYyvA2QmqkE?= =?us-ascii?Q?TZBUr3P8bcygHMDYP+ZeCs/hiD6CNjWAVxiFmIR52ZGChPtmaEgVIvRZKGTj?= =?us-ascii?Q?xceFtx4s+hZkHjUCES4W+SGG1KrmNPvarZEb8xOBcDS9PuuOgMtdsLtxfsDi?= =?us-ascii?Q?ktWoGEtFhrVqzpFgDKTySW+IoClBryrJl8xpoYj+F58gK1/V5/D8hxouBOX9?= =?us-ascii?Q?VTXtbSGqptEFdjqxGw0en4N5oOwKv1zpr9t+Bx/717xfaYe88A0fipTE/mCZ?= =?us-ascii?Q?njl9iD/gE0UXdh6tvrHadFxjXKBa9l6AvSom/oSCuDoLwmPw9fOoC7+1oESk?= =?us-ascii?Q?e4BPfUreWtYfhyzeJakoa9HkfZkaigJq+lsU4RuK56oE4jpJYsEQ6W+ZwXPU?= =?us-ascii?Q?Ieh2o73dcUk9Tx68miX2SgwXsxMpUKR9b9u8eZQL9XZede24qnxAs9iIsDHd?= =?us-ascii?Q?R3JnQ3kd7/xJPfiI/O9Oq1sfOlprGxTtpTiKWls2lpnV33wqZimcZkwn2wv0?= =?us-ascii?Q?TzjjcKIMdTcVeULwjOB+xVsdeb7obwsruUtwegQk0Xp6Oejh8zQzFRAbFWyv?= =?us-ascii?Q?ePargVP6BySwWgEJBnewF7YPDRe08BdZweMoEShStylVyNAhW8nA57T5s0ap?= =?us-ascii?Q?5yxQg2x0XmgZcfO8BVtS+gDCBxWIjZvblOXYOYgB38nl9om3g/PEww0XOxV9?= =?us-ascii?Q?kHYSgChDxKoSs9d41ccAuor4qCCxqqpprIbJQ9ZxX4VvVdoUKA0O9FYdVTIz?= =?us-ascii?Q?1Y6uP0VkUsb0NmcvL/7Jt8HArapqf303EWRolbSCpBtfNUnh1dDK51SKsJKz?= =?us-ascii?Q?4ArghGQu9U/c2d55zNmJY9Hz1NhZz0vXET1B4IMvljMqkH5n3We+vDz0PRQp?= =?us-ascii?Q?szBUIWiCN2J7ja77cJqUeERY8HfOC5LqZi739hPcmRU+bqu4TmaXPLyKOMB5?= =?us-ascii?Q?d/quPwEgHQhj3WLLF/khNqe3Aqi6zH3LlxD35JVpBmwAMJZoDRuo/r6jsika?= =?us-ascii?Q?cFDvbZEJ5lPDszPGAhEv38rjnUzjbO0y6/zxpcNAN+r3x4+cQRdNusjMXU0Z?= =?us-ascii?Q?GIkmDtjPEMSInBhgPJgaCEY8/h9wW3s2fAK4M8MOz7q1BSO78P5eLurahvTl?= =?us-ascii?Q?uDcKl2cREnyxLdSn1uofqmYzrRqeREclykxX/T8be0e4GW5RlNY8JB7Aki9r?= =?us-ascii?Q?xqzhnUjvbe1UDURiyjtn+G6sCx6yMxQ1NjC+B2Oo1ZYJ0gRdreOl+0/NSC9o?= =?us-ascii?Q?h/8rG4mrVGyGVtAoXgcaWS0wUnqi58l01QWtqIPBQay7DqRfEOThUtw6x1EG?= =?us-ascii?Q?+A9UKDVp/jcKWjLCseXmyJLojOAU9LgLNOsqru7HvKIGmcwKl0IVIwRVTznM?= =?us-ascii?Q?XiAYULv9ikJxQzWKe1B2tswLMS+b9GioX1WJ2DJl/f6JsNCZDLnOtj0JYlzk?= =?us-ascii?Q?cgoZdhJz0n3Xj3u46xVjnxEwYpECNman6WvE6JsH8R/XMKTl7hT4M9jOVNrT?= =?us-ascii?Q?zGe939LDsJ2KCMirXImw1mv+FVQ4pqrs0Qn42m1cFiX+ZHNptKIP+qgvRX5D?= =?us-ascii?Q?1RYOEJy9fXRXVgJiUh/13y89s6sCB+DH34So8l4lDOycj0p9Iqm1T4CHlTEw?= =?us-ascii?Q?rA=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2b50b3f-452c-4968-64dc-08ddeae63571 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2025 12:34:21.9829 (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: AtnYGlamtA2JVs3zRFLKJxONXHicMp2aw91FShHDDESvpNB6ybvt3DdYYibAD82Dnxzckx3dZQJBzq1BAuyVyQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8233 Content-Type: text/plain; charset="utf-8" The driver is part of DRM subsystem and is located in drivers/gpu/drm/imx/dcif. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 1af81124bba3f..dca6b1ffcbc47 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18360,6 +18360,15 @@ S: Maintained F: Documentation/devicetree/bindings/media/nxp,imx8-jpeg.yaml F: drivers/media/platform/nxp/imx-jpeg =20 +NXP i.MX 94 DCIF DRIVER +M: Laurentiu Palcu +L: dri-devel@lists.freedesktop.org +L: imx@lists.linux.dev +S: Maintained +T: git https://gitlab.freedesktop.org/drm/misc/kernel.git +F: Documentation/devicetree/bindings/display/imx/nxp,imx94-dcif.yaml +F: drivers/gpu/drm/imx/dcif/ + NXP i.MX CLOCK DRIVERS M: Abel Vesa R: Peng Fan --=20 2.49.0