From nobody Fri Jun 12 18:34:16 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011032.outbound.protection.outlook.com [52.101.70.32]) (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 5EEF03A6B6F; Wed, 13 May 2026 11:22:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671327; cv=fail; b=JL0OXaHq/Zv5IDh08CNeO3OJ9PDoMMmh3Df+nGy+k2aVS3jFdHSkS3SkEhM41p/VEro5StyyW+j7hb7PAxSfaTr6coVZzKVavvcfSZLEua70xMVeBA5KkEpmhab6CLIfkqRMFhm+MlFEhRVLDWp9JaAn4YH+tVVVJeBSU3P2cL0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671327; c=relaxed/simple; bh=sleXLuUTzNf/SHS/8iKVR0zJAT8+ZTrPVCRtzPuGTuI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DYZKG9i8FKHn2n/a4lsQkwH526xlYh4RLBQ7jSMA8Eq7PxgxzE7nghmVYdO4T8K9cxVMH3BzhJ6pEf4UUJdr5PXj/Xj98wCuS8fv3bcxAVmqrZLnRXWqkp11ZPQPeB6V730sdQIV8L+qD8Qf3SWXkshmtnz9+B+8DWDG+EqJ7Bc= 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=eUp74g0s; arc=fail smtp.client-ip=52.101.70.32 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="eUp74g0s" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TrdMbMF4PFpn0H5v2RKkgAF3JxkbdF7VfjyQ2nsYOQsQ0E+St5FXSjYD8zAn8C9l7lENuxwj6EHleat0MtfuwWATNrVhLwVwEEQsmcKQoBu43Y3yUVlmcdmUL3tKnfLgURe1k7uYEHpL8FaYe16jhtbXeiIESh8KqQnELAA+Yj5LSlC0EAsy2W7dU9mAOD3ZzJvqux43ZbGnqNmmjU/2WnKjwUBCQn4I+PlAmkmkENol/VE2+2qOHT7HE54OELWKO8JATCWBMTIDgxjIhkE2v06aQvk9U1dmz1ga1izhs8GMz3U6Zqz/hW+r6P8+8GVMxu1lb43DNuZaO/o/x31e3w== 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=Hlaq4i6Tzc7KqdEatm30LP4UuSRfa7XpVx246TA4zWc=; b=CJWCDlqFFFOtBo9FAfBnwd/+8avTDxsoJ6/fnfvo6Xs1Dm4SQvRxTwPrlFJsRvrhD1NmOagfG9eKOBWSC0iHVJ7eN29+dJszFb58gVRDFn6/X7FN1TiwotEWd8usWgO07a8o2TymZYfiO5P+yuywzX1RM6/mip/f0Fndt5cthZlpvSWldn+Qd4zw1SO6zdOT/BXC8B8O92J7/RN+xNxtDkFCNYA/TjNZfLxn0YhVQHiQ6TCeRSUo+WcRrMKE8SFL2Vgt3q5KSrsy3RAf6XQYWcC3yXnOj4iYADw7cuqJ+sb0KajtBPj9A87mQH127ufHHFagebciK7DwFUIoCAhmwA== 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=Hlaq4i6Tzc7KqdEatm30LP4UuSRfa7XpVx246TA4zWc=; b=eUp74g0sN7haHHuL8qYeykm8q6bGo0scBr1bDnv+pxC5YPnMGJW494hAzndMQ1ugETaK2nvhLH/U+jd3J+sEldxqdi0EZAd/aCKLwFp85PxaSWbANi8zidyXtbZvH3yusQkxW7jzv2yItmaVQ9/JpoKXo9CN5LxIgNtHobByN/0dmDj5TFhccD2wxUdYT4MqCxhzTbUY3UKua7NiWHdVTIYNEu2qoxM4uFJ16TnTwIT1gZCwf8OWT3JuEdJ66CEXlrWYhL0rcXhRtY0pekfGYeoYOIMi/GD5YHBHdGI+wqkw//lcBENbwXnq4X2HKNAaIS4rtZLeo5GFLyzrzZXN2A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) by VI1PR04MB6797.eurprd04.prod.outlook.com (2603:10a6:803:13e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 11:22:03 +0000 Received: from AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69]) by AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69%5]) with mapi id 15.20.9891.021; Wed, 13 May 2026 11:22:03 +0000 From: Joy Zou Date: Wed, 13 May 2026 19:23:47 +0800 Subject: [PATCH v5 1/4] dmaengine: fsl-edma: use devm_clk_get_optional_enabled() for channel clock Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260513-b4-b4-edma-runtime-opt-v5-1-1e595bfb8423@nxp.com> References: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> In-Reply-To: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> To: Frank Li , Vinod Koul Cc: Frank Li , imx@lists.linux.dev, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Joy Zou X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2P153CA0028.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::15) To AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) 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: AM6PR04MB5765:EE_|VI1PR04MB6797:EE_ X-MS-Office365-Filtering-Correlation-Id: 82c48362-255d-4090-41b7-08deb0e1db99 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|19092799006|1800799024|52116014|38350700014|11063799003|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: o3okGIM0BLZuokO1Cg4/mBU/G/Zt8N9FiPks4n5YBE7TCI0QeUiT2pbYKKHGhqEx9wZfIeK8r5ogqdDukwQfmuIDKcx+AwVn9q7RByFERwVyJaDAQqVFXaV1TPMsdS1pRY5ZN+NlhvPt9PinG0l1BF5MexivhK2/lSGC8hLkiP26F1pOU7WyI0WL90RHQnWfiSpNhUDntKyaRthBRjbDkQON7CKCbxDsgIXkJlPseOkUh9zF4t0ItLlddO8MWJhJCrsQM5XNhD10dDEGTG3THvhA4J4iv35ybZw5fx7HFtJM057hzzRyOrSayx0OSavwwMgWiUs94X0VqxsP22Qjj26K57E/DlWT6UWrVN2eQc5dWLveL2R07s8SlN6FehIlYF40fRkxBC2DP7IJNi+8Ba9D+Li0h5sutOcIos5NYR/WMkyhfSiDkdTmpJTQy4JAqTySzdpkwApYMvE4GE74TYagfQWgM9iWNpal943ZkSslElp46sbVLJc0T7nkwVeIz2i6krlNiKID41Iz5X7L7E0iIdFelRfIJhENyUwv3Yq8+D21MoviXGILjmAjm2tsBzDZSPQBtuQQo7sYfqN8uNzdhUB0SPp3aKz1IHOX4WISP47+q/7colu2P6deo57BBT6XRsOfy4iZ6KoJ/UsqmfPA6Iuc5TAMWvf0Cu95kII1O5RWF2NKzzzodJMJP2OeHL43rJ50l5rAteOqVtoIcGRK9/FVKbCi/J0bAzq5dW9vu3U3fLd9Rmlvth77wHpw X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB5765.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(19092799006)(1800799024)(52116014)(38350700014)(11063799003)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NU9ueTlMeVhOanI5RUxYZ0FiWHBvazA1a0NBQ2g4clk2WkRaNkJlZjFENU5t?= =?utf-8?B?VjBqYmxZZDdHbGV6YlJYUEVwR3pzdFZmRzR2RkFZa3FYZkVOVHluc0xqem1I?= =?utf-8?B?Y0J0Y2dUWEduRSt0WEpLVXFSZzAzNDNZQzRwcno4OFcvSWV6S3dya1BVRkl1?= =?utf-8?B?Ynl2dk1lblhadGZKcm1GNWNCWnpySzA5RUlxeG5tM2o3WDRJMlVHSmM0Mkdn?= =?utf-8?B?VUFUYklOZUNZVmhYblY5YzVFTGtVYyttMUZxd3hCSy9aaFhuNDdGVHZOZHQ1?= =?utf-8?B?VVFiOU5hTGMxQWJ4TUJPVStVZDh0OWkxSjA5OFJmT1JTVmFsQWo1R081dUI3?= =?utf-8?B?Q29KK1NRZTQvVUZkVlY5YzZ6NTFRdC9KeXgvRkJSVnpDRkpaM1FhbncwQWVH?= =?utf-8?B?K1hCRzdlampNZUs1TVYrYWh3d2U3eXJMdnIvUGJqbDVkRXVURFUxMnZQczNL?= =?utf-8?B?c1pncmpubVp2YkVSbCs3QjNRUWgwdXU2S1VDa3FoYjIzdHpOek1zbEhXc05N?= =?utf-8?B?b0w2OERhU0hVSDJhZ0REcU1kaW9hS0VmaWdyZjg0K080ai9wb0s3eUZGUGNF?= =?utf-8?B?ejdleHdCdDVKTy9FeElvbkRlT1AwYVUydUd4aVkyUXdSSzJubUo2UFFmSkxX?= =?utf-8?B?T1d2T256VE5OelJFTXZmajJnSVhlc25tZTA3bTZxdldxVWEwU0xYMWZyTEh6?= =?utf-8?B?VHRQMDhveWxwSUV5ajRTZHkzb2pHTFhBd2ZPOVVTSkp1MkY1ZlFuYkN4Ti9E?= =?utf-8?B?a3lOK2hFajhMdkVCTWZyVVFKV1JrMDh5OWQ4VWlFcnhyV2l5OWtrY2V1Zzdp?= =?utf-8?B?MWVCNE1WY0RSYWYwQlVxZnkzNkNWVkN5MHB1WHMwOGJrTitxaCtiTytWTU1U?= =?utf-8?B?M0JVNHVkTldFMnkwK3JnZFpzeU1sem5HNitTWm12VE15RzYxejZOOGFyWU82?= =?utf-8?B?WHZUMFBycGdKOHNtQU1OZTdMbkhQU21TdlJuK0tLWnk5OGZSbkxzbEFuQ0I2?= =?utf-8?B?UVN5NlYrcFdYRktiU2g3VEdjQ2l1R25jZm11Tmp6cHpkdlBIZkdxWFFQOHNQ?= =?utf-8?B?S2xWYnl6dWpIL1JoVHROYnRwN0pYS2lJM2s2NktQT2NXWlBZR3BsenpCSXYr?= =?utf-8?B?VTdvRktXSWFxbk5jeGJwdFh6SlpEQ2hIOWFNdUtKL1oxeExxN21IVDRTUmFm?= =?utf-8?B?TFlYb2lhRVplbFlMUlFlYVZNQ29zNzFvOEdHVUkyNG5palIwQWNmRTA4ZkZy?= =?utf-8?B?MHlTR1ErWUpaOHQ4NWZ2T1llUXRuTXBRMkhYKzJkVmdwbmtiNDNDVm0yTWxs?= =?utf-8?B?cWsyNVVobWE1WHhmWjhBK0VHb0ZsOHpibmpkV0w3MFpETExNd3RwNjNzLzhG?= =?utf-8?B?QXh1VXBGZEFUVVBCc1hGdnpmSWZqdzB3NllkMFZaS0hxSlVFKzJDOXlyQWV6?= =?utf-8?B?VGZrTklRVnBFVHRRNnN6cWEzeHIyRzh4MnZrV2lCRXhXcnZqZWRKRElOTllk?= =?utf-8?B?R0VsVVZRS3JDQnk3Q0U3ekVibkdVRUVUWlhaNEZzVFVnU1p0OVBScE5CYlJM?= =?utf-8?B?Wi9HRnY5anpxajdZd3pWb0lyblFPN0hIbTdrYmtmYmNSVUVBQ2RkdnMyV0RW?= =?utf-8?B?RzJTNUZxbDVQd1Rsd3BXb1NWN1JOemJ6alVXRHVKVkIrTHJpc2MwbDJML3lC?= =?utf-8?B?eGJBL2pDSDNVN0lsOG1wN21PcGdKdWRTVWdnWFpvdUVKNHVTbnl0c2FoSWhk?= =?utf-8?B?WWF5aWpWM3NLc0wrdW5aaFhnWGdWTWpjcnFmVkcxYm9ENW1rUTFKTnlGaUNO?= =?utf-8?B?dHhPUUxWVlV3dThwbWkveURoQzlzUy9YZ01DWWxnNitRMFY5SjdpSnVlWUV1?= =?utf-8?B?U0FyTEpGWTY5dFlFRWdRU1BVMDBwREZ4QVd2ZnBXVWlqeWY0SHlCbml1WG1i?= =?utf-8?B?Mjc1M1ZvVmxUeVlQaDVRRGtFRnBXT1lGdGsyWEE4QzBTc0dDUmZ3YkFxTzVH?= =?utf-8?B?czQxOFhGN0RscUkzK3ZjZjN0SGF2WXNUdFByM3BBVmJCNzEwVWs4a1d5cEdM?= =?utf-8?B?VWlGRzRBckkwekx0NDdqdWIrRTg5WU81Q3dhWnBMSEgwcXBUYWJORGV6azZD?= =?utf-8?B?Y01hVUpWUjNjQVR3SVlkS2t1K2NQb3dNeFpuRWk5SFdONXF0ekt6TXVqdHRO?= =?utf-8?B?cjlCeUxQQ3ZoWmlzRHJOL2NpN09DcDQxRERBMEhCZW5MMTFnMjk3TVRBQzBE?= =?utf-8?B?Rjh5c2s4UktkYzJ3TDZjeXFJcWVkZENvZWZGelZFaC9rempROUtkbFZYYUxY?= =?utf-8?Q?HJV1ozdF3DzMpNncoH?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 82c48362-255d-4090-41b7-08deb0e1db99 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB5765.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 May 2026 11:22:03.2598 (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: QTasl2N6NWqrX97gJkGUfao8FAbL+1eocrR6U/ZmWggE+3HzwT3wryXvuW5CIxvi X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6797 The channel clock is optional and not present on all platforms. Replace devm_clk_get_enabled() with devm_clk_get_optional_enabled() and remove FSL_EDMA_DRV_HAS_CHCLK flag to simplify clock handling. Prepare to add channel runtime pm support. Signed-off-by: Joy Zou Reviewed-by: Frank Li --- drivers/dma/fsl-edma-common.c | 4 +--- drivers/dma/fsl-edma-common.h | 1 - drivers/dma/fsl-edma-main.c | 18 ++++++------------ 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index bb7531c456dfa0a8812883a2cf3e9e2e23b0f55e..e1ca25ff228dbe392bb800f6eca= c5a85ca326bf1 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -844,9 +844,7 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) struct fsl_edma_chan *fsl_chan =3D to_fsl_edma_chan(chan); int ret =3D 0; =20 - if (fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_HAS_CHCLK) - clk_prepare_enable(fsl_chan->clk); - + clk_prepare_enable(fsl_chan->clk); fsl_chan->tcd_pool =3D dma_pool_create("tcd_pool", chan->device->dev, fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_TCD64 ? sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd), diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index 205a96489094805aa728b72a51ae101cd88fa003..f4354b586746d64faf375cc9ce0= 4e15a7b6d86ab 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -210,7 +210,6 @@ struct fsl_edma_desc { #define FSL_EDMA_DRV_WRAP_IO BIT(3) #define FSL_EDMA_DRV_EDMA64 BIT(4) #define FSL_EDMA_DRV_HAS_PD BIT(5) -#define FSL_EDMA_DRV_HAS_CHCLK BIT(6) #define FSL_EDMA_DRV_HAS_CHMUX BIT(7) #define FSL_EDMA_DRV_MEM_REMOTE BIT(8) /* control and status register is in tcd address space, edma3 reg layout */ diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index 36155ab1602a9b264df73dbde3ec2b3aa6cc27c0..87f575d6ccafff455d47f8c794a= 503abf97e2af1 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -567,8 +567,7 @@ static struct fsl_edma_drvdata imx8qm_data =3D { }; =20 static struct fsl_edma_drvdata imx8ulp_data =3D { - .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_CHCLK | FSL_EDMA_DRV= _HAS_DMACLK | - FSL_EDMA_DRV_EDMA3, + .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DR= V_EDMA3, .chreg_space_sz =3D 0x10000, .chreg_off =3D 0x10000, .mux_off =3D 0x10000 + offsetof(struct fsl_edma3_ch_reg, ch_mux), @@ -808,22 +807,17 @@ static int fsl_edma_probe(struct platform_device *pde= v) fsl_chan->tcd =3D fsl_edma->membase + i * drvdata->chreg_space_sz + drvdata->chreg_off + len; fsl_chan->mux_addr =3D fsl_edma->membase + drvdata->mux_off + i * drvdat= a->mux_skip; + snprintf(clk_name, sizeof(clk_name), "ch%02d", i); + fsl_chan->clk =3D devm_clk_get_optional_enabled(&pdev->dev, (const char = *)clk_name); =20 - if (drvdata->flags & FSL_EDMA_DRV_HAS_CHCLK) { - snprintf(clk_name, sizeof(clk_name), "ch%02d", i); - fsl_chan->clk =3D devm_clk_get_enabled(&pdev->dev, - (const char *)clk_name); - - if (IS_ERR(fsl_chan->clk)) - return PTR_ERR(fsl_chan->clk); - } + if (IS_ERR(fsl_chan->clk)) + return PTR_ERR(fsl_chan->clk); fsl_chan->pdev =3D pdev; vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev); =20 edma_write_tcdreg(fsl_chan, cpu_to_le32(0), csr); fsl_edma_chan_mux(fsl_chan, 0, false); - if (fsl_chan->edma->drvdata->flags & FSL_EDMA_DRV_HAS_CHCLK) - clk_disable_unprepare(fsl_chan->clk); + clk_disable_unprepare(fsl_chan->clk); } =20 ret =3D fsl_edma->drvdata->setup_irq(pdev, fsl_edma); --=20 2.37.1 From nobody Fri Jun 12 18:34:16 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012015.outbound.protection.outlook.com [52.101.66.15]) (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 0E8B9389DE3; Wed, 13 May 2026 11:22:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671339; cv=fail; b=IYOlIyJHKsq8Zi99I082TD9hYxUcvzcYGENRVj2b+36Mi+UHwwevEvFNFMKVUQiLYC2H00lOMc0KNJ+2y4eheeqtv/bbzAGwPqPJhGacq1rw+zWQB9WIgcKKCcIqnCzgsuIHFpqykHeoM23vtaFbu4Rp8D6iYaxqmt5EDXMDiqo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671339; c=relaxed/simple; bh=/HCWQc6UC3B5bmAiwu4mTBajY3lfDB/cNiGl9esFeBE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=aEvyTrbflzvk6z/mqc75OjTCvwpH0s7+SfQdd3yZ4sr4ZNd/YVfGP/PvVoPwmZrtocyCZa75Knp/g9/lET8ICf7B/0Q0Un2epyEPPBI5wAI+Rp4qh+xW+cAEFgLBtc3a04ufDjvg/lcVosNgh2Oc43+AX1g4vNlCWhM2HfElNaQ= 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=ikWZGRCj; arc=fail smtp.client-ip=52.101.66.15 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="ikWZGRCj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x6ZYip7usrHrjdMGo9XKHgGiV03I4rIxhiZIZHZHsKUC9q2F7F1Dc9HkjDgtNDEw9HSYmRzIxE5lO3z9X9zONP7ye9haE9fkB79GpgiJWHOxkCa+xuARkqIkVbSkkoJJoEBfmJTJvpZtjKPnY+HvumohbUxlXJ0zUQeEhLBOyM4nmD9QFlUfvGiVCUodSHATE87cbEQlPrtguYrSs7utNSyE9EelbQvv44zhzJrxkJuqdd9khl1BWt6yRwlMtxuVubWtdZV6yP8ki9Wc/iU84zeaBegoHshPlVX6x+qm3mmJbBLniYVTO+tKtymUYt7boZg7qoecS7H5DSsXAX2jlQ== 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=tDowFMFYIK/JumGU6Jq6Sm0Xv/Rb1g3p3qXGG0MvIN0=; b=kgVJMjt5TRZNCuWFgjxnbvIqnwmjiePg+0jrUqMQiXxUwLFOYgWcPQpCkMfD33wmQ89ERQPHQMp2Bfe1xPt0NwGfgSjCWAU0yr/+TXMrf+goFVily0EhPcv9cJZmL09LLJl4QKNo/rwtygid0gzhzOt9qAWhkw/N4nxeth8Pkc3nqBY0yG61kQnSnjV0OiNAQHK8X19QIy+MAkLh57uQE3n3MLbVshmcdOfwlMGY7dWJWrJirrCZ/MTXYtJy9QMk4IZ9uYs+WB9yatMILuBkO/MP0F72m2ZDM/6bgh5v64AilF7tEK/q0HZBgtgMOfjjcyE9eF6+vTzjc46kEozfgQ== 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=tDowFMFYIK/JumGU6Jq6Sm0Xv/Rb1g3p3qXGG0MvIN0=; b=ikWZGRCjWEnx0enNBvsQW1Vixon+TExgRnzvd8Tg2bL+DETUS4XO1wMVagU4aWRx9+W/Wnf1xMfhxTlK/bkXtWmWnqiLbtSlLLZIvnAWvltm+b0+7ObLxvznuc/PL3crnEa2X7CJ2DN7l1qfr1h3cV9UJgk6RzWvmB8I95i/rQGpV+fWYhGALM58EBtgRB+wpxR7mImDXVlX28pedhDL1FR1NzrTu+xQ2bjxQrrD7L3WpsKbccf7t62t9edci1Vd6myxBT3jAXWzYhd9Jsam5Tu0z2ViCMBDfUS3IsBygkf1SWyaq9OPk10SmLQbhCdWmG9tohZilOFJ4BL3ugs7PQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) by VI1PR04MB6797.eurprd04.prod.outlook.com (2603:10a6:803:13e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 11:22:06 +0000 Received: from AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69]) by AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69%5]) with mapi id 15.20.9891.021; Wed, 13 May 2026 11:22:06 +0000 From: Joy Zou Date: Wed, 13 May 2026 19:23:48 +0800 Subject: [PATCH v5 2/4] dmaengine: fsl-edma: use devm_clk_get_optional_enabled() for DMA engine clock Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260513-b4-b4-edma-runtime-opt-v5-2-1e595bfb8423@nxp.com> References: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> In-Reply-To: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> To: Frank Li , Vinod Koul Cc: Frank Li , imx@lists.linux.dev, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Joy Zou X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2P153CA0028.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::15) To AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) 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: AM6PR04MB5765:EE_|VI1PR04MB6797:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ff9ec05-9486-48ad-d59d-08deb0e1dd7a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|19092799006|1800799024|52116014|38350700014|11063799003|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: wGE1hTjntPZBNCDCt76RwQlmj7DU/h7ALNghlyzsDqA2459FaZL4aw4qZSRkWujxeM4L0UtvNriOUh10+MYyAuL7esYBndKjYCEZ1NZIsdwqlzMHwNOKG+SCqo4dyCPoOqq8PLaJN+6KImvMyy31ZcRCIy6bkXoogIZ8NhgVVyOQEauqAB9eqtfXnST9vmFuYPe7qpXodXUdkf7PzAzvifYHVv6nmyWl0JniomcbYGY+Gw0tFSOF6BHaxiO15bolOy0fulWzui1soIGtHyncOp014jVh4ZxiMGcZjFZ60//6aaSE3mIaTmXVNmvspeeAMeVbH3cJdjGb18gd/YhNXHuAE7JwIPNG1Ken0/B+3VZ8FTA3R6oReRYXYBTu5sjq/Fb4gN4KSCTSzHEcfIAVZ6Fj3KHoym+BPJ3PibhWR/HUtwlNcUQGodQsMHPd91VENCn0hX74f2eRO4QNdo1RQYJeRGtgbMHGOXswckvhsmrHSMhkvk4YkEdJskyUjaIQ4yK2GXJlb/xmnBdG+R6bTHUm4TBf/kpItR9v8LMlIBIA8b+A0dNpicTsIUzYuiYRHx6RBFCeA4+mw56hbRlgGWxBzf5r+kZAnG+5X8aNplKJWnci4KIn8KwC1x2MTPAYWFDdjoZPyMi5nMUl0VfqBuX3i1t7Tsxbl9/dBiVALy/ar9wnNFxs0Ltw5vmoUBSL/DYyS8tPyRwqX12ICn2K2f2fSuyIgw7dwu2/dSlDfzh3PPGZrW+CtfhOBDxVDaD/ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB5765.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(19092799006)(1800799024)(52116014)(38350700014)(11063799003)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K25weExLeEE5MGxKbmZlR3UxWGo4Zml4aVFRb0NqTExpYmVQaFBGdVVQRHZV?= =?utf-8?B?bzgrbkdrN2pmUzZwQzRDVkhjYStQRm9TSEkyeldvUDAvUmRYTk1oTXl2a1Zz?= =?utf-8?B?TGhlZkhMTFNhQnAxdlJtZGFrQnUyZG04MTgrK2pXNGdLUzlmY1NWY1J5UXBh?= =?utf-8?B?NkQ5anB5MmJCNDNyOVhoaFJHK1VWUXVMNnFRcU5UTDB4eUNKem9mb3RqVHht?= =?utf-8?B?RndibnRQOTJaUkNBZ1lNM1pOb3VqS2M4VURvZm1FOUx1cjFWOGJzYTUzL1Z5?= =?utf-8?B?TkdRaGhNTUVmaU03bFZ6SGNRK3poV0hBTEUzOE9KKzZvT0lxN0pXV00zMnVM?= =?utf-8?B?bmhXY0l4MU83KzhnQnA0cWVrWU9DbFgzMjAxZDVHN1N5Mk5xbjR2UlpucEVN?= =?utf-8?B?Z20yVmQycDd2SXNNQjlvZmdPTFAvVVJzSUJmNnNkQkNQZDNvMjR5T2NxS2RX?= =?utf-8?B?QmtzOStoNU5Gd1JCeUpVWGgxYjZGUUFjcnJHVFNtRmFUbjBYTWhBcVRGdTJJ?= =?utf-8?B?SDhZMFU2VkFTMWdPVDNKamNvMktjck1yd3hjOTBiR3FYTHBxenI1UWxqMm0r?= =?utf-8?B?czVPV1VUN2xmdllLYjcreHlJQlEwamh0N0ZoSGFyVXJEWi91OWh6QW1ZaXdP?= =?utf-8?B?V2V2MXFaamxYYTNmaHJ4VFhBUm9PSGpNY0FIdFA5S1N6S1RaZmk3cG9DZTdk?= =?utf-8?B?S2pESk0wcFhUTFArb0NsN3hLZEo4K2x5ME8rUmZKQVlnWWJWUSt5ZWtIbGhq?= =?utf-8?B?TVFyMG5QVlYrbVREUVFWR1pDV0xPRkRHTWhzOHlpaGJqQ3NVNnFlQ1FveXFO?= =?utf-8?B?d3liQVFiNHZUTW1IaU52T3crd1Zmb09UeUQ5WTBId2JONzZjTTdBNlh6N0du?= =?utf-8?B?L1Q0bDcyZ2dlUkdOUlp4ZEdUaUtyTkxKdjUvK0lJWWpsV1paejNvZEtLVnIw?= =?utf-8?B?NFlVaFI2djB5OVVwWFVRWGlnZVN0RmRvUGpjWFZrVmFvK21hbUtUditVU3Qx?= =?utf-8?B?VHZRYWxCd0JQamQwWUdsY1NWZnM3V0JoSTdWeDBpazd1U2U5ZG8zVjF4YjY4?= =?utf-8?B?YmhkYWFPRnNIQXA0aXJIeGRTQy91UnQzNm5NUnVIVEZWUVBJMkRIV0txcHRz?= =?utf-8?B?VEdwUXJTZm9GVUIwY1Q2c2V4amhBVG82TzBKb2ZLaDMwTW4veUFzUVdHL2s3?= =?utf-8?B?TUJhZFNTdndJV1FJbWNoOEdQSlRZZUR0T2VxUlNpY1lObkpCT0EyWlhXdE9F?= =?utf-8?B?MGdMcFRwdG12OEhPR2hWY0VQbktLWEpwV2pEQnd1aFlSSTE2ckNJcDY5WU5J?= =?utf-8?B?YTZmaWRpMmR3VFJCQVRHMit6dHdWTnBJYlV3a0NDaFFtUmZBdWtVSjlJbVND?= =?utf-8?B?NENjbmJjak5IcTFsaVdDa2hhSGgyb1gzeFh4Ry9YV2NRMnhEYjJ3Nm13ZlFF?= =?utf-8?B?cWJieVd6WnQ4eG9oTTIzQmNJbWxGelU0dmFJc3NBRjg2NUxxaFVjNTRsMUhV?= =?utf-8?B?emkrSVpOR3N2WFY0L1NtTkVrM0QxT2dxV3VIUWhnV0tmL2hyeTNkRENKZkpI?= =?utf-8?B?SExOZEw3aHRLYXFDV1huVWJoWFNheU8zRXB1N0pDQkRrSWtaeDRYNDF4Unpq?= =?utf-8?B?TFBIYlgvamJ2ODZYVTczU1AwaTRqeldNRlNCeEtLbWtUcW04RVFQdmlWS2lZ?= =?utf-8?B?RkljQmZjTHZRSEVsRlZVMDVaenZjSDdRTGRYQWJjMEwxaEI1WkJsSFZDNXpY?= =?utf-8?B?WTQ2ZmF5eWJybjZUY0N6QTY1dFhzSktBWWp4dUNhT3crem1EbGJacEdKcTFr?= =?utf-8?B?a3dFNHR2bGJJVEVKQUkySVg5WUFQMU9ZVDV1MGVoRzRwN3ZJWVRreEZNT1RS?= =?utf-8?B?RUJhbGNoVnBjcFZ1RnlJbFV4ckpWYTlNWjh2azNTUGRadUhBT1hCNFpxUTVW?= =?utf-8?B?ZVdkZ3k3UU9jdExpU1hObWtsUkV5c244Vk9MT2lZSWp3cVA5dFF3MkxNNWNm?= =?utf-8?B?REFacTFDVDMvQ2hoTUZFNHgvQXpOSExWZlNzQ0RzUXRod2JKb0Z2RlVMRHhj?= =?utf-8?B?eWhvNDA3SGRxaFd3cEdLMkRPTDd2U1pxZm5MZC9RWkptNWhkMFhvQWowVHVB?= =?utf-8?B?cXdvOFphTE1IK3RlYzVNWVZWenUrRGUvSVF1cTcrSldWMGNHY3pYWXIwUG9n?= =?utf-8?B?M2lKOTZIZW80UEFlWE9CL1dVWVljRHBTNFQrWjFXSTkwblhxRitZbmRkMzAz?= =?utf-8?B?Vzk0ZmszSXV3VzVJellTNnBLYTRKSXFMNW9YWXh3NXBaUUlxNFdtUlZkZFFh?= =?utf-8?Q?mhyqVonODKgiTwf+M8?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ff9ec05-9486-48ad-d59d-08deb0e1dd7a X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB5765.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 May 2026 11:22:06.4081 (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: JcR0UWpPycv0QdimyLXMp1XqsEWNTLPBGt+x5OvAmFCbxK2UksckBv9VqrQzk+JM X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6797 The eDMA engine clock is optional and not present on all platforms. Replace devm_clk_get_enabled() with devm_clk_get_optional_enabled() and remove FSL_EDMA_DRV_HAS_DMACLK flag to simplify clock handling. Prepare to add channel runtime pm support. Signed-off-by: Joy Zou Reviewed-by: Frank Li --- drivers/dma/fsl-edma-common.h | 1 - drivers/dma/fsl-edma-main.c | 22 ++++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index f4354b586746d64faf375cc9ce04e15a7b6d86ab..54128b3f45cb399e1c11d9f86d6= 4adce5c65c102 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -204,7 +204,6 @@ struct fsl_edma_desc { struct fsl_edma_sw_tcd tcd[]; }; =20 -#define FSL_EDMA_DRV_HAS_DMACLK BIT(0) #define FSL_EDMA_DRV_MUX_SWAP BIT(1) #define FSL_EDMA_DRV_CONFIG32 BIT(2) #define FSL_EDMA_DRV_WRAP_IO BIT(3) diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index 87f575d6ccafff455d47f8c794a503abf97e2af1..ecd14967bfbc07d373a74790e87= f9aa36b60e6c9 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -554,7 +554,7 @@ static struct fsl_edma_drvdata imx7ulp_data =3D { .dmamuxs =3D 1, .chreg_off =3D EDMA_TCD, .chreg_space_sz =3D sizeof(struct fsl_edma_hw_tcd), - .flags =3D FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_CONFIG32, + .flags =3D FSL_EDMA_DRV_CONFIG32, .setup_irq =3D fsl_edma2_irq_init, }; =20 @@ -567,7 +567,7 @@ static struct fsl_edma_drvdata imx8qm_data =3D { }; =20 static struct fsl_edma_drvdata imx8ulp_data =3D { - .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DR= V_EDMA3, + .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_EDMA3, .chreg_space_sz =3D 0x10000, .chreg_off =3D 0x10000, .mux_off =3D 0x10000 + offsetof(struct fsl_edma3_ch_reg, ch_mux), @@ -576,14 +576,14 @@ static struct fsl_edma_drvdata imx8ulp_data =3D { }; =20 static struct fsl_edma_drvdata imx93_data3 =3D { - .flags =3D FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DRV_EDMA3 | FSL_EDMA_DRV_ER= RIRQ_SHARE, + .flags =3D FSL_EDMA_DRV_EDMA3 | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz =3D 0x10000, .chreg_off =3D 0x10000, .setup_irq =3D fsl_edma3_irq_init, }; =20 static struct fsl_edma_drvdata imx93_data4 =3D { - .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DR= V_EDMA4 + .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_EDMA4 | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz =3D 0x8000, .chreg_off =3D 0x10000, @@ -593,7 +593,7 @@ static struct fsl_edma_drvdata imx93_data4 =3D { }; =20 static struct fsl_edma_drvdata imx95_data5 =3D { - .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_HAS_DMACLK | FSL_EDMA_DR= V_EDMA4 | + .flags =3D FSL_EDMA_DRV_HAS_CHMUX | FSL_EDMA_DRV_EDMA4 | FSL_EDMA_DRV_TCD64 | FSL_EDMA_DRV_ERRIRQ_SHARE, .chreg_space_sz =3D 0x8000, .chreg_off =3D 0x10000, @@ -733,13 +733,11 @@ static int fsl_edma_probe(struct platform_device *pde= v) regs =3D &fsl_edma->regs; } =20 - if (drvdata->flags & FSL_EDMA_DRV_HAS_DMACLK) { - fsl_edma->dmaclk =3D devm_clk_get_enabled(&pdev->dev, "dma"); - if (IS_ERR(fsl_edma->dmaclk)) - return dev_err_probe(&pdev->dev, - PTR_ERR(fsl_edma->dmaclk), - "Missing DMA block clock.\n"); - } + fsl_edma->dmaclk =3D devm_clk_get_optional_enabled(&pdev->dev, "dma"); + if (IS_ERR(fsl_edma->dmaclk)) + return dev_err_probe(&pdev->dev, + PTR_ERR(fsl_edma->dmaclk), + "Failed to get/enable DMA clock.\n"); =20 ret =3D of_property_read_variable_u32_array(np, "dma-channel-mask", chan_= mask, 1, 2); =20 --=20 2.37.1 From nobody Fri Jun 12 18:34:16 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012015.outbound.protection.outlook.com [52.101.66.15]) (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 7EB8F3F9F56; Wed, 13 May 2026 11:22:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671347; cv=fail; b=W/c4Aid8/e8VsOlz8NLAI3gGQxmyjSMW7BpN0gZy5adsFdiPoi8Wk8l8DIYKm35e4w3cBLI7mLrsEcO6Dw6hng4y2Xbn9rPNslFISmVcBoLU5KrKAaNzzSptoCumgtyMXQdIlSQC6dRzHV6DSdm+zSU21vrl7HVvhs/a7GrLnmU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671347; c=relaxed/simple; bh=PxTPufOt2A07YJaOWfvD1aFqQ0V02DJDbodtkwCtzEw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pIfY4VJujC8/XP9pdU7+Hl4pX2x7OdH7Hhr0kWnLXI2EQV8hWNITohbnqMYEWjVImXiTlb+5saEvFDZlGhuQCcqWpw31dhWdzJvuAm6CTQ/omGLwbzAGpgi7/vbP6owb19EnpqfumC8grfU0K2J53s1OzNF5QR+gfQvYH3yGMRc= 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=lR5GakIk; arc=fail smtp.client-ip=52.101.66.15 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="lR5GakIk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NGjvBmYLVGHyeYcUSxseUTy1sQfz6cNc4qv20/UWphIExBs7Rw5gjIUk31bA6hevD57taUFQcBQlhBdftRCOVbJXtc/Id4attQIc7tviMF2pQNs1viIT96WQxyIlzTqImA/2c/RWIN9YU3Z4cmBeDFdWxYq+6QHVvNCk09g92UH+oRXD358kEoRDCcDuDRVf9X+t4G2npovFjenpI6DL5h0hZ71latrOYuLoXb6zWR9oVXasmlV46XGqdKS/yT64hqxtDS0RvGQH+pj0GxAVvoLBWGtHrXKnOGpS501HH+B4R6VvjXwQZqRi2GOdkG6TG6IRaBXjrlHa3+6RZIcmog== 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=+97sjOmwO+yjD+1hN4P2jFkuJHy5ZZ2JDAB3u8qFsj0=; b=fgPP3xRxjdTBwQm9XIH2nfkPqV/y3KajLA0GStMQ2mEZGCzwpraLjeUwXbX2tAx2LNgU97x2Ead7NCK9fFG0As0uGKIjMjobMyRtiUyDCOlc3i+E4+Xg3yONTUZoqExgmiCLtcXuT52gskNTQpNmt6Qvd5CyTCP1gN3BRCPNPguBHADhZK8N0OLQE3LjX79ewCealsIM28DqJcIXi/LsR7kXfptVixUSUB4tcsjoX8g42Rc7ftjLTrPxpnwmucBfWUdRDUsgv7Gizy4ymgSVsyB1bYj+IiVAb9KbG6IhM9GP1n8/vXt1UBFF7eHpeGEz5FeDydL6m8188apDABgVmg== 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=+97sjOmwO+yjD+1hN4P2jFkuJHy5ZZ2JDAB3u8qFsj0=; b=lR5GakIkvgls8cn5AQ72ysbOl+a3yipVZzovVYkdtXKDD9DmEfJgNdSWzVcyvkDFjurc4Xiv8UN0sEqH6WQn4WPE/EIHu4wJrOz/YvrGgdy8ISxxvHLPMmCXWz75jF+RWAi/BlWVTet3zX8LjZ+nF9PFcWAPB0VeFOH6Evd18Sh5LroCgeQqMER1yEnQuVk7H5K/wsaPtqXB52E6YZZUx/frzgOLHA8uNNOaoZ1VigawINg9QfwtSRxnmkEVaGA4xivwzDYtC0J5lsH3FvINIX51bEN9NqjDi7QP9HNhy8EpyKkLhbY7LX0eMUdY4V78ntYgZMVYfkmctBJ55xHLbg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) by VI1PR04MB6797.eurprd04.prod.outlook.com (2603:10a6:803:13e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 11:22:09 +0000 Received: from AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69]) by AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69%5]) with mapi id 15.20.9891.021; Wed, 13 May 2026 11:22:09 +0000 From: Joy Zou Date: Wed, 13 May 2026 19:23:49 +0800 Subject: [PATCH v5 3/4] dmaengine: fsl-edma: convert DMAMUX clock handling to bulk clock API Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260513-b4-b4-edma-runtime-opt-v5-3-1e595bfb8423@nxp.com> References: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> In-Reply-To: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> To: Frank Li , Vinod Koul Cc: Frank Li , imx@lists.linux.dev, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Joy Zou X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2P153CA0028.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::15) To AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) 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: AM6PR04MB5765:EE_|VI1PR04MB6797:EE_ X-MS-Office365-Filtering-Correlation-Id: 590fb3ce-f9d8-4a02-3e4a-08deb0e1df5f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|19092799006|1800799024|52116014|38350700014|11063799003|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: doyyGObzpUuvJnIivMOVEFqCmF3ujrvZhCkSKPYUvCyIB4LPx6QGpPf9bJlRyNzpnAF3fYArYv9DWie+xXDlCvczTz93ZRjrN1pjvw7tnQ/NCSEZq3WasOy2rXvDbzNkQLIdRrBUQR8c9TyEvavevozDUUQer5bFRtzBiqO7C4bqKzjrSxBAfYpSUX3d0H9XihGeSw7NMBTcH5PV4j/Vqfr8XXcRRBa5qEpF5TwAEHYfGGjbr2Gw7sfj1ypqJIR3iqoNJyLS4oH23S5DFpvIjIWYxwa2m8KKu+MRdbsgY2keEEY1EHVmXvUVCGcyTyq8vJbN5pLZ/lNGYaVUK0uxFL9t1vtxa2QHye+oY7N3qm9QXT1ReOLc4KFOadP2m6lcZU/4ULXW9XlLiHWs9BWBE/hiEYtF5RN3n+6+LUc0wG38QEUUWuSxUCZLmrdOtVUXFSClL6Zpzm2Y7icmh9V2ijXrhzYIML6CKPZagtac+6KjYxweDwz5YxYb/J4EnfMZsJMOQSVay1xAdvaxCGKu5Naqq+wqToEyiB/YD3GGfs5M4gPWpXd+/v7WGBiHYgLPx0eA6M/+gpSkfh9ITHn632OjpcSOj9erEoEPVDdE8aGQNsbZAuzAJ+vLCcYVEIb1xLK+nMUcfNVIUxAG22bLaQiqx7paX94NJf+RtATOa18u2zQWhU3tioBS4/WgSfG0vCWDoKm5Bqy4W4D/h7NI0VbEtzbkTAnLckiaR3QRDLbuIjTJAjnwu8Iml27/XbZy X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB5765.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(19092799006)(1800799024)(52116014)(38350700014)(11063799003)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3pHaXV0QWNZZk5xdVRCa1JxZTN5NmxlZERwY2ZvMWlBMFV3eWY2NTlwbVJ3?= =?utf-8?B?RjQyZGp0NTVob0JWOEJQeTl2bXIrMDh6V1UyREpNczkwWENDUlVlWmY4U0hu?= =?utf-8?B?d1EwRVh3dXB3dUdzUlBMU1ZPeTY3ajlITEJmWFFUTTlBWUhkY3RPN3ROcGN2?= =?utf-8?B?UXd0VDA4ajYvTEtCUkFkczZuK2VNdG1uYlg3dWtUbzBrWElqdGtpdEU0b29J?= =?utf-8?B?bVpWM25OVTE1bEtXdjZCNngwSThrM1MyakNLUjg1b0pMOHc5U2dhRkFnRGVu?= =?utf-8?B?L1h2Q2hQZUZuMkVYcTkwZFdIWG50WEhaS0cra24rL1Q0dUNDVFpMWnhoT3Js?= =?utf-8?B?bjdMWStFbGgyL2dYRjFZWmRFRmx3SUxPQWlvTHIvNXlzTXhsTzk4QXVJVE1k?= =?utf-8?B?ZGJ4ZERwK0tDdnk5OVJuczduZ1ZFY0VhbTFmSWVKbHNubTNjUjdhbHpOWG43?= =?utf-8?B?ZWFiOGIwWE5rVlltYWVpNk5wdFl2ZjM2Z1JQWmVWM25SYW9pTkI1OUFidlI2?= =?utf-8?B?eWJYUEF3V1pia0VRUEF4VUZ0R3VVS2cwMm9pNmtCU3BvMlN2YmZMT0xjYnhp?= =?utf-8?B?UUt5MEFnUUVLU3dDZnd5U2NWWEJJNWNoMHA4R3IyQ0dvUW9sRzVUVzJzNjNG?= =?utf-8?B?QWhLa1hldWdmNGNsMVl1RFBFTzBKSXRNQmlua1MyK0oxVzZJSHEwQjdlOGpJ?= =?utf-8?B?c0RxOU8yaHhVVkZzMkxoQXlFV3ZyRXlxQk5JS3JzSlJyVDNySHo1MEJWU3dW?= =?utf-8?B?SWhWT0xHbVFHWlV4REtJY1VwYjRueWZLUW1vcEJQbEErTkhIRmR0Y3MrQlA2?= =?utf-8?B?RkNOcDFOMXloaHFkVnNZdEx6SzBYZWRYQWU4MHVsbG95aVB3eXo3T3orU09V?= =?utf-8?B?bHFsOGVRN3JsRXBUYmo4RU5ubFRoMWRjYzgwcTErSGZaTHRWMENkcERUZkpu?= =?utf-8?B?dFFxZk5BV01Ec215amdRVnNNdXBpYUVYNFhQM0dubEVTNHhWRE5PdTNSZVcy?= =?utf-8?B?TWZ6cnU5WVFRajk0TDdWR1JTRzV0QnNOOE1mQkt5bTVQZysrTnl2TFk0Q2hX?= =?utf-8?B?MlZxYTdsMXFYREFtMHhaSHNVRmRvUUlpY3JVMlJDakF2UEI1TWlMRk0xWVJ1?= =?utf-8?B?ZTBVbzB3dG43MHRjNzJ4RkFRTSt1WlFvR3FJQTQ1N29WRlk5ZjQzQjF1bThL?= =?utf-8?B?WXhMU2lYRGhraWZSVkN6NFc0QjNLTnA1VFpaNklqNW9taitqS1pKRlMxUVcr?= =?utf-8?B?RGpkZzdhUmtWUkdRMUtkYUNVRmNEbjIrQWZzZUZKQ2E4bkRQakcrTjRMWGVN?= =?utf-8?B?ZjhRVm8rRldvczMrczV0SEE4YjNjN1R2TVkwMHFucHloK2M2OHNkN3pxMU82?= =?utf-8?B?bWVpOUsrMmdabXVlZUw0R2lVVDByTVRhYXpsdnFVYzd3OFdjdWlnYjFEY0RZ?= =?utf-8?B?T3JRWFljWGQrdzRXWDdHS0lBUjNZYlpJZ1B2OUxTUWY2U3ZJNW1vNWxGOHdD?= =?utf-8?B?UUJFU0dPc3l5WUExMm12Yng2RjNCYTMxcjBNRTRncS9GN09sTnV1RjlzTUVM?= =?utf-8?B?clJmclM2TEhQNEphZ2FDZWEzeVNvc0VBSE1Rd2Z0aFc0TEdoUkw0YlNtZzFs?= =?utf-8?B?Z1lTdWF2WGpwMlN5bjFMazVDTDZXQ2ZaUjRjckpVRFlKNnJIYnU1YkZkRVBn?= =?utf-8?B?T1FuRkNSZDZNcTVaT0lqaHZzaVVROC9GNktFZlFJVU9ua1dkdnFITEVEaEgw?= =?utf-8?B?MXZ1dXRuYk9pcVR2TUpZZitDUWhqNjNHRlp6VEJaRG0zQjZBbGxDMGdYZ0s3?= =?utf-8?B?R2ozbVFsQ3VvNGpvQm1FQzczMXdyZ1JaS1laVm4vSWdzNDc4V0EyVyt6aXZR?= =?utf-8?B?TWZzWElnZWk5MnpDRDRlM3MrQVpUakV3S2p2dHRCRWpxQTE0TVpYZU5SVTI5?= =?utf-8?B?cDlDc3VJL3VpRGY3K1hXNVR3TFRYMU9MdXpWUFJkWEdhTExVcG9IU2U1R0hI?= =?utf-8?B?QXA1UytsUU9TSWljTkw0bS9qbTAwa3A0dkM2QTBEbDM2SnJtYUhmenRoWUQ3?= =?utf-8?B?dkx4NlZYV1JDZW1xc2hMOXkvWEdMT1VhNkhnUUFjVDNFcUkzc2JybGh3RVpm?= =?utf-8?B?VWNqRDBxU29DaFNPMXRQQURWZy8xbVB6dTFlM3MxVmxtOTF4VkVWSjl3ODBB?= =?utf-8?B?eXpGZWxuYnJUbmVWejFzQ0loNWdic2F2UHFqN1lLVUpkcnFtRjJETmo1MmRo?= =?utf-8?B?RHRFYzJ4dk52NVdJSlBkTFl3L1RhN2c0OEhRcnU1RnVCY1hkTE5RcWdzMnFL?= =?utf-8?Q?q2acFRmQKX99GkGY3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 590fb3ce-f9d8-4a02-3e4a-08deb0e1df5f X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB5765.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 May 2026 11:22:09.6024 (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: het0uHdoSkbE0+8Yu6u61NpLvGhK6qhAL2HIXtAZhYGu0uelBHilL4gQyuChIyhG X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6797 Convert the DMAMUX clock management from individual clock operations to the bulk clock API to simplify the code. Prepare to add edma engine runtime pm support. Signed-off-by: Joy Zou Reviewed-by: Frank Li --- drivers/dma/fsl-edma-common.h | 2 +- drivers/dma/fsl-edma-main.c | 43 ++++++++++++++++++++-------------------= ---- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index 54128b3f45cb399e1c11d9f86d64adce5c65c102..824b7dd2b52618b826154e55fb9= 6a82c27e846ee 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -253,7 +253,7 @@ struct fsl_edma_engine { struct dma_device dma_dev; void __iomem *membase; void __iomem *muxbase[DMAMUX_NR]; - struct clk *muxclk[DMAMUX_NR]; + struct clk_bulk_data *muxclk; struct clk *dmaclk; struct mutex fsl_edma_mutex; const struct fsl_edma_drvdata *drvdata; diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index ecd14967bfbc07d373a74790e87f9aa36b60e6c9..c12126ea6552d51b773bdd61c01= 8570dbd618602 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -526,14 +526,6 @@ static void fsl_edma_irq_exit( } } =20 -static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_cl= ocks) -{ - int i; - - for (i =3D 0; i < nr_clocks; i++) - clk_disable_unprepare(fsl_edma->muxclk[i]); -} - static struct fsl_edma_drvdata vf610_data =3D { .dmamuxs =3D DMAMUX_NR, .flags =3D FSL_EDMA_DRV_WRAP_IO, @@ -747,23 +739,28 @@ static int fsl_edma_probe(struct platform_device *pde= v) fsl_edma->chan_masked |=3D chan_mask[0]; } =20 - for (i =3D 0; i < fsl_edma->drvdata->dmamuxs; i++) { - char clkname[32]; - - fsl_edma->muxbase[i] =3D devm_platform_ioremap_resource(pdev, - 1 + i); - if (IS_ERR(fsl_edma->muxbase[i])) { - /* on error: disable all previously enabled clks */ - fsl_disable_clocks(fsl_edma, i); - return PTR_ERR(fsl_edma->muxbase[i]); + if (fsl_edma->drvdata->dmamuxs) { + fsl_edma->muxclk =3D devm_kcalloc(&pdev->dev, fsl_edma->drvdata->dmamuxs, + sizeof(*fsl_edma->muxclk), GFP_KERNEL); + if (!fsl_edma->muxclk) + return -ENOMEM; + + for (i =3D 0; i < fsl_edma->drvdata->dmamuxs; i++) { + fsl_edma->muxbase[i] =3D devm_platform_ioremap_resource(pdev, 1 + i); + if (IS_ERR(fsl_edma->muxbase[i])) + return PTR_ERR(fsl_edma->muxbase[i]); + + fsl_edma->muxclk[i].id =3D devm_kasprintf(&pdev->dev, GFP_KERNEL, + "dmamux%d", i); + if (!fsl_edma->muxclk[i].id) + return -ENOMEM; } =20 - sprintf(clkname, "dmamux%d", i); - fsl_edma->muxclk[i] =3D devm_clk_get_enabled(&pdev->dev, clkname); - if (IS_ERR(fsl_edma->muxclk[i])) - return dev_err_probe(&pdev->dev, - PTR_ERR(fsl_edma->muxclk[i]), - "Missing DMAMUX block clock.\n"); + ret =3D devm_clk_bulk_get_optional_enable(&pdev->dev, fsl_edma->drvdata-= >dmamuxs, + fsl_edma->muxclk); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "Failed to enable DMAMUX block clock.\n"); } =20 fsl_edma->big_endian =3D of_property_read_bool(np, "big-endian"); --=20 2.37.1 From nobody Fri Jun 12 18:34:16 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012015.outbound.protection.outlook.com [52.101.66.15]) (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 BCDB434751B; Wed, 13 May 2026 11:22:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671349; cv=fail; b=mY8pyT3QMnD/A+RcTaUZdCpQDFJna1WTSl6hDeG4i1/B2moAwdROUNi2l1iLrb2jYF7EV5/XmTYjcKcPI/bZwfj6IYKvEpQQlpQykoYFw3a8MVXuVJSHBZjX+Hn8EXrWhr3eUrW+x18u/uwfmMvXF3UYdFDG3b5V0DYDW+OO+xQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778671349; c=relaxed/simple; bh=xHiZeQh6FGH7NMkgCHnkYPMyunhLvuMGgo67foy2UEA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=r7P2xnUmaS0eIXlOuUuzBHiAD3rqy2OvwakYCxWl22NCDPLccVOOhFhCzjqsWafknRQJjFtHd6o0Jg4I+5nBVuc5Iwp96t0iSBETI2LTnFBPCJiYdwPmlUjm7zvycP3mJAVC06MwBrSVkY2JFeNVFKDEDkyARlbGearv51Ir9dc= 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=h3Qf2ACU; arc=fail smtp.client-ip=52.101.66.15 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="h3Qf2ACU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IATmExSrr8TJs74TzCWayugOj+TqbnHiPhF78hMrR2hJU5JvhvuPU8LegkM1Wkjo4g+BgHsRSDMoYUz6n6KQOA9Kk0Rsrif0VhN5B/rLJ+RUanbnXXo20MwlnJqPPxx/D/jRYY4m+dj+xzGmsMRXYv/9IyaCZBSkpCjcFQLtHXZTh6n6PQv/eVallRQgyK30G85YOI4ijVdu5xpsUj9nm5jvKEUI9Jm/Wnllx8P2XVCKirRtY+Ejvrvr8Sw8UGJD2pk2LJFJuMJl55Cx+Lq24RsdMLj6lQQgdZvY12UARgJjM5vkfmzc4JH5JOmPrMwFKBCPBAY/vLt9xPwNNhblig== 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=Rcjipqru+xx5o17jgHY19qH21EJlaS1N0ZeSQjU/kKc=; b=qKQrCPta3C7aAi4/LSztUYmaIuf9ZXJCMsbHuNBmpMS4g3cgbRXK7aHafYIvM3H2F1lhXHv5zoAvhFzSo7/PjOA8fh7OW8wiktc1x2c5klhUe59Jkccc42bqFlJmY2I6+jBQ/XF/uCdvEzzY5mAFvSOYysZzt0C1VniM7LsfFFtrKFneiIGuwxDoSp0Lzr9oBheHvAhGSLkJZ+VHxEVIP/xEKLW++O1itnqFa0NP0tzPlRFNv4inyuiv6CY33RJr9G2fqG0QuI5eX5g0IJesC5+QrxxOgghXmZ5HKl5RmIRsFG8K4SyPJKJ/SJXIMH46NrsCKL65thwto3P0/3AdXA== 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=Rcjipqru+xx5o17jgHY19qH21EJlaS1N0ZeSQjU/kKc=; b=h3Qf2ACUWJZ7oc/M/GpZJpfEFlw2P4Ym7rAkvNGsW/yWncpCZSDKRrcmKqERucDti8L2cQDMDrfHtWU9cDgb1YzwSabHfIMOA6M8nduhE7XnVP30+oR+5H1iMC4kyWnhz/mNgkh0Cem03Xbtou0ccbNLAk6ZavMbvJQLOiHAbQCvwqiv5rmm/xGBL5PlMDbiFckSGckLvh9N0qkZFQeYUSbxhVitGiycJpESiSbg/8NRDxHC1mjcmBe0T7sKrT+6Ff7yBfTKaQwX0huOSKdu4OzAZLu/Vq/mjwYd4OMGYolSrQgVTjRg6+hyvrgkuL6+6cvGYVfKrMcjFqKm9zCtPw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) by VI1PR04MB6797.eurprd04.prod.outlook.com (2603:10a6:803:13e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 11:22:12 +0000 Received: from AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69]) by AM6PR04MB5765.eurprd04.prod.outlook.com ([fe80::bc76:f507:9b83:9d69%5]) with mapi id 15.20.9891.021; Wed, 13 May 2026 11:22:12 +0000 From: Joy Zou Date: Wed, 13 May 2026 19:23:50 +0800 Subject: [PATCH v5 4/4] dmaengine: fsl-edma: add runtime suspend/resume support Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260513-b4-b4-edma-runtime-opt-v5-4-1e595bfb8423@nxp.com> References: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> In-Reply-To: <20260513-b4-b4-edma-runtime-opt-v5-0-1e595bfb8423@nxp.com> To: Frank Li , Vinod Koul Cc: Frank Li , imx@lists.linux.dev, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Joy Zou X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2P153CA0028.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::15) To AM6PR04MB5765.eurprd04.prod.outlook.com (2603:10a6:20b:ae::26) 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: AM6PR04MB5765:EE_|VI1PR04MB6797:EE_ X-MS-Office365-Filtering-Correlation-Id: 1154deeb-357b-45ac-fae9-08deb0e1e141 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|19092799006|1800799024|52116014|38350700014|11063799003|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: 1Ao7GzeGw5EdkGUDNIBE/uCxK2fYeH4UdFThslA6fMkxNc3uMy6Moc11guywFg1pZL9JBRTQOwto+M3EDn6joHyTITl3KYSYvd888qLlqS19f9TcVp/dljLIPFlqvC3gIStawcuHwT70Ej2GyzulwF8+gIX2p/trpdmBGUFiA2wmKYBLdDsI/s/AMPgVYY2faOR/5d+2i0Q14Jj+69RzxRAIN9tjNUZqM4xt5l2p4ZEN8aJGJX4WN+osWlavB3n/VA9WR/5CH/NZ97rsgDCjY7VXZGSNpCEXX1iJA0uSGA/DyeBQ0PnF0W8Vd71rfNDSlY8LZ+Mis2GrwhSZ+WRTB3nTgKS6gtQ7TwigcZDxZuzf9w6WHwlj6ur8DmEk4gUvkUU9nFFWiLG8z2yCIBUaLcKtw6hoiqgpTJGnfkSwPUoGds/YasKQzumpvVfTA8/7+jwu9KAPpGGfRtaUavREUxAroSa9+kkN1evoCgym8cZPfSpUyYKcF1LaiVNl/02EX7orHKu2SnNI8LwtPUIP4cXTfzitwUj2ZJQuRew8rBCKLmcevn3v6tMKpanpfhL/eZ13rtWSuVOJd05uFWWhd49XVp21jCrgsdrOQINu0DORtrAp9PONpRNkkCW+q5kGXfMZwWkz5U0DxHZ70njlNVSmatIoc5UOCnYW4NNaYhR4xuRi6JyEH3YwVfrI6bKGZxFRhF6gI0LJJsu0qVuWQ8XXkzVKRSjD+0FjPR/RBhowwsOOrqXlJ0FSchmarVl4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB5765.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(19092799006)(1800799024)(52116014)(38350700014)(11063799003)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V3czc1FqaDRySHNJV25tSThXMTJLSlZIR01NVnllZUNxOVQxVEpBSWliY2Vn?= =?utf-8?B?bW4xMk13ajVuU3F2QzNDLzZySUdzUWtBU0VVVHRCMTNnRUVlSXMwOGljUUR4?= =?utf-8?B?NE83R2dqNEdzUlF3enAzRkdHZEV1R0U0c3hvaVkwSkRPWmNjTFRLRkViWDgw?= =?utf-8?B?Q3RqbVIyMGlSRmIzdU9NcTJSd2NtRDVxUGcyS21SbUVxei8zMm9GOWVzeVg5?= =?utf-8?B?RGxlemtBaTR4ODdqZGU0NWd1VkRZMC8vdTVDSzk2bFk4Sm5aZlBud3lFaERl?= =?utf-8?B?bVpydkhrRk94RnRzazZWS2tYb3o1WTZTdHlod293eUczb3RqT2gxRXpRWEQ1?= =?utf-8?B?aDRXWHo1SGRMOERBSStmNnRmbGhXby8xOWd0VmttVFdVRlBKdWZteVR3a1pY?= =?utf-8?B?ZGo3VUdCUlNFN25FTmNUbGZtc2R1Sjd3NzVKR25yQ1RBSDBYaTR1QU1BQVR1?= =?utf-8?B?Rm93RXpRWEdFS2c2cUVqaUpySEN4K3BDV1p4UGNqL29EcjcrOFFPcEFvUytj?= =?utf-8?B?NXBBbjFkaXdHcFAzVi8xOHhoWVp3UXl3Zm9QNm8ybEVBaTYzZHRTRlc3aSt0?= =?utf-8?B?aTFmc2xSNUtSMDFvdjZadU1jR093UDFSYU95ZVBSS0I5LzJiQWZMQi9vcEFr?= =?utf-8?B?dDVpdGR3dGxYSVMxQkltZWxFWG12UzBCRlgxVlR3Z1FsWGNUd0VFdmN0ZE12?= =?utf-8?B?QW42SmFYNndVQTVmekx3MFFOb3ZSSUpZN0NkcnBZR01LQmt3NTNQUmgwYTJq?= =?utf-8?B?V2V3WWxqNzFEZXBVbFZZaWJyb1hmTFB2L0hGMlk3c2xDdGZIMDgvcC9Wcm9y?= =?utf-8?B?YmxQL3NNUkdsSXN5eSthVG1hNk1HeDZlZzgzZ1RWdVh3eHdob0dvMFVhOEpR?= =?utf-8?B?MFZIYmJGR2tCNG4wTmhsR1BZVXFyZnFmMEw5ZlUrUUlTNGlvQWtoSllxc2du?= =?utf-8?B?NGhqckZGYmEydVBXLzYyN0ZjQTZRYysyQkI2SDRsbXJGOHlwKyt0L1pLQUlD?= =?utf-8?B?TTRtblpHL3NGNkNHRnhQR3dNSEJPK2FBSXJvSllkSjMxQnRLenNENGh6VURo?= =?utf-8?B?SW9JOGQzYTh0K054UDFhaHJ2UWYva1pQUkQ0VlJPcTF0SkM5VStTczAyaHM1?= =?utf-8?B?cWdvV2ZNTVF6dE9pUXlaM1pnbzJtU2JPZEplWTIyR3BRK25KaGk1NHJRV1Vr?= =?utf-8?B?YWdwZjgwamJYY3NZMms2MkFlcjNOZncyVlhBdHZieUM4VXNaaDdhcjZlVEU4?= =?utf-8?B?MGlzcGthR3UybzNZOW9GMXdxR2RHZjBNOXBPSlJZTzcxclk3MXF4WkJtRno3?= =?utf-8?B?MVh5T0ZaNlFDNmhGZG1JK3dtaHppSVBiT2xUeUQyTjhxeWJDUEJaWVBIQWtM?= =?utf-8?B?MlBzeDRlU0N4SU1aazgxUUdHQzVjd09mby8xdGE3aEhKbFhjQmdhajVzNFZM?= =?utf-8?B?aVB5UktVZHVsOHFSQnFnTFBmb1REYXVZYU1SZEVEZGR4RnUrMGw4QzQzUGdr?= =?utf-8?B?UXhjWllkclQxNEdhY1lNVVFDM3dzcVVhWXJlREdiVmpXSzBZYnYweU1CQ1ZV?= =?utf-8?B?SmV2b2xBRWNvbFo0Skt2QzRuWXh0MGJ0UHkvTDllTFoyYUlRdUxDZnRydmRL?= =?utf-8?B?RktQM3VmbW1EMU4rK1RzelFVUzk4WTVYMU45NHRnNUIzOFVqNi9HUkJ5bEdI?= =?utf-8?B?eUFRRk9yUDIyb1NVOXJaQ1hvc1Bzd0tLQlp4OVUxbjArNWYrL1AvOTcvd1dQ?= =?utf-8?B?cTc2ZGZUWndCOTNUN1hOZ3JWTXdWYzh6U3ZaZm9SSHZ3MzVuNmRXZWtDelQ4?= =?utf-8?B?bXM0NkNNVEVQR3ZaSERKeEQvdVNSemtqa2RnZVF4cUdVWFF1SERoMlllaUx2?= =?utf-8?B?akxhdTUvNUxyTjNnWmtqaXBNYkFOMkZ3Uk0vd3QwQ29KS0RCend3cEluOHQ3?= =?utf-8?B?NW8vOEswLzBwS1lJa2R6U0RxSzIrR0NoTW1oZWg0WG9aRlV4TnhQbHI2WHNi?= =?utf-8?B?a0ppTTY3MWFhd0xxR1lYRTA4ZHg4YklBcGUyZjRvYURBLzdyTVhoNmcySy9L?= =?utf-8?B?RjJiTGpTT2V4S3FTRkdnWDNpN2FoZDZTQTJqbFZQU3FYT0ROMjlFZmUxNVRH?= =?utf-8?B?UE5GbktIZFE4bit2cGQ2MFdKTkp0NEt6RUZYZEdGZC8vL01yRGFxTzMzQWU4?= =?utf-8?B?aWNabXh6UlN3bUFEQTVTZWlPQ2NiRXpxdkRUOUxMbEg0QTNsRVFqU0hmMWcr?= =?utf-8?B?L1ZvMWd0bTdpT0syK3VZRkZVN1o3ODZhcWZLOXljN3J0SnM5MitXZXAvZFA2?= =?utf-8?Q?34l+6YozUo8hVf7dG4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1154deeb-357b-45ac-fae9-08deb0e1e141 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB5765.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 May 2026 11:22:12.7343 (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: dHcyBm9yHJdz89KrD2cT07/y5bdKFkXZt/ioXPZgFJov4XsdBsAkX0goS0+ZcuY+ X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6797 Introduce runtime suspend and resume support for FSL eDMA. Enable per-channel power domain management to facilitate runtime suspend and resume operations. Implement runtime suspend and resume functions for the eDMA engine and individual channels. Link per-channel power domain device to eDMA per-channel device instead of eDMA engine device. So Power Manage framework manage power state of linked domain device when per-channel device request runtime resume/suspend. Trigger the eDMA engine's runtime suspend when all channels are suspended, disabling all common clocks through the runtime PM framework. Signed-off-by: Joy Zou Signed-off-by: Frank Li Reviewed-by: Frank Li --- Changes in V5: - remove unnecessary flags FSL_EDMA_DRV_HAS_CHCLK and FSL_EDMA_DRV_HAS_DMAC= LK. - remove redundant clk_disable_unprepare() due to the pm_runtime_put_sync_s= uspend() added. - use devm_pm_runtime_enable() to replace pm_runtime_enable() and add retur= n value check. - add return value check for pm_runtime_get_sync(); - replace pm_runtime_get_sync() with pm_runtime_resume_and_get(). - replace DMAMUX clock handling with bulk clock API for edma engine runtime= suspend/resume. - remove dev_pm_domain_detach() when device_link_add() fail because the fsl= _edma3_detach_pd() also call dev_pm_domain_detach(). - remove device_link_add() DL_FLAG_RPM_ACTIVE flag and pm_runtime_put_sync_= suspend(). - add clk_bulk_disable_unprepare() for clk_prepare_enable() fail in fsl_edm= a_runtime_resume(). - remove the extra space before RUNTIME_PM_OPS. - add skip channel comments for system suspend. - add clk_disable_unprepare() for dmaclk at the end of probe function. - add clk_bulk_disable_unprepare() for muxclk at the end of probe function. - Link to v4: https://lore.kernel.org/imx/20251017-b4-edma-runtime-v4-1-87c= 64dd30229@nxp.com/ Changes for V4: - fix a typo dmaegnine/dmaengine in the subject. - Link to v3: https://lore.kernel.org/imx/20250912-b4-edma-runtime-v3-1-be2= 2f7161745@nxp.com/ Changes for V3: - rebased onto commit 8f21d9da4670 ("Add linux-next specific files for 2025= 0911") to align with latest changes. - Remove pm_runtime_dont_use_autosuspend() from fsl_edma3_detach_pd(). because the autosuspend is not used. - Move some edma channel registers initialization after the chan_dev pm_runtime_enable(). - Add clk_prepare_enable() return check in fsl_edma_runtime_resume. - Add flag FSL_EDMA_DRV_HAS_DMACLK check in fsl_edma_runtime_resume/suspend= (). - Link to v2: https://lore.kernel.org/imx/20241226052643.1951886-1-joy.zou@= nxp.com/ Changes for V2: - drop ret from fsl_edma_chan_runtime_suspend(). - drop ret from fsl_edma_chan_runtime_resume() and return clk_prepare_enabl= e(). - add review tag - Link to v1: https://lore.kernel.org/imx/20241220021109.2102294-1-joy.zou@= nxp.com/ --- drivers/dma/fsl-edma-common.c | 14 +++-- drivers/dma/fsl-edma-main.c | 141 ++++++++++++++++++++++++++++++++++++--= ---- 2 files changed, 129 insertions(+), 26 deletions(-) diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index e1ca25ff228dbe392bb800f6ecac5a85ca326bf1..132b900ee6071206b9e2c8f67fd= f60ceb8dccb8f 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -247,9 +247,6 @@ int fsl_edma_terminate_all(struct dma_chan *chan) spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags); vchan_dma_desc_free_list(&fsl_chan->vchan, &head); =20 - if (fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_HAS_PD) - pm_runtime_allow(fsl_chan->pd_dev); - return 0; } =20 @@ -844,7 +841,12 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *cha= n) struct fsl_edma_chan *fsl_chan =3D to_fsl_edma_chan(chan); int ret =3D 0; =20 - clk_prepare_enable(fsl_chan->clk); + ret =3D pm_runtime_resume_and_get(&fsl_chan->vchan.chan.dev->device); + if (ret < 0) { + dev_err(&fsl_chan->vchan.chan.dev->device, "Failed to resume device: %d\= n", ret); + return ret; + } + fsl_chan->tcd_pool =3D dma_pool_create("tcd_pool", chan->device->dev, fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_TCD64 ? sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd), @@ -871,7 +873,7 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan) free_irq(fsl_chan->txirq, fsl_chan); err_txirq: dma_pool_destroy(fsl_chan->tcd_pool); - clk_disable_unprepare(fsl_chan->clk); + pm_runtime_put_sync_suspend(&fsl_chan->vchan.chan.dev->device); =20 return ret; } @@ -903,7 +905,7 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan) fsl_chan->is_sw =3D false; fsl_chan->srcid =3D 0; fsl_chan->is_remote =3D false; - clk_disable_unprepare(fsl_chan->clk); + pm_runtime_put_sync_suspend(&fsl_chan->vchan.chan.dev->device); } =20 void fsl_edma_cleanup_vchan(struct dma_device *dmadev) diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index c12126ea6552d51b773bdd61c018570dbd618602..9446a0c3bc576c23b0d0277604b= 41e36dfba0e14 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -629,7 +629,6 @@ static void fsl_edma3_detach_pd(struct fsl_edma_engine = *fsl_edma) device_link_del(fsl_chan->pd_dev_link); if (fsl_chan->pd_dev) { dev_pm_domain_detach(fsl_chan->pd_dev, false); - pm_runtime_dont_use_autosuspend(fsl_chan->pd_dev); pm_runtime_set_suspended(fsl_chan->pd_dev); } } @@ -660,23 +659,8 @@ static int fsl_edma3_attach_pd(struct platform_device = *pdev, struct fsl_edma_eng dev_err(dev, "Failed attach pd %d\n", i); goto detach; } - - fsl_chan->pd_dev_link =3D device_link_add(dev, pd_chan, DL_FLAG_STATELES= S | - DL_FLAG_PM_RUNTIME | - DL_FLAG_RPM_ACTIVE); - if (!fsl_chan->pd_dev_link) { - dev_err(dev, "Failed to add device_link to %d\n", i); - dev_pm_domain_detach(pd_chan, false); - goto detach; - } - fsl_chan->pd_dev =3D pd_chan; - - pm_runtime_use_autosuspend(fsl_chan->pd_dev); - pm_runtime_set_autosuspend_delay(fsl_chan->pd_dev, 200); - pm_runtime_set_active(fsl_chan->pd_dev); } - return 0; =20 detach: @@ -684,6 +668,29 @@ static int fsl_edma3_attach_pd(struct platform_device = *pdev, struct fsl_edma_eng return -EINVAL; } =20 +/* Per channel dma power domain */ +static int fsl_edma_chan_runtime_suspend(struct device *dev) +{ + struct fsl_edma_chan *fsl_chan =3D dev_get_drvdata(dev); + + clk_disable_unprepare(fsl_chan->clk); + + return 0; +} + +static int fsl_edma_chan_runtime_resume(struct device *dev) +{ + struct fsl_edma_chan *fsl_chan =3D dev_get_drvdata(dev); + + return clk_prepare_enable(fsl_chan->clk); +} + +static struct dev_pm_domain fsl_edma_chan_pm_domain =3D { + .ops =3D { + RUNTIME_PM_OPS(fsl_edma_chan_runtime_suspend, fsl_edma_chan_runtim= e_resume, NULL) + } +}; + static int fsl_edma_probe(struct platform_device *pdev) { struct device_node *np =3D pdev->dev.of_node; @@ -809,10 +816,6 @@ static int fsl_edma_probe(struct platform_device *pdev) return PTR_ERR(fsl_chan->clk); fsl_chan->pdev =3D pdev; vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev); - - edma_write_tcdreg(fsl_chan, cpu_to_le32(0), csr); - fsl_edma_chan_mux(fsl_chan, 0, false); - clk_disable_unprepare(fsl_chan->clk); } =20 ret =3D fsl_edma->drvdata->setup_irq(pdev, fsl_edma); @@ -869,6 +872,51 @@ static int fsl_edma_probe(struct platform_device *pdev) return dev_err_probe(&pdev->dev, ret, "Can't register Freescale eDMA engine.\n"); =20 + ret =3D devm_pm_runtime_enable(&pdev->dev); + if (ret) + return dev_err_probe(&pdev->dev, ret, "Can't enable eDMA engine PM runti= me!"); + + for (i =3D 0; i < fsl_edma->n_chans; i++) { + struct fsl_edma_chan *fsl_chan =3D &fsl_edma->chans[i]; + struct device *chan_dev; + + if (fsl_edma->chan_masked & BIT(i)) + continue; + + chan_dev =3D &fsl_chan->vchan.chan.dev->device; + dev_set_drvdata(chan_dev, fsl_chan); + dev_pm_domain_set(chan_dev, &fsl_edma_chan_pm_domain); + + if (fsl_chan->pd_dev) { + fsl_chan->pd_dev_link =3D device_link_add(chan_dev, fsl_chan->pd_dev, + DL_FLAG_STATELESS | + DL_FLAG_PM_RUNTIME); + if (!fsl_chan->pd_dev_link) { + fsl_edma3_detach_pd(fsl_edma); + return dev_err_probe(&pdev->dev, -EINVAL, + "Failed to add device_link to %d\n", i); + } + } + ret =3D devm_pm_runtime_enable(chan_dev); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "Can't enable eDMA channel PM runtime!"); + + if (fsl_chan->pd_dev) { + ret =3D pm_runtime_resume_and_get(fsl_chan->pd_dev); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "Failed to power on eDMA channel %d\n", + fsl_chan->vchan.chan.chan_id); + } + + edma_write_tcdreg(fsl_chan, cpu_to_le32(0), csr); + fsl_edma_chan_mux(fsl_chan, 0, false); + clk_disable_unprepare(fsl_chan->clk); + if (fsl_chan->pd_dev) + pm_runtime_put_sync_suspend(fsl_chan->pd_dev); + } + ret =3D devm_of_dma_controller_register(&pdev->dev, np, drvdata->dmamuxs ? fsl_edma_xlate : fsl_edma3_xlate, fsl_edma); @@ -880,6 +928,9 @@ static int fsl_edma_probe(struct platform_device *pdev) if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)) edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr); =20 + clk_disable_unprepare(fsl_edma->dmaclk); + clk_bulk_disable_unprepare(fsl_edma->drvdata->dmamuxs, fsl_edma->muxclk); + return 0; } =20 @@ -902,6 +953,19 @@ static int fsl_edma_suspend_late(struct device *dev) fsl_chan =3D &fsl_edma->chans[i]; if (fsl_edma->chan_masked & BIT(i)) continue; + + /* + * Skip channel if: + * 1. Runtime PM already suspended. + * 2. Channel without power domain, and the channel source ID is zero, + * so the channel isn't assigned. + */ + if (pm_runtime_status_suspended(&fsl_chan->vchan.chan.dev->device) || + (!(fsl_edma->drvdata->flags & FSL_EDMA_DRV_HAS_PD) && + (fsl_edma->drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) && + !fsl_chan->srcid)) + continue; + spin_lock_irqsave(&fsl_chan->vchan.lock, flags); /* Make sure chan is idle or will force disable. */ if (unlikely(fsl_chan->status =3D=3D DMA_IN_PROGRESS)) { @@ -928,6 +992,13 @@ static int fsl_edma_resume_early(struct device *dev) fsl_chan =3D &fsl_edma->chans[i]; if (fsl_edma->chan_masked & BIT(i)) continue; + + if (pm_runtime_status_suspended(&fsl_chan->vchan.chan.dev->device) || + (!(fsl_edma->drvdata->flags & FSL_EDMA_DRV_HAS_PD) && + (fsl_edma->drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) && + !fsl_chan->srcid)) + continue; + fsl_chan->pm_state =3D RUNNING; edma_write_tcdreg(fsl_chan, 0, csr); if (fsl_chan->srcid !=3D 0) @@ -940,6 +1011,35 @@ static int fsl_edma_resume_early(struct device *dev) return 0; } =20 +/* edma engine runtime system/resume */ +static int fsl_edma_runtime_suspend(struct device *dev) +{ + struct fsl_edma_engine *fsl_edma =3D dev_get_drvdata(dev); + + clk_bulk_disable_unprepare(fsl_edma->drvdata->dmamuxs, fsl_edma->muxclk); + + clk_disable_unprepare(fsl_edma->dmaclk); + + return 0; +} + +static int fsl_edma_runtime_resume(struct device *dev) +{ + struct fsl_edma_engine *fsl_edma =3D dev_get_drvdata(dev); + int ret; + + ret =3D clk_bulk_prepare_enable(fsl_edma->drvdata->dmamuxs, fsl_edma->mux= clk); + if (ret) + return ret; + + ret =3D clk_prepare_enable(fsl_edma->dmaclk); + if (ret) { + clk_bulk_disable_unprepare(fsl_edma->drvdata->dmamuxs, fsl_edma->muxclk); + return ret; + } + return 0; +} + /* * eDMA provides the service to others, so it should be suspend late * and resume early. When eDMA suspend, all of the clients should stop @@ -948,6 +1048,7 @@ static int fsl_edma_resume_early(struct device *dev) static const struct dev_pm_ops fsl_edma_pm_ops =3D { .suspend_late =3D fsl_edma_suspend_late, .resume_early =3D fsl_edma_resume_early, + RUNTIME_PM_OPS(fsl_edma_runtime_suspend, fsl_edma_runtime_resume, NULL) }; =20 static struct platform_driver fsl_edma_driver =3D { --=20 2.37.1