From nobody Sun Oct 5 09:10:58 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012042.outbound.protection.outlook.com [52.101.66.42]) (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 2809B28A3EF; Wed, 6 Aug 2025 15:05:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492746; cv=fail; b=BqPQqUaU9nD0z57gvkZNx4h9ytIj5rvcNSYGqc9dGnrJevu8DQw9JMo3veGrf76PkOAeLTmUPkReILv9pz1g0iPuGY8L2PDX33Ches5ezk0/lIWLYDNXyBcw1KZuQM+53PWJoT4PSoJm1TG7ccpXRY5rDK1q97FtECRMraRtw5w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492746; 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=ebm+xENMg9GWVRlDQxrPek+ccCfSKdKBj53CrLhG9GT8AeYXYqE8LM4eAUuEEFtYrUxsOX4SGR7Xi0vPAn1b2CHoUKMBFVNQ8L1a1411hAdiQsXZORLeJAKHD6gBS5IVA7eJg1RvECtZzdXtJLDBTCxK9xWLrH42BnOE3PMVs1A= 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=DzcJzSMb; arc=fail smtp.client-ip=52.101.66.42 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="DzcJzSMb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xW2uje3dem/9lEgeRhJeCc69C58af8GdtHDGuiPFGIhLbtF5zZQlaFrbPgxc4jB5ksf08rd9tvkK9vLgaZ2EDqPEys+j14vO1uAbzbcyUK4+Ucn2yryUcQdZYNA5MjNTiY5+l8tf0KtgEAPp5kngBfMfdOQGu+QKVuHJAg/pmnsvRWzb4jEHSV9kVVMpTTnvVzxgEucUTOvxOaVM7asAoc6Hew4DrYvwwS7I6QbvXX3wLd8FB0iNW18ftl++ALu8N+RS4QjhyxtRV49yVKJ0N/meViM0ZOLhlbb2fSGvSFlmGi3D6qYjX/QJK3qpnCNi0Kbh7hYCsivL3TzaIAuZFQ== 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=NWaBHN9DgAXmLSsjUNGT47tCVy5V4m7Jr0eTmFZDMyaAzzIKpc0Y/FNl5gblRTGMDRgS46gKXr01QxGq1lBEAQwHtGYCoPx+Od2ksyfxcgBGnyulGvnv1/Kqmrm76/IRTcc7dSfL0Iq0Ip0qTYTW5QT8Pvc9BBiHhpJ6BN2ubaXO/w3/u6im6BoUW11OyGjf+fFZzYttLOQDJw1tz7ZxUqYYEaf2TRQGd077TLvzeXU7HoI0QLkttR5JxtAO/vV7NyzUeoqP1JzOnwOicuA8ZpbSnvyoNnmri9r0VxxyoLc5LO26erK1ayPT1i0f9wbGe5d2PD/ZqCjtn3ptQV8dVQ== 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=DzcJzSMbxh6HuDTVVkGkr7el8SSDh2meTdYAEZuMhWVNGHZSKQYTDPtmSKb9RkuKKYEknyxNKkpTTi2zJRC8HZ01JFanjMOLIYMKY0ArbQbMwGBX9ntZrT4LrihbpoxYB1GM5PUkGeyVzZfW+6M5bJSdby3cKP9nbijfydfmrdc7xIMX47brFcA9Vamtt8nqVgILVFwf5KqJDNtiB1A/v9AKGkAXakIN8DGcb0WckNJZHSXU9I6Rp2zhEK+myQQeNahS2jSN77mwChSgen4e9RbUNwspCAOUXPX5e726j/hpYqo2CD01PUN0P1Qko2ZAANU2I7hNtl98M2yqjCPT8Q== 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 PA3PR04MB11203.eurprd04.prod.outlook.com (2603:10a6:102:4ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05:38 +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.9009.013; Wed, 6 Aug 2025 15:05:37 +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 v3 1/9] dt-bindings: display: fsl,ldb: Add i.MX94 LDB Date: Wed, 6 Aug 2025 18:05:08 +0300 Message-Id: <20250806150521.2174797-2-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0013.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::18) 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_|PA3PR04MB11203:EE_ X-MS-Office365-Filtering-Correlation-Id: fbffa66f-9686-4da9-ba8a-08ddd4fab391 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|1800799024|19092799006|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?lQcOxMalDSQ1cUwnFNfJntiX4T/305lX9XmriopIYAK/3MNbLl/oZEkKcB8p?= =?us-ascii?Q?bHmQYnkHXajJh5R7RLQQh2Md07EgLWxAa2pAgYEWjVIddrGrAFGdoFZoG3Zw?= =?us-ascii?Q?0KF2UPwxF9LKqxwcYRR4o87gtvnpVwKBUUxbshNrEoCJ2uu+rks9ZEYChd9m?= =?us-ascii?Q?BSztOXwozYSjyiwjKWQ2ZkkrfmqGEe0XIJiNKSbuOJxDnJHwajoCTo/h8Gfb?= =?us-ascii?Q?dWU3WYgBCU87Wc3WLh+wy9n3j6HsRkEwanh8I9ginpabSjkA8PKWbQMAsz7h?= =?us-ascii?Q?0AbvXVBzIdAkevARx+x7zl7kuc05uIrKcO0BBgJ0G6xWcMXINFzmQbkWm+Yh?= =?us-ascii?Q?E9EFZcZ38OkjgkcNX9bRSaOPjbm7Sa5102C6j6b+ZKg1eBanKkjsBFJWgqrB?= =?us-ascii?Q?oueIXaMAgu3f3yU/tczS+YnAvJDPjx7Iz9M1QDpMLu6JtbEiirg5GK8aD7Gl?= =?us-ascii?Q?qrsK7VFr0/HtCrNP7+g7gSJP5o182N53RZQYNQsT8WXbeFI5qnDOMIuDJ1LB?= =?us-ascii?Q?XaGWOEKTuOmbj5E2ZiLnzEyV6/5GqNCLD6v0NV3MPKryCP1Er9L7XD0mzw0J?= =?us-ascii?Q?JRZPeZYEV+qZmOowmFbTLPxxBusdQSPUvy6gnsD+7dnyfc3vIN8ziIUz2RZb?= =?us-ascii?Q?yZjuiF4ZyEtpunvuGPipPZdtW8S0EGwWAG7RYsNxrk7oh+CRxqm4ioqxu/Uy?= =?us-ascii?Q?suyYw2uqLxLduJ1Y4WzoTjxVBXqbyjE7+nO1eXiAvFRBI3yEvjX+oawPTNKc?= =?us-ascii?Q?tmDJKRnH5ZPhX3zamdlDxSJ2Hx3x0nOnltNjtU6xYUI9PpMVTWGvagJ01NEX?= =?us-ascii?Q?5eBO5mM2+0tOHWOaN/SnydHZnpdX1S05G3p7WYrpBJph10VkbE9XFl1bCyLr?= =?us-ascii?Q?AkzmCjSrqXVOUU0hx1qHeu4dvKuvWDHIMobBKhNSvvePuTpM2I8hv6sXw0qv?= =?us-ascii?Q?KbWSJO8CiANhayHQ3HlwejJc+HgQcgQWnxh86MzjDG1wPUuHOTPzpt27/VV0?= =?us-ascii?Q?ZWVM4/DLMqxeYn2qKQcGogEbJPsA0xdm1IaSviqiUQE26G9eGIiDlPvvH9IJ?= =?us-ascii?Q?XjnMFcWcSeelJeFoJwli37F+H/B2v3hnNpBMPJM+Qb1i2bHgJy5Igl1PDo7I?= =?us-ascii?Q?MEYAwoT65yj0wRlyDqSjc8pEAIQaHGGn3KBhN85Cs58c0Zw7xtuHA73uvHl8?= =?us-ascii?Q?KI5XYciSsFVFa7e75ywAIOrSjJ6bgYZN8RC/gjJ4FBLdZojifNoFBGwodJOC?= =?us-ascii?Q?0qu61xRar5RTGbQVTOtd7iB2qkt0bhbNynQfYcQHi4CNQSPopGykMtnO1oCb?= =?us-ascii?Q?53C4TAtQsJFBLRS2tdrrMiN51itiZXyKWhGEpW3dltHdCPuxFoomETyU3Gdl?= =?us-ascii?Q?u7FQiRvNNcubN7PFwx6gbrc+Kqd5DgMTlIRdyF1yX7Hg6MQlBvA9qLaSlfrS?= =?us-ascii?Q?UG2tZ8PjBIP8Xbc/kfRNZAtmfEMDbof6Rux2HouTUN3pkziw5ohdig=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)(1800799024)(19092799006)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?94Xnj+ztm3CHoAkQT7kvwQ434bkAiMX76TDWE3q+JmlORKTVUp1ji6KKmD/V?= =?us-ascii?Q?dwf3a1Q+QfVtJphAnqeJDwP0L8VIdHxQbT0dRJsvrXE5izCXkLDtLgyIAmhZ?= =?us-ascii?Q?geGLR83Tf8AiQ4jNCUdENYhR345lnaZeCy4JwL+jvZa3IYknVSGkH6kVt6YK?= =?us-ascii?Q?HsZ9uWwCWI3XzBwuQ+p29TTSV0fRNY6N7gql9/sfOyrP07ktKg28/F0BsCP+?= =?us-ascii?Q?ytOC6S8s6GOap90lyD6flR8xwjqsgXdl1hWqyFLnEKMqTz4i1b/on4GhZVio?= =?us-ascii?Q?LhANCJx+7tGZi6aI4S1AEzxrJuVD7QE4ltLn+Os//QtgazWY0guW5iB2T7Gh?= =?us-ascii?Q?eo2PDIkyClHyy8uZ9td7DxaOMhh4IficE1thQb+wnA3y6FqBCeN2Jr+BtVFw?= =?us-ascii?Q?IZ5E/edy1xo6GgcSkuM9Z2PEpGUHNFQ/TkYTvjzlTaLNwWipJj1gZq8BlH0u?= =?us-ascii?Q?NzCd/rpZ5CxWjGwgR2JcIiwDDDL72EENTg5sPjIrSQZSSgB05lPEEtAD8sMd?= =?us-ascii?Q?Ny7J4K9N6YIgKcqW/rx0+TJk2YGkodLJGK+dpaC51CUB4IWuMRs3+R6SoIFG?= =?us-ascii?Q?1LTyXMG6haB/nB3SivWvny677YFJ5WSJW1lATLUA2Zxxx81jwk0vs8TLb/CC?= =?us-ascii?Q?UV78KIYIPcvjbnjSWhsdQXqfSd36MXXhIMmT5Pf8r3VUjJCT9mXqS1R0bPrn?= =?us-ascii?Q?7vv8PVvWXEaaXIbNmPIRuXvVBCSQ9PwzeKAnScRC0c5lScCKKMoMqnoSMuHp?= =?us-ascii?Q?NTpHj8Ti6GwNRsvw6IMQL1be2RCBieDwTxObNuPzh3S8+pLH8Rr2rAFBRnoN?= =?us-ascii?Q?0kLBt1M1/xhYsQiy9GfusaI5cYJayxMQ7nNRs26Jx2p/eGHMefPqngo5bSLq?= =?us-ascii?Q?k5IrQTFbaGChFYQn54YvtTDcCTou5upnkGlIvRRnP/YYXEz02RDQKZkm/veI?= =?us-ascii?Q?zpBcFPXPC1kNDv6idlaRYVcp41I6f1Bg30Jn9FS4bfXqO0z/zBLEaGbhFWXr?= =?us-ascii?Q?yGfVSuif2OLMfqeMghgoxvoN72+vNisfEGv+1yjWxmyuBmK5OV0WAyrCkEUz?= =?us-ascii?Q?KzKR7rRwjYReqeuCzpI/B7OgSdUimxlb5mCjOe8VNT0At/7MK0e63+lgSZds?= =?us-ascii?Q?wg6F7NglXEGG5aSRmKiE8D+U4Al+v8TgGkNbaYDIY1vIbmZ8qo+O6ZpuDIHh?= =?us-ascii?Q?sAYy6aWlU9kymUpbPP8Zaq+mgs0Im9Yozw3+1HVBM4GzSNo9BsEToLnZvOy7?= =?us-ascii?Q?oOlrfrekei9c5fvld0rM/93s4MGg7EF9gBKcNfKf4bXL7bxzSV7WovQWFjQN?= =?us-ascii?Q?F04/qG8Ad22mdGpRoR97JHg0zT6kP3rtxzkoPxDukfaIDoR0ylvlAvZmJAQR?= =?us-ascii?Q?7wso06eNhCoTv92hpHYsb3hMDw8SACvEErwho0MGKiDGj8iKyNVG7OPyANmh?= =?us-ascii?Q?dcY03/BpJkezrDNSLSzjsgFjV9k3jAeOzto0FSdEBCQUB9IFrDjzmrh2lBGX?= =?us-ascii?Q?mIj3adCgzzDa/cGfOJW08EBFkeNTxhWNwOaw48nTfECDO/Kbo//4DMp9qDK0?= =?us-ascii?Q?OuSkQiaq3YMKk10Zivrroy1hUQHFxmHDwQ+fYVVVVAxIOF5OSaWy8LM4dE5Q?= =?us-ascii?Q?3w=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbffa66f-9686-4da9-ba8a-08ddd4fab391 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:37.8523 (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: ORVzAVuQ3hrH8l2gvzKFQXoocj77i2UxUfFXYcDip+ZU5fsYxbjcgz6yhua+M1fiXqoaC8o+R/H+uAVUD8oxHg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11203 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 Sun Oct 5 09:10:58 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012042.outbound.protection.outlook.com [52.101.66.42]) (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 7EE36290BCD for ; Wed, 6 Aug 2025 15:05:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492748; cv=fail; b=XUxOQdyW3jZH0JcuX1FvUrAyXmh6AUAkXQIAe5A+IBSMLCoKSzMbBNme4kT0qtBznwZpmogeNmACEgk8qQ/Pmt/h4G4ef+/dgH9laBJTUFoOfSxAtFWoYnnAjCfPjf2Z8o5A+Aw6RP+yqYS/rTGop86+0zRk4S9+q/rguxsL65A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492748; 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=SwLQnqvlU7NRj+H4fXn/HdAlqvb/bZKzWXSO4F2vWfrKlxL+FP6sXJI8os10VGvDgRrBobYjdxEL+ohc/1c/rYxJzL5Ob4+DWPM+CKary6RzTLtYH8Y/1vVWSJZxM68zVlBuvnXaaaqs4AFtvYJT7TcRAm4auUkEJFumuPcQ9AA= 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=rzVFwPCQ; arc=fail smtp.client-ip=52.101.66.42 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="rzVFwPCQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lCV426OhGx89i6u1BpQJyA9YXo0DuEH3mDfDLsBOhcdmn9foyRMEOarRIFwqhGJmVWddtuFYao6QdYs1JSCw/7AmBg8Io0NHXFl7OJKZxUn8y3IqJh00tr1AIxvyEQXaBfFxW9YFhPCEErlK1yI8/5aQ996rUxJPbIkBC2xxEvR68EYIRF9PwKGeU2sGHw8PjyCnFKo8d1vzYaC131hGN8SmqkwYX480I9yJCA4LV8SNXtskZlAys6CQ3PRgpEQ98yDUIkpPqL+hwcZ6PRgyiwJuXaH7QqSexInXu5EMQlRdbjcfxMg5GqmYWHyLeN6dOtr4mRGjfx8Kl0vomTKAFQ== 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=Wd/0xQLz9RxjjCR3XYtYHfGsnsYg8ZXJWUSf7rFjGXzhoFNiPoOsPk4SD1eyyA/XjH02Kf8nAe+XQaC7C3nYvgK3QvhfmdMPU0E70CsQNaMLHzVYyP66P0amRmpYE5Iipt4pMqdQKwz1DNzQgCScoDVgx4KywhXEH4zbD1LzEgtIonyoh5rv0HbU72TRtihbZUi5guCmZClQ1R7fDqCEmEo0cCnZI0xa2GzRnCHqUCovZQ8Sa5K9NpVj5msgHMRUZCNMNHTYnS5iwrdYFJqqhU/wyItBSgSgWGYok9GOFiODpJnhUqmFfqivh4hInY9ytirypxS+T4TfJymDV67Azw== 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=rzVFwPCQo53cdwZkiUDFQSyIo8nfWR65ABdeS/Kgd6pjbr04o8ejZhasBVmH9LEJ6mf3VphacwrQ7mJR4s1S+Ac37VIq1gRCPI0pjUT5p0qQ1qcRDWQBOjOZX5S1+7tDQXAMQGM2VwT6IFlDb13hXm6Y0uqdJPCKIi8YVkY5l5pt4G6/1LEXNQeINQt4jrgojbokLc2dsb4oYHoHbSW5HjUwAoG4usFQYqXQp08aX2wl5NCwFIrL3cA2Px67b6FLJgPYWLZBXP2Le1mbrSHr9wu+aO4ai3KQRaqqHjw+10uXMqpyR128/977mNm9jF2Lu1EdkO0t2jHVQd5Vis2F7w== 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 PA3PR04MB11203.eurprd04.prod.outlook.com (2603:10a6:102:4ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05:40 +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.9009.013; Wed, 6 Aug 2025 15:05:40 +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 v3 2/9] drm/bridge: fsl-ldb: Get the next non-panel bridge Date: Wed, 6 Aug 2025 18:05:09 +0300 Message-Id: <20250806150521.2174797-3-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0027.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::37) 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_|PA3PR04MB11203:EE_ X-MS-Office365-Filtering-Correlation-Id: 7fb0ea53-276c-4a98-952f-08ddd4fab529 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|1800799024|19092799006|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?NOq2Z+l8NnX8zuMjP4/ik3qmOo8i/6pq25Zc1QnLJcWkGsFfYW3TFZaH99ij?= =?us-ascii?Q?BeaxWyleKEv3AJJ+2qmA88YVm0Xl8dPr3p+v6eVa+SXqqI8Xz5DO13IkFXcV?= =?us-ascii?Q?ZZsaEqZ6cyPjdFesGhahux8BK8rouhs3MYBHUyPRz0XhJ2Sypt5fGmtq9l1C?= =?us-ascii?Q?xOgk3Y/Wc47qpdrOxVdbPo20m8AmjxQ2LwqxPWkQqLB3AAqosoisPeXWGiQ7?= =?us-ascii?Q?u6zL9rfSkKqg7JBjSf8rruudqI4YUEUuryedpeRYhqGJ8dIQuUxLGsOPdwGN?= =?us-ascii?Q?Rb1URtbB0JFIh8YEgSejc57DDjE52E9eMR1g5WpCe798R68dotPIck+MCZzd?= =?us-ascii?Q?om2I/E20fHd7H9dFwDAYDxfIbX2tC3C7tfamZmHV+4rFbUuALo9Wc1kWkp94?= =?us-ascii?Q?VgJHPNOVfr9tAv/nt7s7592NNgDHK/nCnJ+nUyWeaZKCKsh+x55abAjYbzWD?= =?us-ascii?Q?k/tUDfvn1O2muUAJRGtUGoeXa8YYTAAhCG2T0vdEbddd9AB22LLVGld4OFji?= =?us-ascii?Q?CDWdUR0dWsGnQGZYfJy3DO/Omzx1xpnKj8ll2JgFJbExutr+aw6icySpCQv4?= =?us-ascii?Q?ggS90Oi9IQKQtC76ypsTe1LPPWRZVye1YDYACSWQRWraf1ILuTV9+ies80Hq?= =?us-ascii?Q?qcxwi/pMJCiOm3NmYawfkmmkRpvWpbYJHfjxij/pjWLQXjOOh6HWIyA1BKUf?= =?us-ascii?Q?9/87iYknvzzB09ATZUnFFxBwWHVMnCMNUMxO662urENYWNSe5gDZA9/+DqGr?= =?us-ascii?Q?adeuI0ir1r5pgeUFK/E440ydvTgTx3bTvyihJnnF4+JfQCT5XzP0QJz18VxR?= =?us-ascii?Q?HRQIR8claEbeiwmGxfZJ7/1Mrj5/YL64RWs7LHl4kgpK9Unt/17xbj7bPv44?= =?us-ascii?Q?za3BIDG6w9VHEN4jrwABhJBX4emoxzIvERCsgm9H7m4kEI399CfwF0AOjrPg?= =?us-ascii?Q?UEjhuqt1TB6eB2gVQ+UDebqBm8jf1qwA9DpfMI56uydvqRMNucNDcT7/ApG6?= =?us-ascii?Q?dfpNaJuC5tV9eZMbqikbXcvvPu/L6pfyG0Q35ku4GeVAllolrXCE3HOw72Ee?= =?us-ascii?Q?+IyY9432NvzDoHDlDLJbtsqTXYWuxV9LTbF7fCJI51ucyAF4OmJPw3C131WN?= =?us-ascii?Q?UsZDe6UK6tt9eW9BK4lTVwx9NH3mJ0DGv4PSfX8S5stWOMEsKBChDJi8754j?= =?us-ascii?Q?TsR16uMKJjBsy9mbBwPpHrqNBmGLfCO6h9udtb1TWRspwJN3zwNMo1BFVa83?= =?us-ascii?Q?p/aPJZ69lBfPr/s6V6dCzUumk7yETLcMmA3CzwMehVDxIe5N0+mIP8PMycF5?= =?us-ascii?Q?ENkwCXvJeeEtOuebcaMA+S2+foI1Ojji9+IUiTbLMBxcFEVWIrE8fxI4RMqQ?= =?us-ascii?Q?Ce2J0qsqEJQ2Z7n6ahXEmBgZ/fic6melCtOaWbdsWCcM2rJXQNZ7tCTDSpAk?= =?us-ascii?Q?qNLVIQmVlMXMraa2ltF2hTvxINnwXIx1yiOM3w5Zg/eCC2ER7cvkxQ=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)(1800799024)(19092799006)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sV5cnmqKFNJapVEw3EY2jPCRn6K/IxAyeUNQ15nEua8oerle1DMMzhR1v17T?= =?us-ascii?Q?U+bLgwl8daCCZaeNI0L4YlSjAqSaYeW8Slano0TE99uA6U+zYrDEkibbeoTR?= =?us-ascii?Q?uvR+KLtp7bdaV1fjI1jPkpDsgG4WjFGATlYwwduacDwqaBUaItem2bV+wFHz?= =?us-ascii?Q?TI9TJ7n6RZx7zxfUk8qZJft1uAZ7j2pNjqLVSksFyk625WKqghx2+RWPY+Kl?= =?us-ascii?Q?DMa21L81RiyaGf+Kc1ENMRuSGNmvH+WLpSS4NpOC8Tjsk4/kgzj8frjN1KcH?= =?us-ascii?Q?xQYtjWFdWi0HRqLnDVDbhxyvPDgAJFL2Qh0ub6VlV2ywiEb4idtD86IQ62pX?= =?us-ascii?Q?l3OkDCasQX/HzqZ6kybArnHrTMLADaaY90aLtuvRbzKg7zsacXBgY0kVvIgt?= =?us-ascii?Q?MGkCFqTvmVo0UVCqtPHeCBc83xH1nBi3MrTPlZ9oM9w602cQBbl3mI7Kct3M?= =?us-ascii?Q?p1iomOFeA2Xe4LIsmkUTuGdxeWtvhuxKpdWdPjPJTdHfgniSL2gP9yeZc4sR?= =?us-ascii?Q?+HEmpYvb2HaNYiuZmA08dojGNlxDCJLQ93UZmzb8oWjaBe5TDEddgQEtDrFy?= =?us-ascii?Q?KzltKjJyCD/Iv2oSH/eUWFA2/2DU3V1N3dosMsjDZDui9u1AA6s3vC+ISSey?= =?us-ascii?Q?BCyVdzJJmbvo2bFib0VavYWHVfV0Q3yxZoQ2ntTyBGI5f1/daQFc8LS6SKAZ?= =?us-ascii?Q?LPjfeecngAWE/sHdCLRlD9hSWbuT7LMwTyUy/XMKSULn+JcB/x3ug6CpURQx?= =?us-ascii?Q?WeMPCqrOFnBU0ausJI0JULnT1YTW5kw6xy/nrfJX2EemnEIgw78p4zAefYsf?= =?us-ascii?Q?9NBgC5AXLK36zDPZ7KGhMvcSfby3sgnKh8fA26CW4va8H2I2dV8hb7ttD1Sc?= =?us-ascii?Q?uqpuGkrFZMQoCJNfILF7edaVXv0p3gCWsQTzoVokfNHWo2aVpXZGcNqEGRM+?= =?us-ascii?Q?9eFPElIaUJNvAnXomxgLOgOsuxFyKDC62K5qXDbWNwsKAslItCpwsvuSHFeV?= =?us-ascii?Q?t3xg6zEBv024GywbvhDl4wLInw3AcUS5JyqQu/VCvljRr8enXOyVzxIVdZw+?= =?us-ascii?Q?oN04HsCW4t0uWMeV5f/Nd5+EQ8SiNkhZccEGJQSMhox9sVMGxc0waiWr1sx7?= =?us-ascii?Q?MRzTbN3OdJeBeLhAgyDr8uE+RelsAGTI6CFd2X4e8C02XSwXOVyMKaituSzL?= =?us-ascii?Q?/wZt10sp2xGv/+hbwY+UK4ybq5AJHoWzEkDAg/1qU5Wx6EI/kr0uZ4KrP8xe?= =?us-ascii?Q?7Q0t5nawBZw2SumORme1yAEOLDCHFn3JlkHRmWKcJXVxeW8WIvLw4XAhezZo?= =?us-ascii?Q?bdffUUUthOsXWSz+Om1+XoT/CUZA+c8oA3WNiWa0WHXNndFvn88X5ehUC4wt?= =?us-ascii?Q?HYx9JxHqcq4sJru08ReriqGa4pJWSf9d9iNbpdXpnMyH/O+gMd9wh7SpUFN9?= =?us-ascii?Q?ruUhyyATNbUJXJ+V0Zx9XpVz6dyMbB8aH2Oa2S8GbHh6cIYM4vSKO6ATYh7l?= =?us-ascii?Q?6XxqQBaPJK6o0nov5sGIrtf1DAZvUWA31fbvEG7xh4L9aRteX6kC5k8YZgRM?= =?us-ascii?Q?ESYmt67wwUJQmbrMCXLoF92XzOisLLikf5BCPkTLLLv+Awukd14HoT/EQx24?= =?us-ascii?Q?+Q=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fb0ea53-276c-4a98-952f-08ddd4fab529 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:40.5789 (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: imkxBSNr+ksZAPcPKp3PaVtMrIiN3EtZqscNpsNPKf4JGUttNZ3XfatiQwTVNslavACg1n9J5Jn5ID9Hr1ZQrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11203 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 Sun Oct 5 09:10:58 2025 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012042.outbound.protection.outlook.com [52.101.66.42]) (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 DF07129117A for ; Wed, 6 Aug 2025 15:05:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492750; cv=fail; b=PQbc4HmmeglXI8pM/yzF4iewpkNn/aqD4asGY0nSeM9DhbYhTm2pUffHrBTl1wA8ZkdF1B63ZTRewFDpvITD0GlLsDQGxYIfsMvBFFdwcadNv/4sYYETm/LWHAwTQj66qzk5CB56lHgBtkpIa63uTisnYu+2zKWVshVNYQyyCrs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492750; c=relaxed/simple; bh=bX4EaAUrJxLyl5mliJELiMUCng0PLLGqtvJ6mIu1Aks=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JRnQPOu3/n+3jiUgzNjdvCixdfA++0H5h8aJvD+tXMJCRUQD9MmIKQ6D3rGBAC4lTPI+3Uxi3Ak0dQyluGr/nTn2mKGk0di7h5bvWhVxtGT3U9yy5qQVPqH8isZIec3GIzVe1n544+wnmwZurjdCp8LEuOXVQ6VAIWklaJsXfjw= 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=xjia1p8m; arc=fail smtp.client-ip=52.101.66.42 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="xjia1p8m" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Doig2x90dfNXBJPUFS4wsmuxtx86ZTZy0cL8baiYxI307jtOdy3jzcCTE9vr2EXOCb5J3MGTNFJbn9ehqqp7zjSrEQv+LhiafE2cvzi8AiAnkqHyCuYdtefdXrRs3ku9s7s65sEBa8G1eFokNx7f/HDNrR2IOOoiURLUI5THXlNlp/9eAAYg+/1+X0IfN9OfCpWuwlVGCZOAiTmQ6NSz+BcLe5LMO7He/lvEdTLgqbi5Y2gEsQK/+M5lZKhQl793aFlCA5iWdm+P3bXbiDvzgRCFvReOXIB7dHSOOXpTlAUXcW4/cCBACxgpprrk/ngV9o1NK/fydxTjPGIRGnoubg== 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=zAodDHFBxi0haNqTGY/ni/PAU47/srUB0anKAdPPhDoAreV+HIgw2P65Kn7PHF3PTflJVP6pibeR9Ex3C8Bv/wvWUKU1xFLuzdRbqmot4O2hesBIFrdohdJnHHRvaQdoNFjIdx2F9jYERC5yQI/qp+gp27ZTX5A1FvHgZgMpJl70ltC0UFHWr1ZhQJ90erGoL0D/MXrdqMGI5Jm1C4OWhNNJPgIjzImvqKPoZjeAvLFDi2iKOHLq+o9dselV8diEuFzRGGeuVw7+vpVp486tW6PSr1mnT3CXab3hr0sFTdJcDxocK037Iby2SUFQdgg+6/t1Q0hhV5bBi5M85nXOAw== 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=xjia1p8mLCvFqW/I0JY/QR4zIK7gpe0gfyMnMA/GBUSjtsMFxdJ9F2SLJKJcrBF61F7vLDifyNuzh8Cyfhj7xl4bzcOPWpSULuvGSOh5MYlnfC1aDGq2sVUblOcUKrgl9WaEN4uuQCRuSR9OrE104wZ3V1j5pZN5gQNnDXqLEcWxoLEc6W1D/0rHkOl5wqMmAclHglAvAPXB8IpbwX3upk9Ykv66+waADiRbgNZv1DbR3Q5hGvGHg0SBg3nSNvtgTwIFY4RjIRh9/iQCXH/zcvdLsalGAQ3c9HijIjgJusTEhswqcazfvb8b5JZMxSPJf4z2RRxsyU8Y6I7EeNlpIw== 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 PA3PR04MB11203.eurprd04.prod.outlook.com (2603:10a6:102:4ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05:43 +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.9009.013; Wed, 6 Aug 2025 15:05:43 +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 v3 3/9] drm/bridge: fsl-ldb: Add support for i.MX94 Date: Wed, 6 Aug 2025 18:05:10 +0300 Message-Id: <20250806150521.2174797-4-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P189CA0013.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:218::18) 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_|PA3PR04MB11203:EE_ X-MS-Office365-Filtering-Correlation-Id: b6ba08ca-5457-4231-8bfa-08ddd4fab6c9 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|1800799024|19092799006|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LSQr8AWrjBfFG+crQlnSjU7cmA/dLB3M9m1d3AJF2pyKdi9/RYit+MiJBvTG?= =?us-ascii?Q?eq3igO5vjUjvsz4ELZCr9L0QBg0U4icmlRdfJN/zKlhYHTQ/krdmmD5+KM/q?= =?us-ascii?Q?Uf4J+pNXb9O87O1Fi6m/9AW3rzdpeql9WBvkXjF7zJ+GMtLVXCWXnMrtgAHB?= =?us-ascii?Q?kOKNEUzN9Z/PKWMv+9RCptx+rhxFiQz414/IGJF5W5pB1RZrPOk+LinqkScB?= =?us-ascii?Q?DZjovQgmbzv7GOJBjVft4ufxklvYilnUjhdLbPCgG2EuB9nxDwSZLswBzIa/?= =?us-ascii?Q?rSM7nNZFfCUcyWBlb9hS8P8PjiAG2jdiIEBh/FFDg5HnYwMO2gkFFXyg9QsW?= =?us-ascii?Q?/QPBSMxEi5jF9d/mf9YfoAv8O9jO7/5/XbdAn0L160TZsIyhhnGIzCb8Z5aP?= =?us-ascii?Q?hCRQgfxYNT5OXTy7k9jx90e9Ad35djUpkD6brAjQ6voyasxFzfAN5R5bqcWy?= =?us-ascii?Q?dk/dTvUEXpR6QErYKyW0qGZCgE8RTQGt6kITnWOT7KP6hhwj9Ny1FJjCjMCG?= =?us-ascii?Q?q+v0ehDwwq6XbeALXN10UWbo+L2Odo+s6Yeu7p5jZ/5JLZQW4kQm8krYFflJ?= =?us-ascii?Q?7d94GDO60PrXGoMLMy9TeJ4nEGV9tcrzxBrtRzig2gSlYi/JkpYY37mI3FY0?= =?us-ascii?Q?TFoHEm4YjnXz4p/+3wDBqCqtExsr/yPXRpjz6HpmYj0TLxR3HJf7IPY5nJFG?= =?us-ascii?Q?FC89bkOCgeCt+kuZSRdJ94KvnyFtun4pIjyVWjJa3kH81BxgvKZqlwbPp/SR?= =?us-ascii?Q?aURssUv67C0PXjDxIwkNDO9Bbt3ZSFgqdOFjjCnlEiAZ7hnOKBnKm8EQFVU2?= =?us-ascii?Q?g548w8//NTJrkMIED9tOId0pXyepUEOH+Q74bm0ydmgBSStTpMZuFGwBgzEs?= =?us-ascii?Q?OPDrH4I1fSVVm4+6CnFh5pe237CKIg6CTG/98fhzJTXQ54qRqZCAOj9pFu/s?= =?us-ascii?Q?6Sb5U3kraHMlzfZ6LvhjVE0+gJFBd/fyEv+nV8iB336sfmHJqYIWA50t+z0H?= =?us-ascii?Q?KKp3Wc3V4IWibJtr5XRiAZLaCiWul/lr1di6EMisyCrInCau18LMVSj5tQnM?= =?us-ascii?Q?KYOVWGfE4Dpp4hAfV46bwpHzFYpNOZN6DBl4GqIgtEccaEvXPRgYoPTOt4ZU?= =?us-ascii?Q?U3/j+0bHItux8yX1xRDIXlBJSHqYbO8bX9MPrW9XjW3vCuEnPEk481XLG6PZ?= =?us-ascii?Q?9tRTngq5TH0Nk38gR4z4mK+cZT22Wan8uW5UxjcNCwBltBhysOSSW0Z2xCFg?= =?us-ascii?Q?elp2nwgi3u3WgOk1Dxeqx1pPVi2G1srLTXDt36uiD3S8aEHwG0ZUboIbG8TE?= =?us-ascii?Q?D7rbYCZu/0TQ7KfXTDtAhYzPCnagNiqQayvTh5u1uQ/41X6ySWeOjoE+UbF/?= =?us-ascii?Q?XltkO8ZZcMLhwvy289VpsCJAsBu3kRW+dUvY4Ab8cXEU95RWJEEtSLNXe+70?= =?us-ascii?Q?jI/v94Z+6egUNq2pKGXSKJWYcXO3FCG4?= 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)(1800799024)(19092799006)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nm0m2bZoH2YzsfWAhaw5IXciWMth/o20UB7p1BAVOkXRQU1B/xmMnTcyHRI0?= =?us-ascii?Q?shJ9ZHj7nwALt0wla5tfhV588xT8H/CBkAibs2WjOLWjppnaZ2M/xRmzNp9q?= =?us-ascii?Q?wtDf8nWIsPZhx7Nfb+sL09BAfIJbLUNl9zFGAnlHY8KdtJRjeJFWC+2PrrL5?= =?us-ascii?Q?z0WOz5Qg9qwKkSLrVb7+4Nx/zbK5Oi/QsriNDeEsQohOslhAzgocqmxap0ta?= =?us-ascii?Q?LtHsKgKH69k11vU6f8SfEbtsgP74ePWWIWM4sGQ5M2xF7ejqorL81eOVWhhc?= =?us-ascii?Q?6DzUpGEjgBaNOlG9ZoXV3vbgL+bvC+8sgqzPHCFeP7pSnLwXOAVfLZLfu/ns?= =?us-ascii?Q?CddmyYdDB7M4ZvJmHW49HGwXua2uVmJvFKSCfEtgOAWlONwHR7Jh1vYZCoKy?= =?us-ascii?Q?9H9n2loVPpHwgbRnTGoceeXAKFZhcv0BtlhS0/TvNSJ+HF15bp/tMo2yN4eU?= =?us-ascii?Q?6bTtY8y02ZaBbEh8P3OWvOsnJd4fEFbNlJD9iZ4L44SP+GVVxhPXpYNAPChM?= =?us-ascii?Q?eE2huXwR3WaXshkvExeykaDRC7SVEXsyLi7ebs4CazWd15xI1WX+Mcmz7Rd4?= =?us-ascii?Q?6mKC+K5bSEYtEauVxP0Hej4zdFWcPi7fxKCCiqobr+NLcb2sOli7QqpMElli?= =?us-ascii?Q?eSaudG++YXQEb0oL5VT9N24xCis/fy77LrOl4roXrwY1vGxrcngvKaRElhxu?= =?us-ascii?Q?LtqZf4xbB8STejSeq62r2UCEdlvQbEjDj7G7rHxVOqSXl0nYDXyrPNMi6IEk?= =?us-ascii?Q?CdKYDaUebYiAYBK52DNWqmJN0qXWh55+RrR4pKD+rLcZsXj4h8Tf/ItgFqHF?= =?us-ascii?Q?TqbluJLeuLBzuXOE0mNtpd6nhQPLwXT5GtBSpnFvjfdQAJWR5cgL7zz/X2LW?= =?us-ascii?Q?glL7+XrPol116nMrlWNewEZmpXj70F6sievkRNIzSDdg4sS/ya52svzyDNxC?= =?us-ascii?Q?PACpIXZXexIUyw9TgLf1Bv7e5q4aZaKmSNb8wBQobbKm7wt9s3+r4Eg2rJqo?= =?us-ascii?Q?QsykWo588tWoHdJEJGZZdW3h9U2zlzc/RcUZ5+yAM6vf0MdyfU2pbnM+i4Bp?= =?us-ascii?Q?ygLQ+PjHECNuWpYDdGVA86tg2XB8N5NfGifpYykxNGxHR95iEXVRNMSET5+3?= =?us-ascii?Q?8WAo54gZ1uR0b6jcBCNO5CgQB5Hl2lA6oJ4hxF9UulQl9ZtIt/4uDwqDzj7c?= =?us-ascii?Q?XrKlmYK611ga52uUXC8YtwZzcWhaJBWEIJ8lsx3ZaVN6uoUgZE5zU8kUjr7E?= =?us-ascii?Q?U6mpTSP3JxnyWZE5sDPx/q28fRi9qrvMSpCymygwN+eYharSwgN44O3gtLJO?= =?us-ascii?Q?DWyfE2OWL2cidfHoNY9cmgfrTSHvPmr6qQ3JraSneQSezVD83bQH94edKvdJ?= =?us-ascii?Q?+vid0u8U78ilKrig1DckL9v4MmCPbsoNwvfPTYxMOxeF5E4ZzRynvCxplDA8?= =?us-ascii?Q?i5KhnarhM3uJgfgrHSFpim6oJYtoxUB5bN/O3mdT58hyO8p5lPc3EAhawYZq?= =?us-ascii?Q?VLrBIECX2sZaRafujRagRVqxd4vXkKtamce5adRIFlDX6TVeW1xsd/cC950v?= =?us-ascii?Q?nb51jmpOIQiMbZ9thpkDm18FjNjpiuQfG4ySKy3HWjM0DExw8TN75z9XmUor?= =?us-ascii?Q?UA=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6ba08ca-5457-4231-8bfa-08ddd4fab6c9 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:43.2752 (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: lTJd2RAAcruUU1kAh5U4dXB06o10sZFplUUU0iq+hlBOXb7nogesg5GTxUhZU+y1C2650atdVFNar/dqvsz1jA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA3PR04MB11203 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 Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 26E40291C0F; Wed, 6 Aug 2025 15:05:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492755; cv=fail; b=hE3qG9+SWMlUwPqoPfZ5Htwf7aLdT4CZjafrR5CuYCcr4Qf5GDcD7LuqMg63L9EhgjrP40DAg1alB8vjk+vuuajSBAVBii7s3yKwVaVGtKygjXxTxYRkWyAJhA8nxRt1sOKDGH2FEKn4oqsAnikMI3K1z0Qi4g2SIlU2tk1lvbs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492755; c=relaxed/simple; bh=HHQW7hv6TUUXsWsFmKQ9tTGplqjBFVz/btBRvZCNqM8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=E7FA+EbvW+BWzaH6jnh1PrDqC6h8HRIH3VLOZYX7tO+P27ipz8XxHenQYGFxQ7A7yZjbTiGURqdv4NGO6cfraIyAma7m1nzJNwIf+IrC4QAeJ8h6CDEbNacOL5Zd5dEutkOkO0M3gAHzuLe5b/E+2aEJonlOasIqSOw2W3ObIug= 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=nWbLYhC5; arc=fail smtp.client-ip=52.101.72.40 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="nWbLYhC5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=chqTvtBi4eMOv/39LnbWbt6NwhVwjE8GYfUCgNR5OeZcUgqCIYDjdLDG12IhxInpJNKwfSUDdHbP4uW5UwF7j6ZdbCkrh+Z/TSlktPk17U6vA+WZVvL/mxNxG5IcuBQgzWgg57LEQxoXxZ+Ijj98DMVAGgjnSz/cKvcGLp625ZeWeOOajtaufSozeiuEFGumix+U3VKvA1q4umLUy6XSJc0st8N8KiRdSkj1/yWnxHP9F949DQjQYqHrE2S2P6dVUXKPKBlT19yUr3a0dHsnaRHrxjtQEr2cMwiv1X77k6llcooGA+wTJI7JHXjrW0ahCWDlpG0XwHgqC6FS52LsAg== 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=kexWO+pT9yAHarRKbHpY7AdO0C6W49ki+DlnwJF6U2eJJRCCy1Clpxv42Asn6wY6jwOebjjYc/qo1UR1MBjZ9fntlCp1ci4FHCsKAgdUYL9UOdaDxtD1aPcTxHbH2rEhz7Xf2EX1V1k5opwXlgo6xEkDTe1eTwGYSaF9/14pXVNKClfLZj55zLwW1yQx6b2JBv9vl54HT4a0ILm2UCMm+/lBmE0fCPXKfjIKUtDCncOI8g/vEB154GfscKfQC2yjiYT92lkmfqtr5LLoGZNXCkM6GyhaQ+D3XuxutPadyLCRK+GxYy3K2agtoUhD4b0l+uhG4+cy05KO8Tip4DgiWQ== 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=nWbLYhC5/XGBeUf6OJn5VVAy73Yz4NzWZfUiEmVapAjl5NjIjKAX2e6tkEawmN/yzv4b27+nYRtq/prTlCIOIESc0b6dvnQee6Dq8NknCr3kt37EJ/tzjIz49/Ra1BoxlgrmzWnrTHR4w3gowoGm02IUt06uT6T0Uax5bVieEcAsqRKsbN7DPErmZonGnMxfC6pyG6Py6E539OAUSsFVbJOtUED4fqS+NJhxnPBW5yv8mThK0g3n7Bnaqz2kycKJP7NTTMNXCgD5L/YfdTImhUmmOTYEBKjV7hWfZIHzrD2ADv0a9WB59VW4RJY/sHhWC/rnL0HzHhsNvyzRRRoGXg== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05:46 +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.9009.013; Wed, 6 Aug 2025 15:05:46 +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 v3 4/9] dt-bindings: display: imx: Add bindings for i.MX94 DCIF Date: Wed, 6 Aug 2025 18:05:11 +0300 Message-Id: <20250806150521.2174797-5-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0P190CA0021.EURP190.PROD.OUTLOOK.COM (2603:10a6:208:190::31) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: b6254cd5-46cd-4664-0a11-08ddd4fab8a5 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|7416014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Q384nsAkmqVkakKVMSbf5UZ/KPm4HyZJCiZW2HhH64GZiaqGgP6f28uVkPOt?= =?us-ascii?Q?KkQNLtNtMGF+KPyszvGItznBaCXH6eUIoAEajhvQXiA7OqS4rqlgoI+wEilW?= =?us-ascii?Q?X6+FwylKH9PkfnLcAL4cFPMREYRj7VTdNZAXScI1FyanfHeJHRm2LSsun9+F?= =?us-ascii?Q?lpPGaVQVuY5KmTF3fXpF9o6bm/r8fV1WiufVXpOBW+029Bn9eIih3viG9PsQ?= =?us-ascii?Q?/1nYrc1oZhb6MA/dGCsSI25ocBxwrqjP2iJOAXZ8td+Ak3NeFYJ0GEy6iRwi?= =?us-ascii?Q?1/iQJSjMQGOx45wl7zOTLjSZrCV88KrrRVm/fNEA5xW6Q6eKEpVIZE3eSkdc?= =?us-ascii?Q?HyCSaOxihMYPu++1CtFLZGyPzg9X3qiorx87Cr4vjjBGsR5LAWAWeZ4CXLQd?= =?us-ascii?Q?8KOi3r2WC0YDKP68qlRfG1LP6Pi59PevIqfjAewiEwKJFcJ8D7Xyk3WXJu74?= =?us-ascii?Q?HAfVONVkIDqeuy2c8GUNZMYbaSmdlUsXo+jCi/o1YQU8YFpPN7RH0AaMK9zm?= =?us-ascii?Q?Q+gms1wIKMjm5LpfSGUcSsVFI+5AVsxnfXRWm8WWNoXipbQ3fWTTyAUL8hu+?= =?us-ascii?Q?4QSFSdFP2zzYlM3O16QL3zgSrYtttbCTlTMC9s6j27mDxee17KjLIcYDGudM?= =?us-ascii?Q?SWCB84ocgdlrP1jMK+5kiP4bKh5w7ntOCVyWF3wa/W+V1xkQg2+xuIfwa86a?= =?us-ascii?Q?u2yu9yzws2EJ1f98bEloNfpgRUGAuwQUGt0JvfX3q7YT7qFQlOCRHDKAiNRD?= =?us-ascii?Q?MM5/Jc1IRdqhzTYn4OQ7QXd61LWoTWjk+vvGXRgmUwzo8BmwGHxBM49KiT7v?= =?us-ascii?Q?TlUvuMiQNOwx/ym4jO33e2/AE3q6hnsdnShKRJ/uxJR/nDeijbTpe0Taavw7?= =?us-ascii?Q?luLr93T3s/BizdCXtS/+viWR3Hy9h6UsPCRoSTeSpqi0zB0gSxR3TC/U1CJ1?= =?us-ascii?Q?LWloPXE6kSVSYWL4anuiOe4HKhq6Pw2mbcTN/JAd/iPM06czjGDxuStAhzBA?= =?us-ascii?Q?ObfjiqkzxR0ZXp+s9vmRZrg4KZOu2j2agkdgGfSlZGgt+tkXavxvrJ9s4aRs?= =?us-ascii?Q?WTllLy61UJk24bLkIib/ciV7dB6lsd27qkM/Vn7UTfkOeUoPugWlNHyGGZ9f?= =?us-ascii?Q?fWDpH/zI1QjBVeMqldVUqrlfQ9pxLdqTbypT51TgjsnEQW+gdyI8Pk1YdIl5?= =?us-ascii?Q?egNRUniE2jehHArjT6pH6/OfM5+1xY1XJW4eef8EJBFz2nQurIKxpzgSZRpA?= =?us-ascii?Q?69PClSksdtnA4GEpFkh+/pyR5QHDNBgFi43AelP0IAfJoESbs2VsChwGa2KR?= =?us-ascii?Q?i27V6kGjabPTBqLHHjBWQ+7ASor3qUf6l2BRjmLdAAjiEl3VGvIwhVs+uujs?= =?us-ascii?Q?bBi96Uf/fuzEqDKoF7Pl9z7BNjJZ6w559xMuPmwd3sSfZxNHACYhOLGhBM8M?= =?us-ascii?Q?D/RaWfvQnEg=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)(7416014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YWu6zgIojgUpgiLJB75dPGYxQ/s6NnOieFydjogAlW/K9bsRk9BzaEnjbGB2?= =?us-ascii?Q?cA5doB+v/V8E952YH7yu82/DNX+WFi/GAdEk6Mf7SfaLepFO+r8myNHZ3ysC?= =?us-ascii?Q?t/wcby0GNmVgAoVNi5TFwc3tYDsHEekb6zWzjP4qdcNbcgubGvWIuq1UPWru?= =?us-ascii?Q?x1HHRaixbRjhnUmIvjPWt6/VmNO7efiramlGCogPDV5CNj2asp7aSpmA7mQI?= =?us-ascii?Q?tOzc6luv9cFXFtz9LTIyz3NeQwWWa/SjOjpYgbOhfKd8cFK6+1FOXAsqtLbh?= =?us-ascii?Q?ZyjrW9nkvFSfUMrhl4OmB1HFNmyrFmEKQBez9Rk3C67AlAQmm/MxvVnWDe/z?= =?us-ascii?Q?QDRxJDcj/V6X45YU67Stj69LmS+i0XnbFLE49nONJTVUP2o1egvOPRz6ENSH?= =?us-ascii?Q?T38bOlq233AZ9OdUcReyBmtlJkc4YkZSPmPdeUsv2QIXfEiXHw+zCPv1cLAf?= =?us-ascii?Q?bwTaGi3xKCB8XVhHC8dP20wp54Ls9XnmFaT3YMMmISqoakXG1FT1ZHC9AucD?= =?us-ascii?Q?9Adq1MlyQ6DVHw/14ps3vfijbCSaI4/mCv/f4t7kUOSwXkcSLzX2pkeNxHQm?= =?us-ascii?Q?IULVqyqGAmjf4hH9y1ODJCjVvITEFXnbMUCTZ0tSTH+OS+ViIjQWjOoF945k?= =?us-ascii?Q?0pxaRTY85RHV8njBU+pybiYK82JwpiV3Yi37keFLwKywctZRwchxC38TTNBU?= =?us-ascii?Q?kKcw5tWeijmDMV3ED/P44yzZIiHlftkI3ljfPbGUQqe8eoWkf82/J22s8tTG?= =?us-ascii?Q?IuNaO1KPT4/X/PqYo1ILWaeCG+Tm4FUKxcwEH6bb5CtvGuJWj6KD5dd5zsz6?= =?us-ascii?Q?An0SoiOa51BYtLypsaomvnXDUMyqkVlMBh2A8smjMCEQPJh+oamDgyuFOT9E?= =?us-ascii?Q?Lb6vrKlt7yAvB7Bn0GmzPrKZHjTfriFFmvdRicHgIv/cVAuOhROEN3jqq2Qd?= =?us-ascii?Q?K2OONi+R14x5SOy9Pc5ZaaRkW774GcEwRHR4N3SNKuWKrVbNG/Q7T9gcrSM6?= =?us-ascii?Q?f2ZjWUbhSO0N0O7873GpBELlmiOX3KGsxYv+nhdFQtwrPvHAMICPmSzN0IIu?= =?us-ascii?Q?0VcNUOugGegelNwfgHHqH3A2rnb0N+1pfSqcmD4XFlL5amkcztJD64ej34l5?= =?us-ascii?Q?B6F3arutrEqE8qR5J+kO2fZ3ohinzNqAuaf6zn/huVoIgZEI5cSeRp9CF/s2?= =?us-ascii?Q?vFnsr3h6Dav297dhIZUTLuI03NGDl1O4EeOcMXM2QC0s3FE912o2P6ojGaIT?= =?us-ascii?Q?9WfITtAecf+HRZ55v5K3daLwW8THIpYf8/j143azy2+DcMNFv63mgJ0iwEin?= =?us-ascii?Q?ft0eexCrhazyw3MFNoSkv/EegceUJEAzUETkFSmATHcmFgQr2ezb48FR1SlT?= =?us-ascii?Q?8nt+RX+OUCpjkj9zTqCnpdFzgpBJeyqS4FB/u1PWcS2TRA4cjjafNcjO+ywq?= =?us-ascii?Q?i/r/n2rOv118pxvaT8WUamjo7K4JwAIA+K6lp4okL3TUO6Yogfyy+SrWUVIH?= =?us-ascii?Q?2nnQaJXKJUmD8DjidJ14pM52ZKGAxYc+vhEFSTjNUMk9017nY9I6wxyRF8z3?= =?us-ascii?Q?alyTuXzNznzFP8FdRrEtygCpWaEosFeJI/+ZEhjTLbpfbNFTNCl35FOVwHs7?= =?us-ascii?Q?Tg=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6254cd5-46cd-4664-0a11-08ddd4fab8a5 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:46.4068 (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: N+LvZXE9zkHq+TIC23rgZIrKss9JtE6zGvOHN+B434EpTorIBfG4F7+2TeEDbcvGTMWIqPjsWaYLA55hFeTkjw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 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 Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 9C5742957BA for ; Wed, 6 Aug 2025 15:05:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492759; cv=fail; b=khKzVEOPLs0+bqtHFX9YUuKGIjXiDIYPcAZD4kQGhA+wuGnNYJ3JNpmy0FgEen5lMyU+LcoJ3QwzCzmPBjBTMO22JXC5f9DNs8LgRVUQNdx7FGXX2q2MAqoS5j1Nq7SN/SdnLvhNDVfuGKGdLQQQSRGHpxtbFpU3BOeYolxMAZs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492759; c=relaxed/simple; bh=IzvlgaXLQiMc5vYfsIJ9LvFftn51BPcwWwBCrTjR+AQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ZP3T8wLTi2VI6FRMqtQNQiHGU1Znzi4oi64gk65FYpASgb6qKLrrd2kip/J4JrRfYNmfl8XrzfAgbb5n8djIE8jZbCCj757iKgCd9Cen0Fm9vljZbBvfYEC0e1Xzk5SsZMmEu0UzF/Zev0l2OvPLPP65O19GxgOwovJ1xHu7elI= 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=G6fx8CVw; arc=fail smtp.client-ip=52.101.72.40 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="G6fx8CVw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Te7Jz43Zkq9liSWl+h9XHrLr8n2Oc7qZfHlrTnFd5qMbJC14ZUPxcLaocvw6XX+ZAtNf9u09pZZ3MbbzJHwgvpX7dSwKVOIkEtT2yZ4lrS7UZFRePz9xwmbd4trQrJ/Gv6Nkr4NokopHUFBo0pbwccie8XhoVAOXcDH81PXhkQjFea6GBtWxJW0Ro7iopI+Iqc2ewA1E1DEma5aCQOQdENafX0m4ctLBW8q2k2JMZcSUevcq0nFG2XptFTljHk/PflchOP+fTJqalzM+Jhgc4G1JHb+NlnX1rFa7qylNqHHJJrurOOQEQkp4wjDi/FTjO27NkAKU+x4GteBwsq9T/w== 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=xs6aVU9fMq76OBN82akwFWCgXnz+yvtUmw+9aboGuZc=; b=p+LZjyzHAGS5ERE2j/rUXsqVAmdN+c+BdT8szFVU9H32LbN0nHNuy7Xq9kyePI3SwwRttwFnOk+XEOGt75bEDpAoz3lC6YE+G+bh0JlPwahiC1g2+GW5uxR87BkCmCqYziXutnfO2PaYTWAbDp9rSGFwJ8xdtDnYgPvPPwsuuJ6i0xCCqpoaFCrIP5c/c3ajjDjoKCDYd8IvE+IDvlNsskj1VJ1aJsCXjfyjPTIDR83RNwfnm7g6+VR/48QlFJIOnPTa4bufCnAQdxKRc2VEl+rIBSNhMvGn7GPeY1lRehnqKkxydqdg4FvqjFvmOfER8BlTNAXsZK1sQIrn9JNTug== 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=xs6aVU9fMq76OBN82akwFWCgXnz+yvtUmw+9aboGuZc=; b=G6fx8CVwqgiBU6KTZbTaowhDvZIN8XKTL3+ef914vGEujXQ1J2zVYtF9MFd0xnNBfykdAv742u8aI+ko2gP23TdIp3fZrI11fNSkv5QKDd4Zkn2F+QCifMd6UAsAnO8VAr4SHchc+66HGHr4EVbEAtGGb6G4qZ73cO3BchAuHg1nMTKt+0tW9KJQ1Yfc9YKqR4OgaHVNm4pNHDzdV8MxnJ4MZd6jep6fARFYsR+ED/lOfIeemDT84JcMwEFXgd+406ZF4aiFltbIzo7yHO/hL6tQXgVdmPUHEghMP6zLTZ4nHDQp6bl+TSguILaIEpgFiIGGZgrXHQh8fOaUSqnliA== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05:52 +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.9009.013; Wed, 6 Aug 2025 15:05:52 +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 v3 5/9] drm/imx: Add support for i.MX94 DCIF Date: Wed, 6 Aug 2025 18:05:12 +0300 Message-Id: <20250806150521.2174797-6-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR02CA0228.eurprd02.prod.outlook.com (2603:10a6:20b:28f::35) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: 56948409-19c6-4ee0-63e0-08ddd4fabc0a 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|7416014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?O8jQHUG1afg3zjcS+ZcCLBmKt81grwkCtJHa7SsZDAOR8xoSXSsq79vNHo0N?= =?us-ascii?Q?aND7hfEUPFUD6i1bV6Tde9+zu6ebFDoQI9rL2bU7TUvisOGnu73DRpuV0nml?= =?us-ascii?Q?8aRoqRe9BHfdThCQ7oAcAcCVrrxLxkmZVoZQcCQfnjiRGCwPDwqbNBSeeK8b?= =?us-ascii?Q?81aqIQcD3WltJ4xVQwTGUAeibJlNQ2ZK7C2lljrmpmW3Pe8yrtRif09ZhWLD?= =?us-ascii?Q?1438/pq9EIA+WarO6dlLwYO5MY8uasEzxXyuDF9vd2zy6tdNHxu9n4MOblUn?= =?us-ascii?Q?YsnCXoPz895R1qtHFd9hgdeGQU3g4JN/QQ3W3vBPmA155hGCLdVHfpZlmK3w?= =?us-ascii?Q?/l9T60qZCZ20QcrqocVV2xs1dn7DGou83McTDEcRM3d5JyWgvY6QUNte7B1u?= =?us-ascii?Q?tjtU6xMMaMI5YnzL7ZGjQbJrjE1TKEWojy/3j2hwquzbdY+HsmFq35smXUs7?= =?us-ascii?Q?sWa1HSehDHlPlKcq9uiwzjanyBzUtTeN/EGA+fZl77RyYHRQCU1Xib5M4HjQ?= =?us-ascii?Q?S+bNawyu5YdVom6wQzb1eKtlRvOs3x4UXnG/rhERFp41iyTiJ2cOngCo2h+U?= =?us-ascii?Q?tO9WBmdQyzbaS1fepiHB51YP24Trg8/8P6i1J+pnS0sGcJrL9akRQeyOQaT/?= =?us-ascii?Q?SM8c9fTcABuQ1CPfzDDNTpHmmORyHyvo0KwOA5ZPGoF51ycyJp7QAPsYGzYN?= =?us-ascii?Q?Tem1Mie9ZMrj7qRTheZFijzQwKtMND9ETyEMddiHafZI8qAuppAIeTdtxxHH?= =?us-ascii?Q?y9zF9DHQctx7NS1Z0il9ILwo2gdpMRaRmwLFPDQ11zX1v/b0mGd+rFw3eBjL?= =?us-ascii?Q?hOmtnEB1t/3ohp4jNeeBPZk2skVW+4zi0pl/Np3UIFUDpRNaqcn84t7YqWHB?= =?us-ascii?Q?79sFMUwfA9+mDDl1ji4eQKx6qanTpJeCwGB5Hi7poOhj2YonMiFXNl4V5+t4?= =?us-ascii?Q?3brnOdNzxaA72EDCgvVrHAW43HRRbohy/EzEMSUBcpxLk7noWuelCMA1xEYT?= =?us-ascii?Q?IBuHDVFN3VUjCajno2pGyvpafMX02q0QZCWQlf3mpxUnXhrR4+Np6GiM5UIO?= =?us-ascii?Q?D4R/ePEPTN4Z1h1XO5RR8jh+uMAIOLoBLxlZyCyif/2e2G0CJuH1tRtgwnlg?= =?us-ascii?Q?Y5yiHsvPL598kxo0e/Wl4uA27FOTtHdf+AtFbHH370xlss3XU64KaeFZRUo/?= =?us-ascii?Q?jMNtcwMH5Ook8bvE8JmMr3jpk2NTv+00Bc15WxHNjXIaydYIkskO6mqU3Pc8?= =?us-ascii?Q?8Q82kURORLtQ3HSMarEoi8GFqWGROi1X7s90XVJ+enRrYX1aVs9yf9g3Ydlm?= =?us-ascii?Q?lyuv8qtblGSbAabJicp8PbL67dL71HjAKykHWlBLzDVlNK1xFFYIp1QO8e7r?= =?us-ascii?Q?VigMIgi+AQDf9msAxHLKxouFMghF7nmHlWoOnLt5mG9Pt4IvgfnvABZ+Kga6?= =?us-ascii?Q?M7I+JI5obDPEI1uZMGZKRFX3gNkNBRLjF6CgnnGyBwO3AK3SaRLH4g=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)(19092799006)(376014)(7416014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pcNsXx0foQ6NmmC1juBjgKkJu9lPTKCRzDmLRszXS8KTXsDRHHmTeOcoD2uc?= =?us-ascii?Q?mmdJH6KdvJscAKii3eonWGUPlLBhqmcvvWdX8kU2HfH++waJ1SvC0FrnnMVo?= =?us-ascii?Q?1qlslM3GevhNl0G+5UOssGDhRqENQ4ufRQ8JVlzmWJpnycVRr7MG953PmPyo?= =?us-ascii?Q?6aO83Cu2fmTZliZprmGx8hV1GA94QWqJHvdUyZxCgbEOTmhhgs97qshJ81Db?= =?us-ascii?Q?B8RHCqSaeXXtAJnzuOs/PLVDUmfJZWsc+hOj5yKCGUKERG46/i8nHsJo/p9Q?= =?us-ascii?Q?2auad+2OhDcom6G5f2xywjynCr/dYv85lvZnsHESZ9baOchVzB7/RZKIoIna?= =?us-ascii?Q?LUcBAel2V8lu451dSBqOltnNHkIhzgIYmOsQbJSvE9Hf5hscTZ4SDGWtZU19?= =?us-ascii?Q?VgYo9NOkmYunKG/eKRGUg6Fcpltb0rDAAkYp9DHY8HYKRZ50u/HhuPpt9mGN?= =?us-ascii?Q?/USw5zq5iP5/XHOCmpbauqJCdGEsKKSq15DIjST8Z/n3tAtwZDqNIeKTRndq?= =?us-ascii?Q?yg9aaDhxXGOFh+mCbdM3/i+F4z2RKpze6zX9TDhC4haCSQ97R4ZKE5f8KVAx?= =?us-ascii?Q?YzfasmheVuCvqUcSbksKVHxFUFcb2ff6f1KlPn/GEJb3xeCFI+enhS9DIPux?= =?us-ascii?Q?K6/R3rdW0ekWn20GNdVfoM6jjnhZRzhpjaiDhkh+Mp2KzEr+kVdT4UvwB8d0?= =?us-ascii?Q?nsBgz9CEYlJnhhgSztegz5EmvtLnqy+QP5rnjv+Gu9NQF0gWXoBjCyqk4zUI?= =?us-ascii?Q?VFG0OmPYOa6vsPgUjZsgQWSuQqPK5D6Uh3hc6DKEr2K/aEillFcGC5WRv2Xo?= =?us-ascii?Q?bVTNHfPgazWu3K1vjOpYYbR5+pUfwWKqNKJaDgwTePqTvQeDzso7jA6403VV?= =?us-ascii?Q?4r59ZZRfF1/3vUglGkzOTgH86pmk0QJbSMogLG7QQTulrFc+zK2EMR1Q6+Dz?= =?us-ascii?Q?vrUL5nSpfK2+XYDKZkPatAX0FxkHbey2QN9oZ/ROUx2RHDEMhzPNUdEoC3sX?= =?us-ascii?Q?0J6efSLynXnIjIds05aT3lBPYV30OU8YrUN6+1/hMIETtX6tG+ZFVCNDNPgd?= =?us-ascii?Q?28+VCMRd94TU0IlOcHAiqTyN6tdxmJe9jhM35lKIzsp8Z0hqRrAS6VUwTDNm?= =?us-ascii?Q?GXyH53zPuDVlVfSj6TG6OK1cYdKtE3MI47LADOK/v6oZy1wgwMbeUfHp7FlB?= =?us-ascii?Q?wd0mfOrG/eexTmNUHP5IaZ2nZ+Uvrf2MHBbyI+Ob8dZsVJZbyyXdv3y2q967?= =?us-ascii?Q?QhKCxBOlGGKXFaxJic4dsy/w9sdzkg6U7H3uVaDZ2mQsldY+Lq43b3Qrv/H0?= =?us-ascii?Q?bBAMPc4OW8lKgOb3+VoxRHZVsLiccWqMxd4wtCNrI819P86y0/dm45sRSsl5?= =?us-ascii?Q?pJ43spP1qeJDIiftMY88LWJPJh0QpiIKCprQerYwFjn9maI8gm+bUxdLVtLE?= =?us-ascii?Q?atQaoEiflId9IHCuDy9zZvg6mbopJJ69302F6Cou+Zyd3NSTKcEDxTiiCA/n?= =?us-ascii?Q?MTrn5LJb6E8+4N23X5jQpPgT/TjqRTKT8RxHKxnukLn1AjKLvJU0SriFXDly?= =?us-ascii?Q?rKJFPNO8l9TGBVX6g9MF2gkUnDvy2Uaw3H1CI0BUBpXHZtkysli1y5Gq3vQ0?= =?us-ascii?Q?Sg=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 56948409-19c6-4ee0-63e0-08ddd4fabc0a X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:52.3380 (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: UKqsSX75WWP/1W4Dkn5ge80VuyA3keb5CQCL4Sb++TSZVg6laxRueHJHTnToG+dPfrXJDLSGSj1uaxw/32NR8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 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 | 694 ++++++++++++++++++++++++++ drivers/gpu/drm/imx/dcif/dcif-drv.c | 226 +++++++++ drivers/gpu/drm/imx/dcif/dcif-drv.h | 84 ++++ 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 | 266 ++++++++++ 12 files changed, 1924 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..f7d182039d06c --- /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), *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..ede8124e516f1 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crtc.c @@ -0,0 +1,694 @@ +// 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; + + dev_dbg(drm->dev, "mode " DRM_MODE_FMT "\n", DRM_MODE_ARG(adj)); + + /* enable power when we start to set mode for CRTC */ + pm_runtime_get_sync(drm->dev); + + 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); + + 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"); + } + + /* W1C */ + regmap_write(dcif->regmap, DCIF_IS0(domain), stat0); + regmap_write(dcif->regmap, DCIF_IS1(domain), stat1); + + 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..3dad628e51c77 --- /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 & 0x2; + + 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..8a2b8876cc49d --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-drv.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ + +#ifndef __DCIF_DRV_H__ +#define __DCIF_DRV_H__ + +#include +#include + +#include +#include +#include +#include +#include + +struct dcif_dev { + struct drm_device drm; + void __iomem *reg_base; + + struct regmap *regmap; + int irq[3]; + + 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..f918bbb6d2d15 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-reg.h @@ -0,0 +1,266 @@ +/* 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) + +/* 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 Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 E93A2298994; Wed, 6 Aug 2025 15:05:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492761; cv=fail; b=jJREB1ra6eJlQyk8WgSjPsCDgPfTpx6E3UhOXb/hyV+blIaLjI4V3GUPyUfpoiAMD5F9ZTDHFHY4cW0hU8DjlNpM9sqZQqaQIRGPe3hkFNI/oxx2M2W99jM7H333efyoXnjcY7OStzQfb3XZhF+TITUDckwYzIGLxmXaTXLj010= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492761; c=relaxed/simple; bh=ii4eO4DNuzlmZuID98aszSjdv7XkrdwQU9qlj3GRxPE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=X8xKE394+9kSHaw7wE1ibqXFkJMzblDTy/+QjlU9OuYVUTsKK3h6xTXuKSnY0Tj/qkHugsD+1NKB97SziA+2MFPsWsZDWYVFWpjw8iJzGF15ay97keOfFBxmklXstPrIHBpaazNilRUSVpHACLdg4p+zpkws5dxLlmcNCcnwlvM= 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=MBD0MqkP; arc=fail smtp.client-ip=52.101.72.40 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="MBD0MqkP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NUCt2msLmz5WE43cClnAyeZ+vpqEFkui98JZvfaDSuBI+HKDZVkdvgyH3yzNMsYln+WADi6gV6FTb3LlCtgL8HfzUDJY/umXXWhbeNnGBqePOlTc9Ddxt2Ec3/zHE0qHSHm+Mx9p6KKQiea5BD7BUFqv0J27zhrCPlnCt92F/X7fLRRrGjUf45zB9vgdHd4x6dLKe3Nogb3KQ/cpHoHbzQoZXbAPpHJ27r2GI0aSJ3vmabR5JHcq/E4SMrTqHPPcFrAu9iND1frkyQbokOLC7MLM0wslAsZkPnA1xV2n9Q9ezRf0qNhELrPDIw10O7sc+XztlXlNzT1JpEJWf2RqCw== 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=uxpWLA3vL2C0KV/UrdyNh23C+//YAbbhAstcFDQEL4o=; b=kflaTogxJPT802yT0Qvld0TgpybbDYz7jxaYHdEtZ2rxb/FUeNGE/kA0n8gfuHSH0tW3GayNxzGlKw/+faLICIK+l8sbFO8fcGyaqPg0HIso/3ioITz8pprbPhIdtRraEXx2NJl6kMVzkEVivPu2JdpMwdcvArfAXUod6sEHJfQykbYZ00T4zyEZjABQQc0+T3CFeOr6CA6pJZmZruPcnVYZpzje+GyNqgkxEqok6UKqwEZH/+mU/Vjbv2gx34O+U3EnWrYWUzcWzjnQm5dCrmvaJzPIu0kLaekZJbeOTQQsVr/u1qpPThCeeGTutPqpuXtAwglplnrBbGgs3wQW4A== 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=uxpWLA3vL2C0KV/UrdyNh23C+//YAbbhAstcFDQEL4o=; b=MBD0MqkPp9T2PzDrrmOou0wJRa7bGvqq6vdZVuCtNL4535mmMZST4Y/759WT7e43FggptIkklY3b2tuKdY3/R3GfFs/3lS6hP/Ty0tdX/Z8+OanPeEZ43DV5HSFCdt1MdP8E5URgkbbTS4vmJaYwvYiVhz6TvfGAEyoBWu6Gd+Na/5r010H98bftFDoPxOb7UtuLNnOHufAWPYcES5S5BNjAsHHNPjOpLb7HW0CIFuk9T1/X0ne6/B1ZjDPM43GTTqVfeuALxQ6L7dMp41Wq0Ei7tvfLQ11X9ix8rDmPKiCxt+1bghAKoyujkXLzs8bPe9X4T7h2As1gH6AaUkBvDw== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05: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.9009.013; Wed, 6 Aug 2025 15:05:55 +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 v3 6/9] dt-bindings: clock: nxp,imx95-blk-ctl: Add optional ldb property Date: Wed, 6 Aug 2025 18:05:13 +0300 Message-Id: <20250806150521.2174797-7-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR07CA0001.eurprd07.prod.outlook.com (2603:10a6:208:ac::14) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ed2a59c-cf45-4d28-86b5-08ddd4fabded 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|7416014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BtY1l0WdbFCZXrJ7UePqlMl3AH9C3+xjhfra7QyJwsch4TWnaqN/EO40c2wK?= =?us-ascii?Q?uMotH+WlV/OvGwEE6otvwS1i8Qa52nkBpfTP5cvmcP2AL66dZJtVjy5Bg4CR?= =?us-ascii?Q?yIlQ82gDxijfGwQaJoBE66WzLfbwdKlVP1yuf6Z3QbLGewz3Cz7BfiDSJp5Y?= =?us-ascii?Q?w+W7aI4MMFvC+D0NXaHEdKznkkm+SJD775+CfF7lVv1qdOdQ58fecT4uzSe/?= =?us-ascii?Q?ffUpTcMpbkZLoFThyUW8XPioFxaO1H28GWEh3xGNW/KTOX/7cHdGrWGIyHKJ?= =?us-ascii?Q?kEKZl/cKajAS4go4SsA0vIA8/a9rzlsr6XWcOHbVchLt2hNEGc7vz4rU3+Fs?= =?us-ascii?Q?5u4IJEU5ocoCklHXdXe0dgFI/dS9JGvmEzyseBZ/sKzU2lxRsbrcvZtzeqLr?= =?us-ascii?Q?arkySqiecErqJasCEMB1MvfBDRLLOX0Z7dxKFbt1IlVYi39mQtGZUU0dYP0i?= =?us-ascii?Q?ODCQXQqYHd9+cm/EBhhkNSYiOB+L4cRGCQQKVVV8FvkGq8c0c1LrRXoRpMH7?= =?us-ascii?Q?Mi2tsaSTYmKgQ4BOxtMnk0agw9csNbMciGSis3seeO2BuOtUgvvs1i5cn2RE?= =?us-ascii?Q?3WpnTmZcBUqQ6ECW1WL+oY+cA4oz2McNTZcUzlxqginglBRlIMYLmhUKxmHi?= =?us-ascii?Q?svQMa97DPAAwkXZL9GRMrDKJWW8Q3RB4J+jtT2iFxjXgxYJDTDgJzkbz6Wj2?= =?us-ascii?Q?i8OYZd7EIss7jvHGyADdcrWDD/crB78K8altQ/KK/idvw4Cm1iK+jSjnYE3P?= =?us-ascii?Q?OyXVLMI56/szEwmNKk+xLX49R96T/McgZFh+W3Jm8+4IsSAW3bl+4UTwV+Lw?= =?us-ascii?Q?YOfdBfBoPQedyVVineouGuF9vh1lW/JDkoPyalpKIsTBLA1tLwZPdhbRNiF9?= =?us-ascii?Q?0XriXtZCoiYV3Ny7ku5AibH2iWz1EqMwqE/ylH7YdDUkIMd1AR10xNFRumxi?= =?us-ascii?Q?F8zAsXAIsa1cFHq3e6QSQnOfkoYhHdPObtWkPuByLN30/iS+oX5X2HVFvapB?= =?us-ascii?Q?el26xT7YYLRcDnMnYiqDNmyuFZ79T+C7eDTZNtI338IAN0f3V8IZaTW6SvW6?= =?us-ascii?Q?Cd99fG7fWKGDrXHq1GKqh3mmqLELT4ObUge90wTPpxI4RzaIF/Hv2p+7UGz8?= =?us-ascii?Q?AKEm3fg1LhMkUYiGmoC4W1Atj9MJ1ww32vSbUM/q+6ooxVTtyH13YKF+Sz5a?= =?us-ascii?Q?VARVNSAopJu7d/MdDOxr3Q/6216Yvhc7BaNV3gbDg/DiCiKPeT9iEKq61Jrh?= =?us-ascii?Q?vEn2U++87djN8gBTjLenM2tz9Q2Qm6vPPDeuWiorgeugM6qqKyNWh+uQTNNC?= =?us-ascii?Q?An87YPOmpD9+wUNY7Qv9fGLnU7jntbhHc02J8foLuMKps8TO0l/5DlwsFSqX?= =?us-ascii?Q?hcDesxxDPcxkIAHUquD2qR45hBjskEn/XZSXik9FFXL+lhD4H0cdDiMxr3PF?= =?us-ascii?Q?IxifvFqqHRU5Tk1k/1NMp2fbtJhEYXO9Z6Clk5yC3H939DcyXFYnWg=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)(19092799006)(376014)(7416014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?qGG7bwq5f+V/qwbsOvi8czrgCwdD9aXomoRnHwyXzNUu++qNIPnprgr7y1cc?= =?us-ascii?Q?L9wLqb82NakTf7ulk1NlxCrSH6kC+wfzg6wDeI564TgsaR4JAzB1VYpYs5zM?= =?us-ascii?Q?IBWdrSKLC6obRCBOE3y02KXKfHByKZTS0B0mRLj3aWRvM/O5K3stLex14JRw?= =?us-ascii?Q?xVOEVfKvAvFR67PRgm0uPvmxLbxELjp2sNEosDrh005vfi3cmzBOmb2yKONU?= =?us-ascii?Q?9KyRbo/MVPdufyxgo5Uz/f0fd4hm5gQzxZX89aZRpa3f0DMjwNtF5lldEhaQ?= =?us-ascii?Q?31X+PauFFNng2YbKmjAiAQeUWIv2IsDaD9exC99KRXRu2s8uJfw+OvY+VbWO?= =?us-ascii?Q?1F/6QsACrP/Cb483JCwroWYbAZ144/0/KvdKrnkDfFCIdj+YMfEZH/dCw7bc?= =?us-ascii?Q?RJT75QgXlxoe83fmyEmrMqOltOijVBtvK14YC6T5j76BnRNgtv+dqZbxCXEi?= =?us-ascii?Q?+m3dLkEcVZtLE/IlolqHVG5gYYag9TDr1MlgWnZtY7y9FdIq3w7+wMhU48r8?= =?us-ascii?Q?xEeoayXnGh0GXvZuAfi+Y1LsLs/2npBmhwUSkIgkZfpwooOxcvstz6T3kGCW?= =?us-ascii?Q?pwC9E/7gzsiowNeNsct7pmtpc3cqKOzUhao1qfbjNrSKH8d80RbfYBTshEcD?= =?us-ascii?Q?bwd0+6rpishy+87hwgBXTFyYIigtlhpjKaXrq+OzIDRAddh4SMNxIZGr2ag4?= =?us-ascii?Q?8+2ZLPltA6BG/F+Pt2oAN2wMuI1XwlCUrK0+0VIauXj9MQjHFZEnQaNxKWe0?= =?us-ascii?Q?EarmsnN9rYWyIdKesivHIalSCKwAYuypK1HgtJmoQSk2SaHwRfVvOzQ0wOgR?= =?us-ascii?Q?CitAK5BqK9B8oJm09CuGw9wCv0bMG52esBcskxO/eMv8bWKWkfAocs7xTL/y?= =?us-ascii?Q?vlbM/pl5h5pz8npHPzxrj9fjJgf3xDzhOeH51iiOhC1VGhDOf4XjlpLUI8nc?= =?us-ascii?Q?0Ul9bmrqSDV6/PXp4uOaAuAm8n9uATZJT6meSMIY6UGPGnXc+TbwOUry8l4l?= =?us-ascii?Q?egVal9lW/8LB1/Ytx8DRuBtwhHSgl2aX6Kpoyt/919fSLMfakEWHI+plctP8?= =?us-ascii?Q?iruRSnjTRvS6WA4V0++NlPmxBnrkhIarFuGdILeLwtAjEKrBD7ibirSjpJqc?= =?us-ascii?Q?4l30wP3edlMpq8kQGM/6m8xj0rCoMT8qferAf1EadcjrpkPfPLCnMpuNK5Wd?= =?us-ascii?Q?HFB1oiuDWmt2UwR254TBlbsk1sMuExnE4AuY78J3DmJQ2tm4w8bcI//Jnriz?= =?us-ascii?Q?nSRM+0u55v5syNMeMhc5prFoo3aT3Volrx7eu7UyxINTMcDzF6oJbjDwQ/Zw?= =?us-ascii?Q?hnqgaQlqezn4c5Y+aMXH7UcC31j4xiEGk/j/Iv5pg3TO+IL2JnaA6gj7vyhD?= =?us-ascii?Q?12GExulHvfZw2qjvURtUHN8/NQKNM1r1j+QbIinRBg/uCuZTAbbPek5Q/QPW?= =?us-ascii?Q?8DmQgmfloigzWKpEh10VtWsL6b9RuRcePEuYY3rFAM8+fsLWdU0eK02/WKMX?= =?us-ascii?Q?t5OyUQXTsitpV15gkl1ntt0C3VSxaEoYbiNvE3q4o2eAHSg013c1U2LUbrsV?= =?us-ascii?Q?T0Wov8MLlrBhGuxXbCz82KGlU8bmCmx7En5y2cSgZOGGxinBDniftBAfmBuG?= =?us-ascii?Q?5A=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ed2a59c-cf45-4d28-86b5-08ddd4fabded X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:55.1938 (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: bwVhSwQrtf74jd2B0AJghcZVNuurqGhDB5tBz2HLKS5djYPYk8iSCVh+5dAE900oRCGdXVU8CPmCVxK/RKzLRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 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 optional 'ldb' property to handle these use cases. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li --- .../devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml= b/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml index 27403b4c52d62..836004de4460f 100644 --- a/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml +++ b/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml @@ -39,6 +39,11 @@ properties: ID in its "clocks" phandle cell. See include/dt-bindings/clock/nxp,imx95-clock.h =20 +patternProperties: + "^ldb@[0-9a-f]+$": + type: object + $ref: /schemas/display/bridge/fsl,ldb.yaml# + required: - compatible - reg --=20 2.49.0 From nobody Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 0F5E1298999; Wed, 6 Aug 2025 15:06:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492763; cv=fail; b=df6IDfkd+4s+fipz0Kte0haa2EB/WsOX6sddoqUJjGWn6aecU0yX43trdOYFLoKH99YA3H8yoGwoX6sb/Qb5vYbBmpzmUIvNe+X9LOO7rFStKpDhsrIwHryjn1dgQaikDZW7b/nC7OZ/w0MPq8UslQQOLtd3/Mbx8ULKz7jY/2Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492763; c=relaxed/simple; bh=2kOaL2YpuLFOOPU4618WfH1bVAQfTJE33eqh02Z1uh4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=GFHSvWx510f2Cxh32pI406xYnHa7B2CUKWT/b5qYA4yEDOBLdpuRELLEQ0Xf4zjRA2n5OuA/vxflX/mZ5NCb1uQLBmglbP7dix70LgnLqxoi7sDxPLs2ZTjNHti66CdL7s5xBMtH5sEqupdkcqd9/sZBzrKT6ulwfBUrNOeCLU0= 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=Y+mozDAF; arc=fail smtp.client-ip=52.101.72.40 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="Y+mozDAF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fonRtmd0DGYAr9mcf9FLWRaL2AIbeg+EvZh0fjlR0TyB+ZD2SJGyWg14Q08W+W06Z+zkqCSB9Cgz7SCcCfy21tIAdaTS+gE9CE70j2bJPOVjykL1XvGRYu3UWor0Z6sy6roeCItzjS4otznuGRv2x390hoPgRSbvgm4LKNWGk0KM38fMr4H2gGQsv6dF3fjU70T1oK6/ILuoDfIS4GS1zmZcPNHPCseK0d4lbM6oWPvI71mxe5p941ZxdLd0yJW691AhuSXIhC1GStHKEIHNPvuVJXJN2DfJy9Y8xSayuhV70vfaJXQxoh5bk+fD89iO3WFdwFhayZbBtJXoOh5USg== 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=OoNPXiUWEc9YDX3xBYhSSHrR2QpUr1TnqTtYA69HNmc=; b=tltkSDn9cxv9uCU23LD6Xonxp05IlCRgMJCamNITZJLkJLOHvL6E8KNusAYH4NfiC6aA3ouB1rkOzCQvwQYH8YvVXInQM/he3eZAPiHVor+pzt+hDkONGJemrLrpOi7+mzXrdM7c5a421Fs04IpE2WirBcqfQ21zhDOqcYnQsS76+hrxlD4cbHwDDBjCSRdQR3EnrMn4sTTZlvQjGjLeH/xiEMX1IjFGJgRXWzeYDT3dPul/rYytYMCe4u0orqIsHLiBC7AaI99w/Jt2P30jBLA8j8EVHtjKNvPoi+3U+Y5pS+IkWGxgnwMlMvk5uJta4SLhs1fN1X6NRoYR1Vk2dw== 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=OoNPXiUWEc9YDX3xBYhSSHrR2QpUr1TnqTtYA69HNmc=; b=Y+mozDAFWC6MvQPAQGj3hwF7sGhgsl+WNsEDws3fztGBtQxwb7lkea0O/GaARO0x5VMRsTjYxfpywNMZfd8HEWrNER2MsuAqt4hQT8LbT+sNGGtQ6sqPzHy8gJW5D3q5HP7IcMxa5UesZ2k42vF5g2qRz9McOgPaDJWk3GAhWNMblEL2Bzfpkbse2qQCr9/Agn652MjCEVqIs0oy/RFjBke9KJIbfhmiRkl4/G7SuYKmsuoqziT0pVC47pJJUtFqz+SjJFFuiYR6QKiqYUaPWhf5FuCz5CSGEoGaZLkIxAOYZjB2JKgB0gbXhbZGuseXeUrmOsjNoYJlwRJeSoN7eQ== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:05: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.9009.013; Wed, 6 Aug 2025 15:05:58 +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 v3 7/9] arm64: dts: imx943: Add display pipeline nodes Date: Wed, 6 Aug 2025 18:05:14 +0300 Message-Id: <20250806150521.2174797-8-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR02CA0222.eurprd02.prod.outlook.com (2603:10a6:20b:28f::29) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: aa9aab35-9e62-428d-4976-08ddd4fabf88 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|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KSg5l86Dju+4UHAnr84oTLkvIdExcHNug5EefOCHt3nvja5z2PtgoOtNOKrD?= =?us-ascii?Q?rqFaKzGRItQkCTgMn+N0nj+1CItgdj+lOqLWJWuOn3viIuXPB29EyeJyrCki?= =?us-ascii?Q?g+mwsfJxKwekoqxVndVSSvkdZssCNA54lm7onhLLPRcj06JC+rfUELLVEW3v?= =?us-ascii?Q?Gq7GcB+UBWj0mv3PsZRRdQ64mk9RoZmArmtcVRbV9mKDN+s7p8h3aIliFTjV?= =?us-ascii?Q?l92lZ7kI6MgJIs0Nk1N3pBQ4iZDaMMt5NLrOE8m9ptQkNUBWIKJEqAVPr0e0?= =?us-ascii?Q?cVN1WaayQCjn6McfrAAwfdEWX+jwO8V/eH/vQcH2LG0QA1iEA/7y0ZEIi48u?= =?us-ascii?Q?3/0s0G430seZN/PrjnVr2NS30I/rvgyb8NOVhIIQo36JHlhlO1o0aDu8z02X?= =?us-ascii?Q?8eg27+1BITaGZeT4K/Z0GElXpXW1Bbyay+zGs+f6GychjdKAlP62jcAoK+ET?= =?us-ascii?Q?iRxMKHZJDuGLBNuAFr8l0sNpEKyWpFLs3rmQgrjUII3Ven3oeVnUTzdpggrG?= =?us-ascii?Q?mIxAW35WyxcbBkBVXwKK+UdD/nmMM53XGPUF+8ZP4ZdPlfLfx0Cvj778eh1l?= =?us-ascii?Q?HGJ2J1YwQC32T3W+sfwnQ1zgpM5AeriG5aQGvmagV4jsM1CPKesQVkGyxow9?= =?us-ascii?Q?L3Wqe3JdJd7wdl94v6Oo1ndXb6inVOaiITaHG5JxzUwrdEDYoKFPJq4Attio?= =?us-ascii?Q?K3u/ovfzsq4adq020opGbS77bC0Oo4VtXXYhIwIigMzrb7mXxxAONWfw8U5i?= =?us-ascii?Q?iM+GMEeF+YcHCVvWODrGS6u7aE6fFPlVUXnwTWus3zirasNIrhJCfnkdWsto?= =?us-ascii?Q?OQSMSz56Q1pCkMha8Gs9f7ZdBHDKTZlPj8ijW31NFXKNB2eJpfAk6luE3QFI?= =?us-ascii?Q?2gCMqN9QvNcWVOlvsYl7YIH6TA2MCQNslSY780DO5IEfet3Q67jaPFUWWv+9?= =?us-ascii?Q?i3CkP24nkODkiHFsvgkZgPs8CEpGGCdlnSgBU2dHgbqAwFoquLHBHS7DeL+H?= =?us-ascii?Q?0AD5/mmwOeaJKxa4iNipSLDTEx5rKmsFy1yradcqUgTJwT0hwPqVBZ+xvVMA?= =?us-ascii?Q?qoNVggTnS7Wook5t0E1dSKIg8DyL6L9waXfZjYYhy5hRk7Cy1U3K4PizC1bd?= =?us-ascii?Q?gOmvn/oLexnzkXi08WPHFnTymrqCI0VqqwJw+rKqcSOyhikXSasWaRMHENE9?= =?us-ascii?Q?VEzBp9bV0jPtDMzPfQnfzGHbWG2V509NXuyH3/GBY3PhVn5NqgRQ8zMoW4yg?= =?us-ascii?Q?BGrTyYgWnM2CxhwHCoDMwRjClDXyLg4mSgtahGC2e4dxaB+ReT94Mks1WK/W?= =?us-ascii?Q?K2u/UY/mq5HUNZEURx45mJpMF2fCcV9c76A89KuxpaAqst3x2TNUi1jDmkQz?= =?us-ascii?Q?YlCZojoVXHyeBAoFlqxwQWfo1etgNzCd09bssP3AEF7KIy7q9NrLMY4a+oee?= =?us-ascii?Q?IxzgA2a1uSM=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)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lnS1cf6m5U+maumKKRTEPjZl1sLklhkuIj3hgLmKJ+Jmve5RJdQJMxJYl6Yd?= =?us-ascii?Q?ZKxhDwu0WQJZxhrgRTtts1aZI3XEOTLxEGXjOSon7cMu9qQR7hCowfaWdczY?= =?us-ascii?Q?rjrLvQ/HF5UZDGZe2bV/V6be18HHkEjXP46FGzi2nwO9JHlIo5h3gfSjsw0z?= =?us-ascii?Q?XmyK1hIVVRa4wfKIXwbz2bZsztGUlmR7DPr4JZtIR/1m7S0jwU4C5wShRQPA?= =?us-ascii?Q?JP3pLRDxzgy/nbUeEsav2qOpWJ7EyY8r8Mz8fbe9QNj+Cy4VaEqw/CrTWqPk?= =?us-ascii?Q?6TNZzBftUFfMWId5oJQZ/PyCLSukkij1qkpJeaEOFdjEW4RcfRADtzVC93wm?= =?us-ascii?Q?5P1644QCxAFO4OECQkKFV6Hlmx7Ox3O97BaZ1CsxQby6dBcc0uS2DndO7uzD?= =?us-ascii?Q?JlVEqp9qaZHxxkF/rwYXM2Eene90WsH1HhtvTqquNfqhChkypWRvBti/vrgZ?= =?us-ascii?Q?XVyi8TceTU3HIItsBJw5zcytTLOeNLze3SEkMrlWAhnP7Txu/uVhmUVjPV2E?= =?us-ascii?Q?pzDFtzAzlrCdWYRDQWFeL6kmLk2DuaGGKC+zpRNiK7htXh5oSIHpH2Vot3dI?= =?us-ascii?Q?3SaReT4gozLI3pdculcdulgCjCGLm9KUSTWVjNE7reMQ1+V1/vHhi6K4uZgE?= =?us-ascii?Q?mlCJ+jnqqtlJDOwW2LpKk0nMxfE6Vxqn+8tpcZcA3C5wBG6QhJyZpQHx1FqA?= =?us-ascii?Q?ZG4HcgW96lsweDfbUCeZPc2otPSupajpkSvuXt0RnkbZDyduoqC18OUtHkl7?= =?us-ascii?Q?KQBeg8qEDgbwzm4csaxx2BclixioCUdHRV7SJIQ3h/nDXjqHcrXDYhGU48yj?= =?us-ascii?Q?vQgzq0HWDmSt5KPFBNGgvrdk+ymk49uDUOt58CDaE4LGfBKpHPioseWmfhjP?= =?us-ascii?Q?MfP/rTMK3MfuE2EGr3vLRkeZVAeP7c2ZIDsL00XJePmOSdVFj5zeOBPgrY0G?= =?us-ascii?Q?miSgkLL8gdf9wEHRC9xmZF8nraDT7thgGhwMHTAjBAreZvGyELQsJ8AoBOnX?= =?us-ascii?Q?+QadUew05EQsT/vZVZ/zVEW7Aq9tgfc6TAxhQA3YY8ILFbxCyhza1Ig1j+17?= =?us-ascii?Q?aRAuCg3cyL7yCxN3lit+mzWAuuYGowa5oqi+M5ejoj2CH7ocITURwqjvh0qy?= =?us-ascii?Q?kY/UwQMb1nfBBqZcIks+cY1eAua2Vxkw1qiOzkpYUCL3JB+LWFbNUW5WpfRS?= =?us-ascii?Q?H25nom4tbAot2Qk104zXS/yXTk1AJrY8Re2Glpcdf+Pk/YeP6UasBRTPEZ/v?= =?us-ascii?Q?Ri+9hLznjsGX29bcDtltv3dpkFbW3eqOIUY786mcdA5VDwqxI5u3EceKjiPU?= =?us-ascii?Q?15cm1BrSkg1muocxn0PrxxDqpKvqUHaUir5dTB0zuO50zoHWot+SdDaq3RQ0?= =?us-ascii?Q?RV69WlXDABoGQpcvlY9y1Fa1sx+YL3ZXD4md1uRaFb2/H6P7RxQyrYHXSjX0?= =?us-ascii?Q?SG2o7QZ3ZaK0I6QCBNBVWD/xR3OSgB2mLCir9N3YSvi6QIwrJd4NIFjjJmFm?= =?us-ascii?Q?/zV0WDzelhlMPO3EkHieYzXsO3mtGBybjIhA1kEN3ooNgTCm87O04xqku1tp?= =?us-ascii?Q?xZo3CpV5ZV12Ck+49uMLZL6JgKnaO/4tIV/AJA9gyOT/9p0QlczF6+D6Ego/?= =?us-ascii?Q?hQ=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa9aab35-9e62-428d-4976-08ddd4fabf88 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:05:58.0055 (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: MpKP0HV1TBu5sLQX7hYU6kUrYFS8JkO41uqUCRJa4rMTw5Rah7D/DEsiciIDp2umfN+HNk2DcjDN9jfwuuuXvQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 Content-Type: text/plain; charset="utf-8" Add display controller and LDB support in imx943. Signed-off-by: Laurentiu Palcu Reviewed-by: Frank Li --- arch/arm64/boot/dts/freescale/imx943.dtsi | 55 ++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/freescale/imx943.dtsi b/arch/arm64/boot/dt= s/freescale/imx943.dtsi index 657c81b6016f2..70dec03c5608e 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,62 @@ 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>; + #address-cells =3D <1>; + #size-cells =3D <0>; + 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 Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 1621D299944; Wed, 6 Aug 2025 15:06:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492765; cv=fail; b=bxVihrwLyTB90HdsE5ICczY72oGdfosM1nkyUdDFWgYkftEy8n77AoKvoYw2+aJ8BiHP39MpwW5D451/WCp4S4emvVGxXAoSEgWoZAQgoGd4ryKJh9YRjqquTNyZ4Pi+zYzkDDOE/0R8f8V4kcROBEW0KbESIKzgys/zq2mx1Mk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492765; c=relaxed/simple; bh=gumjwU/gAKlAC1WDrhmkIiMDJBGj0zT45d6La/hfmD0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=KPefZOBxjRQfqI4vNzdkWFzKkJfanMTRaTEHsHcOg1ODD67krLd+u1+3F7gnhIPHKF6QE+tO4obPJZNVNs5ut5wILjcn644TsRWhGRrjMAC0I01Z/SoDa0wROvF/PaiGZafy72WKgRSBesXNvN3GPEiBvvyQyvxb91bgbWgkeIs= 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=pvBVnBTC; arc=fail smtp.client-ip=52.101.72.40 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="pvBVnBTC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WybzTtkQHeyZcZUXEwgC83i35qTb7x/Rt7InHuZt1dFwKqJV67R6FcvAjxbGm9tCIrZKn0vw5popkzKc9jvi27mm4+MmR/HvBcafxLhSjf7mXjAZ14TzxveHQENsQo34RuqQEnv6zphPeqJJUyRuHPCNVKSYkIdH9fQs03EhOahbL9u+PMHqJOxrNZdJvK5Cxvws1Aon+hWejk5SBMCzqtMXOBnkmK/CUsOTT5jq/TpJHSAqSdo2ojs9e1ZSKyoPGH4tYrnzyJQMOAX6UWGFcAb9vb0O6+zhHWFrhWUWxO3VzeYWsQrflRRLnyJvokWzDGzrXbj3peVBTlXj9v0cfw== 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=lqSFGSknhmlx0FIYjahYkyZj2ajyLBBuUiUXGtqFspI=; b=MOR3vM4BrPYYT5afuv2krjUKkZ3OLL1O1wdy0W0Jmrv/jPWPYzcqmIEN3XXbGL7OUV677GcWESvUNO8rFCZ0lbkM5rGQ87Ozbfq81yxuwxQX1EHVG5ot3uUUqM3Us0UTRN/ibRdXeRkq+F6E1OurbXNj7rsAIRXy27Fu8s7pSS74yjNk9zOc3rnd4f1DaFcCkx3cOQq+N5Y8FDTcTy/o/BBYHn8KpxrMiL21C5G9Rh8FNP4/vCMwL+pzf0+NNAVD1xyy6Cs4iOOWkogz20+uW2vFEkwURhs3io+ZnhPWXs8Qvd2joiR1aZZfNIQHqwJxQu+68YZ9CTh+RbKbAOtu4w== 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=lqSFGSknhmlx0FIYjahYkyZj2ajyLBBuUiUXGtqFspI=; b=pvBVnBTCQJX37V4AYlicdyG90gmkepSYq4xVxMSDof2aBtz3TgrHPpKvSO11mIMfTtT47XWeUH0U0Ao7J+Mxs1/S52iYOMyOqWT4xrMczCa96mCQPWXbC4AVZGDCsHXONn5i6u9np1IIGWbj6RyR1YHwTDHr+BhtlIzp/mwD0CtKun1n9BXPkcokZ41hfjdJ6gcutWGSvI3yUSdHIrGpvTM3tlE3Wp6MZ0nIye1kPRKgZPq5vRZIQ+F8YwtII3CCIJXIFAVmZ9MJnPQbH2Pjpy51oQS+Eyw4uojN9prnnp7pf6W3zf4K6gw7sBxuvPXxxVXq/iCGbHxm0T2zYPMGRg== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:06: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.9009.013; Wed, 6 Aug 2025 15:06:01 +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 v3 8/9] arm64: dts: imx943-evk: Add display support using IT6263 Date: Wed, 6 Aug 2025 18:05:15 +0300 Message-Id: <20250806150521.2174797-9-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P195CA0004.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:5e2::19) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: ad53a5a9-d90b-4b55-d3e2-08ddd4fac13d 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|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?THlYTuXQ81j5LgbdZmT7LV/LXUmr8AWBX4RlT5nKyKEFFkGwsaUhWx0rWu/m?= =?us-ascii?Q?HPtsPz6E5iK3oCbgsD0uju61GDVWA9hJu/FM1axYAKImJCi2+y5Zumhvbb2B?= =?us-ascii?Q?8C5EZviYSa1xD+V0N7ISxYYe0tvdFv00LZsySBAZDpfkVV6AzHFcTLTmYfe/?= =?us-ascii?Q?bFuvlbbCkrOd8P90PivU/wOrxE0K1dGqtEQRbhV4dgP1nPn1LZWTIWpwoX4Y?= =?us-ascii?Q?Kc3jon5T/c5q858HjxG1ROf+BApCOLQk9XYE+x/n+8xcCesjqZkUXj34x2Eq?= =?us-ascii?Q?0X66ccYnE9eOcbBZUvb4pQnLuv0f6aLED58fPIEGxBoXiVdK7kRiNh3pk6Gm?= =?us-ascii?Q?y4Xd1EyHlQeAPBVv0FmfgvRzGdeFkY2fPDExVdCYqX6Q2oZO+STEPnIjEvly?= =?us-ascii?Q?0A8n1ETJWa1seoTxEe9vS9cjbW40QJUGqBAlJ+I2CU8vxc5QL+Dg/6vy9/qK?= =?us-ascii?Q?oKFm4kUlBPKslkhqOgMFwggWfFn8r+2lZ+lzO/FB6K40a+BocoEDNTbIhbSc?= =?us-ascii?Q?NuYheewiHYIrXGh23w8vFpNegqRTdyGc+iEtblwaCGy0sTV53/3KldrhQ1Au?= =?us-ascii?Q?wKfRMvGwDRjpenWQmblo9IeswZMvA4QL/Cg7lSnFlTiXJYBM4mfCLSVWcIgd?= =?us-ascii?Q?uwNfuVwD0RfdCtAcRky2RNbi+fHImcSYRxZge2vGM4J4qr2MJQ9Pz3nCpOS6?= =?us-ascii?Q?WrZK+nShBuVmMhph/MvxP0sgkZNZGkkwmQnto+ZuWtydGbFvSdq9THkWBNBU?= =?us-ascii?Q?g0NxKtyOMzOiQhFy43MF1pE7RyQOU2L/7v3bpjznQYlk6zG3VoorJi0xJQUA?= =?us-ascii?Q?9ZLrUYcI/ElEIZw8EDDF333YK3CCt48KxbNTez/KV/kSOwafYc8YLh1rfJB0?= =?us-ascii?Q?cyB1dKz/ibzu68ZIMVmlxGNfbUIiDlNG8mn8XWxc8y2oHmCxs2JBGSr3+Am7?= =?us-ascii?Q?WB32lWS6nviRCjCQkN3HR4WSIG9FR8g7NnH8pgEwWEw6LJ82uYJbXBtjOgeb?= =?us-ascii?Q?rSXvxy+jai48l/NYU0ULDPTlum6SrvRdnw/uAjVo/jPX1v3a/RFU/h6Z8MCP?= =?us-ascii?Q?BtDCEEau3CoPB7/QAYf/i4ag+H5GPL6A22WfKPxM1+cO4i7xsqyjXpdt8oMk?= =?us-ascii?Q?n3Bn4bN9Xx0XuuwdT5Ell3OTS+ir850O5HRJEGwPjwQSB0EcTHcyEgV+ONim?= =?us-ascii?Q?pPs5Agap4kXEwaxx3WUDn76IRLrPtesBED/bIx5H5ofrfyEEdSkeZ57OhId4?= =?us-ascii?Q?M9Z64ETEEq7WEeVM9epkEdQ67VO2L04+T6QSD8svNH1TVXgvS7DVsw7BtmlV?= =?us-ascii?Q?gn0UiyZfjnFdb0HLpI5sgPeJ46+nDvA0dLT88DsL2heFtIiJxsm5jgXzuubY?= =?us-ascii?Q?nyIaI93MWBI4l3xUIjUfVh/F++6KgKck/y7sQWXnCCmmOS990w=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)(19092799006)(376014)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1sRjOJc0Anhu8o8LkLVNdesSiEYl7N3E31tIod8wRccFSN14QUbyiWjPBmXk?= =?us-ascii?Q?9iUu2Vf018ZSBiHp9nMIDAQk+ykEbOQojDmooHS8LVfdQsrWgPIB4iUrdKeI?= =?us-ascii?Q?0wf/1d7QxyZ2jcPlEq1vT1MZE3x61kqNVWObCzHxLUx2ZCxH5HCoM6zEpYZW?= =?us-ascii?Q?beev2UVD15VGVMMCkU+nOLX6EQ0RNtoVkU6tx+hdpd+Eigd8PYTi4r0vf23a?= =?us-ascii?Q?cjZ+A1pBCRttAwttF8YyOrO2PGd216N8LaSzpGYRC6+MlC0FNG7a+dwesC7v?= =?us-ascii?Q?pjjMlMiYyZsilt6A4P5cV3EwPfj8RX3FcTwElxFtonZOPGDoPTBedyo5rDB9?= =?us-ascii?Q?sBqY2L8vlWET+X5BuHu3D21k/wawLsAVe4MngmE6xJJ/4bJN4HEFjIRMqjVu?= =?us-ascii?Q?uajujYADJ3tqklLXPf4FO15JLp+gg03ltRMHBBqtkKMn/f0mcTOdLjWq296D?= =?us-ascii?Q?buLtekXgOxvVH+ICy10drqHjlTHueeyO6PcaZ3Va26ntukM2HjV4MgA1TFYq?= =?us-ascii?Q?NNYs7r3dDtkpSXFp7FL6mjHdeTC2+OvG6a9RvXeiFhtQGZj8SD9cuBoDPLgx?= =?us-ascii?Q?SAOeswc+wtY2eCUZzNafL3DDpKTqlG6YssCDQT7edJyunnQscS0GLsP+QA7w?= =?us-ascii?Q?bjRunJIkEmH6LuYbRq4pnQqXhe8uw1YvP+mC3g6GikgKT3ojHYLvY2z/4w6A?= =?us-ascii?Q?Ff9UcKgQhrpOQcwuq6ezG4iCQxGRJagZnt2anuM4Oo0OMQtw4B+mcr/jkPip?= =?us-ascii?Q?+X8VWWdIygz6CjcdXle1IhxWIeqOgBwxxULVBwIpXZVLyn2Z6obycdT/R4xJ?= =?us-ascii?Q?1YZ4sFRWHJljJWqlGpuXCFnJXI07gcBWgGujUfPvKb5iig73W9IoF8PxnQjn?= =?us-ascii?Q?61XQw0Gr0vAekZnIPART+brp+1QGNdJK2g8h40Fpedbuq1ymavE20CGJprlb?= =?us-ascii?Q?jcHb6LoZOBJjQ8xrApX2kDkjH04Vrskn5XTmfm1ZRjL7Zjbid43kR7V69TAj?= =?us-ascii?Q?20CPEXwL6dHw7QzxyQ+0B05q9RdQp+Mtu8wxB61oghkhVd27wcPV0cV9EJvN?= =?us-ascii?Q?L9fo+HwY59IoXbPHO98WN2X6alT1l0bVJegSYoJvrBxnv6me68hc9psCVry1?= =?us-ascii?Q?B/cdQ5GSn6fgZc4c4T/9/QSKGSW12NPKh0S2l1UESYt19/TF/m1VJQXJwShl?= =?us-ascii?Q?wkvTYuX6Sv7bvN5lhlmnsGlRAs5fyoKbgeHpAbed/UZqkG6gejuLZbUWWZ6g?= =?us-ascii?Q?+QxgpUuJXOZJvGBYYSR8fmazc7vhhulTP+g3neyXS3mnim3GauwNmPBzNZ8j?= =?us-ascii?Q?WQb36uddIvgyatw3qv/6NamX+vDoqw687fusWORBX/IcKnKEqMr4qI07scF8?= =?us-ascii?Q?CK+oZgZqoEyCABj0WseIYvcT2VuP0En1QZZJbRjLqBhh/NZG+s64XEv0bBHY?= =?us-ascii?Q?7fNtD9iU/ExntAtDuug/vdSVvIs3TC31AbXiE0ti7xeERFKZJvxOaXGKkdDO?= =?us-ascii?Q?8xVBYPBlK3Cfoa4Mila7oe+hjlBH6pyKwvRFfVG90Yk9tbIRf9Byim96y96O?= =?us-ascii?Q?ve0exIK8EAfm5QAP/3KK4gxwxDdf3aFSljwtqVxutLcpYD2h9umhKUuhdSFh?= =?us-ascii?Q?tw=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad53a5a9-d90b-4b55-d3e2-08ddd4fac13d X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:06:00.8888 (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: cudclVSVF2JcXV6dEPq4ZvWz5YIG3j8ZNEwKLYiwNU9MsTaJjF4LRONdTUYuAg2iQSWV9uoPiOfCIh8daHSOpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 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 Sun Oct 5 09:10:58 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013040.outbound.protection.outlook.com [52.101.72.40]) (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 3AC7429AAF5 for ; Wed, 6 Aug 2025 15:06:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492768; cv=fail; b=TAcllrXpXjeSSI69drloFVq4oqdDkM/cKM3x6DCM3cd0kTkWiz77XuY1qlUOtM1SCw3V6IiczFWpbtw0hx2qmyBlkqjgI4d68rR4KU929fEaHtSpaH4f/K/K4LG75NbhqxcquN4FjclLIeMwxNJtEADivDJ13b2d403BHcaX5uc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754492768; c=relaxed/simple; bh=5DdVTEUuO1Eulg42J+20+e47xZDJg7jyKaVFQBi63YI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rWmK5e4pbs3QuhJqxlxIEAnY5fEkCiX7Irc2C1E8xUCEyBdKe5MrEKUv6c2lMuWgokNPFfrFbPUEjlmW54IvkwE3aghgZH6TDOV3B3SwOUefA4SkiVuZoBJeZDiG5WcKkcEtlQ2eyPXfKt2HtJfK0sTASEif04WmsDJTlP7ExWI= 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=QSxw6mDp; arc=fail smtp.client-ip=52.101.72.40 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="QSxw6mDp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=exvxeg45oGWHZnIQbe4vl3HVkzO/cuPakTuPueHQYyarcLCgIy38bKaJkPxBXmw1omYz/WM4k/7Y44i1Tdjlp78HdmIYLzCbsW8r2MiZJyvTZhp7smSmzcwJ8icrGiH7X0VRp7JN4pg+eNFTlWM6euMn61db/QiV5ljjXI4LB510CLQYAr8kqY3im6EAddd7YNb7BTK08CCo0CI88+K3vYRamFavAvaEpdLPdbMbGyHOn0jetajGsQpwYD/pswYlswooaOiJTiXKjarzEDPj4OrramCaHnoT1KTxxkAwugFbpMztCj/h1PU4J7y/C90yOFoEQ2ePpcF2cO5BXO+wWg== 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=iptkPTeX4v5pgNcJ//8N+teUDMh9lbYULDaPEeoAjUg=; b=ptqDLbG1fWId0XMdoYYLtMDr/A9a7zmTmgKD/ix+28mVUbCpPJOxgPe/1fMC2TGOazeEBiF6LhS8gnJboGTMMpft6lXXSsx2gFrVZ58pAgGMZnZqGWncfSuZaT9w1fJGBWwKkgU0e7fLs5zbyLbvIb3LPncTiXOX+2NDnow1nfaqMLG0ZRDAr6hovftTft+p5BJq5q4tIDrF3JTVY9WA54yEhws5qxoJq+qzl5p7KXJ/qXf4Ya2vNZHM6EKhyAiTAFP4oWgtDFmhVcFG+F2KvNdBn5OBcAXt3K5KcW6Ui6bLMSSNFfQK0sLiVZkOll0zOd2oPXxuLy3V9CYo/WrTOw== 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=iptkPTeX4v5pgNcJ//8N+teUDMh9lbYULDaPEeoAjUg=; b=QSxw6mDpdLxtZbUUw4ucnaFOA0ws8gfyAwVeUYrTw/I39JQlQ1mjmAyjgY1kgU4/QjBKWhvbq7aA7wal0Tz0gcOIKnP95w/NtPBbM8fTGPC7ZFyjDeOa4C5EYFsY+6ilxnLfaYz2UMsE7Dq6j/ABKl7ZCOgVAObXz60s0kAfLv1fqwipNBRW/vnCZyPLat8CIuQzFfRXgOL/ycARVmIImXF8eA3+BhtLG1kb8vAWlQKVN9msw4UBw7U5FA6Hz8zEIFTfncbarB2mhwYqnsFBT9P5+Ieu+B52hLQftn4OhjVur7DQBM2Qr9UnBbYB9pJLnVPG/tTlhIKFwbpPLT6p7g== 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 AS1PR04MB9429.eurprd04.prod.outlook.com (2603:10a6:20b:4db::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Wed, 6 Aug 2025 15:06: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.9009.013; Wed, 6 Aug 2025 15:06:03 +0000 From: Laurentiu Palcu To: imx@lists.linux.dev Cc: Frank Li , Laurentiu Palcu , linux-kernel@vger.kernel.org Subject: [PATCH v3 9/9] MAINTAINERS: Add entry for i.MX94 DCIF driver Date: Wed, 6 Aug 2025 18:05:16 +0300 Message-Id: <20250806150521.2174797-10-laurentiu.palcu@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> References: <20250806150521.2174797-1-laurentiu.palcu@oss.nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P189CA0057.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::6) 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_|AS1PR04MB9429:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d58c091-8551-47de-3222-08ddd4fac2f5 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?NUbLbwX4afiEPgHSnOdIbJVSKGru1YVrh/ongnXo4JWpK698p/PDQV3XcD9d?= =?us-ascii?Q?nYtCserUhLlQ8l3wh8of4mZjMf/9Qd9nqGpEnyOO/0CjCUmRQPddzckPYLV0?= =?us-ascii?Q?StVjXYxf0384MO2CuMFLPpWImSbk1P9zU95mZ05WtN+AC1tGhnzCU3aCnlbd?= =?us-ascii?Q?26GMtZI0XRfkkLn0u0wT60qIgP4mQU/zwwwI/yWZziCu88XhawyMq+zDv5YX?= =?us-ascii?Q?xcIoh7cJ/kzxnb6RzRnrUUmlJk9WHfkT0gca3XJyCBF8LSjRs20LIGCQkrWB?= =?us-ascii?Q?jRC6nVXdgqwZxsOgNlX5nwtEavMrNUtZkbQu8rPl7LAWieZ2eYV2UnwazwL/?= =?us-ascii?Q?53UnOLsCILvscvFwuu/25s0M7ONZSz1GlII9LbCLR0qzjAYhzacT/NRNiDrN?= =?us-ascii?Q?7hnoVEKv6qss3lm948sbCyHjMjUHMkiXr5iZf0Bm9ccr6RFK9mrwPIWms1vW?= =?us-ascii?Q?C7E3BXF9BK5BKexESsrJS+2D21zUv8vwAUkb8ljkn35XMoe40VioAHtqk9Xc?= =?us-ascii?Q?pRwWv3MQ8OYuNizxx2HpGwQWdIPtJrOe9c3BHXYDWXQszYVgrPcLBfx/4/pa?= =?us-ascii?Q?gzqaMwhboYuRUDnt9G5mb/9RO44g0vUZzh6ieeroUI+BUTlAVLOYP3l9e3/A?= =?us-ascii?Q?VV6qDYfdpxFS5F/vxcHAXg4YHI8UbOXjeQpYiOyV4M5wX3HMfYM2JI2Kbyvi?= =?us-ascii?Q?024ux28I0cb8zm7UsofefEZJGjdXhNQvrOjH8K1NphqzO7iJkMkebTo0KaBo?= =?us-ascii?Q?13SHDtcGc2xv2mGy9rjUUxEWYoh+a4aLbHVtv6A5LOVobohXP0OLrxXb+Wqc?= =?us-ascii?Q?TObFdRZ4ysf3T5vqv5xiDlIYhxB8JmtzDAkwYpAGoezkDjsncq7wJ6rOLB4p?= =?us-ascii?Q?cgC/kdtePIMiBHyWt+OmZfhlm59FquYhCUvBPNAR7CA6I/k3EwxsqdJAxwXq?= =?us-ascii?Q?8iLbyLaLK/8jvlY2saxvo55+N4kaMGAu8/FkiU8e1xvVLvX9UlIhyWh6piqZ?= =?us-ascii?Q?nUvIonRnCBCcaYx2z7sAm4uUkCihfEPcZDk6MeofQd0rm0ILY5bMRPLDD1SO?= =?us-ascii?Q?6aEt94fY1y1obpQUOAXf50Kt2Vg0ZJC4EOlDHyhSVqkzaU3v94S5xyVgnGRO?= =?us-ascii?Q?K8HEU6gsBcm+vbSdWgyiFU9GYuShw1OKRLE4ObvHN3ixJmidBz0L6UZLKe2a?= =?us-ascii?Q?p+ORdgFcLIQtkn+iI06rJCjb7dyJpvIyiXKRKJ2qje/JocX68IFVGr2JGM5U?= =?us-ascii?Q?z1AsCrq0MHfex8CKALsMu+iouY6CqHvMe4mQbUwkyOzURgJQmG5rnKychobZ?= =?us-ascii?Q?135pnLEhVQ5lXbI7nBnMtw+ZBrQuWYqS31731qhrLNDc4PIvUR3jn0NKft6Q?= =?us-ascii?Q?BxZCQIQ=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?9FVnxBtQJRlpMUuomS3tbqjp0EmDD4/bNJ3YX5F64xdzmS1JaeBeAFzLpdzC?= =?us-ascii?Q?lqtHXLk2ZZs9LJecLqoFTJ7fJXWfTvR7lGjKeT+wWL8b6t4yxX+wSj7hgkiA?= =?us-ascii?Q?7h6JUUc2WKavBbJ4tokDpOQxE+RXYeDO2Fxmis7TDXUi/4E9SDS/WDiCwDi/?= =?us-ascii?Q?3OSMDi+4nGubrLCLAT2UfgKYIY8diRZ6d3gPGWYDdDBLK56XBdr1PTiWvkKJ?= =?us-ascii?Q?xd8HkU/+q1qSDaS58aEmC8D6wZUyUGbwzwf27sFop9KTfNkSdmRABhz+nEwV?= =?us-ascii?Q?KYXACVRdi7v2JN/TWqcPVByYWv5R6M+/DjKIKdEEB/Uaasm2P7r44hjhD/QY?= =?us-ascii?Q?tMW+0NjWd/WU3uzJERVlYwpB24LVZcWU+NflSVAbRLeKmzuYSi/NpffPgTL6?= =?us-ascii?Q?oERFJPrP6ZCQ2MKAu70HM2oSQtVtdZy6NHS3K+FRlfLbCZQuSQh7r4r9NFEJ?= =?us-ascii?Q?x/KcFVwvuCWFhrBk35nB3Ypm2u/fBcXpryCAYLpEQVqMJRkXZbdiUMJjpkGQ?= =?us-ascii?Q?2mrhgoIsoVrt7fkuy1SGVfUDkbSSFbZXU1Itpq8yOjanT6kZzy/Fsj72EHic?= =?us-ascii?Q?R/8Vjtknxul0SIw7s7Bw0/OJvK2nbhfKwRbPGS4wwaJLXN+ErA1JoygIfSlk?= =?us-ascii?Q?J1ySMd2Br+TUbOsOHApR2Ory/1bm4WSO/a30+c5DIVwnV9Qh9oUY2uzyAU3b?= =?us-ascii?Q?jUyyjtPbOOltlsnU94TxyHoLiYxXNQuCuupONhuepTvK73bv+xh6rEnJf26x?= =?us-ascii?Q?oRJ+fIihv2Ruwh1fwK00khFLnnCEhGsgvG6Qz3BXq9UA2+nsJo/1Nz4kt3KC?= =?us-ascii?Q?3Rh+VvfzjuJWFPYIhg3fBWJXQu/4K0Tooo55TGbHpYDKqEQZ6DNdx/s5nxO9?= =?us-ascii?Q?Rj6zCkMHmEBMU6vZk8wyaCp8DJw/osqtf3JLs/ROK+0t9X04WujdmzJ0yksE?= =?us-ascii?Q?w+/ep3rpkptUjVLBMFsaVX9s/EGoKlJXyGhWjvzgnDcAkD4RQxyUlOudtjVN?= =?us-ascii?Q?LUgU7r9kb69NCH5cX57NzKiaajIqy6tmNKAjmo7rYuO6y4aawq9IATYpCu4f?= =?us-ascii?Q?m0aX4WH6raXOzYPPas1HKT/GKhxNeAqztwyZOexAMM98o/d4rgAaiP+cVPSc?= =?us-ascii?Q?wO+OElXfURZIlqkWv1/+GNHxL5+XJbKSlYYNaMdk2OS74MAVrTzle457m+Me?= =?us-ascii?Q?oSf2g46nYLGlAARbbpvpfT1960301cCgRgS266kdTxNjgG0i6/q4iUpav0xR?= =?us-ascii?Q?BVylnjtudz3h5tEoPh1PjkJ+jD6swQU8fPT5Z/Gz8EiwJJo5r/ZN5evFFGV0?= =?us-ascii?Q?76EwLVO8npqZmXTLO9sPCBCBSBYm4F0GM1lxed84yIsjyacrL7cA/avaPppV?= =?us-ascii?Q?WTp4g29M+KDTT7dRybx9FxGjTMJlJ/KVa3uSJ0pvV8JY1lKlTsO0Y8Yb9bOL?= =?us-ascii?Q?7nlmo5qTyVhay5ohU5oI66Se7g1zLK0YJ2pS7+JQIfUtzgoBkjQWyPS5ykRG?= =?us-ascii?Q?+3MJBaomKP+wp5M3HHWuNAqFwQb6WdcnAyC5xt2G2HSCLQZhmKdiUBSw2KuS?= =?us-ascii?Q?8jCc06FmO9ETeUNSTF7MBu12Qrl7Bj7O99KNZchC6iKlCodTlVbyJk6gmg2N?= =?us-ascii?Q?ow=3D=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d58c091-8551-47de-3222-08ddd4fac2f5 X-MS-Exchange-CrossTenant-AuthSource: GV1PR04MB9135.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2025 15:06:03.6900 (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: wEQlKoebGf8SBgg2uGbIuuDfG1zHIaQRucAuCsvuzKmpD6w74BsnEUaaCSOSchQEtEqaYJ2UPIGes71ior3wUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9429 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 a31fcb521929e..f0de9edc2bbae 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -18250,6 +18250,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