From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 C248D3D171F; Fri, 12 Jun 2026 11:58:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265544; cv=fail; b=FVSVigCAlSzZ78ri3OcIiIcMmlETxTfGiR4bnFM/K1u1EWGn9ZffP6vq7726U/ijBTAjsjMQte54FcP7B2EidpVXjXoLZwuuDb2qGIuEUO3ni3GA0hczAcSsVUZ8jtVTraWvuJQhqYDh0uLvIl5snSRtOyJOJEbMr5/TSe8fbB0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265544; c=relaxed/simple; bh=xdKnbX/USz/50VxM3bQS8xJotg78rpvnjETnVvMEKHA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=GF0/6NCYqMQd7GBuvTtU27iKuiX82UqqPdG4isuj21wxWXhekZs1N4RFu1sARjxLxg7T08ZCl6CyJvN0vCt5joaqgRZvpUpxVgyJ23DjhlrlPLV0bEZL7Qu0o0t7IKRese21VYGyW+JgcHN6pGk/YycMcFmwrmxaQdRaKsPtKco= 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=jFovW4p6; arc=fail smtp.client-ip=40.107.162.65 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="jFovW4p6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yc+DWknHfGgtI+KI4qFMKCMf7vRRJhtoXU5+HjmLkM2EcXSXZypXA9A2KVQN3edX9Ema6Ktw63pd2yFfQVyl8gcYX9Wj8ZKB7+ie7D18W4cBxtBjFPz5kbNRi2dDoBAy0THrRa3Yh1uqtS6YqDIyeE1Ng2yvwk4eiQlw2Qsn8mH5HqAV7KQMiCHcR+6S/QxyDUPJDQZYqGWI43fyukYCoYb3U64ZVsKpoM78Gr91DyNHY5xAblQG4inTNnMZvxTaTdsFP0ccB7wIAv5gJBJ59NbsSKlfmUNF7qpjadmSvnVu6rH9hHrwSG86+9/94lKPrQ2NkYZzqRZH7vuZACA/pA== 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=bkkMlRHRMa0R1vMZ0wcCMT9hJOHlKA1WbEGTSAhUed4=; b=VOjpLeXgI2VkU8DNFvrEiyOxF6v1ugYEyEqodGJoHhcNKUR6sGtF4T8m0geda7X7i611q4hMIXoCmAX46hqVQ1q5LX8IbcsVW2RfMPCst7y/YA4es5nBUnZ53cRH/7ysAYIjEuYafZAl1lU01xkehgDaKJsscqIHHIRcU3CY2on8IuckwHso65qh+ahvKCk3eB1GTy630p/vC59l9i4PqV81BuALGTSnkaYLhOgKD2g2QI4/d5tyk6/lxH5VPnfh2w4s5zGQMCWcDTwBwIitLcmA11mHT4ycMY5B3wPWzybf1ozHGietl5SjFojupGQQ/DW1Yk/RujFaBCrAsTNhcw== 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=bkkMlRHRMa0R1vMZ0wcCMT9hJOHlKA1WbEGTSAhUed4=; b=jFovW4p6NhFtdRNbXom9nA3g/2DjYSVUkqomVRo/jManslx5fYuPB6jESksDKdBdVVvhSAXBgaAUAECoBRhPrlXugXmbEGDVPKMQo786KWHwqVye1dXKltibb2F5VlEqCj3TsLBu3gIMV6nXm+ilXPUTSGk9VqDe/gFyIOHRqdi+RNnRlW9fbTpuH11lrXPUwxfvRRz5mkq89dtvvdoa3axZG0UTaudDsB4+eShc2veFMXohWL/WO60hQ/oNu1Ofs0nv6YWtSrTr+Ou6jYSo1hrlj1aSYme9ACVYngz10+er3O/8gxdYSbtxqHQEIR5KoLcUjhMAsKEBQmE9OLkU+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:58:51 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:58:51 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , 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: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 1/9] dt-bindings: display: fsl,ldb: Add i.MX94 LDB Date: Fri, 12 Jun 2026 14:58:32 +0300 Message-Id: <20260612-dcif-upstreaming-v9-1-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P190CA0033.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5d1::13) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d7d50e5-f325-4af5-3ce5-08dec879f81c 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|19092799006|23010399003|7416014|1800799024|376014|921020|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: NrpbJRzqHe3wa4N1EnwSRzIJzdvs9mfjB69dX1S30HO7KA7ZmAEaOGcMbs+z0c0x/NANABT5MbAXNn6epsfK2WO3U+VUgRU3B9KivGYeDEmvdi3CEdzOvSLecMySwB3yW8RjBBHblPV42FZKQoF/DJeCGqjVhSGYqblytNIQw7CeZ0RM/arpAZDSQoG+zHOgyjPmlhc1GA0whOi1XfGeNy/y4W4CrbyYoyOoBduTAJUH3wpvhApyz2VBUdmhCYLw0Gdejr1BpV0/8yxrZrRbf3hWMzXpnsxn/iICTX1WWqL8OVDIPLkeqClGH1LuU90JauP2jf3NLD7JJDtI3uvyMWTqEN4t9bTyT8mGm+Vp4yUXLdsJmmw0r236LHIToDix6D+rMADXPFpjnKCoErK6bE1+MxlW/AV483hhHU3QcIkVyehKBc20UUguryCeCT4bAnv1LIh7j+pfucyrdNYBdCcsDDM08YP07CpEDR9CqI2t8AGYKshvI+tHtbjNERINzKPbWZxIfThOW3qeJAa2QU6bHBWzd1hRR0h1NKmHRKNZQBDJ+veAdStO59uTSUrWbIvW0eVjJgnWU527egNtcQV2sttHebbmdKTTXzoVxTy6g5Ht/1bm/KG/VdChEk3Uo9cbLv2iwUMi5wabLDM0+k7cQtGcEbc+gRHtJPiOsnS2jKfCBvcdcNaqfK3CEyZ/n7dXQWh9xPnkB8mIckkACrk/9lCEHAxlpSSthXolBgM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(921020)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SFFxOUJmOXBMeGd3MUJCL0lRdjhaY055RVFkc1FHbDgxbndjaHFNcmM2UjFS?= =?utf-8?B?Q0ZGT1pTZmg1d3JkWlNEdmhNcEFLWW1KbXErNnBNSnJOUHdadkttcU1XU3Fq?= =?utf-8?B?ekY3OUF2M01Dd3RKOUpBV2VaWjRWalgyaFFRdGRNZlB4aC9UaHBRTEJ1Z0Fj?= =?utf-8?B?WEw0WWJtWUM0bzREZEo2SklxT0R4Nm9nSFN6OXJtWmpXZTQ4V1lFUGhMVDAz?= =?utf-8?B?MnIyN2xXbURucGtMc2pIL3Ixd1hFYjZHdnBFQUd1bE1GaVBheldlZE94S2pr?= =?utf-8?B?cVAyaXNxTVRveU5Ka0ltaFFVeUZRZGQvRnU3V1hXandtaHltUm5JZEQzZWIv?= =?utf-8?B?dHRSQUZsVzY2WDRpSEQwb2VXWXJUQi9wZ0FaMzdWa1hKakUxU0tMcldmcnBZ?= =?utf-8?B?dmpoSSs4dVJ3dUJqR0VZa3NjZERaOVpqeUdUd3BGK1Z2YStTM3hkQlJFTEZP?= =?utf-8?B?UzFFNGZuMkNRcjl4ZzcyVVVoQ3VjbjYzaXhWOTZwc0QzcUZFWHROcXB2UVA3?= =?utf-8?B?UEp4akY3UER3S2lzOEdZZGRGZC9mNmoyMUFkZVRST0diSEJET2VvQ0Y0N210?= =?utf-8?B?bXpXSnV4M2dVRHdxN1JkY0kzbnFVS0R0bVVSMzBOVStZNnBFN1JEcks3dnJr?= =?utf-8?B?M0s1SGtUUVA0NG40dEYrWVFJMXVVclJTN3Y1ZWVuTjlyOEZ2RFhMV2h4dTVq?= =?utf-8?B?ZkhSM0lYL3F0VFZ2QzM5ekhaYnZqU2JDbWppVkgyOGVsYVZMUkdpUCtZR2Nq?= =?utf-8?B?MzhQLytMTjlSaGFyaWxPbE1BdTV2N0V5QW40emZ0WHBNSi9YelNoMWpUVE85?= =?utf-8?B?bnROMVdwc2w3aWY0OGhUMVo1U2Z0bXlVWm9HS1pBcWpPSlFtUGFCYjNXaEdZ?= =?utf-8?B?UDdDbGJaTVA1TnNXc1FvT3dTYUwvL2VXaVdmOWx4Z09JOFplRVVWMW01M0ts?= =?utf-8?B?UUFXUTVaMlRJWEIrV2F3blV1YWZaVmdIczhXdFQ2dE5ZaURaVkpxNDNRVDJC?= =?utf-8?B?eUpJVEtEYmZRNkFVZ25FUjBIRllVMnNxK1ZneFppaEtScEY1NWpDWitFdFY5?= =?utf-8?B?MDF2WHFEVkZ4aDVIK2t5OGZpWXNwbDRHK0t0VFFjS0lhak50eWRSSDMzcG5k?= =?utf-8?B?clJGZ2hrSzVOMTRBMWRFZjNWMnR3L0ZtMDMybVR6b0NvTGZuaU9GdzdPbU4v?= =?utf-8?B?R2NJMVc5VklnSUZqbFlXbDlKbVIwb1VKM2xyZGNqVFZoTUphQmZTaWNhbWgx?= =?utf-8?B?cWJFZ0RhT1hnTkk4ZDkrcm1DZTU1YjZESVg3b2k2T2llOHJZWGJyOWwzRWRW?= =?utf-8?B?R3ArRTZya1BxbWNLcGpobXZGT0xDWEp6S3htZ0JTQ1ZZeTdjbzlaSEI1c1pL?= =?utf-8?B?Zm1mQm5sNUR5SVJaOHNDSlgwQlZZbGZjVllBS0svOXRIMUpkWDRrZVdCVUp4?= =?utf-8?B?VU1vb0RYYmI1WW9tR1V2UVIyaEFzVVFEYVk5dGQ0R3F0NVhuUWRKelE0Q3Rj?= =?utf-8?B?Rlh4WDQzRFhpUjNLMkRTV01oTmNoUEZyRFlsUmZXUURYS1RoaWFRZGxIS3RW?= =?utf-8?B?a0hBOTM1cWZSNFFSNTFIZCsxNlJYenVLbVZCYXprNTJkUFU1Q2NSeVIweXlw?= =?utf-8?B?ZThGUU1kZC95NGl4YjhkRCtyMCtmbTRWc2IxTk9kZnpMRXBWamlUSWdwbXJ6?= =?utf-8?B?TG1FVCt5WFhvdDVvZGxVWm4rZGdVay9tTmd5T04wb2RqbnFDUzd1MlRLOERi?= =?utf-8?B?dGk2R2w2UVVMRmJlbkRSOHRTNlFCS2hFL0pMNVF6RWEvbDNsUEdIL1VvZmpM?= =?utf-8?B?SGt6eVBucForUTB3OXdVZEJzQjc0OFBVNzMxazhXYWRoK1NZUGxENkprdUQ2?= =?utf-8?B?Q0diUll5emltdlEzUVBiNVJXZkpUcUtHMXhBakt4YzRzdWhrdDVjT0V5eDMy?= =?utf-8?B?blZvanVEK1dyNlRMZTdrejhkMVljZEJtVDY0UnFQSFpmNlAyQ0l6cHR0WWQ4?= =?utf-8?B?SVdueEg2UkdGU1RnL1krc1NMZE44c1dTUFd5TWFPcGYyOWE4NW5POVo4MHF4?= =?utf-8?B?TUVoSy9mWE9CZDFleTVzd0RpL29Bc1ZLL2VYK3FKNkZpVnZEVjlPMnV0QXo2?= =?utf-8?B?RzZFVEltT2NrOC9oeld2YktlREtsbEpUTHBzTk1XWnNvOXEvM2Z3ak1FR2dw?= =?utf-8?B?NVhJcXZBVHUyYXRaQjI0SmRrRmE0MzZQWTJsM3VaMVA1TUZiWk1NMnZ1bjFH?= =?utf-8?B?a29FSTlMcnV5aVhjd1hjYzE3c051NEltTGpyUm1yL25sZ0pON0NVbWlVRkR4?= =?utf-8?B?NHBRY3daTnU2dnYvbUNOWHh1c0xFOUxhb2xLMVlJblU1THZOS0RTVHNpc0lB?= =?utf-8?Q?Q3SWNdSJPytmFbMU=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d7d50e5-f325-4af5-3ce5-08dec879f81c X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:58:51.4125 (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: g/BnZ5BFirGmIeSoKyHRY9/FPu56ow0GbN88JzZ5wKlAhn7TBQvZmtMG264D8/TMQSNpDLALo+nFJA1v2KZPJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 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 7f380879fffdf..fb70409161fc0 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 @@ -78,6 +79,7 @@ allOf: enum: - fsl,imx6sx-ldb - fsl,imx93-ldb + - fsl,imx94-ldb then: properties: ports: --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 CB8EE3E8325; Fri, 12 Jun 2026 11:59:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265550; cv=fail; b=CR/SucmpOT2CnzQ8AtfAtuc1BGCXrwShDgEdgEyeaRIWodmwyXagULs/bvnNCMMGSdqxFtZRcftxxRUbHRGgDh+vZmqsgOK8rNv6Q7YOPTbAoUeXcJtDenYSrUwTlPRzkuZ0RbH1AV39i1ZzTzQLR+ShRlJXkvirIXq/wBxI/ZQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265550; c=relaxed/simple; bh=aeAVV+pp+T7/rVHXmtFH5Pz+dbvWn2brDkE0QuDceaY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PJtZU6iAFEAqfcfelcW6hsXyxsLxaQHgHcXNVkW0ncpKUxMUvMBTs2KOcpC6ygrkYZSYr42KZ5EhpilIkSgMtElDdMHTk6TIPG2/bGvPCj39eLD2+4qW+WBB3XMwM6K8wXVDNHM4A9dGotWfxbg3s14g3xD3Ew4h2t6FqnkRX/g= 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=w4op48/z; arc=fail smtp.client-ip=40.107.162.65 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="w4op48/z" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wE39NFqUbVfxuohF6cwU0JxwgElaWUTre4+AIUqFxd0MVF9BFSeamfsNuxcgccN+cDI7TYaXxJn6I5Qzo7QMnrSATmEhYu4vVNc5+0L81M5YCucO4Jv/ElcuvXWqHxD/xWJXJEQ3RispTUagwxZukd+2OIkReovGeF/+OrQOs2OZJxRNv2bi99rYIJ/pExpoolVUV9RQT6NwXELbHjGVLqRBkt6SthH/b1LReWCMXg/G0Ic7i6++hbE4QRsWhaz+kZD6T2KYKZUIrX8rjmaXhGgf2Mz1XkbtITDnAezpgRAPOlLTN+wi2b3HSjFP2h0oy7jKzSNeV7+t172PWKsaJQ== 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=kaaWcbZ/67o8w8elnb4q1GWHdADROOHKCjbaDP9WJwU=; b=UQbBYH2XYhYMRcX3UNXgwLJ5WnT9HWVMqgAyuQRTnIlCURPA4kuWdyh+EelbX6zWoE9k6Q1CwIe8EQtuHc2C1Ymsvv8fuvNevbttfJ0/pyTpkfDlSK3hzmBX4FIAUSOzw50G3C00qKpdDDK9DjHz5KYCwyDZD9bGwjgoM+PbAEhT8BYwI3J8vYQAM9Unnvw/+1pTS8GPl2GTBOfrubSLhtDssc89TsPVbjvnjYZlhP5lY5taT5tBDw5eG0ENiQVaL25gVDAabmqqnSMfqW2YN3UGBet4AOsl/zEBq/2FNynQ1XRYKF2wgaMoDYljk2f89cgEh8qnxnIfibO3i7T0Yw== 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=kaaWcbZ/67o8w8elnb4q1GWHdADROOHKCjbaDP9WJwU=; b=w4op48/zUnUxuqWqgTez2ROFl9TsZaA8Mi5h7PiVu+0lM3at4oErm+xOPkT0lXGNHwM2zj9sQPJjEI+rtPB9mQyZMGQ0EiLz+jZknb5EAeN4TIZbczoDpTehW7JR6tWznN69swstfu/fOwbZAqcln3cFjes5xCEhzcdSHN5O3RQQIssa5YZoypufP3Vj+Oj+RFkGdL3sFxE9cwE2gnh64qqpGrn2vo+Dyh1tWQWODMgUN9GZIZmnECdHzTw97Y2e+Q5cHj8gT0Xh2XScM6qDhkudo94XlOP1G7oS8S2jaRW+SAEwc2jSnqlOujv5MrB1o5BAPn4zJWq3UutL7RRorw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:58:54 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:58:54 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 2/9] drm/bridge: fsl-ldb: Get the next non-panel bridge Date: Fri, 12 Jun 2026 14:58:33 +0300 Message-Id: <20260612-dcif-upstreaming-v9-2-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P192CA0032.EURP192.PROD.OUTLOOK.COM (2603:10a6:20b:658::15) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: c60f3e92-cc04-4619-3da6-08dec879f9fc 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|19092799006|23010399003|7416014|1800799024|376014|921020|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: TohJrzni/Y1XxhMp5XmnxJeKQ/JyFARjIuULj1n2V+LVYmus8asgvWLoW70jVcMBitxq4ckRUZxiZI0UBJyrkB7+0tCPH7IbMLBPzUan1j/ZdoDxpMDShSmmTRxTNiRsh64q1QqUEYXnVkLa3zgqI6TP8BmMFrvMPmFF8iZupLiRmOMG0t1RlcMdpPz6nCMnj+scBZ839r+cqYRDO+XHcLk6tLdE1BF6VbBIDPM9mG8UnVo7hUnVp7W7BP2i54myTBypphRMDPYwuQR+cI9goJrg1vRjQMiu4Foe7zH8RGpH2kvar3ZS981YOSFBRYAf3xgCPT92U41cyFmksWiyOoheL0n9Zr5VeNjGLepJaydsaYVzWVM20hjLNQHNwnelUbCt5l1jPbJtBIngJuUkoQCLig1Q/nd0h99nD8iZol0QqvlkvicNmQhlaTVU6UIiQF/vflPK9kZV47V3ee+pBz7DVRzAlw+k6KlTCOzHPEQ+RvT0m7M9/LIzSYPNfP3UyAdpFojZM/AfgkGFkF3GlHlyPs72zRYF2uGaJkC/RyfrGRefNHtxD8qKLq+EX0NR+UjDPWohzB7YKkyz0N48p4m7+5ooy/NPOrGw50KtgxO4cfZeXkQ58JDCIglOWMCxAh114Ytj88H1x1/1zrFDu4tzEqNpk7WBoZksVmSg7b/etj5JyvP206cJ6xKVPcFIJ/HacrtCkg09JxWvAfz4zUZ9/tPV7xe3KwRUh/H2jEw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(921020)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RnplMjRxZ1ZPVFNrckoydkRPY3JYNzN6d3FHaUYvTzk4MnF1d2h6dDNpc2JT?= =?utf-8?B?WUdLQmNmZGEvQ09VQ01URjcrR1ZaQWhFZnh4RG1RRjVJRGFzUW9qcVBvcWw5?= =?utf-8?B?WUw3V0l1Y1FGcE51dk04YlFEckVmRGlyS2VyYU9HVkxRL0xqWHNPaVI5bk83?= =?utf-8?B?cEVWaisyK3VYOWFCczBUZG81YzNBcW5Ib0NKaEkvYlVwK3RaTGU1Rm5SdG9N?= =?utf-8?B?VzhLdlJrUHhtOVVRU2ZLcW5nTkRYOGpSUFl5TG85c1ZXQ0tzdWwrT2NPeGZq?= =?utf-8?B?OUpUOFZiQmdUTzFEdmJjd2pnTVhCZDZGUUFDajFsQk9SUGJUN1IrclNjYW1M?= =?utf-8?B?dGsvb0owWUJlTndKeUUzUFYyNE9DcDBCYXdzODM0YXBVTWErYWdmWmh0V3Z4?= =?utf-8?B?M0ZwNEVKWVF0OTA4NlM2UWlSOTErN1pBYncydmRUZHBVV29odFA2QlNMMEdE?= =?utf-8?B?eDdTcER0bkQ4TXNZbnYzRjBscmNaaFM2aVF0SXVuZWticyszUTJ5bVVZL1Jl?= =?utf-8?B?K2g5ZnBjWEV1U3AzZWF6R0tQcHZMVTJyYkpqUlJVSnhQN0I5YjZWaEU2VDB0?= =?utf-8?B?WThaWmprNHV4RFh2ZXBZbk9hUHZWMVVBaC9sczFlcys0a1RhQUJjcy9lOFA2?= =?utf-8?B?dFBBQk1BcDcwdk9uRkwrUitjb3lrbHQ1elBNK2g2TnBiWEVROVBTZjRGK3gy?= =?utf-8?B?TXVsM1hFRXRXUEp1eDRZVWVaNG1TRnRwS2V5STBQcWhMS1phMHN6VEFtNnox?= =?utf-8?B?NkZSWjk1U0cwSFRKa1VCTFZtLyswNUVudkRXUUt3dVRvRmQ0ZkJmVXQyZml6?= =?utf-8?B?c3hNT0FYV1VBd0t2UW9LZ1RTWUxxdHlnd2huUEUrcDhvdlIyMkZGUDJJeEdk?= =?utf-8?B?OTdzMTZnUkw5MWZvcXJDZ1JSSDlrekUyVHovY1EzS2J0ejFIUWNkOFJSc293?= =?utf-8?B?UXRvUUtyQnB1ZFdrTCsvR2tMdnRIQ0Z5eG1XbEhCbHpnaHhwc2JCY3BmVVFN?= =?utf-8?B?RzlwNTRyQUJaSzdpSlBDRFp3aWZOaGUvZG9rUjhnLzFhUTY5MWJQaTV4Wkxa?= =?utf-8?B?YUpMZ2p2QnVmSW01RllWTWk3dmZRaXRtYysxYU11TzRMQS9ZcU10RW40RDJZ?= =?utf-8?B?ZDhtWUFCaVlFeDFhYTdwb0R2eW5Ca1JnaGRSeFAwOVhsclRmT3JhcjlPeHR4?= =?utf-8?B?eDYvYi9MSElZSHFRVnBWaGpJcFZGdlFrK3EwWWpFV3RXSzJxVXQ2SnlXWnds?= =?utf-8?B?cnVpQVR1disxWDVxVEFMSFZ2L0J2RXVxUG1oRWhXVVFuK2t6ZFdDblBMVmhq?= =?utf-8?B?Qi9aeWRSZFQ5M3VBSnVHb2NpdnA3bEl1dDlmYWdIRGl4VDNtVHM0cEdRWDFE?= =?utf-8?B?ZENMYWgzSU00Rm1kbTg4aWdQUmMxS1hKR0FyRHV5TTRJNjZrbkdvVFB2Nkl3?= =?utf-8?B?TUhwTmtCL0VQd0VYT21yR0xlYVpPeWIrUzJjVFZ2dHFLeEFadEpLNjljNUE0?= =?utf-8?B?WHJncTZzVkV5RjRiMVYyTXJHK3YxbThqb1FjTGJoQTB4TE9VTWxGZDE0b2pa?= =?utf-8?B?SllUUFRlRDI0czI0a3RsU214Um9SaW9GeEpvOWpnU3lxMklGR2FQSXlmL0FT?= =?utf-8?B?VlpDNDB2Q3RwWW5rMnJISXQ4NjE2VGJ4RTZzS2FGOGEySm1VQmhEY3ZuWGsz?= =?utf-8?B?RkxoKzNsU25EVVJ0VnpCTHpkRFpMQldBcENYOXZMOGJnd0lEYW00UjJXUndX?= =?utf-8?B?RS82eThiZDZiUVdGNUdIZUQrU0lMVHFReDVEYmhWMjZhOUVDWXRIYUlwVWph?= =?utf-8?B?ZmczalllQzZaM2cwV01sN1ZrWFBtaWhqL09rNDRERGRsMGJaRnEwVW1DbjNN?= =?utf-8?B?b0IrbkRROGR3eFJmRGdOdHNkMEVGZ29kVWgxQS9pWTE2TGRUMEJEWGlhbHFT?= =?utf-8?B?c0hyZWpLRkFHYm5ZWUFhSFA3ako5cFNyZDRSTGpTNFYvUFFXSXJJVzVibmlx?= =?utf-8?B?cVlHeStMQ09UWXE2ckFoTlkzM2VCcEdBSmRSbWcxRy9WQnc4N1ZDaWtXU0pP?= =?utf-8?B?OXVxd1pMcW4xVDdkbG12M2NVcWJWWjZmeHYyejFHakltd0g5dnJWb2hXeThJ?= =?utf-8?B?dzBzL1ZTVUYreXp3eTYvSitCcXpEc3V1QS90UUZuQUNmaE1QWllCUXRsTGxT?= =?utf-8?B?QThJYlVnZjVxb0RJR01kRlozUG10R2NOdEJTeUx0d2w4cHdDUG14YmF0Z0t6?= =?utf-8?B?ZXBxYnRoWWxIRzByTmF4ZnlyUjF3aHFpNUVsWkpab0JSK0ZnV2hNOVhYWmJO?= =?utf-8?B?aVZaZjN5c2hMdFpmYVlFdVA1ZEIybDhMaDhUT2RxM2xrMDJxWG5mclpBTDhq?= =?utf-8?Q?HvLEFFBdq4VX/Ty0=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c60f3e92-cc04-4619-3da6-08dec879f9fc X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:58:54.5732 (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: HbTKNGlTUrUM76qD8SzFab/WyYqI8wpO9bW8dA2kgcWKiC+eIKbQQAYGW/kCynVWi61OdbbuJTqryrj6+KjTKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 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 --- drivers/gpu/drm/bridge/fsl-ldb.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-= ldb.c index 9bfaa3f933709..bd03c36ee696c 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,6 @@ 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 clk *clk; struct regmap *regmap; const struct fsl_ldb_devdata *devdata; @@ -119,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->bridge.next_bridge, bridge, flags); } =20 @@ -296,9 +294,8 @@ 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 drm_bridge *next_bridge; struct fsl_ldb *fsl_ldb; int dual_link; =20 @@ -321,36 +318,32 @@ 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); - if (of_property_present(dev->of_node, "nxp,enable-termination-resistor")) fsl_ldb->use_termination_resistor =3D true; =20 - 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); + next_bridge =3D devm_drm_of_get_bridge(dev, dev->of_node, + fsl_ldb->ch0_enabled ? 1 : 2, + 0); + if (IS_ERR(next_bridge)) + return dev_err_probe(dev, PTR_ERR(next_bridge), + "failed to get next bridge\n"); =20 + fsl_ldb->bridge.next_bridge =3D drm_bridge_get(next_bridge); =20 if (fsl_ldb_is_dual(fsl_ldb)) { struct device_node *port1, *port2; --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 202F33EB114; Fri, 12 Jun 2026 11:59:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265555; cv=fail; b=k9L0fzXfUUk11yp1OZOWwjLJgnv7LpmKuIUgG1hY8Segsp6lxWYEj+7kgz6y81+hxJUe1qNyvUKJuDo+E7vAUsBFIiY2STcac8b6wvdog1/7js9PLi7B+I8l3qKfZZsms5Jm5MbOgc99reHxSZAmTnKrSG4vX/x4dVuAZ/i12E4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265555; c=relaxed/simple; bh=OI8kUuF+ShaPxGobaqyOfqbIYMFa/akn45pJtsQnA/8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=RJWz0SKsIRShQimzUQ7s6VRwizwE6RI9uqze4vBiGoKTrjkVesmAvi1ZdxX4fmcwM8/zMNhpISqNP3/FdmlFjrTugCrIRjd8dn/k/GgfudWlAVOvGtLQ+Z0Mh9xXRzoICvx2nJWKYjhGSwu6oURuieQqPayRez0LYoYMTEwOcWs= 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=H3merzBt; arc=fail smtp.client-ip=40.107.162.65 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="H3merzBt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TfRw7GaJUB+JIkRiBYaLZ0WE6171yz5+xwKQtKsgJriIIkUZD/1sV786cQU1reZcsB0XGzXjfButH1MuD6qZBiNsoGGy8MZGsOvoH3eohl+hAaIXG4CM7QnJgdbT9C/qeMYtg8xBtJoia+OxwqBjeWch9rryvV2PBuCdw7oBvQB33NuoJOnuYOhKZ87fwn0guk1BD40o/66iTUXtDr2UwknkLIJyPLsaucmMusq6PYUH2mHrKHl35shu3tDAaBv7XDJWYFHi3+MxHRHk5VWi9jAFlmMvOTobvQECD5Q0aruzeu1yGtNSa4hwr5ukh7+4ukGTK0BcijjidaYvhyP1yQ== 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=D/ZnI/eHyY4hHBGOKkvkNQBCmWVOs7qmesiPAiM2XMo=; b=PvBYK10rIbmhvYTp+t0r79vu8hfKmxpjhUCY72wDXGEDWTEmVU0h1fbsPXdIxXWXv1MC4ApU8EOPvE6gmPwZDAvm2oIuqghuqJuYzLlPeB5hALUy52rl0INO4i2xjF3Ls6wA6EXp50Ol3lW5hgdUNOIDXE4ptAZP9Hv6vLeCbE497acNpehozjJAZF49OWt1lgCi/nuFSDwojVKMYcFv1TxcVoZwSYW1saCNgnTTv1J5uQEDNvrNUrbBC1EMjiu8okKA/3dQT1sWVD6i48yx7po9WTFz+hmUAOmUzJeETdjVjMalvxWUcVpSat87+L9XFjtLsNOrvBppCofFlJdpAQ== 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=D/ZnI/eHyY4hHBGOKkvkNQBCmWVOs7qmesiPAiM2XMo=; b=H3merzBtXGe41C5n7/A8WElipQl05jpkLx2HWGa+kFhFrSfP4xY6lfyqNH6N4JhQeihniTQXEm5Xdn6RU/7fce1WVrD722KrYUXQ7KUOx1A9RVlSon3P+frIR6IRosCaAgolQLUjaNKaa7NE5XRTAgJpFCQB246MI+zT1HLrvdBJykx0Yn/cCCM38u1S2kezX0Ld9v2eO4UuK2jCf9dPbzdBpuIm6mpmtnamFYiSX/kYD2N8SOaKpjoZ8qqu0Cm2povgA+IqD+hm0T2ctYWUhGt3LKp1e1EUben5iRiGYy9saqEgc1POmt2b+YmZuGxZwfh2ibLbaCfhBTQJ2+uZQw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:58:57 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:58:57 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 3/9] drm/bridge: fsl-ldb: Add support for i.MX94 Date: Fri, 12 Jun 2026 14:58:34 +0300 Message-Id: <20260612-dcif-upstreaming-v9-3-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P192CA0041.EURP192.PROD.OUTLOOK.COM (2603:10a6:20b:658::11) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ba10875-b209-48b9-658d-08dec879fbda 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|19092799006|23010399003|7416014|1800799024|376014|921020|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: f+zJ8IBXa5G7cCUe/X9RVZF3kQSk/Ijwpwlwpdcgw/+y/PEeh2NDb/UEDMLEAEHhN2OyMvlmq3sBmLa9Gd0CV5Z2J7iwTDLIs81VCJxUr2C1omo6qSvpIHUF/wyUaJgOQmNEYzrFNn8BkFkdIj0sVY7vDCstiMW7xDo/uE1dA2VmB/qBeYqV2eSb42pzfXIWEK7V/pVqTWyyzc9KV0prp9zukroSyt5RNOIPnFacxIgQ728UARy7WrdB6Xbggp25qmFbhC38ihfek+XOIasP+WmLrLVDQqGEC2ra64KemteFGRiOlmqcK0W/UFUPFAOIJEAh9R6HUbgue11T0Te90f6p3/ITKL+T8U6oByZ3I+lGcJQHZp5cdYcRqarre/WOqFIxauGL+lGqEAivM1KPASy+a2aNPxJih4W2XFahO9J+T9fyGFXTAbbfg2k0E6A7e184n+Fop99KBHbBNXhRoDirwovJE12mhsklVD7cyou1RsgkjwQI4rgeLRLYfAeOK6pYDTjMeH1avStZEwUSxAoWsr4hqynEkZzvJGrGVjX0cR45TAUDujFL7IBi9YiqFMrdVvDttpFjltWuQUpNxEar6ePeEgKzkZstzFE4w1n5rXfnGnh2maI2yvlLcKVm1Q/g2h41ovnfhIIU/nJ4fZ6Q4J8QDKooN5fJmzpnrSqQgwj0JsSmM2sy4E0Jk8JA8t4LJwpgh5blNk8UGcPN8SBXdIGMhejNwXlSKv38fBg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(921020)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dVhQOGhHellGVko2VHdCZmF5TUI2bnRuUkdobzM5VUVMd2FQYmR5MERmcVZ2?= =?utf-8?B?MkhRazFFRElzRGtVOWdjRHhTWWpGNGROLzA0SjJocWwzL3craWh4SWVPQzY3?= =?utf-8?B?Qnp4VFFBcXNiUEJLUFBPMkJnYjZnd3ZKSlQrWDVkNVNOWTdHZmpwdFhyV3B4?= =?utf-8?B?UHpCY0R4Mm9nY1hqU0gremtZaWtWUG1EVnBZbFNvem9vNnBURGxPeXhMS0VF?= =?utf-8?B?V3g4K2VoOEdaWU5MMTRrUk1DMVJCNDVWYmUvUVF6blhzM1F6YThIemRTd3ZR?= =?utf-8?B?T0ovbGRsMnNBY1hSRWhKT3BhZmxpVDhsVEl0ekxlalVBbENua1RZRFhtd1cx?= =?utf-8?B?bDljMWZCRVU2eXZkUkJ5aWV1OSs1YUp3RnpkeDFET2lWL2lLR201Q1dTbGNR?= =?utf-8?B?L3FKeWkySzJGeWNlcDNiYTg5cEkrbjZ2QlZua2VNamIyUktjam0rVGNjdWYr?= =?utf-8?B?OHZQbGdRVUdNY1JjUXlYSUFYUjlIL3Y2Q0N2M3JaeHNWTGZUOHZIc0c0S2Ir?= =?utf-8?B?WlN4TWJZSzhuQm4yNDVyWE5OVzZHTkNldlo1RFJIMnZzaVkvMmZJZGVHdENZ?= =?utf-8?B?WG5uMHBVYVEzOGJpTmRUTWQxTHpnRTluVEJ1dm9saGRhM2VvemNVNXk1WUFO?= =?utf-8?B?azdTZE8rbjE0VEF5bHBSYjRkY0hxazVSMHRzdlF1SDNTaWwyUk5hV1pJU0dT?= =?utf-8?B?c0JHOGo0eHV1RmJaTzVHa1VzWUdGV0NZL21FNERZLzZyUEdXbjkyYXBPWjV1?= =?utf-8?B?L3piaGRDVVNqdTVrdWVOOTFvbk9VVndYSEkzZUhsTFZIY2JJU2Z2ZTRWd25x?= =?utf-8?B?U1RZWXVodldkNEsyZkhVUEtGZkFPcU1TL0xwaDU4b25HZ0hza0txOGNnc1lO?= =?utf-8?B?V25qNENHNWcxTHMrT0MwaE9yYURwN2cwWlRhN3JJb2JqbStTTXN5K0N4aWw3?= =?utf-8?B?SFc1NTBVd3pVWXBxTm9sQ0VEOXFIM0ljMkF4VGRKZXo5ZnMrWnl5bVFTNE1U?= =?utf-8?B?Smw4TndMU25YKzRZZ242M0RzVzNndDEzcEJvdEVSNzZEN05BL1lwZi9xcnB3?= =?utf-8?B?RHc0QmRzK3BTYjRldXhReW04VUl4b2NuSzJrWmFlTlYxdDBRcEE0YlAxV2VO?= =?utf-8?B?U3RaazZrZDdjZU5kcWZDeGM4VTE5Z0c0ekNlTUtDWlEzNG1QYmtpY1dOZTNh?= =?utf-8?B?UEpUdGhRQjFWM2J4aVhvd2Ruczc5MUhHek52b2FpYkF4V2Y3enQ4a0RRRnFW?= =?utf-8?B?dDhOVlltdDJCZVIwcEp3TEJDTEx5TEszRlR4TEwycnlmTE1DTWFZZXllV21R?= =?utf-8?B?dkV3VXIzRy8rVTZVRlZVMjEvL3g1ZGQ0QWZ5M01BV1hlanMwZDU1dGVMS3kw?= =?utf-8?B?bGNjcFdReEs5bzk3MzJzWmVvbWp4MzVwZDExV1Q1YjZ4V0Joc2NCTVhvRyt4?= =?utf-8?B?TDVpL3BOTy8ydzVYQnAvRlFocTVzUHAzT09wbHgveDF4SWlXWTA1WDBHVFdy?= =?utf-8?B?QmhiTDdDRStVdXZycUtURFgxUFFnWTA4VUQrZFNVaTNHZmQwdVJlekJXbVE3?= =?utf-8?B?cElXMzdvQzRFQnZSL0RIa1cxTEJlazF5MjhaalUzb2R3aXB0ZGN2TXBsOTJw?= =?utf-8?B?bkowZlZva3ZHQ2dYT1VITEdQWGNKV2VCVm91cCt5T1dHQ25GU3c1Z2hSWTFD?= =?utf-8?B?MjkxMXlPRUlQY1M2S3BXWHhaQzZLdCtNQmRSM1d1SisvSDJ4QXRkZTdoaWJa?= =?utf-8?B?NUJRRFZBRU5wRlNQdjlSM25TUmdvVCtJZUZmdTFJSDgyTVBBeG5MTDNNSEpT?= =?utf-8?B?L2hoaFlXaVp1SHIzWllNTXgyNkdzTlV0blpvbFI4eDFOTVF5UU45cEQxejVw?= =?utf-8?B?NDlXdFhMM2FZVXJ1d0ZWdkpFclpoS0I3a2ZUNFpMN0JMdkZ6L01lN2pzZmdO?= =?utf-8?B?RWRCcXJXV1o1OXdkRVVySDdncENCOG1KUmd4YU00Q3dGZFBRVThmbWI4dnJV?= =?utf-8?B?SWh5N2dwU3FmY2NUNlBmSk5mMXVtRTN0SVU1VitrUzRSNkdNM3QreTRZUnI0?= =?utf-8?B?U3lkd01FOVZNc0U3VDh3WU44QVNlSGs5aDU3V29MR25XVTVvOCtkV1BIbC9H?= =?utf-8?B?czZxUzMwNk41RXhoK0VMQ0RQZHpGRFo0cU5qZWh4YlZmbDlmeHJiTGViUXJG?= =?utf-8?B?Qlh6QzVrNXNTNGFQbzIyYlZSUkZHdWMycGF2OEtMUnpueWdzNEJWbFloVUty?= =?utf-8?B?dGVXaHZWVjBzZVhEUGVQSjBDaVprVHlhcGh1czhsQVRjaWwvVFlMeUVqQzl2?= =?utf-8?B?Q2ljQTcvOWFpUm80eWY4OFY0dUNoRTk3eDU4dmoyZmVFWktDaFFGUWI3MFlR?= =?utf-8?Q?OpKFxpqqXMjEV8iQ=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ba10875-b209-48b9-658d-08dec879fbda X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:58:57.6946 (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: yrlRZQfAEYAGsNZ5YtfY4mvFeiP6sPrN03nnj/dQORh6+hoWjp3YNoEA7X8z7SM2VWgITkAL/qs658BGlx/wvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 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 --- drivers/gpu/drm/bridge/fsl-ldb.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-= ldb.c index bd03c36ee696c..b4959f654f2ac 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 148500, }, }; =20 @@ -274,7 +285,7 @@ fsl_ldb_mode_valid(struct drm_bridge *bridge, { struct fsl_ldb *fsl_ldb =3D to_fsl_ldb(bridge); =20 - if (mode->clock > (fsl_ldb_is_dual(fsl_ldb) ? 160000 : 80000)) + if (mode->clock > (fsl_ldb_is_dual(fsl_ldb) ? 2 : 1) * fsl_ldb->devdata->= max_clk_khz) return MODE_CLOCK_HIGH; =20 return MODE_OK; @@ -386,6 +397,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.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010017.outbound.protection.outlook.com [52.101.84.17]) (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 9A7183EB10C; Fri, 12 Jun 2026 11:59:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265554; cv=fail; b=ehVjGUd1KCOQxTeaMo5I15ANT+U32/rgCapTx7R22q8qAiRGhB0Hw6KB8hsVnnW8mKXtaX7QivVPliEh2r90bHumngZNOvlK+pODan484VeYswmnO4f61Yt1vOv1EwMTFd95HXV0tUlzFdGTV6wCy2/v6iaeZjQSlHZLHBC+54Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265554; c=relaxed/simple; bh=OtE+FnAo5Bjwt2jVjwYiWFGMnLTZLBnU+duyJY/aArw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PNwsSzd8joIJDIAinKqKt4v/Ffrq29iYYwo/qvBAaRcy6QuFRX6PWc0dDO6/7sRKD32ZFjYVN5+22SI63evVBQ/+x6j0cE1XtcdlioFFaY1Fsw7JFkad0RHRpkU6/pCctGbAnQGIGaOPKgx83xuOhv+JV+5mD+yicRAzYTjD5Es= 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=R2gZDuQ9; arc=fail smtp.client-ip=52.101.84.17 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="R2gZDuQ9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f8XzN9IzejiTpz0ZMq5V17EnZUjUxPLyPki/9EBJ+zp+zw0vsFaZwveiqeOLJKcJZXv/FeEZDLr/STLRk6137efO3jUtVZoGC9sDM9KD79qQIfG1fauwXUEIIvYUk8vCUsJzrD7Ecqa27UrbOsT3xon9nOWa02YcHmAJsf1tkviQAzZkm+iWfKg9mVuJSd0XBQ1jPbsSfgZIZequg4MwhKlnbXUzJBAM0rjOr+LAT6APNRwSBQA4AvWoP/ePp8GO74CaJb4mhUgNsrgYccy/2BUlPd9iBqYRXsg71sCTfBMdeqwYmyGS7RkJGUk/QzV46T3/5hP4jeShyIWyglYkcA== 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=WSn3txY5Z6Jpx6tefrFF8VqHR3CjRNIQrj7Qr11jb9I=; b=KG3tyH+fdGBoQPKI9pBxXIdxt9b34LCgw3vpJu5q07xpw4ykclgBMeSLVPu+bHwlvOtIFkQRET5gh2ESVsPXnOTFSkEYmcN/XZ5f1wWR+V7dtjxiXSE8H0uqu0WZ2nQ1QCVRODyjD8mB1yM2gOumz2YcIqm/E/EuaIsKxRXMj2Km8zaGh9hbvjlWnfH0aN+zAq0Ws8NADoc3ctkYH4yvJebqAg8L8HsENUHLeN0++TPwpHNrjmCpMbTuwH2y672BdmrGvXcjxAAY/ynmeCfdS49mMPm465yXAXxdSD6Wrcu40UYZ5TjEcYiRRUyzDKhILXpWCTecyeUoy1Rdbpo21g== 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=WSn3txY5Z6Jpx6tefrFF8VqHR3CjRNIQrj7Qr11jb9I=; b=R2gZDuQ9LthwOouXCnS5T6dv6mmXNgtUtEd9taQaKSv2Xx9ppciA+t/kiCPgXQblN8AJ4ny2j8RfHNHmjjUVCFdPj5wdN2Y3f3yVh3jEQwvd0h/LZj6emvP2slB8Aept8SCPqKA8vf/TleDjJTzmp0PdzxkL1fFTrdYm934jaBoLZc+jMfCUIeaf9kMFFtV8SRc5W+r5dr7N6lsk3hgNaZMB0tGpTIFNeGQgbW13taBptqIy7a7K0Ejch30Nrzx22/CelK556Wy0s7LOmBilunXJstAo+9C+PECntoPmWitzYK37xIIIYhpbaMMRtR5X5uD28r9He7Bgvwu8EOt/Ag== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by AM9PR04MB8273.eurprd04.prod.outlook.com (2603:10a6:20b:3e5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.11; Fri, 12 Jun 2026 11:59:03 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:00 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Philipp Zabel , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 4/9] dt-bindings: display: imx: Add i.MX94 DCIF Date: Fri, 12 Jun 2026 14:58:35 +0300 Message-Id: <20260612-dcif-upstreaming-v9-4-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4PR10CA0010.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::7) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|AM9PR04MB8273:EE_ X-MS-Office365-Filtering-Correlation-Id: d12c17b0-82f5-4278-0db7-08dec879fdc3 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|1800799024|19092799006|376014|7416014|23010399003|366016|22082099003|18002099003|921020|3023799007|56012099006|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: tl1luNFyAjqc2Eqnj0GG7c+DrARL2EyRN2LoKT31owMH/Xtluon1Jxj4tnM3GpUNfzCd+gu3I7q56nC+NT87XUzdEOC/VJKUxQNDCB+LWGiXFYY7JZBIi+SROk9VKosdmq8/cokjKzMs8DUguUOp6Mi7EjzC2SIM7H5h1co4ugsGJrRcyj8rX2bO+kx6PZ8LOk6CceEtmcuOiakSuzGa+UQUuSAJf8lsCNfq72S+tzySCbgDGNueYBp3BhAwXkOj0rvIzfZ3z4pNv2Tplr/GwQpYtOQk1xxDtPEY1CIDhmT0ybcBRb8uhQiZsqSqg9ZXVUZN1IGydb1AmN3/KuNgrvGiFYTjl+DcCFh8YO7rijXOKend2dT7gXAl+TXY/wgCp6/rDYyyALd31pRSZzSsiNw7MtXiqF6mryRkUi8OlyAIgB3/0eRIyRGgPugHloT+Hkt2vbV5XgHf2l3nFrYmZRuldVQHzZFiSLjnM2MpXoXw2RgGNCRhu+rEUVm0vi/5xThZeLGdtuAZs0yqxAG3829A3Q7EytpDhnsUh0pLWg+2H1Q3hgMMGt8RfWLuu7VZq0Mkb2KeBQrwNb0tiUFX26qMcMhglIqKkkdMC32F7TNDGCyWvP6XUPxt01P7TLt8QQN9olu5eHK1Uxhyj7K3W+2wr75OalpJxHGChniKH28CbG3e2u1i2jvcygQyDicY X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(19092799006)(376014)(7416014)(23010399003)(366016)(22082099003)(18002099003)(921020)(3023799007)(56012099006)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SnVFVkJmaTBGa3BxTFFQdE1abEoxc21QVSs5S3REYU9NUjJ0RTVLNVBBZnl6?= =?utf-8?B?RXNUNFVvS3J5L2hqRXhXMWhOcm5zbmpXTjZNWVZHWjNOR2dyTjltekJOeTZR?= =?utf-8?B?c2d4MUw5R2I4QWhSbFl2WlZGQnBjME1VUVR5WUNyd3o1cE11V0NnMnp5bHow?= =?utf-8?B?QVB2OXFiWm91ZGFBUUhFOVlRdkp0R3hJTjA0djRHRkhRdWJZWGJxZHp0SmxP?= =?utf-8?B?WHVOOVNTdkR0RmlvUTlOVk1CeVpYeVdyUk10M0VGWVhka0YrV3JNQ3ZzWXpW?= =?utf-8?B?TFBYMXd3ZEhYZGllbjRIdTA4azdLYUs3NmUxQWJpR3loZ0g1N1B2WHVrdFND?= =?utf-8?B?V2wyd3pzMDlydlZQSkQxTkhaZTdoTzVpalU4c2pMankyTHRpRTFjK3JwenFu?= =?utf-8?B?SUJGck16TlQyY1NqQmsxYlBVaVF0TGdEQ01xNDd0ZGxxMWtEYVRZUk5aN1Zt?= =?utf-8?B?SEVlSGV2eWcxalk2R0F4MzNuMGYrek4zem9wS0RzYU5CYldPMkt3dU5TaDBi?= =?utf-8?B?bXRHcmZHNnowbS8zZDF1clIzdnAwY3J5VXoycitteHJQUitjL3BxaHN1cDE3?= =?utf-8?B?dDlrWTAzT1NqT2JQTlBoUkpxWExIQ2Y0RjB1WHJpMzdJK0U4R21FdDM2ZmJ4?= =?utf-8?B?VHBaZkZmSXU3dVFNL2hQZ1p3SUZHOFRaSy94eDdqQThKS01hVG8vMS94VFp6?= =?utf-8?B?ZjM5NGhrTmZPek5DNDZzRytjTTZzWXNxak5ML0UrRFVjNmllc2hvekdpSjhl?= =?utf-8?B?RXZvT2RPc1hQTm10MkRHZzJKRVhmVEZYOTZGL1phaWFxbEduRnMrTk9FV0pG?= =?utf-8?B?R1BUUHkxYzJHMUZnUEdBeHl0VTYyY0dkNXVXUHVWSE5FbFBQUXFNd2MrTU5q?= =?utf-8?B?VktnY1AxcVlMZXN3ZWZtbUhNNFBXYjdpU0hBS0ZGZ3pTUEgzYkg1N0FIbHRh?= =?utf-8?B?bk9LTytpaDlqdUE5eGRyL2pDNUJWOTlZNDZWWXl1TnhsNFM3bXhrQWQzenpz?= =?utf-8?B?UjFMTVVSdVc4NjUybGh4QUl6bmpjMlZEc3lOc0VwM0JNeW9KelFsejBmTm8z?= =?utf-8?B?TlBLWk5oQWJYZW52ZUU1YVpxeDVhLzIwQkE1Unl5Lzl4SndXUjI4N0NPeVI3?= =?utf-8?B?ZTdIQllXdWpOelhVWTVrK255dDJnekRwUU5XM2t4REhsUWFIN3gzOGFXajA3?= =?utf-8?B?dTgvdERielVKK09Sc1d3TllnOFZ1UXdrc0c1bTdxdTAxeVFNRUsrMVlRUVY5?= =?utf-8?B?anNISFBvY1BQU1AyZEFzd25sM1krOHU1aWRDbURuMk1sNE1mMUl6Rlp1REkx?= =?utf-8?B?WHpJYXBoWVExVXJWVTBuNEtEK3ZROTJpeWtwZi9RNTdFNWpxeGpnbjBzTW9N?= =?utf-8?B?QlBjbnFOcW5qcG5QbVRhdjBnNmhBSWtKUU5vZTkyOEg2aU9Zd3FHaGV6NnRl?= =?utf-8?B?QnBXYlpZTGpVRUloODBMbFl1aEl4TnQ2ODg3M205VXprTkFaWWVrdG1pMUJG?= =?utf-8?B?b2N5b2VSbTNFeUt6YTlYK0FjQUNmRjd2cTB2SEZETWphYnl4aUN2VjVYbzJM?= =?utf-8?B?T3k2Y1R4TjdPVjgxTWhQbHRZeERCYWZ0bmVoMUFIbTlBdXNoRmM5R1VpQ1Jv?= =?utf-8?B?bXpibGxZWHJKZDBDR1Z5bkRsS0I2dnYwL092VG5oK2h3QW93YWV4aHVPWWtC?= =?utf-8?B?WjVaT2t4MktNSWlWWnA5bzcwWFJIVUNJWjltdFo0WldlZVZnM0xleVdoOXJ5?= =?utf-8?B?Uk9MSVJHdXkraG9rZm9oVmRoR1laSHVSd2NOSHZCRWdneHlkN01VSEdFWlU3?= =?utf-8?B?QW1aRWUrQ2tMTEtFZFNoQzRNM3Y0VzFudmNqSVcwZWZCS0UrbVJzL0J2Tmxk?= =?utf-8?B?b1FPV3MrNVF5TEl1SGd4UVFablp6QXU3L1JsdEdVb2NoYzlBRFowNy9VV0hN?= =?utf-8?B?RzRDS3oxSXhXUHB3SW9jdnA4Y3NXNW1KeGRzeVl6U281TmVRaEd5S2UwVkI5?= =?utf-8?B?a2xZZ1NpL3JoL01RV3lUMWxBKyt2Szkra3AxTng5bXdhdWVQNUYvRU82bTNE?= =?utf-8?B?RzQ2ZURGbkVveDd1ZjVIYnlNYkk1ekpja0R3S1pDVksyenQwdzhxbGhtUnRV?= =?utf-8?B?cjZ6U2M1RVJDUVJ3LzVoVWdkTFNlQkdQVDdRYnRoVnRuek1TQW1ZQ3R4QlBF?= =?utf-8?B?b2lzcDIzeEtVR09YSmJpV0VFM0FlUXlZb3piMWNJOEw1RDEzK1ozQXpkbEZQ?= =?utf-8?B?UDQ1L25wR1NJV3p1ck9VODBZRHY5Z2xlNXBiSXo4SEtUSitSTzB6OU1OT1dp?= =?utf-8?B?ZlpseFU4eW9tK1RYYjd0Vkx5SzRJbFlYcW5vNktWVEpKcURpbEpJbzd0OFJO?= =?utf-8?Q?xeeJNF8P8m2/OFf4=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d12c17b0-82f5-4278-0db7-08dec879fdc3 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:00.7947 (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: 10F8RrOYPBEDr7htpSe60kiY8MkXrAy/X9a+K+DUOpnhRQ763Hf/1FpSomT/GzanJPQpLxSE5jYS1peFBChyiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8273 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 | 90 ++++++++++++++++++= ++++ 1 file changed, 90 insertions(+) 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..8894e87666972 --- /dev/null +++ b/Documentation/devicetree/bindings/display/imx/nxp,imx94-dcif.yaml @@ -0,0 +1,90 @@ +# 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#/$defs/port-base + unevaluatedProperties: false + description: Display Pixel Interface(DPI) output port + + properties: + endpoint: + $ref: /schemas/media/video-interfaces.yaml# + unevaluatedProperties: false + +required: + - compatible + - reg + - interrupts + - clocks + - power-domains + - port + +additionalProperties: false + +examples: + - | + #include + + display-controller@4b120000 { + compatible =3D "nxp,imx94-dcif"; + reg =3D <0x4b120000 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.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010017.outbound.protection.outlook.com [52.101.84.17]) (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 267B33ED5B2; Fri, 12 Jun 2026 11:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265566; cv=fail; b=H064ICR65n7mx2sYqGMOqTMWmfKV0cTkAmPA/UN+Qhim2RU7c00e1ODuDBLhFiOT3IfJakxGSAL0rmycchcnYnpEvW4Edu799txAbQZKGmh8D4yYdKA9CO8CkExYu9KsWFOrS7ziaq+RFSuWADxiAQoWe1GNUfyDo2ENbOn2Ajk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265566; c=relaxed/simple; bh=ERX55+s0rAdXO7e8Z22YNrwn43iO83HWxX5xk2VzjMM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Ljl5hdwvxbLbNiGH8KGSlPDMHAzX3lFYj9HmGB7tOr5RlHqSKzrLo003vusNKFvVSEYP665sZ2eRPnUQnLe5QxsEoTI5/Cs/KwFpaDMYBHrq4I5fNX60Qn2Tnha3PrKWroO72iIPeEKMC6iYQ0Umr5Uiqh1XPFx0UDYvY8d1M7Q= 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=RWRqnfu1; arc=fail smtp.client-ip=52.101.84.17 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="RWRqnfu1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TBksHPN7vrD2wBdUVkNQ2KTH9oVGntp4DiB9zML4gHTduLUFzqdbD4edlmUNbIdcVbs/Xtp2e4f0dLGhirfG5Th0ow4PvZGEfC6cba5UI88VZrIUzoLl0taiCKE7FTY5pZDmcgziplz3qhls21z4p569ozK6HiV+0UI4uZMBQJJVMsR1FFJaVwhgl11vo8hbiuPkeRJvPypqRWQBw7L1WxEYCE07lSwJfFYjoS0VTS+Vb2NoM7d7zKF3TvLJJG9S+ZGrtdzjVwEd9gx1ekgcy2so0MNU7A5KTQpS5EZgN4E1ho6gLnTIHueyqN84WAPIOvue0kfFLeSI+3iWvj176g== 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=erOHIdqUwqjkmxER9PeDD4lawd6Aq//xud2drgKUAec=; b=FTPv135REtCyT37zuywXipYxJ7mX8K+Md05NOX5diSNyLu1wsSIc55F4NMgxCVjQII01W5j7oPwzBF3d0zjThx9EdYkiyJU1PxUA6irQHh7Geh6fwoGwq7T4qtpebwtwstDIe5kfalAdeMp3eziEGopeTZO+gxSq4BoiD9dCNssl9icad1T5ARZ+wXAskuS9XM4FiMe1L3yGqfrjUzwdOrodIdHvRYnrIK7/jsa9EqiR6cwRuOO4p03NWPqOwAVk+4AmQBQJdQWm+feZW9bNP9wvFyC61resqqf3UjwB2xaLi0o6FN2tWebHF0eAtsMj/PhynAKCb3pUVCPaqNilvg== 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=erOHIdqUwqjkmxER9PeDD4lawd6Aq//xud2drgKUAec=; b=RWRqnfu18tnNB4zmRTIN2EY7Hspz+z9ojmiucWJFVWXvkAQshypxE4UIKp0Z61rLxu74qQUqMCWXPfANtpcHoQBz7gQL6K/45Hl+2z/vHtQT+9dzMpRwpgs00MuB0v88oeg8mxXzhTEqi+2BZ5hM1NpwVE3oCYSWaG2O3IMCy5ABnHjXtqt5ea4VWKlnOS+ujPiCxPejNIVK5PKHntK+6gIFI1+gcaH6gVEn8gktsb9PpcnQxPmzqwLF3nsqkDp4yEwtoMBZZTzwdfQ9HhbSXdpE2WDViIb4M05M9FndpC+7e/mgG99b6+magMmMFTj12SMwzYUaqZOxdXMu/VZNOg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by AM9PR04MB8273.eurprd04.prod.outlook.com (2603:10a6:20b:3e5::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.11; Fri, 12 Jun 2026 11:59:06 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:06 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 5/9] drm/imx: Add support for i.MX94 DCIF Date: Fri, 12 Jun 2026 14:58:36 +0300 Message-Id: <20260612-dcif-upstreaming-v9-5-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P190CA0069.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:656::15) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|AM9PR04MB8273:EE_ X-MS-Office365-Filtering-Correlation-Id: d2d57c20-d9a5-4420-c845-08dec87a00c1 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|1800799024|19092799006|376014|7416014|23010399003|366016|22082099003|18002099003|18092099006|921020|3023799007|56012099006|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: 37dtB4H30/eE20Fw7EXtez/xq1A3oAMazeMmimPervvk/4WULrM8XVkg65Gs+wFnuoSzWOnjn2HlCzoJMb3ZbhVVhGE43RLSio553ArhK8Fmvu9eElxJc8ZZ2NobGd7uUYcXi9YcIRgPn0ZShf2AE/3RUgMdwVGrrUKyUh+2lrKP/kItRSOvTd88nfCfqMT9HXSV0RJCIKl4LNKqxB0cUWeazkoDqbm+M1sQ0kUD0bulq4plQkzjwKI0lm6/3+7XzaDZb2E7Ue7p5D2fsdg3UbRZY/irJlVrK3EB9dnVlprP6ScfdrNFEAJdCwF2W95ay10lL8Rm366QqLUAk3TbiZmrVi4KGiSQmk2iw3T9r4VthU0++Rwnt815IktG0l6h8+lnAfMKoTY429p791Bz/vjJqmoe0BtMDAaJCuZTgdaj+hEJg9UvEc5VEYT/0t+wHZ1S3UgxWEUux0YUF64Pabk9eYfB/PsHAnK6d76QSKKKfMWF0JztEjPaRANy2G1DwtknUq5jxjgme3VCjyf0KyXz2InO48HOgTSg6g9INyk6OW1bwHYXp9mqMr1alaBsr/zXzuluGuIPyGfYHdRNpeoG5MZ5KjHMYq4Vb45ZdNiNvKmlxS33qRRtgLzrZ66OnqPLNsglJ8FExyfd+bgXQ3k2PpyUKYr2qNDPqIPWZNO4KsjMy+jQ1teBJb2M48t3a/buaa7wYNyurh/bi2RLPM5rSOmUM/Mf39GeJoIU+6o= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(19092799006)(376014)(7416014)(23010399003)(366016)(22082099003)(18002099003)(18092099006)(921020)(3023799007)(56012099006)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RW40QUFaa1VSYWVka2NlQ2FzbXVSK3V2RjNPdjRtU1cwc2ZubDRsRE02c1BS?= =?utf-8?B?MVNCTHd5VlBOdkZlWFNNazVrMjRaY2F3d2Rjc1JldjZ4VHRVZzBlaW4yRDRP?= =?utf-8?B?bXpWaWg4bng2WGRzZDFYVVRzdDhXWjZ0SnlBY1B2cStkMGRFYUo2UEtXVjI1?= =?utf-8?B?MEVCeDE3WmZKUVkxOVk2blVIZFFydE1ZSUJiTjlZZjc4bXpRZnNmMkV4Q0xp?= =?utf-8?B?bENDQURCZGtaTE1rbVE2S29xcEZzQzhtYWRyOVk4M0JLdU1HRjlCU2hIcXUv?= =?utf-8?B?b1B3Q2pJcmppc0tGV1hUbjBkbWhQZGVLQXUveEhyYmh1dGpJSi82b0tYNG9S?= =?utf-8?B?NXlOVVhiRnBVaHpXRkY4bmZ3NmpseDh2RnV2NlZCdjlTaUFsMnFKRVRiajJu?= =?utf-8?B?NTlwRWNzaXVIczBnd3FaaVNaMXpZZzZyRlRnZHFYVlBIQmJXbFBYZFFkaWhW?= =?utf-8?B?L0luemFCRE5CcGltK0xFdG42bW8vMEJ6bURRcHZGMTc2Sno2VTI2WVpyM1V5?= =?utf-8?B?dzNOVmNlWFlzanRkbXE5KzBzclVkaVdCR1RsMTNRRlVKUGh4Ukl6bWROMHd6?= =?utf-8?B?QVFWdFZxUGIvbnpXOWoxU1Nzd21rMmNZRDhUWFA3azlHa3BUWlhoRzB2cDlo?= =?utf-8?B?a0hFd0YvcFh4b05QR0x5R0Z5TDlzcmdSdHFYQU1zeGxORFY0K2NkQVUwbTVP?= =?utf-8?B?ZklOZ2hPWmFkQkljeGZmMUxya1lBVHgwRVRGbmNDdVJ6U1c3YVlEUFdCWVAz?= =?utf-8?B?NjgxWmpKNm9NRGxrWDZTby96SmVkeTIwbDZiQnZ5UmRyR0ZDdktBL1VkVity?= =?utf-8?B?YmZZUmt6UHFJa1A1NmhXenkyanNjc0IyLzRYQm55cUpXTXdtakpBZ0IzYkI4?= =?utf-8?B?czZWVEtYMGZWWnZJNlhOS0poVjBNTzR0bElpT1I3dXZCdGN2ei9nRXFwS1hS?= =?utf-8?B?RHRiSTFNRU5sZ3hJcysySDM1RmhUOE42MmFGNGo1UnVTYVd4ME43R243cDNN?= =?utf-8?B?OXRBYlFkbEJ2MEcxY2hFMGxIMUFkaGIzdldNV2FxdmZLek92eDJ5WnBoTXNG?= =?utf-8?B?MGtuN050clNOeGo5eHRqRXNJSW1PalVxYXBKT1MrNklqTkJUMGZkREZhOVU1?= =?utf-8?B?WDFXNmNlQ3l2dzcwZitUNk9MM0pPL0RwSjJNcXh3WWE0d2VMdDZBU1BQMDU4?= =?utf-8?B?bnNac1B1YkUrSXNPaTltd0tRMERDMlUxdTQxWHBZKzgweUV6S1haRzlwWE5s?= =?utf-8?B?M0hMdmMvZldIUm1lMGE5TXVXakZVOVh4N0VCRWQ5T3pSVU5mRUJyYWdPRURN?= =?utf-8?B?aDBvak5acE5pRnFFUmFEL2k0dk1yTmF6SnFFUUlkeXQxZUtUN2UxVm1mTFcy?= =?utf-8?B?TUxhMGF1R21EN05qdzNrNHZzcEdWbi91Wk01QUt1RlBHVkhDZ3pCZy9vUWlH?= =?utf-8?B?dHJwU1hYUkx4MWxCWlF5U3owckgyMHJxOXpHTFF6U0I1MjFHc1ZUTWFxSVNM?= =?utf-8?B?clBHSVZ6YlJmWWVtUGJVeDhGVGE1K0xhYUhpcHVxS0syZnk4VmhPMFRaUnM5?= =?utf-8?B?czZ2L213NnlLeDJETjdWRU4rbjNyVHZCYS80bUNDUnJMS1F6YjJPZzJaTHdQ?= =?utf-8?B?YXl5ZWg3MmduY0YzbThMVW8wVXRUL2JhcVdFZVdtY3gxQkxQbG05SnpTamF0?= =?utf-8?B?Y0NtZENSWEZUNkNjcFB0QUNObnZBRzRrQ2VlMUR0QzU5NDhjU084YTdVbzNI?= =?utf-8?B?bVZnUzkzb21yZzJ2T1d4UHplVm5tV21GZmlzekdDWmkzazAzbCtMZGRleWdi?= =?utf-8?B?ekk4UWZHK0VFTkptTVQ1K0kvWmxtc0dSMjdKQkJNeWNhamJBMDByak9ZSVQw?= =?utf-8?B?azkwb1hBRU9sMHhrbVhhdnNCOUNsQVBIdWg0cE45QkRHenA1TmlKc3JNejYx?= =?utf-8?B?S0hrVVk0L2pCcG04Z2hJanRKYnBXeW9ZZGJSeEcxbWFUQllJb3hQY1MzRG41?= =?utf-8?B?R0tlQjcxOHp0b0FjelhmSC91Q01iUWxVdXUyb3c5b2t2eGZsU1pCSkNMZDlC?= =?utf-8?B?VDdSOVBUNkZUN0xIbmVCeWZ5RmxSK2R2dzZHZGZhY1Nvb0h1WjU1QzZodmQ4?= =?utf-8?B?SnloRlM0enBPYlBxVTlrd09oYmpWaFZVa0JYNzd0Qy9GV3RVWTU3d3J6c3JZ?= =?utf-8?B?TjQxaXJWOVFBTWgyMEVXcHJvTXZmN1FXdndCNjhlZWI2TlhRWFdzMGx1bXZP?= =?utf-8?B?WUoxNUpuN1QvNXg3anMyT3lVYzR3Rm9oVThLUVhNc3hOZXJLRklSZ2wxUXV5?= =?utf-8?B?RStaVjNTWVdtTE9OWllSSWRwbFRMRERiN0J3NHhETG9ack1palllMWJSWFBt?= =?utf-8?Q?5cEDJvPgFfTCX5PM=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2d57c20-d9a5-4420-c845-08dec87a00c1 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:06.5612 (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: iiXu4Afv9+VctGED36skiujXErULmQOPW2nR8+eFSPZth6Kp/BRz6y9rjv8H6yEocJqNAYC5bxt4EQKvGhb02g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8273 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; Reviewed-by: Luca Ceresoli # bridge refcounting Signed-off-by: Sandor Yu Co-developed-by: Laurentiu Palcu 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 | 215 +++++++++++ drivers/gpu/drm/imx/dcif/dcif-crc.h | 43 +++ drivers/gpu/drm/imx/dcif/dcif-crtc.c | 705 ++++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/imx/dcif/dcif-drv.c | 233 +++++++++++ drivers/gpu/drm/imx/dcif/dcif-drv.h | 89 +++++ drivers/gpu/drm/imx/dcif/dcif-kms.c | 96 +++++ drivers/gpu/drm/imx/dcif/dcif-plane.c | 308 +++++++++++++++ drivers/gpu/drm/imx/dcif/dcif-reg.h | 267 +++++++++++++ 12 files changed, 1978 insertions(+) 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..dee36e5ca6793 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crc.c @@ -0,0 +1,215 @@ +// 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_crc_source_enable(struct dcif_dev *dcif, enum dcif_crc_source so= urce, + 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_crc_source_disable(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_source_parse(struct drm_crtc *crtc, 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")) { + struct drm_display_mode *mode =3D &crtc->state->adjusted_mode; + + roi->x1 =3D 0; + roi->y1 =3D 0; + roi->x2 =3D mode->hdisplay; + roi->y2 =3D mode->vdisplay; + + *s =3D DCIF_CRC_SRC_FRAME; + } else if (strstarts(source_name, roi_prefix)) { + int len =3D strlen(roi_prefix); + unsigned int params[4]; + char *options, *opt; + int i =3D 0, ret; + + char *buf __free(kfree) =3D kstrdup(source_name + len, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + options =3D buf; + + while ((opt =3D strsep(&options, ",")) !=3D NULL) { + if (i > 3) + return -EINVAL; + + ret =3D kstrtouint(opt, 10, ¶ms[i]); + if (ret < 0) + return ret; + + 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_crc_source_verify(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_source_parse(crtc, 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_crc_source_set(struct drm_crtc *crtc, const char *source_name) +{ + 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_commit *state; + struct drm_rect roi =3D {0, 0, 0, 0}; + enum dcif_crc_source source; + int ret; + + if (dcif_crc_source_parse(crtc, 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_commit_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_commit_clear(state); + drm_modeset_backoff(&ctx); + goto retry; + } + + drm_atomic_commit_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..6ccb1b7186732 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crc.h @@ -0,0 +1,43 @@ +/* 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 enable_dcif_crc_needed(struct dcif_crtc_state *new_dcst= ate, + 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 disable_dcif_crc_needed(struct dcif_crtc_state *new_dcs= tate, + 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; +} + +int dcif_crc_source_verify(struct drm_crtc *crtc, const char *source_name, + size_t *values_cnt); +int dcif_crc_source_set(struct drm_crtc *crtc, const char *source_name); +void dcif_crc_source_enable(struct dcif_dev *dcif, enum dcif_crc_source so= urce, + struct drm_rect *roi, int ncrc); +void dcif_crc_source_disable(struct dcif_dev *dcif, int ncrc); + +#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..1fa2dfb2e0b98 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-crtc.c @@ -0,0 +1,705 @@ +// 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: + case DRM_FORMAT_ARGB1555: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ARGB1555); + break; + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ARGB4444: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ARGB4444); + break; + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_ABGR8888: + reg |=3D DCIF_CTRLDESC0_FORMAT(CTRLDESCL0_FORMAT_ABGR8888); + break; + case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ARGB8888: + 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_obj(*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_obj(*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_irq, &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 *bridge __free(drm_bridge_put) =3D NULL; + struct drm_bridge_state *bridge_state; + + 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= _commit *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_commit *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= ); + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + + dcif_shadow_load_enable(dcif); + + if (drm_atomic_crtc_needs_modeset(crtc->state)) + return; + + if (dcif->has_crc && disable_dcif_crc_needed(dcif_crtc_state, + old_dcif_crtc_state)) + dcif_crc_source_disable(dcif, 0); + + dcif_crtc_queue_state_event(crtc); + + if (dcif->has_crc && enable_dcif_crc_needed(dcif_crtc_state, + old_dcif_crtc_state)) + dcif_crc_source_enable(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_commit *state) +{ + struct drm_crtc_state *crtc_state =3D drm_atomic_get_new_crtc_state(state= , crtc); + struct drm_plane_state *plane_state =3D drm_atomic_get_new_plane_state(st= ate, crtc->primary); + struct dcif_crtc_state *dcif_crtc_state =3D to_dcif_crtc_state(crtc_state= ); + struct drm_display_mode *adj =3D &crtc_state->adjusted_mode; + struct dcif_dev *dcif =3D crtc_to_dcif_dev(crtc); + struct drm_device *drm =3D crtc->dev; + dma_addr_t baseaddr; + int ret; + + dev_dbg(drm->dev, "mode " DRM_MODE_FMT "\n", DRM_MODE_ARG(adj)); + + /* enable power when we start to set mode for CRTC */ + ret =3D pm_runtime_resume_and_get(drm->dev); + if (ret < 0) { + drm_err(drm, "failed to resume DCIF, ret =3D %d\n", ret); + return; + } + dcif->crtc_pm_enabled =3D true; + + 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_crc_source_enable(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_commit *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_crc_source_disable(dcif, 0); + + dcif_disable_controller(dcif); + dcif_disable_plane_panic(dcif); + + drm_crtc_vblank_off(crtc); + + if (dcif->crtc_pm_enabled) { + dcif->crtc_pm_enabled =3D false; + pm_runtime_put_sync(drm->dev); + } + + scoped_guard(spinlock_irq, &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_crc_source_set, + .verify_crc_source =3D dcif_crc_source_verify, +}; + +irqreturn_t dcif_irq_handler(int irq, void *data) +{ + struct drm_device *drm =3D data; + struct dcif_dev *dcif =3D to_dcif_dev(drm); + int domain =3D dcif->cpu_domain; + u32 stat0, stat1, crc; + + regmap_read(dcif->regmap, DCIF_IS0(domain), &stat0); + regmap_read(dcif->regmap, DCIF_IS1(domain), &stat1); + regmap_write(dcif->regmap, DCIF_IS0(domain), stat0); + regmap_write(dcif->regmap, DCIF_IS1(domain), stat1); + + if (stat0 & DCIF_INT0_VS_BLANK) { + drm_crtc_handle_vblank(&dcif->crtc); + + scoped_guard(spinlock_irqsave, &drm->event_lock) { + if (dcif->event) { + drm_crtc_send_vblank_event(&dcif->crtc, dcif->event); + dcif->event =3D NULL; + drm_crtc_vblank_put(&dcif->crtc); + } + if (dcif->crc_is_enabled) { + regmap_read(dcif->regmap, DCIF_CRC_VAL_R(0), &crc); + drm_crtc_add_crc_entry(&dcif->crtc, false, 0, &crc); + dev_dbg(drm->dev, "crc=3D0x%x\n", crc); + } + } + } + + if (stat1 & (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1)) { + u32 panic =3D stat1 & (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1); + + dev_dbg_ratelimited(drm->dev, "FIFO panic on %s\n", + panic =3D=3D (DCIF_INT1_FIFO_PANIC0 | DCIF_INT1_FIFO_PANIC1) ? + "layers 0 & 1" : panic =3D=3D DCIF_INT1_FIFO_PANIC0 ? "layer 0" : + "layer 1"); + } + + return IRQ_HANDLED; +} + +int dcif_crtc_init(struct dcif_dev *dcif) +{ + int ret; + + ret =3D dcif_plane_init(dcif); + if (ret) + return ret; + + drm_crtc_helper_add(&dcif->crtc, &dcif_crtc_helper_funcs); + ret =3D drm_crtc_init_with_planes(&dcif->drm, &dcif->crtc, &dcif->planes.= primary, NULL, + &dcif_crtc_funcs, NULL); + if (ret) { + drm_err(&dcif->drm, "failed to initialize CRTC: %d\n", ret); + return ret; + } + + return 0; +} diff --git a/drivers/gpu/drm/imx/dcif/dcif-drv.c b/drivers/gpu/drm/imx/dcif= /dcif-drv.c new file mode 100644 index 0000000000000..50ca6461ffb30 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-drv.c @@ -0,0 +1,233 @@ +// 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-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; + int ret; + + ret =3D pm_runtime_resume_and_get(drm->dev); + if (ret < 0) { + drm_err(drm, "failed to resume DCIF: %d\n", ret); + return; + } + + regmap_read(dcif->regmap, DCIF_VER, &val); + + dcif->has_crc =3D val & DCIF_FEATURE_CRC; + + vmin =3D DCIF_VER_GET_MINOR(val); + vmaj =3D DCIF_VER_GET_MAJOR(val); + DRM_DEV_DEBUG(drm->dev, "DCIF version is %d.%d\n", vmaj, vmin); + + pm_runtime_put_sync(drm->dev); +} + +static const struct regmap_config dcif_regmap_config =3D { + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .fast_io =3D true, + .max_register =3D 0x20250, + .cache_type =3D REGCACHE_NONE, + .disable_locking =3D true, +}; + +static int dcif_probe(struct platform_device *pdev) +{ + struct dcif_dev *dcif; + struct drm_device *drm; + int ret; + int i; + + dcif =3D devm_drm_dev_alloc(&pdev->dev, &dcif_driver, struct dcif_dev, dr= m); + if (IS_ERR(dcif)) + return PTR_ERR(dcif); + + /* CPU 0 domain for interrupt control */ + dcif->cpu_domain =3D DCIF_CPU_DOMAIN; + + drm =3D &dcif->drm; + dev_set_drvdata(&pdev->dev, dcif); + + dcif->reg_base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(dcif->reg_base)) + return dev_err_probe(drm->dev, PTR_ERR(dcif->reg_base), + "failed to get reg base\n"); + + for (i =3D 0; i < 3; i++) { + dcif->irq[i] =3D platform_get_irq(pdev, i); + if (dcif->irq[i] < 0) + return dev_err_probe(drm->dev, dcif->irq[i], + "failed to get domain%d irq\n", i); + } + + dcif->regmap =3D devm_regmap_init_mmio(drm->dev, dcif->reg_base, &dcif_re= gmap_config); + if (IS_ERR(dcif->regmap)) + return dev_err_probe(drm->dev, PTR_ERR(dcif->regmap), + "failed to init DCIF regmap\n"); + + dcif->num_clks =3D devm_clk_bulk_get_all(drm->dev, &dcif->clks); + if (dcif->num_clks < 0) + return dev_err_probe(drm->dev, dcif->num_clks, + "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..895b2efc51a26 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-drv.h @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ + +#ifndef __DCIF_DRV_H__ +#define __DCIF_DRV_H__ + +#include +#include + +#include +#include +#include +#include +#include + +#define DCIF_CPU_DOMAINS 3 + +struct dcif_dev { + struct drm_device drm; + void __iomem *reg_base; + + struct regmap *regmap; + int irq[DCIF_CPU_DOMAINS]; + + 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; + + /* Tracks whether atomic_enable obtained a PM runtime reference */ + bool crtc_pm_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..8981434b0a803 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-kms.c @@ -0,0 +1,96 @@ +// 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: %ld\n", PTR_ERR(con= nector)); + return PTR_ERR(connector); + } + + return 0; +} + +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..7b5a68dab6587 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-plane.c @@ -0,0 +1,308 @@ +// 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_ABGR8888, + DRM_FORMAT_XRGB1555, + DRM_FORMAT_ARGB1555, + DRM_FORMAT_XRGB4444, + DRM_FORMAT_ARGB4444, + DRM_FORMAT_XRGB8888, + DRM_FORMAT_ARGB8888, + + /* 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_ABGR8888, + DRM_FORMAT_XRGB1555, + DRM_FORMAT_ARGB1555, + DRM_FORMAT_XRGB4444, + DRM_FORMAT_ARGB4444, + DRM_FORMAT_XRGB8888, + DRM_FORMAT_ARGB8888, +}; + +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); + if (!dma_obj) + return 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_commit *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; + int ret; + + 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; + + ret =3D drm_atomic_helper_check_plane_state(new_plane_state, crtc_state, + DRM_PLANE_NO_SCALING, + DRM_PLANE_NO_SCALING, + true, + true); + if (ret) + return ret; + + if (new_plane_state->fb->format->has_alpha && + new_plane_state->pixel_blend_mode !=3D DRM_MODE_BLEND_PIXEL_NONE && + new_plane_state->alpha !=3D DRM_BLEND_ALPHA_OPAQUE) + return -EINVAL; + + return 0; +} + +static void dcif_plane_atomic_update(struct drm_plane *plane, struct drm_a= tomic_commit *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->dst.x1; + crtc_y =3D new_state->dst.y1; + crtc_w =3D drm_rect_width(&new_state->dst); + crtc_h =3D drm_rect_height(&new_state->dst); + + /* 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_plane_state_to_baseaddr(new_state); + + 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: + case DRM_FORMAT_ARGB1555: + layer_fmt =3D CTRLDESCL0_FORMAT_ARGB1555; + break; + case DRM_FORMAT_XRGB4444: + case DRM_FORMAT_ARGB4444: + layer_fmt =3D CTRLDESCL0_FORMAT_ARGB4444; + break; + case DRM_FORMAT_XBGR8888: + case DRM_FORMAT_ABGR8888: + layer_fmt =3D CTRLDESCL0_FORMAT_ABGR8888; + break; + case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ARGB8888: + 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; + } + + reg =3D DCIF_CTRLDESC0_EN | DCIF_CTRLDESC0_SHADOW_LOAD_EN | + DCIF_CTRLDESC0_FORMAT(layer_fmt) | DCIF_CTRLDESC0_YUV_FORMAT(yuv_fm= t); + + /* Alpha */ + if (new_state->pixel_blend_mode =3D=3D DRM_MODE_BLEND_PIXEL_NONE || + !new_state->fb->format->has_alpha) + reg |=3D DCIF_CTRLDESC0_GLOBAL_ALPHA(new_state->alpha >> 8) | ALPHA_GLOB= AL; + else if (new_state->pixel_blend_mode =3D=3D DRM_MODE_BLEND_COVERAGE) + reg |=3D ALPHA_EMBEDDED; + else + /* + * DCIF does not support premultiplied per-pixel blending but, + * since PREMULTI's property presence is mandatory to not break + * userspace, we just disable alpha blending for this one. + */ + reg |=3D DCIF_CTRLDESC0_GLOBAL_ALPHA(255) | ALPHA_GLOBAL; + + regmap_write(dcif->regmap, DCIF_CTRLDESC0(layer_id), reg); +} + +static void dcif_overlay_plane_atomic_disable(struct drm_plane *plane, + struct drm_atomic_commit *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; + } + + ret =3D drm_plane_create_alpha_property(&dcif->planes.overlay); + if (ret) + return ret; + + return drm_plane_create_blend_mode_property(&dcif->planes.overlay, + BIT(DRM_MODE_BLEND_PIXEL_NONE) | + BIT(DRM_MODE_BLEND_PREMULTI) | + BIT(DRM_MODE_BLEND_COVERAGE)); +} diff --git a/drivers/gpu/drm/imx/dcif/dcif-reg.h b/drivers/gpu/drm/imx/dcif= /dcif-reg.h new file mode 100644 index 0000000000000..acf9e3071aa52 --- /dev/null +++ b/drivers/gpu/drm/imx/dcif/dcif-reg.h @@ -0,0 +1,267 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * Copyright 2025 NXP + */ +#ifndef __DCIF_REG_H__ +#define __DCIF_REG_H__ + +#include + +/* Version ID Register */ +#define DCIF_VER 0x0 +#define DCIF_VER_GET_FEATURE(x) FIELD_GET(GENMASK(15, 0), x) +#define DCIF_VER_GET_MINOR(x) FIELD_GET(GENMASK(23, 16), x) +#define DCIF_VER_GET_MAJOR(x) FIELD_GET(GENMASK(31, 24), x) +#define DCIF_FEATURE_CRC BIT(1) + +/* Parameter Registers */ +#define DCIF_PAR_0 0x4 +#define DCIF_PAR_0_LAYER_NUM(x) FIELD_PREP(GENMASK(3, 0), x) +#define DCIF_PAR_0_DOMAIN_NUM(x) FIELD_PREP(GENMASK(5, 4), x) +#define DCIF_PAR_0_AXI_DATA_WIDTH(x) FIELD_PREP(GENMASK(7, 6), x) +#define DCIF_PAR_0_CLUT_RAM_NUM(x) FIELD_PREP(GENMASK(11, 8), x) +#define DCIF_PAR_0_CSC_NUM(x) FIELD_PREP(GENMASK(13, 12), x) +#define DCIF_PAR_0_CRC_REGION_NUM(x) FIELD_PREP(GENMASK(18, 16), x) +#define DCIF_PAR_0_BACKUP(x) FIELD_PREP(GENMASK(31, 28), x) + +#define DCIF_PAR_1 0x8 +#define DCIF_PAR_1_LAYER0_FIFO_SIZE(x) FIELD_PREP(GENMASK(3, 0), x) +#define DCIF_PAR_1_LAYER1_FIFO_SIZE(x) FIELD_PREP(GENMASK(7, 4), x) + +/* Display Control and Parameter Registers */ +#define DCIF_DISP_CTRL 0x10 +#define DCIF_DISP_CTRL_DISP_ON BIT(0) +#define DCIF_DISP_CTRL_AXI_RD_HOLD BIT(30) +#define DCIF_DISP_CTRL_SW_RST BIT(31) +#define DCIF_DISP_PAR 0x14 +#define DCIF_DISP_PAR_BGND_B(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_DISP_PAR_BGND_G(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_DISP_PAR_BGND_R(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_DISP_SIZE 0x18 +#define DCIF_DISP_SIZE_DISP_WIDTH(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DISP_SIZE_DISP_HEIGHT(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Display Status Registers */ +#define DCIF_DISP_SR0 0x1C +#define DCIF_DISP_SR0_AXI_RD_PEND(x) FIELD_PREP(GENMASK(4, 0), x) +#define DCIF_DISP_SR0_DPI_BUSY(x) FIELD_PREP(GENMASK(14, 14), x) +#define DCIF_DISP_SR0_AXI_RD_BUSY(x) FIELD_PREP(GENMASK(15, 15), x) +#define DCIF_DISP_SR0_TXFIFO_CNT(x) FIELD_PREP(GENMASK(23, 16), x) + +#define DCIF_DISP_SR1 0x20 +#define DCIF_DISP_SR1_H_CNT(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DISP_SR1_V_CNT(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Interrupt Enable and Status Registers, n=3D0-2*/ +#define DCIF_IE0(n) (0x24 + (n) * 0x10000) +#define DCIF_IS0(n) (0x28 + (n) * 0x10000) +#define DCIF_INT0_VSYNC BIT(0) +#define DCIF_INT0_UNDERRUN BIT(1) +#define DCIF_INT0_VS_BLANK BIT(2) +#define DCIF_INT0_HIST_DONE BIT(5) +#define DCIF_INT0_CRC_ERR BIT(6) +#define DCIF_INT0_CRC_ERR_SAT BIT(7) + +#define DCIF_IE1(n) (0x2C + (n) * 0x10000) +#define DCIF_IS1(n) (0x30 + (n) * 0x10000) +#define DCIF_INT1_FIFO_PANIC0 BIT(0) +#define DCIF_INT1_FIFO_PANIC1 BIT(1) +#define DCIF_INT1_DMA_ERR0 BIT(8) +#define DCIF_INT1_DMA_ERR1 BIT(9) +#define DCIF_INT1_DMA_DONE0 BIT(16) +#define DCIF_INT1_DMA_DONE1 BIT(17) +#define DCIF_INT1_FIFO_EMPTY0 BIT(24) +#define DCIF_INT1_FIFO_EMPTY1 BIT(25) + +/* DPI Control and Sync Parameter Registers */ +#define DCIF_DPI_CTRL 0x40 +#define DCIF_DPI_CTRL_HSYNC_POL_LOW BIT(0) +#define DCIF_DPI_CTRL_VSYNC_POL_LOW BIT(1) +#define DCIF_DPI_CTRL_DE_POL_LOW BIT(2) +#define DCIF_DPI_CTRL_PCLK_EDGE_FALLING BIT(3) +#define DCIF_DPI_CTRL_POL_MASK GENMASK(3, 0) +#define DCIF_DPI_CTRL_DATA_INV(x) FIELD_PREP(GENMASK(4, 4), x) +#define DCIF_DPI_CTRL_DEF_BGND_EN(x) FIELD_PREP(GENMASK(5, 5), x) +#define DCIF_DPI_CTRL_FETCH_OPT(x) FIELD_PREP(GENMASK(9, 8), x) +#define DCIF_DPI_CTRL_DISP_MODE(x) FIELD_PREP(GENMASK(13, 12), x) +#define DCIF_DPI_CTRL_DATA_PATTERN_MASK GENMASK(18, 16) +#define DCIF_DPI_CTRL_DATA_PATTERN(x) FIELD_PREP(GENMASK(18, 16), x) +#define PATTERN_RGB888 0 +#define PATTERN_RBG888 1 +#define PATTERN_GBR888 2 +#define PATTERN_GRB888 3 +#define PATTERN_BRG888 4 +#define PATTERN_BGR888 5 +#define PATTERN_RGB555 6 +#define PATTERN_RGB565 7 + +#define DCIF_DPI_HSYN_PAR 0x44 +#define DCIF_DPI_HSYN_PAR_FP_H(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_HSYN_PAR_BP_H(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_DPI_VSYN_PAR 0x48 +#define DCIF_DPI_VSYN_PAR_FP_V(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_VSYN_PAR_BP_V(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_DPI_VSYN_HSYN_WIDTH 0x4C +#define DCIF_DPI_VSYN_HSYN_WIDTH_PW_H(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_DPI_VSYN_HSYN_WIDTH_PW_V(x) FIELD_PREP(GENMASK(27, 16), x) + +/* Control Descriptor Registers, n=3D0-1*/ +#define DCIF_CTRLDESC0(n) (0x10000 + (n) * 0x10000) +#define DCIF_CTRLDESC0_AB_MODE(x) FIELD_PREP(GENMASK(1, 0), x) +#define ALPHA_EMBEDDED 0 +#define ALPHA_GLOBAL 1 +#define DCIF_CTRLDESC0_YUV_FORMAT_MASK GENMASK(15, 14) +#define DCIF_CTRLDESC0_YUV_FORMAT(x) FIELD_PREP(GENMASK(15, 14), x) +#define CTRLDESCL0_YUV_FORMAT_Y2VY1U 0x0 +#define CTRLDESCL0_YUV_FORMAT_Y2UY1V 0x1 +#define CTRLDESCL0_YUV_FORMAT_VY2UY1 0x2 +#define CTRLDESCL0_YUV_FORMAT_UY2VY1 0x3 +#define DCIF_CTRLDESC0_GLOBAL_ALPHA(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_CTRLDESC0_FORMAT_MASK GENMASK(27, 24) +#define DCIF_CTRLDESC0_FORMAT(x) FIELD_PREP(GENMASK(27, 24), x) +#define CTRLDESCL0_FORMAT_RGB565 0x4 +#define CTRLDESCL0_FORMAT_ARGB1555 0x5 +#define CTRLDESCL0_FORMAT_ARGB4444 0x6 +#define CTRLDESCL0_FORMAT_YCBCR422 0x7 +#define CTRLDESCL0_FORMAT_RGB888 0x8 +#define CTRLDESCL0_FORMAT_ARGB8888 0x9 +#define CTRLDESCL0_FORMAT_ABGR8888 0xa +#define DCIF_CTRLDESC0_SHADOW_LOAD_EN BIT(30) +#define DCIF_CTRLDESC0_EN BIT(31) + +#define DCIF_CTRLDESC1(n) (0x10004 + (n) * 0x10000) +#define DCIF_CTRLDESC1_POSX(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CTRLDESC1_POSY(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CTRLDESC2(n) (0x10008 + (n) * 0x10000) +#define DCIF_CTRLDESC2_WIDTH(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CTRLDESC2_HEIGHT(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CTRLDESC3(n) (0x1000C + (n) * 0x10000) +#define DCIF_CTRLDESC3_PITCH(x) FIELD_PREP(GENMASK(15, 0), x) +#define DCIF_CTRLDESC3_T_SIZE(x) FIELD_PREP(GENMASK(17, 16), x) +#define DCIF_CTRLDESC3_P_SIZE(x) FIELD_PREP(GENMASK(22, 20), x) + +#define DCIF_CTRLDESC4(n) (0x10010 + (n) * 0x10000) +#define DCIF_CTRLDESC4_ADDR(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CTRLDESC5(n) (0x10014 + (n) * 0x10000) +#define DCIF_CTRLDESC6(n) (0x10018 + (n) * 0x10000) +#define DCIF_CTRLDESC6_BCLR_B(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_CTRLDESC6_BCLR_G(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_CTRLDESC6_BCLR_R(x) FIELD_PREP(GENMASK(23, 16), x) +#define DCIF_CTRLDESC6_BCLR_A(x) FIELD_PREP(GENMASK(31, 24), x) + +/* CLUT control Register */ +#define DCIF_CLUT_CTRL 0x1003C +#define DCIF_CLUT_CTRL_CLUT0_SEL(x) FIELD_PREP(GENMASK(0, 0), x) +#define DCIF_CLUT_CTRL_CLUT1_SEL(x) FIELD_PREP(GENMASK(3, 3), x) +#define DCIF_CLUT_CTRL_CLUT_MUX(x) FIELD_PREP(GENMASK(29, 28), x) +#define DCIF_CLUT_CTRL_CLUT_SHADOW_LOAD_EN(x) FIELD_PREP(GENMASK(31, 31)= , x) + +/* FIFO Panic Threshold Register, n=3D0-1 */ +#define DCIF_PANIC_THRES(n) (0x10040 + (n) * 0x10000) +#define DCIF_PANIC_THRES_LOW_MASK GENMASK(11, 0) +#define DCIF_PANIC_THRES_LOW(x) FIELD_PREP(GENMASK(11, 00), x) +#define DCIF_PANIC_THRES_HIGH_MASK GENMASK(27, 16) +#define DCIF_PANIC_THRES_HIGH(x) FIELD_PREP(GENMASK(27, 16), x) +#define DCIF_PANIC_THRES_REQ_EN BIT(31) +#define PANIC0_THRES_MAX 511 + +/* Layer Status Register 0, n=3D0-1 */ +#define DCIF_LAYER_SR0(n) (0x10044 + (n) * 0x10000) +#define DCIF_LAYER_SR0_L0_FIFO_CNT_MASK GENMASK(9, 0) +#define DCIF_LAYER_SR0_L0_FIFO_CNT(x) FIELD_PREP(GENMASK(9, 0), x) + +/* Color Space Conversion Control and Coefficient Registers for Layer 0 */ +#define DCIF_CSC_CTRL_L0 0x10050 +#define DCIF_CSC_CTRL_L0_CSC_EN BIT(0) +#define DCIF_CSC_CTRL_L0_CSC_MODE_YCBCR2RGB BIT(1) + +#define DCIF_CSC_COEF0_L0 0x10054 +#define DCIF_CSC_COEF0_L0_A1(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF0_L0_A2(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF1_L0 0x10058 +#define DCIF_CSC_COEF1_L0_A3(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF1_L0_B1(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF2_L0 0x1005C +#define DCIF_CSC_COEF2_L0_B2(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF2_L0_B3(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF3_L0 0x10060 +#define DCIF_CSC_COEF3_L0_C1(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF3_L0_C2(x) FIELD_PREP_CONST(GENMASK(26, 16), x) + +#define DCIF_CSC_COEF4_L0 0x10064 +#define DCIF_CSC_COEF4_L0_C3(x) FIELD_PREP_CONST(GENMASK(10, 0), x) +#define DCIF_CSC_COEF4_L0_D1(x) FIELD_PREP_CONST(GENMASK(24, 16), x) + +#define DCIF_CSC_COEF5_L0 0x10068 +#define DCIF_CSC_COEF5_L0_D2(x) FIELD_PREP_CONST(GENMASK(8, 0), x) +#define DCIF_CSC_COEF5_L0_D3(x) FIELD_PREP_CONST(GENMASK(24, 16), x) + +/* CRC Control, Threshold, and Histogram Coefficient Registers */ +#define DCIF_CRC_CTRL 0x20100 +#define DCIF_CRC_CTRL_CRC_EN(x) (1 << (x)) +#define DCIF_CRC_CTRL_HIST_REGION_SEL(x) FIELD_PREP(GENMASK(17, 16), x) +#define DCIF_CRC_CTRL_HIST_MODE BIT(21) +#define DCIF_CRC_CTRL_HIST_TRIG BIT(22) +#define DCIF_CRC_CTRL_HIST_EN BIT(23) +#define DCIF_CRC_CTRL_CRC_MODE BIT(28) +#define DCIF_CRC_CTRL_CRC_TRIG BIT(29) +#define DCIF_CRC_CTRL_CRC_ERR_CNT_RST BIT(30) +#define DCIF_CRC_CTRL_CRC_SHADOW_LOAD_EN BIT(31) + +#define DCIF_CRC_THRES 0x20104 +#define DCIF_CRC_THRES_CRC_THRESHOLD_MASK GENMASK(31, 0) +#define DCIF_CRC_THRES_CRC_THRESHOLD(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_HIST_COEF 0x20108 +#define DCIF_CRC_HIST_COEF_HIST_WB_MASK GENMASK(7, 0) +#define DCIF_CRC_HIST_COEF_HIST_WB(x) FIELD_PREP(GENMASK(7, 0), x) +#define DCIF_CRC_HIST_COEF_HIST_WG_MASK GENMASK(15, 8) +#define DCIF_CRC_HIST_COEF_HIST_WG(x) FIELD_PREP(GENMASK(15, 8), x) +#define DCIF_CRC_HIST_COEF_HIST_WR_MASK GENMASK(23, 16) +#define DCIF_CRC_HIST_COEF_HIST_WR(x) FIELD_PREP(GENMASK(23, 16), x) + +#define DCIF_CRC_ERR_CNT 0x2010C +#define DCIF_CRC_ERR_CNT_CRC_ERR_CNT_MASK GENMASK(31, 0) +#define DCIF_CRC_ERR_CNT_CRC_ERR_CNT(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_SR 0x20110 +#define DCIF_CRC_SR_HIST_CNT_SAT_MASK BIT(13) +#define DCIF_CRC_SR_HIST_CNT_SAT(x) FIELD_PREP(GENMASK(13, 13), x) +#define DCIF_CRC_SR_HIST_SAT_MASK BIT(14) +#define DCIF_CRC_SR_HIST_SAT(x) FIELD_PREP(GENMASK(14, 14), x) +#define DCIF_CRC_SR_HIST_BUSY_MASK BIT(15) +#define DCIF_CRC_SR_HIST_BUSY(x) FIELD_PREP(GENMASK(15, 15), x) +#define DCIF_CRC_SR_CRC_STATUS_MASK BIT(31) +#define DCIF_CRC_SR_CRC_STATUS(x) FIELD_PREP(GENMASK(31, 31), x) + +#define DCIF_CRC_HIST_CNT_B(n) (0x20114 + (n) * 4) +#define DCIF_B_BIN_CNT_MASK GENMASK(20, 0) +#define DCIF_B_BIN_CNT(x) FIELD_PREP(GENMASK(20, 0), x) + +/* CRC Region Position, Size, Value, and Expected Value Registers, n=3D0-3= */ +#define DCIF_CRC_POS_R(n) (0x20214 + (n) * 0x10) +#define DCIF_CRC_POS_CRC_HOR_POS(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CRC_POS_CRC_VER_POS(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CRC_SIZE_R(n) (0x20218 + (n) * 0x10) +#define DCIF_CRC_SIZE_CRC_HOR_SIZE(x) FIELD_PREP(GENMASK(11, 0), x) +#define DCIF_CRC_SIZE_CRC_VER_SIZE(x) FIELD_PREP(GENMASK(27, 16), x) + +#define DCIF_CRC_VAL_R(n) (0x2021C + (n) * 0x10) +#define DCIF_CRC_VAL_CRC_VAL_MASK GENMASK(31, 0) +#define DCIF_CRC_VAL_CRC_VAL(x) FIELD_PREP(GENMASK(31, 0), x) + +#define DCIF_CRC_EXP_VAL_R(n) (0x20220 + (n) * 0x10) +#define DCIF_CRC_EXP_VAL_CRC_EXP_VAL_MASK GENMASK(31, 0) +#define DCIF_CRC_EXP_VAL_CRC_EXP_VAL(x) FIELD_PREP(GENMASK(31, 0), x) + +#endif /* __DCIF_REG_H__ */ --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 81CE53ED3A4; Fri, 12 Jun 2026 11:59:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265560; cv=fail; b=HU+ggQZ9GcoOWAZtR5cXMIKfjrnHsQxY6+phBnwd4im+pnEzMlWCx1kfTkjiHERHj2WNgQgOqBzyggCDZqnE7PjkRxAIKE1Fdn/Fye2I8ex1w9SHViLAwGvLDRq6bOj4HXJndvEMdRTMfm0ZK1kxuMfGEvT9W8qCkAmqzxPJweI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265560; c=relaxed/simple; bh=tgMQsTV+razQihl+SxFDNRgAL8X4OEvZdMzjyZCnSKE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=CMozf/TiDp38pM5iH3Bw0LPt+TPLGK8pfC2amUlKuys+LcGYrf14iNCB+NiERhQ29AMyIwvPQU1icwKUUvW+8chHAbQqEXk6zUNS8M12Bws8OfK/7IGGAfMgk9jbMOcrll5KdqIwfGZGDh6DHrWLaCHEWW+AtVdYBJCTWhd7NT8= 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=OWNFif3z; arc=fail smtp.client-ip=40.107.162.65 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="OWNFif3z" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r30p2NVv1ICJXvp+X0TvYSdUEY7AAEIbqiqtxu08yj5pXAF+bkCu8q4jvhXs1tWd9nrmDf2W6SNx8tPY13thsamw2nBB/dAD427yfDPsQj2r4EBH3u2As6+QC9ORrsAuurUYjQqEhPZjxMB9KxySQfs7ohfUZhNXvrRZu3TpM+86//Qw+ESgfy9Ef8vkVcEApGGcDGW2aqMzJTQIiCVms+sLLTccA+8+saS9ugTmgE/fRftEY+idm+G8jZkZOdMFhvp5YhfxFiLHq97ssrHJcjdA8DG/uCs9+xD/3OiZemc/xsenYR9eToyu0V9695DaOt0JoPkW3mIYHWqwYM6v5A== 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=zjhs6+4aHpmWHwKW7uk/H3ZWC2xLvfNxtDaaOea8wP8=; b=M9Ex3hUkN17sra8vG4pY/umWypxP9RoUl1wyTkIXaSeeaGABI2DRYtbh9Mue7lEpISIz/MTPggmpvP84eyY9Jzibk9CaJfhxf9Fj38odDtJ7n3MAyXxoP+8AiiS+ZEFsAuLmfnOtbIvziGXyD4+xZV/Y9t6liP1s9rNmjciHs/gGP+RVkdYE4wlPjmTVupllWCSJZ25eubTTA4fN555e0uJeg8cY96pxROgV5OceSvpS3h0glGWUdyYwh/MLiEo0s1THl9Pzgy5h52rvmwZETe4KG3psH6dB3y+1tmEc3FF7I4aikdBYU0Y4R0xijY+3W7KtUPtUx+9IDqK4mczdJQ== 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=zjhs6+4aHpmWHwKW7uk/H3ZWC2xLvfNxtDaaOea8wP8=; b=OWNFif3zn8kI7yqPDsOBYlw7Wae7YPkIZOi4QC6ouQJUYJl00V4iDBW96gTPING5K2WwuxppCeFFZGPgaMqIVS7ya2Wo1DoQXIt6VjDGuh2GnFMAlIhD/+8ORn6mGYVCmduSfWIj1NXkFGdmsiIwn/0/B1ZmORf2iarc/Fddrp6t1tElesHBj4AWMezgDZC8dxlLPdgD7u6EYJ4pSLAyS1ycyD8MDPyDkHNCmocm8OGaI3QUrIXF//wp3K/MSrU5oETlsdFDzM8UP+iyWEcAnHE/B/NbhyQnUv8Rs2rmbFVsqASgEW63uytJ2p/OZ3Ng/TiZcYq2ew8IQylPdL6A+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:59:09 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:09 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Abel Vesa , Peng Fan , Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 6/9] dt-bindings: clock: nxp,imx95-blk-ctl: Add ldb child node Date: Fri, 12 Jun 2026 14:58:37 +0300 Message-Id: <20260612-dcif-upstreaming-v9-6-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM8P190CA0028.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:219::33) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e484a1b-2bc5-48e6-e307-08dec87a030d 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|23010399003|7416014|1800799024|376014|921020|22082099003|18002099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 1+LeqrT23covACUtxEw02EpmcovX7aGGZKtkTcplohgSt0EflwzqJxEyiEhm4eAduhZDrKWM1hAmFtU7qrID9MdX8utjF4X/0vDLaK9e+B323wryJ7tteGutqxLFPaQvl7/hQJxTA2x/mSdgDJpse7TJigc1+riqadfA+020M4WldTcReltY6OamxyoEO+ISYXdy5eFrDVzi7wuXagelOhKefdPh50vjFoAaBGhAM4TCnGW/V5/xM0gyodYcnQKm9/voxoU3BBD2hBRx6L68GqVyAiXxxYSAnx0YYOkAOzAD7OsGV83npO00mOKwb1zi/69VBqS/KTtkuIENvtttGVmPNbD5guo4dkbyaWhb8HxgnW9B+EXQWkCvhfhb9RKhteU/DO+RyKmNGoB7k46Pc9Qnk3WJxRkzVotxKmI+IjcvackptWADkZQ27YAAW1oz+tOwX/fArHuf72oA9jR+kHLrmaHHSpfEHlaEQZMcSpJB03HOCLnfB4s2iPG4wnDA8ZMFNMdOaioj9Z6KdXbcn9Lhq4PqjlZhH1d3Qd01TSKz1h0Mg92mrp4lqSrQUvd3aOXLBuo6aua8dLCdckk30Sn/qqxMehWBkJWXTWMHmIDk3Cm/3Yen2dU8qgA+dumCLqtKr1hGnLrGlKyIoEVK2EPqA/J+4Z0aU5W4vnTjQnHCN+euN6GEcwi12HZseUCEQE3ho5h/khxQ20urQ6V1ZmNcwUlg5ZcINQjSOABHPpE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(921020)(22082099003)(18002099003)(3023799007)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dGgwYlYxRDFnZjJYTjR6QjljZ0NIOEV2ZmJkSHkxV2hZZFpzRk9EdkRxZEll?= =?utf-8?B?YjU1UGtob05xSTFWK1dFNW9BcUpzWThpL0tMNXNyV3F5RzAySkV2U0JzY0w2?= =?utf-8?B?YVVXTTNCclBYMnI3ckRYS3Y3aXBsODUvYS9oTmZadkhzTGJkeGRxYmxpSGJi?= =?utf-8?B?WjJxWURvZFFIc095aXlmYjcvQUtmcUo5YjZQTVphTmd3Z2hzcXBHKyt5VTE0?= =?utf-8?B?QmlBeTlEUEEvdTFSbzlzeU1JOE5vK3pUZW02c0FUZXlIaUpiKzFhTGphS1ht?= =?utf-8?B?aEs1NVJZUEVCbU05U3pHWUU3T0wvYkkva1R6OHhUVnBLdUc0WXpYQnREVVhv?= =?utf-8?B?UzBycjNkdWM2RGRjd3hjUnB0Y2xVTnFnS3ZQSDZ0RWk5MmFMb2NyOVdXdmRs?= =?utf-8?B?ZFZhS1IwZkNwRVpKOFZ4RzU0a3VGbHJWZFk4dzJIckl2YkdhaFgxVDJ4U0Yv?= =?utf-8?B?UkV4c0tXNDdRcVlkTXFmb1hyeFhOY1hzT3JuSjJxaVQ3ejU5VDZnZk9hcnRW?= =?utf-8?B?WWFWcDFXRklTeFR0M0wvWklTZHc1WS9VYitEaThjTW1iZWFoSHM1anpJSVB5?= =?utf-8?B?VG90b0pWbDJEYm5pUkVOZ3lkS3Q0aFQ2QmpaVm44azh4V0k3Qlc5bXdOdzJP?= =?utf-8?B?alNIdXZ5UHlkUUwwUUNtL1BHMXB4QlpZWXVobWtBbDZaZE90WkhVMHhJUDU2?= =?utf-8?B?YjlIaGFOTDBxc0VTRVFlQkpoSzU4TndLVXozSThpV1l0VHp5S0FpREJxMjVk?= =?utf-8?B?M0JGN1h6SE9kZ0JYWkhkTVU1OUY1eWxFaTQrOXpBcjEvRnE3RWg1VDIyK05j?= =?utf-8?B?YzZxVXJoenljRVNKUm1yTWF1YzVlZGRKSmxnTDRFRWJFMjBUOW9mSXhIeHF0?= =?utf-8?B?ZnRBL3VjZllha2Q5UG9KaTZWSVJkUjQvZW9HNUtwOTYrbW1MbmgwVW5RWHNn?= =?utf-8?B?Zzd3b2V5YkpQbWZ6ZU12SlJtdnhYaVpPRGQySDUzQk9SZVlURzkrTTdJbHBH?= =?utf-8?B?UFlsMnZaLzRkWUxpM3g3NHJsRGkrYitVWDg3K1dXT1pkZ29JZ1Rna2liUExP?= =?utf-8?B?Tzk1d3hxMHV0aDQrTG1LN01XZmk3KzdGV2d6SkVocGgzKzZMTTJRUjkzTE9T?= =?utf-8?B?MVNWYTgyY2U5RldnSVR5U2dCU3I3Zi9QVjZjUFJlR2crclROR1JCMFBWU01u?= =?utf-8?B?TjNwUGY1THRjZlBSenhocmpyY1dvM0I2d3lnU0p5U1RDRzJUZVVMbVJoblla?= =?utf-8?B?RkI2SXZJNE5CNWY3RitzdTYyNmxxNVNvYUsvcm5GN1NZVEdFRWc4Myt5V2l2?= =?utf-8?B?dEFUbmxUUkIvbzIvTGRhQTFVWS9HbFRxQzRLaG9HMWh2WXdkUHJzZjhiVVhG?= =?utf-8?B?TzNUbDQ2OWNpNnRJdUpxZ0tXSG83cG9QWWY1WStXOVdKbDJsSFBBOWdNQXRX?= =?utf-8?B?YmpwTldjTnFROW1EK3FCanZoZnlFaDczaGZVZGZGWW02Y1hRWVZxY2dVbmdy?= =?utf-8?B?TzZpUEdZNWZ3R281SzNjVS9tMi9WandBTEUvMExHVVRpZXRZVjQ1RFAwUVlE?= =?utf-8?B?MmNKN1lkTTgzU2dZVmpXbktvTDNQSE1NckZ6ZVpXbExETmExQVhsV0h4dDdX?= =?utf-8?B?dFdrbWNIaXRPa0MyMG54NGkzSUd6K0FYMjZDa3ZEQklSSFNIQlZ5UmRQMTdr?= =?utf-8?B?eFViSVQzbXloZi9sU0V6VWxWZU1scm9MQU5YdlVIZzhzbjcrUXlyd1FXeXZq?= =?utf-8?B?RGZtUHRReEk0REtyQ1gwdVpZcWh6NTFSRVhSL1BUK1BaN1p6YU5BNXJ0cm1k?= =?utf-8?B?TDRKeTJXTU5NMkpKM1dveEhxbWJWRHp5TldRNDc0aVlDc3FNdjc0MFhaQVUv?= =?utf-8?B?Zko5ZmJyUSs4SDBadlI5Ym5kb2JvcE9IczRDOTBFTkhnc0xQMWRSR2Rvdkcy?= =?utf-8?B?ckRFbHJuazUrSDd6bVpjOVZjWjBDdzFlVFp6OWpDRlhqZERFdyttL3dXOG9F?= =?utf-8?B?NHlCM3FjT2tsY3V5Vk1UcXFSeWxTNVJDMkpPMTRDRzJwSGRGZFpsemYxR2tC?= =?utf-8?B?L3Jhc3pVTnhuNGN0ajZZckRWYVJFdU9TS3JVa1o1UDM0cXMvTytyRTNQbnFq?= =?utf-8?B?Z0UzVHEzRWYvL0xyRzR3cXhtZTVCK1BsenU2eVlzNFdOOGJqYW1jVXl3R2ZL?= =?utf-8?B?TG0wUlJhekRrYjF0SjlJcTRoNzNvWVE3Zlg4WkdMRXVndkNiWXU0Vm52bzN4?= =?utf-8?B?aHlKVE5IOVV2RHVMT3UxQXF3elN4eW9IU2RVUGdZaUwwVEI1czFlU1dGNStl?= =?utf-8?B?MXF0R0pHMXhhR3NDeHUrTXdIek5kUEI2WFBSRmQyQ2dNYkl3ajg2ekg3WThN?= =?utf-8?Q?katuUs1pqXCY1I3U=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e484a1b-2bc5-48e6-e307-08dec87a030d X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:09.7769 (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: YL7d6fAySXsl6HfZ1INZQa4VPbcY2SxG0l8qaKtyJgELO3O2xqpVncA02oGtvFVIfBSBd+qhQ/pGgMMxpyD6tg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 Since the BLK CTL registers, like the LVDS CSR, can be used to control the LVDS Display Bridge controllers, add 'ldb' child node to handle these use cases. Reviewed-by: Krzysztof Kozlowski Signed-off-by: Laurentiu Palcu --- .../bindings/clock/nxp,imx95-blk-ctl.yaml | 26 ++++++++++++++++++= ++++ 1 file changed, 26 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..2b3c762aba1e0 100644 --- a/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml +++ b/Documentation/devicetree/bindings/clock/nxp,imx95-blk-ctl.yaml @@ -26,6 +26,12 @@ properties: reg: maxItems: 1 =20 + '#address-cells': + const: 1 + + '#size-cells': + const: 1 + power-domains: maxItems: 1 =20 @@ -39,6 +45,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 @@ -46,6 +57,21 @@ required: - power-domains - clocks =20 +allOf: + - if: + not: + properties: + compatible: + contains: + const: nxp,imx94-lvds-csr + then: + patternProperties: + "^ldb@[0-9a-f]+$": false + else: + required: + - '#address-cells' + - '#size-cells' + additionalProperties: false =20 examples: --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 69F053EDACC; Fri, 12 Jun 2026 11:59:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265567; cv=fail; b=S7QyvggnoZrHz65Rt1/r08P7TAkFVSRUbVhg4PNzRmrPoyrtpbHkpT67d2NaZ8BsY3y2yF5LI0MdIACd3AE35H470UPUuHuWZOdmXodrkHGC+nQSqB+8L0PsBnhUYO1ZRJ1fHS5hjL1VbpcT+ZbQIPMB3wyTtWZ21iguXtgF7Gc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265567; c=relaxed/simple; bh=4P8l7nGUWfmRpBbkqclC9KjCJsI4+jRw+xLu929GEI4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uFKdjSYH/dj849IuoquENo4YKiRIA2Wz6+aqQRoCPBUR39AWkDOVa18EhKwq8tvJW2z6OaBtYXbdch+dbelntC39f17VR5kqMptg3he9ataeBAUkWtZe+aO+U8vrTCCGHVwAHXnHeZubXuxDYQbqsVAhs14k96CXojW1RaBqM5w= 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=UnbBU8d+; arc=fail smtp.client-ip=40.107.162.65 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="UnbBU8d+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hpHJkPOR+YxHi9C41KkLyOkumHC8NAM98ZfHaFJW7SzbWNWRvUBCpvBlwtN3EdYkgk3JIh8RV5/ZsPgsEgkY2iqXMZVDI6v6p/xW5yiVcPyh6lZWkP7JzciYj7oyukV/31f8qosquhHlF+pP77bpccyv4KJ+P8UCIF5LwGo7elvZVsLjglhJbHzsHl3Umv/POqAa1+MVqM0zl5anH5w4VZKvTEMwdfMRO3T1Im9gIFUgGO144F6Q4VyIcJqa0UGPv/oN1Ik7jKA6LGLOSw6sJi+uHQdpv0CKcHkQUQuPF417AbZ3aSuK8dRFMHqqv988ff0yPxEUo/tlUIi89j0+Kw== 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=XZVj0AQlEPiBkg3g/g6pSQIt7y5iwujN1k0A+b3psw0=; b=qKlst6IKxFcIIzx6dYYxVVQ7YFNCjAnShg4XxSImeMkeVxXN4ms9N2C9XNWwYFo13O8f68MYqLomYFoVmAjpX1ua/947Jl01O3zvqRtX+pPqey3e9CFWcwKOc1bk76lfT2ECiNop+oC3gKmOXP2RlxkRfzVCcv46ATsVfKacnuc38ScH/rV6U/fJbgjKSewwtDFxEesU6MGkTYofHgdr3/gPS4fFJV9DW6lTGARckp8JuCd7YNtkgpocKhLcSkBvBXg5xqcjuylUA0oCB17l+cnBG0PGc3Yled4Nc53RAb42DMcMWUsJIFjMMR6/GadzmhkLZ641QuKEmXZMEU99tw== 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=XZVj0AQlEPiBkg3g/g6pSQIt7y5iwujN1k0A+b3psw0=; b=UnbBU8d+w6/Yh5JMUDU4iU9vfiqQrGk238xn0i4gGXtt8ExiXWTMCum1h9N21279/ScBwTc4hIcHqfjBrsY5ZwdEGqsMwuQcOtyOMXOALOSq4EqJFaVEKlzoaBNo6/AZO86evOsQ7CO+OoEWirMoCvb5iYaOvxUnZBvWSFLR8+D4i0QaD0cLPDQsvbIKnKWHIO0BkR5KCT0kBp0KeGY9u9MzklFCOhez7QcJqRJn9x9F3yq0/3QtmWG87KX12/1qxa79qruxvSZvseB/zcZWYSqTtCmidPExjNI5THVCi59U1p7ZeOxdS4Oo5WnGOZZMNB2kA1A+D5L6pU9I8yEnRg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:59:13 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:13 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 7/9] arm64: dts: imx94: Add display pipeline nodes Date: Fri, 12 Jun 2026 14:58:38 +0300 Message-Id: <20260612-dcif-upstreaming-v9-7-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P191CA0027.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d9::10) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: e74dd978-7e21-43d7-5ed5-08dec87a04f2 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|23010399003|7416014|1800799024|376014|22082099003|18002099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: ezISH7n6HMUb4VobgiVOVW+vWYmNZDIA/R9/t/UkFMhCWBPQXfH/E8Vg4k4P7G+BMTmFsf712Fw3ED0cAu+qJV3VVUweUwPBaBqHb43L/2fd1Pn/i+emxdWxCeDOPMm8yl0quvmw+0ibmkj+m+A1nxARDkBGTdCmvXnUuE3wYL67hgHzUvTW++Yc4eVcf8RKeZ5OCZMx2wwvuvJzMp8Fa0ZOm3RzbCEm9k9O1GFxzu9VyJF5mKV6jnkRVhOUKy7xqV7BLRo09CHIeWtgNdPihx1xbHck5xHLwuk7lvw6vIFODORx7zkbJxgI7HAyH1pKL0EQ5TGRX8I+py3d5OsXMfU+iVQ9w1Ti/SnvBYS5Iz49gOWfpipejLCf/llR+npNscGjTefiRQ+NZT3UpV+t95nyQdJ12lFaDuRp1DGl+lyJ+zgZuxsuyVJZLSdrQziSxfyn8AyYkXUGrIfrS7Y1ZWGeRsn815RzP59I4Swy3HwQJ3B5SF+2+oMfGaHrJElmbwTFK84vD9M2imr9JSaW/oKpckEEjz/zSf9zfJumDAuonp3G0Fndui4T9em7YPFeqhHHqcPAnp0hMxysABP7DrTL3xgcfBARzIJOOFnidryBhkAGZXwB1ShvbsKEp7ValqjsOr4OIxaQE7PhfeqDp42gSJ1hMbQU5tCDPBVnw3MRKAVDgmnE0vHyrYLRNQ7D X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(22082099003)(18002099003)(3023799007)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2dEYi9GbGk4OEl0c2I5cjJyMjFvUUhOVGRpcGdvWEJJMXJjZG9Rai9hcTFh?= =?utf-8?B?bGR0bVFzdURlNXlZMnFWelhKZUM4cWFuWW1SZGEvWDVLcGdobWM5cU1KWWU4?= =?utf-8?B?cDB6L0ttd2ZzQ1BUNXVOcmFEQlR3aGUyNDVmWUhSTmFVQW5rVzRsZ2oxdUU1?= =?utf-8?B?WWgzY1lIbmdwajQ0c3hYMUlBaWJKR01CWUhPYyt2cUJOVWo2MDNHTVNxYjIv?= =?utf-8?B?TkJwMFRWeFVsWUgyVWNKTDVNYmVhRUxKMnRDenRBM3dwY2E3a2JxOUlKTU8r?= =?utf-8?B?bklXcXNJbnQvMTBjRmJpVTJlMjdPZ0lxYXA4SEQwYnNxZ2tGS1Q4K2VMUGx0?= =?utf-8?B?Tm1OZnRsMWR5U2gxdEdVNFRia2lUeVBYUUFPbHVEbjdnME16UUhSQzgwbmtK?= =?utf-8?B?ZXN2NEgwOHdjMW9CRGdOQWl3MUZ2bS9aTmJiMVBJVjhnVm5PS09ZUk4xUlJ5?= =?utf-8?B?T1BoNUk3S0luMHFHTlloMWFrVFJleDZLK3Rzb2pQT1B2eW1KM3puazhoTklr?= =?utf-8?B?WUhlWDdrUUhrMnBwZUdkYUUralU4Z1drdVJCM0daRjBJRHh0MzB4U21FTlFV?= =?utf-8?B?WGNxUnpUdWZNMUlrbTNyREdGMXR5dVVDeVhWS1ZrOFl6NXkvR3V6WlBBdFda?= =?utf-8?B?eVNHMnFXeFVrREdDa3VJbVdrV1orWXFXam9qYjh3ZEV0Rmc2cGNrN3BkQ0g5?= =?utf-8?B?ajdnam8zajRzSG9ibnEzSVJHVTVVeElLR2dvckVSZm5vdU5rd3JRRkk2TDFT?= =?utf-8?B?Z0Y4TDZ5M283WElkRDBHYmhONG5saDVvVExMRXllQ2wyVlFMQnJNVHNjTXZO?= =?utf-8?B?QXY5VnFVRXdwVG9LZ2FFczA3QW8vWlVCSlZtaFV4UDM3a2gzZHJYTDY2L1Fu?= =?utf-8?B?VU1lNXlkNjRLTWFVKzFZaWl6N1pBek1zWmZGa1dIL0Y2OWM0MmQvU0dNQjFp?= =?utf-8?B?VThpcHorK2REdGpHSjgvN0FxK3JybTM5RWtRWUhlM3hxZmhYRTlhMThvcWRO?= =?utf-8?B?WU9BN1hqcUs5V1E3OFNFbE54UmFRUmJPMEtaQ0Jsd3dYUXFNNHdWbjEyQU0y?= =?utf-8?B?eU5PMnhOL2g3RkxRZnE1R0RyLzdZUGtDbXNzcHdxcUR1bTVpUkxpVnhTK0lq?= =?utf-8?B?TlczbWhiUnE3QVl3TVdTMEJVNzV4ZGpaMDAyd1o4RHZCdk56VTZLcjdKSXhP?= =?utf-8?B?RGMzV2tkU001TkgzeHZEeS8wMVM0eGRmaC9kOEZYeFN6SXF4cHl4MHdaZm5S?= =?utf-8?B?ZGh2S3lrdG90ZE5PYmFLNXc4Z1pLWGU2enA3Tnh3elVYTGNzeDh4d2E1YUl2?= =?utf-8?B?VE9PbkZPY0dzeHJ4ZWxYNVMxd2EreldXUHVjTGtyVDhrNlpEcjVYOFdtSU5U?= =?utf-8?B?YmEvMDVRVTV0R2lvdk5IT0I1T2N6NkNrdzMrSWh4T3V0OVNydnVuMW5ZSEZV?= =?utf-8?B?R2xHbEVwc0I3YUd4SWZMdVBia2FpcCtYMmZFQUlIM3J3am8zaGNLZmxtbzdn?= =?utf-8?B?Ym5RNDQ3dGY0S2dCVGZ1QzFrZ1RGRmpldjJQeWQxSHNSY29iK3BSRlc1QW16?= =?utf-8?B?dU1EK0doWS95V25ENmM5MFBlMUFBMCt4MTlweGo5a3VKWFRrY3NaSlVWMVdh?= =?utf-8?B?RE41bHFzbW0rTlRVZnM2aldrODJ2RjBvclJDRkwyQWZGdHlBMnNPOFhwQ2U5?= =?utf-8?B?MFNvRUZETk5aVEFCb2Y5aThMV0tORHBESEU2NVp5V21UVzdHOERmblpZSkMr?= =?utf-8?B?ZThMOFFpcXZyUUlYaHhQSHRjcVVaWFdibGsrS2pVRWZEclQzRzJGbVRDQzhr?= =?utf-8?B?VUZ5cWhZTWtScjhWNDhncEs5eVUxTTdQOGhNclA2RGg2Mm50SFlyQkdnRUJY?= =?utf-8?B?RHI5UnNUMVB5T0QrMGlFWTlsLzB4OWtmcDZVMVlsZkgxTm5RMzAwK3VKT2hM?= =?utf-8?B?ZTQwTUNoZXZJWUxERU5XZlBEeE1yZStvWE4wL244RXc3eDgrZEcvallUU3NE?= =?utf-8?B?aGJDbThjWC90NFQrdGk2YUdmdkJoY0ZvRmpwelFmUzZjbDFYM2VSZC84RlFn?= =?utf-8?B?ZHlKV0NOUmNwb0ZnT3VWWG5zNGZFRUpXd2lhb0JWMjhONFlRWEhuWFVKUnZZ?= =?utf-8?B?djQ4YThWZmtVTE1DUWhuQ3U3Wkp2eTJHQWFFR1dzd2ZzUWhLOENHT1FZV2x3?= =?utf-8?B?RmpmVnBlV2pnNDNQMEh4MWFMMUFPR1ZDOFBMd0d1eldGTHZjWXZlcXlMNnhk?= =?utf-8?B?bC9ZaC81K2VoSm9QUjdDQnlVMHdCdStNRVpsVVpzR0JRM3F5d3d3cTNJMGpy?= =?utf-8?B?ZlQ1OGNWT0ZKSVZQQ01BcWVaaWM2R084WXFwa1FaTWxUbW1aWTdkWHltMElk?= =?utf-8?Q?2q33vbWVCn6UwuPo=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e74dd978-7e21-43d7-5ed5-08dec87a04f2 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:12.9608 (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: MbBOeRTjU8IvOF9Qk04A5sW19lFZlNqvtKUOaqeuF4yzXNiYaIje9CqQiCSQFWg/fGk4CtC4VkxP20Jeh+Ctfg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 Add the nodes necessary for the display pipeline on i.MX94: * LVDS/DISPLAY CSR; * clock-ldb-pll-div7 needed by DCIF and LDB; * Display controller interface (DCIF); * LVDS display bridge (LDB); Co-developed-by: Peng Fan Signed-off-by: Peng Fan Signed-off-by: Laurentiu Palcu --- arch/arm64/boot/dts/freescale/imx94.dtsi | 82 ++++++++++++++++++++++++++++= ++++ 1 file changed, 82 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx94.dtsi b/arch/arm64/boot/dts= /freescale/imx94.dtsi index a6cb5a6e848b3..95d862682703c 100644 --- a/arch/arm64/boot/dts/freescale/imx94.dtsi +++ b/arch/arm64/boot/dts/freescale/imx94.dtsi @@ -3,6 +3,7 @@ * Copyright 2024-2025 NXP */ =20 +#include #include #include #include @@ -39,6 +40,15 @@ clk_ext1: clock-ext1 { clock-output-names =3D "clk_ext1"; }; =20 + clk_ldb_pll_div7: clock-ldb-pll-div7 { + compatible =3D "fixed-factor-clock"; + #clock-cells =3D <0>; + clocks =3D <&scmi_clk IMX94_CLK_LDBPLL>; + clock-div =3D <7>; + clock-mult =3D <1>; + clock-output-names =3D "ldb_pll_div7"; + }; + sai1_mclk: clock-sai1-mclk1 { compatible =3D "fixed-clock"; #clock-cells =3D <0>; @@ -1305,6 +1315,78 @@ wdog4: watchdog@49230000 { }; }; =20 + dispmix_csr: syscon@4b010000 { + compatible =3D "nxp,imx94-display-csr", "syscon"; + reg =3D <0x0 0x4b010000 0x0 0x10000>; + clocks =3D <&scmi_clk IMX94_CLK_DISPAPB>; + #clock-cells =3D <1>; + power-domains =3D <&scmi_devpd IMX94_PD_DISPLAY>; + assigned-clocks =3D <&scmi_clk IMX94_CLK_DISPAXI>, + <&scmi_clk IMX94_CLK_DISPAPB>; + assigned-clock-parents =3D <&scmi_clk IMX94_CLK_SYSPLL1_PFD1>, + <&scmi_clk IMX94_CLK_SYSPLL1_PFD1_DIV2>; + assigned-clock-rates =3D <400000000>, <133333333>; + }; + + lvds_csr: syscon@4b0c0000 { + compatible =3D "nxp,imx94-lvds-csr", "syscon"; + reg =3D <0x0 0x4b0c0000 0x0 0x10000>; + #address-cells =3D <1>; + #size-cells =3D <1>; + clocks =3D <&scmi_clk IMX94_CLK_DISPAPB>; + #clock-cells =3D <1>; + power-domains =3D <&scmi_devpd IMX94_PD_DISPLAY>; + + ldb: ldb@4 { + compatible =3D "fsl,imx94-ldb"; + reg =3D <0x4 0x4>, <0x8 0x4>; + reg-names =3D "ldb", "lvds"; + clocks =3D <&lvds_csr IMX94_CLK_DISPMIX_LVDS_CLK_GATE>; + clock-names =3D "ldb"; + status =3D "disabled"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + lvds_in: endpoint { + remote-endpoint =3D <&dcif_out>; + }; + }; + + port@1 { + reg =3D <1>; + }; + }; + }; + }; + + dcif: display-controller@4b120000 { + compatible =3D "nxp,imx94-dcif"; + reg =3D <0x0 0x4b120000 0x0 0x300000>; + interrupts =3D , + , + ; + interrupt-names =3D "common", "bg_layer", "fg_layer"; + clocks =3D <&scmi_clk IMX94_CLK_DISPAPB>, + <&scmi_clk IMX94_CLK_DISPAXI>, + <&dispmix_csr IMX94_CLK_DISPMIX_CLK_SEL>; + clock-names =3D "apb", "axi", "pix"; + assigned-clocks =3D <&dispmix_csr IMX94_CLK_DISPMIX_CLK_SEL>; + assigned-clock-parents =3D <&clk_ldb_pll_div7>; + power-domains =3D <&scmi_devpd IMX94_PD_DISPLAY>; + status =3D "disabled"; + + port { + dcif_out: endpoint { + remote-endpoint =3D <&lvds_in>; + }; + }; + }; + hsio_blk_ctl: syscon@4c0100c0 { compatible =3D "nxp,imx95-hsio-blk-ctl", "syscon"; reg =3D <0x0 0x4c0100c0 0x0 0x1>; --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013065.outbound.protection.outlook.com [40.107.162.65]) (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 596C63EEAF4; Fri, 12 Jun 2026 11:59:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265577; cv=fail; b=FYKMJmzDIhkovqAhO0IOpq3vJ7QTE3juk1ORC7a19DseYsZRqJn0mgZ2IDo63pnyZHriprpwGmkiYL+kQeMtSYemIbAGzCEH7/3nxzb+39Azlsc8H3le+pg1dTLGnyBU5pQ9dpa8lYmY2h377hf0g5kgO66G0IIdCaxuvsedr+Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265577; c=relaxed/simple; bh=eGszHe0lxWODISbNjRNuZ6AaSxRiu/HoKmMXOD4Ujrw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=upN3iQRnZjqol9ceZdI6Q08qDuvgl7JuiIgbTBN2dr6B8u3oB0pwXo+kVqMsL4jNrU8pbVteLk5vNHLv7xvrQrrszvs4G6MRQtC1SFGPE4vZ4mKnfjLuyGWJWc0eiuGV+3XsUMuhP/BvNJAO0xLox2dg/7w62WEjpdDV30046Dw= 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=M9y7kg0d; arc=fail smtp.client-ip=40.107.162.65 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="M9y7kg0d" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qHFTJaR/iRy/RRZ1Nm9Vz26k/d20RzyzvpeXwYWAzP4nMA/dsY9vWYX22ApQrYYr1u9slSfEOQ569nUZAhGvJr819iutTa/TjsjiD4VXXOH5nhtKsC7IgkqW0hSaIFAmYp4wCy++akEREaANrOKdxAwmqq38ws9wMpft9o+1tDkuOtk6ZuB8TtIbPIjrsejjIZ2WW+j7I+jmUMNVzFPq6aQV8wEMouteydwaskbnIGKpaXHngrEh3nupe64Mw70MOHCaCY+8zfYEmoVjSOOmXyaAfWV8Mn32sBFaXCdzdOwQtBASKIcgw5Cg9vw5c6aDK5ntFvLRHTzSptgOzNLmzA== 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=obSXXgOHgQtNi40F6ebpI7qmREJdWM/dy7defPYda08=; b=BKuSwGy7PmVPI9RgEBWi5P8dxShFer8oqo+6b8eSbekw7pc3gGEzLUouJ0lHzt3a3V6bKXzaqnTXaCAu/aJW5Ag1/MAfpPhBBqrq2DUT334t9vWYuPB7arW7J8DhePaFIq5radtKEY40Zs/QGLdyPT1eqahk0rRiS9AO2IKwej4HlN3pVMPbSCcmBTiHEdv0GqzTTSQZ3IGkr4MRTCnmY2VFOszcEiAhqTxVjZ7Hw0aN0N0gvcwgibDwSiHp2IJKHr+Sq1DszOTPky7hajc6T7PGjYKE6wiJsUmcAYWzDIovf/2hc4RAtF/tVdjabvRq3HgyENteRY0cUcVYgl2vsA== 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=obSXXgOHgQtNi40F6ebpI7qmREJdWM/dy7defPYda08=; b=M9y7kg0dQUo5QBmINl0UTRP3rTrKLzCb6EUa4ffESdXi9VVbFTJIIL07wfUCG22RDyItowqptHSOqud/pmI21r4pNp09eEJom2GrU9eU0WYnlYl5RRLdhUKK+C5A9sz0cz0C8zTjktQyGCKJtx9b7tMDfaluhQxt8Qf2DIo27i7ABTL+jhfDzkh+O/hzxX8A/e0+iWwxb5Sahg6O5RORygkE8062SwuAATd5ytsZIqPZgmNomqNqx1rzjTisgvEjWaZvO5Hf5QMTSFKrbgAXwwnF6JYbHY/qA8IQnRftT40n+MEwSh44VpEyfyFS8kv5KydOyDeLuyrJOXnoJRKn4w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by GV2PR04MB11710.eurprd04.prod.outlook.com (2603:10a6:150:2d5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.13; Fri, 12 Jun 2026 11:59:16 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:16 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 8/9] arm64: dts: imx943-evk: Add display support using IT6263 Date: Fri, 12 Jun 2026 14:58:39 +0300 Message-Id: <20260612-dcif-upstreaming-v9-8-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4PR09CA0019.eurprd09.prod.outlook.com (2603:10a6:20b:5d4::10) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|GV2PR04MB11710:EE_ X-MS-Office365-Filtering-Correlation-Id: 8493e8d3-3fa6-4654-1cb1-08dec87a06c6 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|23010399003|7416014|1800799024|376014|6133799003|22082099003|18002099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: lk5e3dshTCPp4UbS9TTQ/HNQANCO/Bo6JQOwMH/lJuDEXo6YE6F1XgQAP6PCaDi+CIP3iLOBtj88EAp9lhe9UCqc8wssEfK8R8LV9H4eASozP9wRWiRxeRPGgok302l5lCoTMnAeFWVLwDj0dDBen0b4a8sKn95c0EKflvuiDTayvPAmTKu15qCtGy/3fJc8LAwAerYEExio39BZNWqhiwEmxWXqOs4OVL83WKwxTjBfk9UqRPD2VpgL94kH30yotVjUPzJUxMFyZggrHoPp3fUeAxAn7C6TiA+I1mSQqQ21Lu5G5/mNIor8Qa1gl8+ddp+JXOlP5GlolLp/tYyWMuWPBn54n1um9IZUhkV3GzzcSRh0Z5c6vWff31+ZI0aET46mzwsw5BVDLSSZ34nEqDKQo3VeXCDAuZrM3hiMthHav2qU2SsLpJoC6HaQFnTKJFIMnHtSjsTReUqMiFY82wk6JdH2SSD0kBiQDemJQwA01afu3AX2YpGyypIUFO9dCLw+wWhSFrSS4ujE1ZuzLA3JJ/+0uem5WUJE510JijpnV+zfJ38xVlAxPUqSl+PS2ytvpySEqcBmopTh7ZOd6ilwnFWrwdmNc0Cl9OLnZ8vINTb+2Is7FWNYUBVxoG22t8VKEN797dx2DTmmscOdfyHHsj/fA8+c+I1Oa6/qzP/3hYX/l3mnMxlsMmQVE8RO X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(23010399003)(7416014)(1800799024)(376014)(6133799003)(22082099003)(18002099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bUJqQUt5S0REUEhQWkJhQXJOU2t4TWUrRlRQQjRqTHJ1UUtmUE1ZQkkvSzlQ?= =?utf-8?B?dTNwNUVLeEFGN0V4YThQZmp2TGRWMEcvT2JIVHVJTDNPSEtsYm1hZktmMkNj?= =?utf-8?B?dEhHRWwrRFZsWXI4S3lKRndHQmpWNCtsV3p2bWFLQkF0UHBVRGdlV2k4OGMx?= =?utf-8?B?MnNFSTVlZHV2UGJNeisvdG44R0dnWjRaanB5akhJcWc4TEdoMERJVFQvQmVt?= =?utf-8?B?dHA0WVc5RnNhZGtCWUdTVTBNQ20wbThDRUlRYjlmR0FmOTZoK2U5QlFpWFVw?= =?utf-8?B?T2ZMMTBISVo1WWx6eW9IWTBXeitKcURNdzNST0lXYW1rdnBzMnZtaTdnakVN?= =?utf-8?B?QjlSUVB6ampGRXZpcGkvN3ZCOFJseTNVSnhVNFJSKysxMmVRRFc2cE5pWEhm?= =?utf-8?B?ODU1MEZOckhhakZYZmxjWUxCdFVUZXNKNkpoOHYzUzZTblJJMSswWXBRdEl5?= =?utf-8?B?Y2VrR0N4YU5KZ01EZlpCa3VEcEZ5WTVqTnVJb2x6Z2IyVzBwVWNYSlRzNDRT?= =?utf-8?B?aGhJeHcyRnRWaUNqYmZhdnh3WkxvV3NpRmo0Nk82dE1IS1JxRmR5RXFSSmd3?= =?utf-8?B?eGttUUFxR1NNVDhZcGVEYXN1b0lmMzY3K3FjNkxncW8yMTlINElPcVY5YVQv?= =?utf-8?B?ancrZGI1YXlGU05jU2xQekpvV0pzNVZ1NlpkbWZSMmhCZGhNejNWTkpzWnRI?= =?utf-8?B?akhFZXAyeVY0Rk9iVlFZcTk5djBVbDIrN0MxRlZmR01oSWpZd2R3cWRGRXdM?= =?utf-8?B?VDdJZFFUbTI5WEQwNmYyWUJEZWIzQjZnU2JvNUE3K3g3cVhzY2RwVERRVUk0?= =?utf-8?B?TFlnbHdPWVFORmpraFV1MzNQQWEzMzdYSElsdWpVN3hqbWV3RWY0cmp5dkxV?= =?utf-8?B?UENRQmN4Ty9IK2tGUWkzQWYxZlhxYloyWGhxdXNVcFNJMnBFUlVYaUtNZWVF?= =?utf-8?B?MW5jRk1JcEpnc3NqZDFHUytkRDBrVjNRRzJxaUxkOFROS01iT3ZPR201R3E3?= =?utf-8?B?RGkxOEJXeGYremFhWGZZaEhTUHRUU2NQT1Z2SXc0KzlGbGU0VExCOVRpcWhJ?= =?utf-8?B?YU03N1Y3Z2tqUzhjYVp6TS9Qa2Fzbmxtc25YbDRiamFFQ3RBQWh3TUZieWky?= =?utf-8?B?eTl2NWpYT3RHMTA5dVlpVTNNMHBSVURRaHJrWmpKMzdmMFZQcEwyeFRtM1RZ?= =?utf-8?B?ekxYVEEzK1pRUmVkSG9wU2xydkRFVHpNY2RHVExPQlJ0bmxRWi9NZUNjeXQ3?= =?utf-8?B?SGhvemxPenQ5MFFQTXNzaFJlc1FqZEE4Mk53cm1GbnNyd0M5WG5kUDNtRjhX?= =?utf-8?B?QldURU0vOGllYzlhb2YwTWo5eWdwOERVUGJubUxEN2QvaitGRVppYUhuMFVC?= =?utf-8?B?SkhUazlrZW41MHdET2FydVJCZzFzOWpwSHRSd2RzS2ZoT2VPbE11Vkc2YTJu?= =?utf-8?B?OXZiNDBvbzdCcjNlSU10aXpKMU5hdWVXVmdiSCswMVRONW04bEJhQWZGbjkx?= =?utf-8?B?Mk9qSThrWEZxMlA2bzBQQW80cXdzUWFRKzJkbjVzNW8yOEJQWlhVR0h1VmI1?= =?utf-8?B?aVUweHQ5R2RjYTdGdW1DTTN1Z2hXeHdtNGcrM3dLOGRSdmh1ZDhZR3o3dXpF?= =?utf-8?B?MlJqY2p0OU51aXhNR3N5dGFiWGhoOEFndXVYbjdOdUJ6Snc3dnAyM2x6clY2?= =?utf-8?B?bEU3VmdGTFNzKzEzSFdmelFZb3ozRlNIMGxuWkVrcG5SbUhmaERjWFNRMEVt?= =?utf-8?B?L1FPNzBBb1BwTE5IWWtSdE9KYjFuZWxWUnpHSzJqSzZpQUNueTIzMDRKNFQv?= =?utf-8?B?c0JDNzdTN05QNE9PN05teWltMnlyeFpwejFjZnU3WjREZ0M5cThablkvZnV5?= =?utf-8?B?dkIrMzZSMUphZUtLdjdEcHBvTzUxY1BvcnR1Tm5hTitadkJzMTBhRVpYRXhy?= =?utf-8?B?cXZsMFpvUko5dTlXT1dBc1VUc3UzUkRlb2FVK3dXOUFhMjRQVVhSSHNyQmdz?= =?utf-8?B?ZGZPQTl0NFFwbS9zMkNrNm0vSGFaZHhaU1JZLzFCNFBMMSs1UXhKTXlNRURa?= =?utf-8?B?blZrcFNiNUM4WncwRHg1OGF3QUxaenExb2VwVWc3ZkxLeWU1KzR6clJhOWty?= =?utf-8?B?OG9MMFVzaGVCa2k5MzZoWFkwaFh6WkkydHBXKzd2SjRVcHFWcGJLNWJvQTVx?= =?utf-8?B?Mjgxa2cwdTJuV05UdGNCYU05ZzFTQUtKUEZLalRVY1drQ1JsOHlsbU93SU82?= =?utf-8?B?WVkzVmV6Y2NjUVRlb1NCeUlPdmw4NEo5Uk1adHRwbEZmMlJDdU9BZFRnMHQ1?= =?utf-8?B?MTlnVnVmNmFSSWdZZVhsc0E4ZngxRVpjVjlJaEFmTi9VRThIeEZRWis1Q0lN?= =?utf-8?Q?fNNAep2UeuvQ/fYA=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8493e8d3-3fa6-4654-1cb1-08dec87a06c6 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:16.0002 (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: VJT0/NinA6RuaUdfazvXPSfNyY68sy2A8EVrjDbS5Ixtk6MteomPDbqiQ6XAEgwoYFrkjD6VZd2f1P9I863BiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11710 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 --- arch/arm64/boot/dts/freescale/imx943-evk.dts | 86 ++++++++++++++++++++++++= ++++ 1 file changed, 86 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/imx943-evk.dts b/arch/arm64/boot= /dts/freescale/imx943-evk.dts index 7cfd424689507..41a2a700a86a5 100644 --- a/arch/arm64/boot/dts/freescale/imx943-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx943-evk.dts @@ -77,6 +77,36 @@ 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_1v8_ext: regulator-1v8-ext { + compatible =3D "regulator-fixed"; + regulator-name =3D "1V8_EXT"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + reg_3v3_ext: regulator-3v3-ext { + compatible =3D "regulator-fixed"; + regulator-name =3D "3V3_EXT"; + regulator-min-microvolt =3D <3300000>; + regulator-max-microvolt =3D <3300000>; + regulator-boot-on; + regulator-always-on; + }; + reg_m2_pwr: regulator-m2-pwr { compatible =3D "regulator-fixed"; regulator-name =3D "M.2-power"; @@ -210,6 +240,10 @@ memory@80000000 { }; }; =20 +&dcif { + status =3D "okay"; +}; + &enetc1 { clocks =3D <&scmi_clk IMX94_CLK_MAC4>; clock-names =3D "ref"; @@ -248,6 +282,21 @@ &flexcan4 { status =3D "okay"; }; =20 +&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>; @@ -331,6 +380,43 @@ i2c@3 { reg =3D <3>; #address-cells =3D <1>; #size-cells =3D <0>; + + hdmi@4c { + compatible =3D "ite,it6263"; + reg =3D <0x4c>; + data-mapping =3D "jeida-24"; + reset-gpios =3D <&pcal6416_i2c3_u171 8 GPIO_ACTIVE_LOW>; + ivdd-supply =3D <®_1v8_ext>; + ovdd-supply =3D <®_3v3_ext>; + txavcc18-supply =3D <®_1v8_ext>; + txavcc33-supply =3D <®_3v3_ext>; + pvcc1-supply =3D <®_1v8_ext>; + pvcc2-supply =3D <®_1v8_ext>; + avcc-supply =3D <®_3v3_ext>; + anvdd-supply =3D <®_1v8_ext>; + apvdd-supply =3D <®_1v8_ext>; + + 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>; + }; + }; + }; + }; }; =20 i2c@4 { --=20 2.51.0 From nobody Sat Jun 13 17:29:44 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013045.outbound.protection.outlook.com [52.101.72.45]) (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 AE24C3E5ED0; Fri, 12 Jun 2026 11:59:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265571; cv=fail; b=nVq2l/jGesRqcjZwr60NCElmUPysoi4lL0flludE61GmfASI7K6xLz0A2ea7mGI2ae0kE2fd43ETMiVj+GwqXHozAWLuNH25pOafdj5mVBtxZM1LLN0I8CmGzlRc0O8I6rwwsMHhLIQYyCfsqQsvU6uo6vmT0URZ5wMnp7xerYI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781265571; c=relaxed/simple; bh=isP3jQruuvN6qujpXQAfEymF9yjpVjJYnRXduu5Qt6U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=oYK2X3xiiJvUv7/+YRNvxpG75op6U86zH9Xdba/UdUHZNI9kADUa6RoRdjQ7Dels4pz/X5FWaiTehxDhB+fpI7vFn+lm1laNCk7YBK/MLFcPj/oFT8bUP/NFDUDUXqZSoAM49rKQEeBpy48u4dqYtzN5mB+uaaSJ0RUBBkCTjDY= 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=PAn/3KK0; arc=fail smtp.client-ip=52.101.72.45 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="PAn/3KK0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wIT7jG4w3glvJ0Q2D/Dumc9HSJgVFQ3vGNktE9h38WbISC29yLXbVM+yngoonoOY3emcFf6zCHfzQnYDpUNOEkIqDG09D3zhu+NgmQDUFURUJ0XCOQXJM6FHsz8R4F5BQOlflB0Vu4eB7Ez1/WvbDsbFRKY4+SPyTww1s/yfkYXmN2snefoBVhKn+uAW3IF916seKrvUt+i9lLakdqtTOo4wUEI+on5acVq0UryRThYkBPRv6rxlDJdAkVEfDoplGRlzqjsZZHxI/nA6NlQdhdmCDJeWmBc62zdfSEe9hDNMtp8njyZK42mOsn6uJDTRJlAYruY3sYGPKf9/Av97fw== 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=mFc9BPHJOJGdnTa8LeIktpGdu58tI2kLfK9Gp4owrG8=; b=H7gh/R64XS0Izy+/WUHF973m8skWV/vpREM0FhumXF32NvCMc9m7lExrhGcqAq5oq2giRYL7QNkTC1HT62iC5Xb+SmQWtFiDLrHR5aOrZhjl45iD0C8nZ4w1vOtoAl7NnHMf/R4O4yuWEqD1eqQ8DMI8OIr3P4fQpGENGeioYo1Tv/g/OrWUpOVGMC3db3wAokndskGebRqT1aItWLQ5m0/5CrrUiy3ddyAJHnNq4bWH4ETLSC1+vqY7EwE011d88YXCmlgtYbGoG1J4GhMl6jfycCJ7iLy5VIYGE6o6Wu6H37Z793FluMFH/9574YxMiYkm0qwqjw+4EKuYrjlqlQ== 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=mFc9BPHJOJGdnTa8LeIktpGdu58tI2kLfK9Gp4owrG8=; b=PAn/3KK0mgk4nTNsuy+uI/IjeDPqOFMNVA4hA5rMjn+1UCGrPHi5/ziB7m+GjBsXz0lZuHeY/IfV4OayLh74PmsWxJOeGCeCDvcJjynIv9Jl/chK/OoHP2Gu21IUIaS2kXUCHmCyo9YM8Iffb2dvo6Wwxh/JSqufjwpF/Vz9KfWt2s7aXDo3of5gAv6nL3eH08gOQutqtDqm84S03qMFeS94hLVPKgszaRUXXksGIHGm/1+6YNyBZVarG6jfD+3VqXtEToqSwWf4zy1mKujxKvJg3hX3JkG0CqNgOhcm/Zi/Gi74jxm+f6uKei9wUgQJ2M/NOF5w0yqmAUUcIU2lsQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::19) by AM8PR04MB7378.eurprd04.prod.outlook.com (2603:10a6:20b:1d8::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.14; Fri, 12 Jun 2026 11:59:19 +0000 Received: from GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa]) by GV2PR04MB12318.eurprd04.prod.outlook.com ([fe80::a498:2b5a:cbdb:d6fa%5]) with mapi id 15.21.0092.010; Fri, 12 Jun 2026 11:59:19 +0000 From: Laurentiu Palcu To: Ying Liu , Luca Ceresoli Cc: Laurentiu Palcu , linux-clk@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v9 9/9] MAINTAINERS: Add entry for i.MX94 DCIF driver Date: Fri, 12 Jun 2026 14:58:40 +0300 Message-Id: <20260612-dcif-upstreaming-v9-9-8d0ff89aa3c5@oss.nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> References: <20260612-dcif-upstreaming-v9-0-8d0ff89aa3c5@oss.nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS4P191CA0021.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d9::6) To GV2PR04MB12318.eurprd04.prod.outlook.com (2603:10a6:150:32b::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: GV2PR04MB12318:EE_|AM8PR04MB7378:EE_ X-MS-Office365-Filtering-Correlation-Id: c0225795-a487-4e11-b594-08dec87a08b5 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|1800799024|19092799006|23010399003|366016|376014|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: IuC2T558gCDHH/cnFz1j6Kur0NP75dO+N+TpfQ+4QW4s6FZTOQksa0yE50pDMRdT/gGRblEkiFIQYHb0znzRokd+0eqanpwNBGugFMrIKcRvCwkO7cLVZ9L7RVMc1F79rvagjnzF/BGa99+otpKDxMO5Z1Qtp7o/dVLiBGBpsLhcdDimvadg/i1bs9+Q+X3LgLDFqZo57JNbT9+FhSmh+VLLCIgD0jhdAOM+WN/ljzEuqEtOYhYzg2v3iXrkjJ63SYQiIwE0XS6gZuRtUCPdf5aLFJsiKt478xmwzephOVtg7ACyo0BiXBMbI685THdHteXMv/8RLR06EGVc5vIWjmbAOgXMl7zlIXJ0qAhaLqJtbnzWPNT6bwXo/h4JjMD/9JPdDuqOcZIk6U/3RGbA4i5HuRlQNMwXVpKXir38LS8SEQIi/XcylsbpiJ48xLNFxTDYfsK+VgNcYLOmU/B9TmHeXNERVLkFW5KdHxhmEQSd4GwlZmUToTBioPtMUQ3ONaEr0b1PCb7YvT8EhOim7gcLh1jzyXbZjOvQmaqWR5mCmdH+io9B8jDDYTDa33vbtLuEwM0iojKcUX1nvo7QgXYoMbOSU+f5ooJARs1eD6tcUBH+2tjZtFguwmB16FsuOY3Esy6Bl413vBHiKSdA7A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB12318.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(19092799006)(23010399003)(366016)(376014)(22082099003)(18002099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aHB2OG1wYy9VN0l5dXgyZ1JjWWxRQW00Q0N2TFRqMXJBV0VBbGJ3eUtORnYy?= =?utf-8?B?R1RHV1pQdW05dWR2YllPK1dTUWgvT1V3QkVOZVcybk4xbXh1RkFlSFJXa3pu?= =?utf-8?B?cTZHamdqOWRydzRxZzZUWjhRaE8rOWxsM0JsdFVjSzFyaDdHRm90WjRaNk9Y?= =?utf-8?B?djBCTGRYS0FpQjFDMU1TektjTVN4UmFDY3c5YXdOYUJXbVpwbkM0amkrSElq?= =?utf-8?B?YVpBTTNWUHpiaGlqTlJFRGw3aTByNndwRk1qZll4SDV5eFRvNzNmZHVhVjBl?= =?utf-8?B?bDFLVkZKMHM3YkZwMjFwUzNrL2U2bENrMHFlc09WVmd4d2FoYU1KS215cnB4?= =?utf-8?B?eDFJTFRNRzloTTRETjhtOERSRFlqSy9qYlVobXNNRUhHR2lhZFg5UTJMMTlT?= =?utf-8?B?bSsvSFhqYmlmSmtLMmxHL2ZQZE0zKzdCeVJxZkVhN1FDYkowWDJKS2pWRGFN?= =?utf-8?B?b0JNTnZFeUFmUGVZVm10WndtMHIxdFNUNy9zLzBacy9RcUVPL1J1QjdiVEtT?= =?utf-8?B?NlhaL09kb1FNUFAvMDl1aUJDcTRmTEdGMVdhc05XMXJZSVk3U0YzaUZOcHN1?= =?utf-8?B?UlZlNzhUOHJQSUk1cnl0MkJpenlpV3Q0djRPQm1FZHlOa280STBKMFlYYnVD?= =?utf-8?B?U3Uvb25yNVZZN3U5czVNM1E5dXFpMDlXY1Jub0dlZzZEb1ZzTG9EOFczVThO?= =?utf-8?B?Y2ZHbGduN3NYY3N5S0FnSHJoR3MvZmN6MVdGSC8vQXFtdDQ0T3pSdWFzVVZJ?= =?utf-8?B?bkhHSFhOdGN5TUo3UGgxNEEwTTNlczdudGllMStCSm45QnFDRWlJK0pVbWpV?= =?utf-8?B?Vk13YU9EWVRvbUFMaGZ1M3Q2RmhoTkwrTG9KVnEwTjQ1bFNzRzJuWDR4TVRY?= =?utf-8?B?dHZCUkhWTTAvTkdSWGNWbVRta21hZm4vSUsxQU91eTNUbmp2emplWG1HQXlm?= =?utf-8?B?KzFPZHlvYWdiNWRta0lZWWNYR2pvTm1TSWdVWk9ZekVWQnpSNEtydmxQTjBw?= =?utf-8?B?czB1b2dLUFcxNmdydnZraXRzTk5FRnU3VU13MklEMWlwd21ld29QektvdjFz?= =?utf-8?B?b1ZuMmYxb1RLMGJRMkJGbzJXamhkZnZrNVpzYng2RXNNQjMxWm9jV085T0ZN?= =?utf-8?B?eVliSWRHVkVrOGlMQjBIc2hKN3BSZEVmRys4YTNZeUxZOVhYM1BEd2lheUEy?= =?utf-8?B?TzhrYU5wRFpHdjdESXR3RUUwVVpKNTdwYk1xS2xIVFhVMS8rUEdOVC9leTVr?= =?utf-8?B?aFB4QVBOakpnOGw1K1dRWFVLTEIzZDZRclFBdUhWb3B4UXo5QmRyMXRMOTg0?= =?utf-8?B?a0ppa3Y1VHF0UkJRb1NrR21ISjU4VW9RV2xLcUFwUmc1Y3hEd2RSdDNoVk5z?= =?utf-8?B?K2ZwZHowSzYvRzdnVDU1dzFSRHBVWHFPUmNPdzF6WWFoQUJXdWlBeWdYTjdo?= =?utf-8?B?M3IwaWlyK3hxcDJTN3FPak4wb1l5U0M3Tmt0bjhLU2RGWkl1TU1lcUZMbHdO?= =?utf-8?B?WTJqVDlkQXlBUDFCY2JhUkZZNkJQbjhQRXdNcklKUzdtQ3MxT1FUWGR1TVQ2?= =?utf-8?B?a2lFdzNrYTRuZEpMV01oMXYrVzlGMlR6YmxxS09BU1RrbVJXOHlBWkExdC93?= =?utf-8?B?NDk0RTE5TFpqRGhtYVpCcUNJYmIrR0NFNTB5L3BYY0VBZWJPdEJrajdtTEZt?= =?utf-8?B?bTBMNG5FZlJCSFdBUXB6WW44OTlTcmREcFhsUVVlclVxMFdkWkJTT2U5UkdE?= =?utf-8?B?dnh0Q1A2andKOGxRQzFMM2FRMzZBTk9TUmlZWkJia3BKc2RRSnA1TytTbDYr?= =?utf-8?B?Z1BaV2V4QjdyRi9MdU5yU1VoQStLcHA3ZllmTTgxdVZRK0NWNTJiV2pkZWpN?= =?utf-8?B?VXB1Mml1OTY1Q2NkejRxaGJCWTRERmxuSDlBdGpCSm5CRG1kN1BUc1JtVVFk?= =?utf-8?B?NjBvUUhEa1JIU2lRb3ZBcHFPWHd5Zk8rRng5S3d0SEhUQndPWUhYUUxFNEhl?= =?utf-8?B?LzJBSFZXMzV5U1hsd3FiWHNpSm5jNm1iR2RsaWdEeGt2VzJHbER2ZjdJVCtS?= =?utf-8?B?VVJZNHpFMUw2MkdWbFl2ZUk2ZXl4MldKc1NDT2FLTENUNzZ0Wnk2OXdNTzVT?= =?utf-8?B?djJlR3ZFN0F4dXlrdEpoTFZsZmYvOVAzZDIra1hCRGFFYmc5a1kzU05VeDZD?= =?utf-8?B?a0w2TkpPQTlFaXRIaHBtVlZueXNoVUtDVUd4eFYwZFBkeFBhTEFDbHBxV2Uv?= =?utf-8?B?SVZmV1Z5dUpJTmJFZXl5aTJwcWhxR0lnbmExb3JwcUxmbm9xWWFQZDI5Si96?= =?utf-8?B?K2JzSlFxYmJtVWFLdXdKV1lvOVFFQjlPMzhUWnJ6ZGlTNU5OTlV6YW9hVUtz?= =?utf-8?Q?E+RwY16Iai0c3nn8=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0225795-a487-4e11-b594-08dec87a08b5 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB12318.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 11:59:19.1608 (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: I05PbkyK2/280eLeVtmRZq8SgvkoaHVva7eO+/3q3xPfX2nJNrprmK+p7WH1EkR69vUxqc3KvJR/OwnuwaTXyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7378 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 f1caa6e5198b9..e8931231b5b7e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19492,6 +19492,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.51.0