From nobody Sun Feb 8 22:08:05 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012018.outbound.protection.outlook.com [52.101.66.18]) (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 CB855341AAA for ; Fri, 31 Oct 2025 10:21:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761906083; cv=fail; b=uYdeSuKFHODc2ggolKboqngYVxuPN5WdTStEA+kCPlz0jCCZHfRNfm174lDum0KFRpLGrWHwp6hwOsQAv/nfpVeR34+B6VjwRqC9Ra96b6ht+6NH+im2vl5yQL1RkV7gv1guqsKuP26Uuzecz08Y2tp3T/SfO5GjCvgs8/iogu8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761906083; c=relaxed/simple; bh=bEzproNzG25HYlZrNpoWpt0mWqRJmBZWtkP9ZPfkQR4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WAwejigsWvUz3oMcWWxH0KIHLV6GW42PtVzfUgm9gbWBf+gKuBQ9mpNtO5RCH7rHdOGja2cDoFkW94ZtqFEU6i1u9ePbuGlkPm5MiBJrGRsSOyZToQYWBzNyW5Wj04Me9iQKCXPFQmA3IIipOVnExNfRkiwH3ymMcRvGqR1oQbQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=IyDKGFlE; arc=fail smtp.client-ip=52.101.66.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="IyDKGFlE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JlarNMwarBTFimBcuItagG5PQ9vDYh1eEF3eHPpmJxlk+gB0Qmxy6K0/XbWTAHxdzKL7CVaBspYNhg0qjucg24JSztfFwAeyXAwdrxCH4kOkPCtWfR86v1qUL1JHKd406j3vAHBw5/v8DyH4+dDqCzCf2+iNpoS1gKugRDYXERQ3RiHarGjS5Y/Je4eV54Ixwz9kY7rVqLa9d1mmw0xVjJl48pZ7pW/NJNzeZ9uwqmUdXqHltgjuLqUJAHETOssrx8Glz9m+p0pUgPX7qhDFt9pEhq+emkYQNOzWr9gZ5/M9uQvOl+C/MIOwbScbyY4DAXuQeG1haTykZQfjPO8YVA== 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=/6HFWJD8Z9XGs5dJmdmR5Rv34O8gqVjxD/YOU5KsM+0=; b=ooPyR3cd/t6zCqbe0t7HZplWrHAmRpR+OpTYKC4OmBafmHKqnP2bDQONrbQBhsV8D35ywYBLZena13mZiUFJrRgg9/heIZmFLN98SveVHPZbrhr15AIhiBG/SICE8QN0Ube2QP0/3AjL8QwQbEBQ0dDPHAXCUs+D6d2X+klhxb8YFuZE0IY4AsE9qOPi3SKX5SE56MjkqMEa13mk8rguPyF9JS3fbVmuDQmj9lkRwBACS9DsbozvZsQ2zhsldxz1SMiZcUkIor3GZjPD8ZmeWOGwmuuc+6gxT7EiS+AYeRt3SZyp68x2J6GrUJG0lpaC4HzuLEaMTvcct1HdFbo6fw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/6HFWJD8Z9XGs5dJmdmR5Rv34O8gqVjxD/YOU5KsM+0=; b=IyDKGFlEQc9qGx7CHosYyuUMYbrC+MKIXAJaA0o3B75t5mLHFXJ6sShm0eEzW77983mOEO0sl/eucgojh1yZgJwqKheAficbKEX2uyEN+1IOK/NGeJZvf2gsbnHtrjSmYN7vwzKGfau0CbzICHtxuuXyTT737GRdis4glbfHULfqmDu0kVuxM4p1wwRHj3NWGVAcfOY7u2aofBTMI9WEOwDqbRN4iDM/K1/15awWncOuyK6bvIWnZ7faGRke0m7eu4GQuSotQIo2GW3/MzYupM/KUT37LISwOkYxjnekXbf9xV8VqA4KM2l80KXMNzjhrKfrc04f0b1XTDlJhExo1Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB7056.eurprd04.prod.outlook.com (2603:10a6:800:12c::21) by AMDPR04MB11677.eurprd04.prod.outlook.com (2603:10a6:20b:718::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.14; Fri, 31 Oct 2025 10:21:18 +0000 Received: from VI1PR04MB7056.eurprd04.prod.outlook.com ([fe80::66b9:8242:90ad:ac74]) by VI1PR04MB7056.eurprd04.prod.outlook.com ([fe80::66b9:8242:90ad:ac74%5]) with mapi id 15.20.9275.013; Fri, 31 Oct 2025 10:21:18 +0000 From: Liu Ying Date: Fri, 31 Oct 2025 18:21:24 +0800 Subject: [PATCH 1/2] drm/atomic-helper: Support atomic flush with an optional kthread worker Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251031-drm-crtc-flush-worker-v1-1-9edc94da0fb7@nxp.com> References: <20251031-drm-crtc-flush-worker-v1-0-9edc94da0fb7@nxp.com> In-Reply-To: <20251031-drm-crtc-flush-worker-v1-0-9edc94da0fb7@nxp.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Liu Ying X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR01CA0145.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::25) To VI1PR04MB7056.eurprd04.prod.outlook.com (2603:10a6:800:12c::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7056:EE_|AMDPR04MB11677:EE_ X-MS-Office365-Filtering-Correlation-Id: 8c8e3f75-434f-4d21-7fd2-08de18673ade X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R3ZKanM1WDhrNmFXSUs2ZTZuUmFBR0ZCNldPODNuQXFQWE5aS3ZCNkNMUmxv?= =?utf-8?B?bEZZR256eEF2dkVDSlFubmIveW0zcU1XL1pYRlgrY1ZHaEJ4SnVyTCtTVVhG?= =?utf-8?B?ZElTcHFSYldsSjkva2ZnbFdUZFFKWkQ1ZFBGZnowb2RvWk9JWHMxc0FxYjFy?= =?utf-8?B?cnJUcmlUTExIOXV4N2w5SmduL1VaQXZBZnJGUysrR0NpUkJIdHZhS1F2RFg4?= =?utf-8?B?UmFNbkNxc2ZsSnVNMFZ5RkttVnpOdUpRUzRTSzZnbXhPTW9KRjVNY3BLbzJV?= =?utf-8?B?VXA4V3doOGZmNXlVZUVRbEJQNTg2L0RJQXpZSFFsYnRHbEt2MTZCdGJRWXFU?= =?utf-8?B?d3lCcU43QVl0aFBJSWFmL0ZrQ3d3N2VXc3l4UkJSaVo0Qm84SGxjakIrY1ZO?= =?utf-8?B?ejlSMHhMM0J2bzFuZTZSMk5HN0swd2hxS0xPQjQzd1laTitIUTRNRjJRMUFK?= =?utf-8?B?bWx3RGZBdlpHMEdzc2x2MVdtT2hPeEpRSWV4UkljZkNWbldDVjhVUk5KNUpS?= =?utf-8?B?OHI1VHlzbVpPT0w0cEZRelpQWndmYm1CVTdXVzZ4QUlYckRmWmJaS2dLYUx4?= =?utf-8?B?NnNkNkMyeGs4UnAwdnFMSHFXWTV2OVNxZExrTVN5Y0FHZUEreXZpTXVtOXpx?= =?utf-8?B?alhMVEFkdFpQN0F6WlBqVDk4QUtBOStrcEM3c3pHaGM4cjh2M25ZZnJhSUs5?= =?utf-8?B?UWRTUmx0cnpjRnFyc2JnUktEUlkyZWJ4dTdaa1VFbEVKaDhtUmRTTzhxRTJ5?= =?utf-8?B?cHJVYzgwd1llR2Z1VFNrbXhHaDVEajVJY3RwUVlwSFBqREFMRE1nUE1aazBB?= =?utf-8?B?T1ZaTk1YYUpNOGpFbXMrb2VTbytIaHhFVlQwTE4rQlkrbW9mVGZzcWNaT0Rx?= =?utf-8?B?YURmdmYyVUEwN1UzaW9QRHgzQ3lRNTJnUUdKSWV3VlEyTGt6Y2NuM2t2Rlla?= =?utf-8?B?eFRCYmZKYXBJejRPajlDM3JLNTNjSHJDRzhrMWdyV3VsU2x0RE1jMWdHUzAw?= =?utf-8?B?VmJETDBIaFk3QmtKa0lXOStQQzlidFNFZHBlaXM0a1lvQkFEeFAyVG5SRFJ4?= =?utf-8?B?TTdma1VhNStSQWsxSjlDTzFYQ21zNGFpWjcreDByckwrcFk1TlNJRkJEY3lw?= =?utf-8?B?WGZ3UTlWYUVXOEJlZ1JZRmp6VzlWUjU3Q2pKK21IUnNqRzVqT3NBK1BQaHFE?= =?utf-8?B?VlA0Tk9RanJRN3ZPQTFHMFpHTW5mRGRxbmM3WTdURzc4ejMzdGE3TWV3VlF4?= =?utf-8?B?aGRtUW5aYUF6aWk3dWZrRkVUamhyYmtEc1UweUtVRTJFWkZYaGd1Rk0wdWpJ?= =?utf-8?B?VWFRNUFDSUVIeFdLUXhxSjhITU1Ud0tuSm02bzdsZ2hNM1grMWFzWTFaV3gz?= =?utf-8?B?dW9nYVBVeHRhVkdIaTNBa1VwS2Q4cE96YW9rQ2tYZ3dWeHFMYVR5UFBEcUlp?= =?utf-8?B?cUVZR3hvc0FZakY2eFRmNTRFNVFoNU5qbmpGZDZ4eWhLenJqSURGSGRtVHhq?= =?utf-8?B?Ym45TGJxemhoQzVQaDVwME9XM0FScTNFVmdlYXhFeWFUYjd1alBjRWhDcnRK?= =?utf-8?B?YkcvbW1WMDJMdkErMFMvOXRGcmRFbWZGRG9OWGxZT0JvS0lUc1FvNHFVLzVK?= =?utf-8?B?SUNRRWxuQUtzUFluYjZiR3JOUVlQWW1SV09pa3NVaTNKaGgwb0NZbzBOUnQ5?= =?utf-8?B?V1dwTEk0UnJwK1hOUTMzcm93cXhLZGFZL0w1VFNqbmRkUkRidFUwczRSN2k3?= =?utf-8?B?YUdKQjVHamZabXg5OFBvRERHK0dqUERWWUpsem5NRW40S0hzTVZKNFpkUzdq?= =?utf-8?B?dm5GUnlpZU9jcmRBbTFKQUt5RVV6WElMRnhPaUlza1REZ0dUSEVjcXI1NFRy?= =?utf-8?B?UklLMFV3NUlEU1dtLzhBZXJIT1JNUjhOajMrMGxjek5JTkdEUXNINm42eVJI?= =?utf-8?B?endTaGxzOEpGUUJFY2NTaFZwc3dqNHNta3VHcXRMMHJQanRIcXNQOGdJYUZU?= =?utf-8?B?UTAwbnZIZjBkRk9DWG1kMWVnU2NoV1paZXdCclkxQzBteEcxWUFlNHNqUEoz?= =?utf-8?Q?mbhtko?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7056.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K0VvZTNPZmJjc1NQaWZ6QW9DdTVVWGVvYjVuWEhMUFZTUVVEKzdmdHNRV0JY?= =?utf-8?B?VGNjVDdhRHNyMWZrcEp6NkhlOUtmK1EvOS9QYWtUbFRwc0RsMzdrZ1ovRmtw?= =?utf-8?B?V0dwYmduTjNpWXd3blYrZURRSURzUzhHSFc0bVY2M29oWnJVNjJIT1RPYlQ2?= =?utf-8?B?YjVxdlQvdnVDbkVSQ0lndFFIbEUyK21ZRm56ZlhVaFNRbVhvcFcwVE9QSW0z?= =?utf-8?B?NUpwMnBNRmtJWk80aUQyS3B4UWRDU3libzBFeExQWDBHZkVWb0VkWGxXeTJR?= =?utf-8?B?RVBsUFBIYnNPeS9Ob21rcGRRTS9EOWxpUlUwcmVleFU3QkNFUnJOd0J4eUIz?= =?utf-8?B?Njd0c1ZsRC8yK3RLb0cvbjBVRjJqemYvakVMNnpaeWpFelRLa1FFd05NZytp?= =?utf-8?B?ZG9EbEYvY1R2TDZZcG9pT1YzNmw0Smg0TzBGL05KOGRLWWlsZ01jRXlqNEFP?= =?utf-8?B?eWlnWnA2eGxQY1dkY25DMHc2Skc5MWNVUDJibTFMM09udU56NWVxN0tQY0pR?= =?utf-8?B?emdOUi9KdFZDNWJTaVJQUWFkV25VcjNZaEtZdEd5WGVLVjNGcE4yMUJNb2pX?= =?utf-8?B?OWQyTG9FR1VLa3d5UHFiQVc3L3dsbGg2WnRlYk9NaG1GT0FIQ2k0ZDdycUxV?= =?utf-8?B?SGFZR0hVUU5NdGZZQXdGNTh0bmRTRzdQRmo0N2I2T3NLL2Vhc2s3eDVvL1Ny?= =?utf-8?B?SDJrOXd0RUZadnVGSEdrVUYzYWQvc0Z4cEUyVktENk4zVlU5OUdMcVdvY0NO?= =?utf-8?B?dkJ2ZVFjK01za3UzQ3BGM05nczJEWTVsZXBlY2xWUWdaQ0lpdmVxL3NiUW5z?= =?utf-8?B?OWNzQlZnTTlaTFY1dCtrNTA0NGo5L1J5UWt0cjdoRmdiREk4T0IvS283bzVM?= =?utf-8?B?KzJZdWRMazFjSmtncTRUQVNNWjhrTUtnT3A2NXpUVkY3MmR2ckwzTzlzRkdD?= =?utf-8?B?emJyWFhrV016OVJ2bUJsZENSN0RDUkQ3TWhuRk5LSXppQzFScy9pR3lXUVVR?= =?utf-8?B?WjE5bGZJakx5QVlSaVJtM3ZrN1JmU3p0UXNvRWJZSUkwWVJDTWhWR1BwQUJw?= =?utf-8?B?bHBlSm5BVTcwREZ1SnU4aE0yRUJvQ2ZXczhLR0FCSlpTZ1BVMEIvZENjYkRY?= =?utf-8?B?UjUvNXBDdDlUckxxTVdCUGpEWnhUVFVjT09YNy9BY1N3ZUZMMjBta2FKRmpZ?= =?utf-8?B?TkpoTkl6c0VmdlBoNW1WMkw1ZlRYUUtMQ1Nka0JBb1h0cGlQTGlmdEFmOHFn?= =?utf-8?B?MFlBMHJTTmVubTcwYlFxNUtFbXNoOEN4ekdjT0xQZ1NkSUhjR0wwZjBKeFli?= =?utf-8?B?dE9GMkRtV3NKVWJ6YktzUGk4SmJhQ0FlU0c1ZW5XcForbm1uUzgxeGRBYTcv?= =?utf-8?B?WUFzVzJMU3dpb2ZkUUdSN1dGZjY4Y0ZKMHZ2RVNxM3ROT21WNGYwUXB0SzdM?= =?utf-8?B?UUkvTWc5Y3M4WE5iWGdpNkptK0tQMlVUNW96Wkg0STVrNDdvNDhOSFd1UW5D?= =?utf-8?B?VzZVaHkrV1NGSVZlZnNqMmpobnFHRmtQc2ovMFk2bXlISFdLQnRNR1AwOG9J?= =?utf-8?B?NDUvUnVCaXNadmRVQTQyYWt1RElSQ05aU2NGbWthSy9NN3I0UHg2ay9TRGV4?= =?utf-8?B?bndNc3pPTDRhVHg5QXFXdjI1RVBWMWpnWDFjVE5hQ0N2OXlxNGFCS05SQWVl?= =?utf-8?B?RW9IR012cUFtWjl2VXl0TGREdGdIWTlGNzNidXZ2ZVFnMjg0M3RzcU9KWWd4?= =?utf-8?B?UFQxWGhacC9PbE50WEc1Rlo3bmVucHJQcGp5VjVIM3EwRWkvcWFWZGdPUWRy?= =?utf-8?B?ME56dUVrS3oxYWJscmRORTIvbjdEdExOUkJzZ04yb0ZCR21uUC9IM1YrTFFK?= =?utf-8?B?ZzhtOWRsUm1wSTVxSUNFNUxKY2VpK2NNbXJybXdQVXZEeXd2RVBlc0NPdEtn?= =?utf-8?B?SDFZbE5VZG9WTnFzcFQ5RmluQmcraFd1M0ttRzErUklDZHR6VVhGanlhMUFo?= =?utf-8?B?TXVTSlBSdVEvaE9acXpmWkp5ckFNTG5DOGN6ZXRza3NaVnE3bWE2cUZjRUhM?= =?utf-8?B?UUU1VitXaG1vZkVvODZnRU0zbXM3VEhKeWd4UVJLRDZCSnErcjRtY1I5UlN5?= =?utf-8?Q?JVND09GlS5qG7lkS8hdOSXTiW?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8c8e3f75-434f-4d21-7fd2-08de18673ade X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7056.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 10:21:18.5429 (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: WQW8vRGRcwxSPra86z5FPxaXPL4v0gy3gyRGso6W9VYGZ27mzEFLuUMER4t/3lPATU9Nmh0TvoTLTdNrJ0wpag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMDPR04MB11677 Atomic flush could be blocking and hence potential low performance when flushing for multiple CRTCs sequentially with drm_atomic_helper_commit_planes(), e.g., page flip for multiple CRTCs in a single atomic commit. A real case is imx8-dc, where atomic flush contains shadow load register trigger and waiting for the shadow load done event as required by i.MX8 display controller IP specification. Add an optional kthread worker to conduct atomic flush in drm_atomic_helper_commit_planes() so that multiple CRTCs could be flushed in parallel for better performance. Drivers should call drmm_crtc_flush_worker_init() to initialize the kthread worker if they want to use it. Signed-off-by: Liu Ying --- drivers/gpu/drm/drm_atomic_helper.c | 27 ++++++++++++++++- drivers/gpu/drm/drm_crtc.c | 59 +++++++++++++++++++++++++++++++++= ++++ include/drm/drm_crtc.h | 45 ++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atom= ic_helper.c index d5ebe6ea0acbc5a08aef7fa41ecb9ed5d8fa8e80..e976facba8fc55fb8634d3d8768= 6cd2e1c3fd31c 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -27,6 +27,7 @@ =20 #include #include +#include #include =20 #include @@ -2977,7 +2978,31 @@ void drm_atomic_helper_commit_planes(struct drm_devi= ce *dev, if (active_only && !new_crtc_state->active) continue; =20 - funcs->atomic_flush(crtc, state); + if (crtc->flush_worker) { + crtc->flush_work.state =3D state; + kthread_queue_work(crtc->flush_worker, &crtc->flush_work.base); + } else { + funcs->atomic_flush(crtc, state); + } + } + + /* + * Iterate over all CRTCs again, to make sure flush works have finished + * execution if needed. + */ + for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state= , i) { + const struct drm_crtc_helper_funcs *funcs; + + funcs =3D crtc->helper_private; + + if (!funcs || !funcs->atomic_flush) + continue; + + if (active_only && !new_crtc_state->active) + continue; + + if (crtc->flush_worker) + kthread_flush_work(&crtc->flush_work.base); } =20 /* diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 46655339003db2a1b43441434839e26f61d79b4e..dad4182d2bb893a3e015cf0573d= f2c410c5ee226 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -30,7 +30,9 @@ * Jesse Barnes */ #include +#include #include +#include #include #include #include @@ -41,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -440,6 +443,62 @@ int drmm_crtc_init_with_planes(struct drm_device *dev,= struct drm_crtc *crtc, } EXPORT_SYMBOL(drmm_crtc_init_with_planes); =20 +static void drm_crtc_flush_work(struct kthread_work *work) +{ + struct drm_crtc_flush_work *flush_work =3D to_drm_crtc_flush_work(work); + struct drm_crtc *crtc =3D flush_work->crtc; + const struct drm_crtc_helper_funcs *funcs =3D crtc->helper_private; + + if (funcs && funcs->atomic_flush) + funcs->atomic_flush(crtc, flush_work->state); +} + +static void drmm_crtc_flush_worker_cleanup(struct drm_device *dev, void *p= tr) +{ + struct drm_crtc *crtc =3D ptr; + + kthread_destroy_worker(crtc->flush_worker); +} + +/** + * drmm_crtc_flush_worker_init - Initialize a worker to conduct CRTC flush + * @dev: DRM device + * @crtc: CRTC object to be flushed + * + * Create a &kthread_worker used for executing flush works for the CRTC. + * Initialize a work item to be queued to the created &kthread_worker. + * + * Cleanup is automatically handled through registering + * drmm_crtc_flush_worker_cleanup() with drmm_add_action_or_reset(). + * + * Returns: + * Zero on success, error code on failure. + */ +int drmm_crtc_flush_worker_init(struct drm_device *dev, struct drm_crtc *c= rtc) +{ + struct kthread_worker *flush_worker; + int ret; + + flush_worker =3D kthread_create_worker(0, "card%d-crtc%u-flush", + dev->primary->index, crtc->index); + if (IS_ERR(flush_worker)) + return PTR_ERR(flush_worker); + + crtc->flush_worker =3D flush_worker; + + sched_set_fifo(flush_worker->task); + + ret =3D drmm_add_action_or_reset(dev, drmm_crtc_flush_worker_cleanup, crt= c); + if (ret) + return ret; + + crtc->flush_work.crtc =3D crtc; + kthread_init_work(&crtc->flush_work.base, drm_crtc_flush_work); + + return 0; +} +EXPORT_SYMBOL(drmm_crtc_flush_worker_init); + void *__drmm_crtc_alloc_with_planes(struct drm_device *dev, size_t size, size_t offset, struct drm_plane *primary, diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index caa56e039da2a748cf40ebf45b37158acda439d9..62e98d714bbb4d1a948cc7c17ba= fbe587490b081 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -25,6 +25,7 @@ #ifndef __DRM_CRTC_H__ #define __DRM_CRTC_H__ =20 +#include #include #include #include @@ -923,6 +924,34 @@ struct drm_crtc_funcs { bool in_vblank_irq); }; =20 +/** + * struct drm_crtc_flush_work - flush work for CRTC + * + * See also: + * drmm_crtc_flush_worker_init() + */ +struct drm_crtc_flush_work { + /** + * @base: The base &kthread_work item which will be executed by + * &drm_crtc.flush_worker. Drivers should not interact with this + * directly, but instead rely on drmm_crtc_flush_worker_init() to + * initialize this. + */ + struct kthread_work base; + /** @crtc: CRTC to be flushed */ + struct drm_crtc *crtc; + /** @state: pointer to global drm_atomic_state to be flushed */ + struct drm_atomic_state *state; +}; + +/** + * to_drm_crtc_flush_work - Retrieve &drm_crtc_flush_work instance from a + * &kthread_work + * @_work: The &kthread_work embedded inside a &drm_crtc_flush_work + */ +#define to_drm_crtc_flush_work(_work) \ + container_of((_work), struct drm_crtc_flush_work, base) + /** * struct drm_crtc - central CRTC control structure * @@ -1175,6 +1204,20 @@ struct drm_crtc { * Initialized via drm_self_refresh_helper_init(). */ struct drm_self_refresh_data *self_refresh_data; + + /** + * @flush_worker: + * + * The &kthread_worker used for executing flush works. + */ + struct kthread_worker *flush_worker; + + /** + * @flush_work: + * + * Flush work to be executed by @flush_worker. + */ + struct drm_crtc_flush_work flush_work; }; =20 /** @@ -1220,6 +1263,8 @@ int drmm_crtc_init_with_planes(struct drm_device *dev, const struct drm_crtc_funcs *funcs, const char *name, ...); =20 +int drmm_crtc_flush_worker_init(struct drm_device *dev, struct drm_crtc *c= rtc); + void drm_crtc_cleanup(struct drm_crtc *crtc); =20 __printf(7, 8) --=20 2.34.1 From nobody Sun Feb 8 22:08:05 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010071.outbound.protection.outlook.com [52.101.69.71]) (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 6A003342C9A for ; Fri, 31 Oct 2025 10:21:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761906087; cv=fail; b=MyLBTO9yPTeRKiEnZU2qyx3OENr/ykMKh9hBBm3KcXILy9gaIH89Do8oZ+1RhLqeUxEVKyuzDD6+hQlO+E3JQhf2D35eCB/tt3TbDN3ToeAR63NHoibVxXdnb9sVW6IJhK80eNysmr5y/SCSfYS05R9pMVTTP3/x9wU9Npg8nS0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761906087; c=relaxed/simple; bh=q5qAekZsVu2C0CsB7DstUC+weWf9F4WdEK07LlG5Ppg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZVm1gpuqZQ1Nv+qmFvkanJsOrWDqQZFHHhbAhTFAuNHRsYPi3l2alq04MQnvNa1fRz7K7VQwrMDRHnnfQQesuqg5XUpzSMWbgIx3LqNrC+bmBxWoaCeSR2vHB/kIZArcbhg7PRDbcpR89iyoRLvaRfmS9KhzP1TdgkE0eDnh6h8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=keZxvGGn; arc=fail smtp.client-ip=52.101.69.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="keZxvGGn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WeWe2gt2mqN07/0zpC4mDNLhjxhpggO6k9N4EPScS2yAeB469N2I7V8m4cCc/BT909CGSK+gp8Q7KiRv7U/n8fxtziw0Ijv4Y7BxvEYY8y1tDnVGVS93MOw1Tm6U39jWlRMTnheTmzH0uXNMGAniS+tduJXtIzVlTcYl9jaevuxybwx5K6xwBfKLCkF13Y8ulFrj+eJmGTV5QJtwOOiPoDGMNyaS731ZsNkVqp/wmr/X/SuS9h6sP6+rXgOdRMLLAW/TdhA12Mqp0PRdjnnV5faFbd/431PLu2u6MsuMfHlqpszwyxfCGDQEQRGcjy5M3NLTjXeY7OXTkTi5r3zWcQ== 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=ksiW92odG01+LAy3d2A2oDV3FJg6/BKSIndRYTVtY2g=; b=nooov4biTudkUinTpuEEWCJBZFnDCUwb1CTQ7RbM8E34mHgqjPLQ955m/lk3lvOjYavjoM3aZ/B1tkAsVZPaPmoKSkJ1IOpj2zb+kzVcLMOBQx64f1ij7aDTc1WeVuH8EDLr9akiB2o6LmzfbMQjmB7kHF7GXofkQyuL/ikaHvtvVMkotxRo9MuHmTt0aZDu6tmDhbwowtmDm4O+fUfU7GkJ34tsgJIPaN7tCMmbSJKMcTW//ClH/k5LiUqYJnLsWzReeDPk23NWsZaG1eJxRFJdsK7EXhzFoWEwTeml8P/YH41+50NMfjeejfkvqSdbNU+mH/tGHbUInGzRSaCi2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ksiW92odG01+LAy3d2A2oDV3FJg6/BKSIndRYTVtY2g=; b=keZxvGGnVCDb9pySc8N09k/nKdZDlbpxD+vWyc9q9Vmh+JoRZqxgmRnqaFq4VS2PAi66XjxfJC+jEdMEgguFKF2uRzq5dZIPpitTRBwYXDwXd/L9RisgfNh1I6VuWWWTJUmXTRJOmFmjJyU7OdQGUoKtrtk9MFjVIYbdPrmAlDdNSBMk+GAV6COG2Xq6bruzBW4JQW5RZrscBPOvPmNd6u03eKTkW9EO3aoyp2oRfzw9mgq5DVGgM1pBcNWtvTKWHG80tQ6hxszvR4DC4W4doapbzCHpKS2f90MX+oUBnYYlbBF09nXXNyTgZBU8VX1I63vwy2M5Ob3BkVJtJnPeTQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB7056.eurprd04.prod.outlook.com (2603:10a6:800:12c::21) by AMDPR04MB11677.eurprd04.prod.outlook.com (2603:10a6:20b:718::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.14; Fri, 31 Oct 2025 10:21:23 +0000 Received: from VI1PR04MB7056.eurprd04.prod.outlook.com ([fe80::66b9:8242:90ad:ac74]) by VI1PR04MB7056.eurprd04.prod.outlook.com ([fe80::66b9:8242:90ad:ac74%5]) with mapi id 15.20.9275.013; Fri, 31 Oct 2025 10:21:22 +0000 From: Liu Ying Date: Fri, 31 Oct 2025 18:21:25 +0800 Subject: [PATCH 2/2] drm/imx: dc-crtc: Use flush worker Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251031-drm-crtc-flush-worker-v1-2-9edc94da0fb7@nxp.com> References: <20251031-drm-crtc-flush-worker-v1-0-9edc94da0fb7@nxp.com> In-Reply-To: <20251031-drm-crtc-flush-worker-v1-0-9edc94da0fb7@nxp.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Liu Ying X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR01CA0145.apcprd01.prod.exchangelabs.com (2603:1096:4:8f::25) To VI1PR04MB7056.eurprd04.prod.outlook.com (2603:10a6:800:12c::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI1PR04MB7056:EE_|AMDPR04MB11677:EE_ X-MS-Office365-Filtering-Correlation-Id: 6fe0847b-dda9-4a4c-2646-08de18673d9f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MFdjUEhnRVp3T2pZMkhZMjdqWFJwa0h1Q0p0RjNQSWkxUHB3eWx4UDF2Sk5j?= =?utf-8?B?VXVBckIxWUdCZkRCYnZqQXdNaTlkWXVNeGtWdjNpNUExcXVVOTFKL3Uvek9I?= =?utf-8?B?Tit1MHh6SUw5V3h2dTIzUmt6UHA2RzV4Nnl2OHpxaFNHRURMakFzWUgyZjA4?= =?utf-8?B?ZW8wTDJrRkpuQnp0cjdicFl2eERZTm5KRjI4SHVMTGxCUmNGbVNzbjErenRQ?= =?utf-8?B?UVRwZWd2c3UrM0h5SWZpRVdvZk1pMWJMcDFoWmxrSnRHcTBwZXdHaFFUc3pY?= =?utf-8?B?a2wxWE04Qlo1ZHNwQmVVZlBiWUpSUjhvekw2aXpBUWV3Sm5zKys0UzV1NFQz?= =?utf-8?B?QVhQaE5xWHp2UjMwQjBNaG4yVkV2ak1RY3V1RytIeloxb25zQ2F4ejR4Y1Y1?= =?utf-8?B?OGdyeG5xVll4UmlNMGdzQVV4aXkvSEtzVTZ0SkZjRVZzbzJMOFRhaWFIS2Na?= =?utf-8?B?VURUVjFXM1RLejEyNEROTEJ2WmN6ZVh1NE5Dc0dwVE1yaUZMa2VZM1NBRjl3?= =?utf-8?B?STJ2ZFFtNEprc2h4OUZ5MEtCMGQyOS9jVExTWnUvcFhlbU5wbFZvSGd5eFp4?= =?utf-8?B?TklDMmM5SjdWTk84dFpaVFpKSzBsWjZ3UWdpKzJIUzFpWStTN3B2VlM5VVNF?= =?utf-8?B?NC9FWkdJZkVGZ2dmMnJvSFplT081V3FQMWp1ZjFQbzY4emxGeVlRM1ZUZmox?= =?utf-8?B?VFNHTVIrcU5tcENWd3ZBVk1NMmNlbEdoWVIyVEFuQm1WS1NYcmszekRPZ05P?= =?utf-8?B?MVhtSXlGUEtnMUVSL0xSWGFOcDFhY01ITzIvQVNFVEFoRnVQYzM1c2Voblli?= =?utf-8?B?dDNJZlVjUktYazlGZVUvZDlnOFBmRzdtMHF6elhtenk1Ti9MdmFTK043ZzBu?= =?utf-8?B?YW1JcWI4QVBmYk1uamo3Zm1JVEtTSmZKamJiV0hqQjkxbnJJUVJ1SlhzTFNN?= =?utf-8?B?SFB6NDB0WGUwbjQrSFpxMnJDZXBUcjhLNmtPSjY0SW5mT1MrYTI0SGFIRU5k?= =?utf-8?B?TjR4U05yWHBNUzBNMG85TXVoUzZTUUZrSk9lU1NMN3M0eitlNEMrQkJ6Tmk2?= =?utf-8?B?MjExb3FWM1VlVTdwbEJISjVuTGw5WGR4Rndqd1djejM2eXlEbTBTd3ErdjZV?= =?utf-8?B?NFkrakpmaUQvU2Y5TUpLSFY1NVVPemxXUDcrUVRaV3ZxUE1tWFptaUs2SmFq?= =?utf-8?B?Ujhkd0VkUHdHUms3UERrd2YzQnRKMTMyNWdOd1dIYk4yUGxRblFkQll2NWpQ?= =?utf-8?B?UEJuWlpEQkJkZFYzRWkxSytkMEZzTWZITE1DUjFMUWZnUGJNeTJCYi9XTk4w?= =?utf-8?B?U1cxRVNnYVRydWlSVlppblp0akl6S0Erb1VteUVTcXFud1ZDUDlyN1dZMzdB?= =?utf-8?B?cFBuZFJJcXNGSzNBQmRWeWdIY3VtTjNUdGxvbjJ3ZnVESnBBSG40VlVzZjZF?= =?utf-8?B?TWFPcjRtL3pNWEV6UGZZQStFcXRQbHlXNWhSeDAvWURUMkFFYXh0ZVkxQS9o?= =?utf-8?B?Nmx3S3NGVk1lcDdxTXQvMW94NEFsVm1lODduVTBEOElrKy9FbHhqWHFXQ0hO?= =?utf-8?B?ZWczMmlreXZiMkp1VWpRY2lEM2dhc3YxTmo2T0FXWVZUeE9ON3V3RiswV2w5?= =?utf-8?B?QTR1czZpMExTUmIxY3FONE1DUUtBekVTUGVkTFJHQzZLU3VDQ0tYQS9OUzU1?= =?utf-8?B?NWNDLzA4ZzJlOTFPTUkxdjdqY2NocU84WjE0cUpyQ3V0b0svMmROMWtwaHha?= =?utf-8?B?YjV3ZVk0RUZVSTMyUml3cW5UTktteFZ0NEMyRHdUUnE4UmdHclo5UXdTdlNj?= =?utf-8?B?SGZOaDJZVUhUSnBwR0c5ZUpLczNseGMrUjlmdzdHdVVmWnZLZm1tbndkd1h0?= =?utf-8?B?Yy9Ha09xZkZKSGxxM2FaWWFyVng3d1JTU1NnYURjT204VlNwWm5QTGxrYldV?= =?utf-8?B?SDhkc3h6VVRUbUFaWFRiSytsWjAzdENLc1ZKc3dJZkRxSy9jMkdSM2RLUFgx?= =?utf-8?B?akVpbVRaTXk2RjI4NXNSOUh4bExMelRiU0ptQ1lST05LQ0FOMEYzVTJBM3FK?= =?utf-8?Q?tcIcuC?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB7056.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eWxJM1BaVWxwanBQSys3Z3pYS2ZBNkx0QTBBZkRmR3pEemxWaXVTSGg0bHBj?= =?utf-8?B?ZHZUMDVVU05UNXNEQzNPampQSTVjV0VyazNjMXc4V1BDRWJ5d21JaGVOeVZv?= =?utf-8?B?R1UrN1JXbTdRR2c1YkgwbGdUMW5nb2o1UUhwYWNubHhZeGJuSDkwc2Nseldk?= =?utf-8?B?TVIrNHVJQUk5emltdlNrMHovVVVlQTJpU1JiT3UrOERMQ0Z2Q0RzVXFTMndn?= =?utf-8?B?bjZYdEpLSXF5YXJpUkVneUN5WWJ3cDZubkVkRnZvL1BkajhCUGhoQ0ZmZmQ4?= =?utf-8?B?MjcxbmpQcFpvMSsva2hpVU5hbk53N1RCdjZZYW1tRWNNa0kxQXdDbVYwRUdE?= =?utf-8?B?VWVBdkt5TXZOcWd5ZGNhUmNYMEovTnVtYmF6S0lGc1orOHZIQnRxenNhSitj?= =?utf-8?B?WnBLQkRTdkZaQmh3czhwMmhHY3JmaE9NcTNvZUxnRGdja0xJOWxLVDRncTFl?= =?utf-8?B?VVZheXIzNnRka0E0VmszSUpLQi9nRURBTjlIQmtDWlJkRGtXcXlaZ1F4dUt5?= =?utf-8?B?SkJpTjJYTGcwTlJQOHVNQ3hLYzQ4QkptM1c1ZDhQeXZWOU9kY2xpMEsrTkRt?= =?utf-8?B?alVTUW0ybFlKOEpkaUlrVEE0VlkreEVheFFOWkd4ZWY5Nnd5eTIwR2dXeDQ5?= =?utf-8?B?S2tWKzVCa3dKL0N6SW04TEtlaG12bkd4RW85R3JtR0xyT2wrYUZZZ1hZRlNW?= =?utf-8?B?OGxMK1N2dnMzRHRZUG50MkZkdE51UGxxbjJEbHJkNSs3SmhpZzZ2cjYyUmd5?= =?utf-8?B?c09LVXNCZlhZcDN0cDRqWitRTlVzeW9RaFJLYUsxeVh0VUhSTVhuR0ZIdDZS?= =?utf-8?B?SjJ6Tk4rQ0c4NU41dHdnbXFVaXNybnVHdkpraGtiVHprUjhYR0xQYnAyczlp?= =?utf-8?B?Q3Z2SEtjSlFVanhvZ2RnWlRTWEhmZmd6dWJoOHVGblppeHBudVNUalpLYmVj?= =?utf-8?B?Wnk0akZaNU02ZFNmZlJNbnQ1UThSNGliOTlMb25BSEpMUFBoZFE1Q1lpRXRS?= =?utf-8?B?ZFZhbDk4MVpOQjdNTmNCbSt1ZjlmSFRrVThpM3VENjljdVlQMkVKMHEyWlZJ?= =?utf-8?B?SFdvbVYwaGhYUzZ1L2ZNSitFWEZjeGNsTUt0dS90NW1JZElrNnRnT0V1V0dO?= =?utf-8?B?aFR6MjVXeUlteDFkd29SL3JpYzVMa0dNNVNFS04wYXIwWWFHTjNrWTBVRDhl?= =?utf-8?B?YXllaUxQa1NydlQweDB4bEszUkppVzdDY3JkWnFPaUExRjJ0ckthbFM4dmRa?= =?utf-8?B?YXRlNnRkR1pzVVo2dHNtQlhkSEtZcHZvOFVCeFZ3aUNwQm9xUWdZRmlHeW4w?= =?utf-8?B?eHkzcy9xYmF5VVVXNXZkRHJ4OCsveXh4QkZ0WlNlSFpFQXFzSGM4aDJwbjBB?= =?utf-8?B?K0U1dnB0a2JFREgxYXdEN2ZWZEpTOGMvZ0hnNXJUQXFRcCtoYldWOUpsdmpN?= =?utf-8?B?cU40eUZOQ1B4Z3BZaGV6WXlKTHZMNm54dnZ0NXRha2xQWjdiYVVnaVVDMFNk?= =?utf-8?B?dXhjaEZuR3NKb2Q0Q3libHRBSURnaFI2b1R0bmNidi9XQ016Smd6QndnSjhj?= =?utf-8?B?N3lqbzljRXhaZGpJWEQ3eFdjT3pxY2xmaGdJNm11YTJaT0JYYmMvN0RHS0cx?= =?utf-8?B?dU9wQUFSUXd1WmZvU2V4a25YVmo1b0FLNXhnVloyeUcrWENMd0xFRjZsSmpJ?= =?utf-8?B?dkNrb3lKTWVRZ0NFK0hzTmtWbVRMVHNHbCtOVmRXSVoybkIwMitoM0pmZTZy?= =?utf-8?B?VCswR3puRDFRNzNoa3VROS9yNjJJdlAycDFWNGlKeTlVcUNRSVdqc2JXNUdi?= =?utf-8?B?OHNNeXZSOG1BME5iSHhuVkJQVXpiWCtSRE5rZlpLVEk2OTVCYTZrQVBhUkQy?= =?utf-8?B?KzZoZTJGR2tvWlh2MG4wcUZHeUp3STR2cFBzeEVjbDhCdjNDcXJxQ0hxNU1C?= =?utf-8?B?Q21HMVVaVWdDZlozR0wva2xqamNhRkRRNXMrV3I3R0ppdG9SK1JhbG5KOUg2?= =?utf-8?B?SkRkcTVCeHZWUHFBVnVkVGZxTW5wVCsvUmZJSWNYZDNzY0ptYTlESjlnQnpa?= =?utf-8?B?KytUTE9MRENMVmRzMmkwdXd4Yzh6a2FnMGNPOGhnMExYVzduMm9odkRsL2ZU?= =?utf-8?Q?SUEGKSn3T3Xf+KQjAg9HaRfGo?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6fe0847b-dda9-4a4c-2646-08de18673d9f X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB7056.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2025 10:21:22.9215 (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: nWeNcAhfRjd1IyIU3OXi6Kn81qGu7fdlWZszBby5rBR3lr8MCNMdAn7PrKguGssC+eKJctfOXAcoBZYQvGsR5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMDPR04MB11677 As dc_crtc_atomic_flush() is blocking due to waiting for shadow load done event, page flip performance could be low when atomic flush for two CRTCs are conducted sequentially by drm_atomic_helper_commit_planes() with a single atomic commit. So, call drmm_crtc_flush_worker_init() from dc_crtc_init() to initialize a flush worker for each CRTC so that atomic flush can run in parallel by drm_atomic_helper_commit_planes() for multiple CRTCs to achieve better page flip performance. Signed-off-by: Liu Ying --- drivers/gpu/drm/imx/dc/dc-crtc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/imx/dc/dc-crtc.c b/drivers/gpu/drm/imx/dc/dc-c= rtc.c index 31d3a982deaf7a0390937285c9d5d00100323181..fb1049a09296a3ecaad8d1430d8= 18fd6e2f25a54 100644 --- a/drivers/gpu/drm/imx/dc/dc-crtc.c +++ b/drivers/gpu/drm/imx/dc/dc-crtc.c @@ -540,8 +540,15 @@ int dc_crtc_init(struct dc_drm_device *dc_drm, int crt= c_index) =20 ret =3D drm_crtc_init_with_planes(drm, &dc_crtc->base, &dc_primary->base, NULL, &dc_crtc_funcs, NULL); - if (ret) + if (ret) { dev_err(de->dev, "failed to add CRTC: %d\n", ret); + return ret; + } + + ret =3D drmm_crtc_flush_worker_init(drm, &dc_crtc->base); + if (ret) + dev_err(de->dev, + "failed to initialize flush worker for CRTC: %d\n", ret); =20 return ret; } --=20 2.34.1