{"id":2175196,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175196/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20251217151609.3162665-20-den@valinux.co.jp>","date":"2025-12-17T15:15:53","name":"[RFC,v3,19/35] dmaengine: dw-edma: Poll completion when local IRQ handling is disabled","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e6fdcb255ed89ea139ab60c80946c56dd4fc7f5d","submitter":{"id":91573,"url":"http://patchwork.ozlabs.org/api/1.0/people/91573/?format=json","name":"Koichiro Den","email":"den@valinux.co.jp"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20251217151609.3162665-20-den@valinux.co.jp/mbox/","series":[{"id":485709,"url":"http://patchwork.ozlabs.org/api/1.0/series/485709/?format=json","date":"2025-12-17T15:15:53","name":"NTB transport backed by endpoint DW eDMA","version":3,"mbox":"http://patchwork.ozlabs.org/series/485709/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2175196/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-43184-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.a=rsa-sha256 header.s=selector1 header.b=jQ4YC731;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-pci+bounces-43184-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=\"jQ4YC731\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.74.52","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=valinux.co.jp","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=valinux.co.jp;"],"Received":["from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dWcx22PWYz1xty\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 02:22:30 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 3EBD2300FA64\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 17 Dec 2025 15:20:23 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id EF40F34E743;\n\tWed, 17 Dec 2025 15:16:41 +0000 (UTC)","from OS0P286CU010.outbound.protection.outlook.com\n (mail-japanwestazon11011052.outbound.protection.outlook.com [40.107.74.52])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id E675B34D4F1;\n\tWed, 17 Dec 2025 15:16:39 +0000 (UTC)","from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:24c::11)\n by TYCP286MB2863.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:306::14) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.6; Wed, 17 Dec\n 2025 15:16:30 +0000","from TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n ([fe80::fb7e:f4ed:a580:9d03]) by TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n ([fe80::fb7e:f4ed:a580:9d03%5]) with mapi id 15.20.9434.001; Wed, 17 Dec 2025\n 15:16:30 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1765984601; cv=fail;\n b=ibc6HzLaYLsWhNK6Uq0DzkL2IC2zS5A1BVhhL+c+y8K1EkJSnH3q5U4rm7Xo5ivVIIYDClZ1mzckuBMVXxI5rY/x/Vu/yqA39etFE/PzbsJdZZhyoMYA46wa5WQtZweHXFDoPjbH+u3NyRQEqCOD7PSRil5jpvE0f/ik3DCw724=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=Dt6W/q1T90F9ncxsskAp1q74JgmwRTKmdO8GYVRfVKlEbHYgJOKLF356aiv1DHgcIuW6lhOYnYiv21u9/D4qROiBgNW51/GCOSW9sxSWkRJEPMtsgVJvB9cyW0ggqKm7eaGStaloJ9Pw/wt+qnvyIinl0quSUht4XPzPIbtnu9vHlp47zclI765lC9pw4f0Xo6JRhc/z1KFErWSi0A8vT7TrAYFLt6RZq4NGi5CPRXOcfSVuCN5cU0PPIO5zrVbVVUfpYbtL47xg6J2wFnXgxDeNa546V5TolIiAsPyopJ91ygCeceqPxUfhUYzDFW0oGovq3oM9jsyKj+FDifgPAw=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1765984601; c=relaxed/simple;\n\tbh=5zqyBJOpEKSXnGAGV2M8EAE84LUa4/L6yLnivtqfkCc=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=kU+ohEH1o5TL4ASQY9L1vO5rqFTCEzLllvAHxiUdytVVRdGbQyYFPRQ/hY6wR/OfQCLxeVc/Vd+JCbYO3921CxX7S6xQc31KgTHXhOPJ3i0U8uPfu7CML3nycISBTPbNGuQK7X2tDjgNPnCdsTCHDxOk2NcuAfkSLiDzgE/hCqo=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=bLzUNjy/oXeER3ILFYYjuUL7EuoIyktAk5SU4q8+TmI=;\n b=abI2IsBsN9/1z03XOFUHBImZn7L1tiVigT42/4/JfQITlwgrvG9fpai6z4Z8sTCMvEdTsu4rk3i5m18SRr13aycYT2tzUz8OvoGPj9n+YuLUO4idg8Fvtox86Mosod/UGck/2D34FKBhedwQdk5RD6jhRWa7mWJP+z8bM/Q3ufEFRTwudaup+BnNG0f6yORHYonwU6rwYqgcxMM0+eEeaJr0Uw+MR04Zhq26Jjj6zLftCDn4ek84RvZBNFAGL2ctcPKyOWTkjOK0yXBjeNS4gGdHDM/xiVgQ4DLsyQycuuHvuzd45TzZv058oMn2OB/M2g/RSMEyAoZIZ/o+2AWc7g=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp;\n spf=pass smtp.mailfrom=valinux.co.jp;\n dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=jQ4YC731; arc=fail smtp.client-ip=40.107.74.52","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=valinux.co.jp; dmarc=pass action=none\n header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=bLzUNjy/oXeER3ILFYYjuUL7EuoIyktAk5SU4q8+TmI=;\n b=jQ4YC731qZbJapXsGOPoGGUr0xm+PJYz7l2ufcFXQIDnyMjj/2Zu+t10+yoUoeu6WdyXRkrTUv2i0dZEqzysBsl5XZVaZ7TH/WRIbTERHtZbjUhJkTO7oj0sztsWcGDQVO9IAQBzCzuvjd4JFrwGDCBqRbwnIbPJH40BqXsItKY=","From":"Koichiro Den <den@valinux.co.jp>","To":"Frank.Li@nxp.com,\n\tdave.jiang@intel.com,\n\tntb@lists.linux.dev,\n\tlinux-pci@vger.kernel.org,\n\tdmaengine@vger.kernel.org,\n\tlinux-renesas-soc@vger.kernel.org,\n\tnetdev@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org","Cc":"mani@kernel.org,\n\tkwilczynski@kernel.org,\n\tkishon@kernel.org,\n\tbhelgaas@google.com,\n\tcorbet@lwn.net,\n\tgeert+renesas@glider.be,\n\tmagnus.damm@gmail.com,\n\trobh@kernel.org,\n\tkrzk+dt@kernel.org,\n\tconor+dt@kernel.org,\n\tvkoul@kernel.org,\n\tjoro@8bytes.org,\n\twill@kernel.org,\n\trobin.murphy@arm.com,\n\tjdmason@kudzu.us,\n\tallenbh@gmail.com,\n\tandrew+netdev@lunn.ch,\n\tdavem@davemloft.net,\n\tedumazet@google.com,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\tBasavaraj.Natikar@amd.com,\n\tShyam-sundar.S-k@amd.com,\n\tkurt.schwemmer@microsemi.com,\n\tlogang@deltatee.com,\n\tjingoohan1@gmail.com,\n\tlpieralisi@kernel.org,\n\tutkarsh02t@gmail.com,\n\tjbrunet@baylibre.com,\n\tdlemoal@kernel.org,\n\tarnd@arndb.de,\n\telfring@users.sourceforge.net,\n\tden@valinux.co.jp","Subject":"[RFC PATCH v3 19/35] dmaengine: dw-edma: Poll completion when local\n IRQ handling is disabled","Date":"Thu, 18 Dec 2025 00:15:53 +0900","Message-ID":"<20251217151609.3162665-20-den@valinux.co.jp>","X-Mailer":"git-send-email 2.51.0","In-Reply-To":"<20251217151609.3162665-1-den@valinux.co.jp>","References":"<20251217151609.3162665-1-den@valinux.co.jp>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"TYCP286CA0036.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:29d::20) To TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:24c::11)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"TYWP286MB2697:EE_|TYCP286MB2863:EE_","X-MS-Office365-Filtering-Correlation-Id":"6d74163c-de22-4c25-c9ac-08de3d7f419b","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|7416014|376014|10070799003|1800799024|366016;","X-Microsoft-Antispam-Message-Info":"\n 1yQnKvRZzomHKbZLBV87yPo6/Aq/w5KzaDJU11N5iYn9RqgsGAXlwcnChCxKatXSuPuh8L2Df7rSYxOn62EHLZwE+dt0Pf3GBSptFOwUbmItLlpIvztn8uSgrOhgVpgoGaI4P0KW0yXWPedlnVeLPwgdNF4EwWSlSWhSumhu9yUaMYK5LQ1cntq1VkvbHYOvQxxaol+QSz2n7SH1hagtrb8c56IXhlKIpU0MtGpib+djHuBS+VaAMu+tfyutqWz2oamSyAuugUJraOdGqPSzYkedbC8SYHqgK0buBLlzxAaMIsQpZ0tcUixlwju3cF6imaHr1FXJWftwWopj4SK7PZyt3Ss2jBnOGxoH1/1uajkUtcWsrNYIfFZ9XXiZV28HBVzOeWc3ef7Ahw02hJrNeKyOaNVU09DZOvyOhHepFeS9+HZEd1oMwQOS4Exbz5W1okYYzhWbS7LRCXc9I9UmyGFY1Nuq/MsK+/6R0CJyWyC8nkZ6VVtr/3hq/BuZtupWiw9DzML08k3i9BZMGWVVCVAt/qCCtRVW2aNz75yaISXueJmARq5w6cMGcpEGajgZw0bgKndamG5NM35k8x791UKiZRZVuyTXEPPBiv9HODIl4gtrHJfq5WD1K9GSlvg/0gMdan+DwXIFk6L37oLwQ1YhoJo7NCKYsn2XCbvBZUkiL87Ar0bvALBe1Y/BBr+aEsvluWAHQf6xdbuyAelfGU3JXYTdvaJ7VcascvfBWGfa1NndOUNlpqklI2LKM1BCyv7wuBsBmS12yiLfwB9mbjUmMYu/VATufmLt2nK57UBDmTiCD6dZf/tzh75uQJ6VeQV665FuGH23gU9iwyV1lpJ1iHxU5uosEhR1RPh9kjS8PDtU4Y8K3SnJ0e9/tWxzY1cc08mbwUdDFjJInpUa0k/tAnTf+R4Y6OorvjgVcFpn25p33dW7Gp0rEC/gsqsUEPLRX7SG/o/RobGnipLVajRzClbKUPEcm37rQhv7MBMH7fmqaGBWIEoMAT0sKk4UzOVGTjhPa5c0GqrMEWsozi9PnNUFBb2Gj1WirmlLH+Y0k2RNnLXIUC5/cgsPmDlqJ0CjdeX2FR5Or3IsyF7QCB/BM4TMXtvg0OHb8Ta4eaSP3q1ua+toGK14GMkHnz1LiZf3yj4dMaq+qgrwnhXqtWUOKWIYL1i5uTztcwMXJFDxn/rwI3j7fcJ7dRg5mtc75wQwra99XFWzkdTYURENHSR+0LKv9iJpt2VfRa9GsDpfKWTK96Un8czgBn+n/iTH8mOt0zBctKvxdcIWD+qCRbs4zqiFhYdOPhCtAagpdlFF048LAy+HKGM/6rwqaHO2L8QtUMTNRNsX5gKTkRLLcXTyfUKSnGeH6jdDJmzRDBWl0Lzaenp9KlQP4j2KpgqIu6XC+EpBkIHNi9boiOBEjxEAmDJETl0vs9oUpQKbtcxtr4ThW+Gn9R1Hqo8q27VE","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n U9NFYJCjWNQE2pTI/arGeY8s5DR+oIdo/7JjowRy9s0MTZ1SeCfJDMS88w//fiJoUw2AG0yPJlYipu48J7gYu4fL1hjV05ZafDMOVMsBF1qisSBG37pP4OcPtFP3Vp3kcc/NcbDb09wcHjopi2NX8w5DsIzzofJCOqbjp2lUUPdCmgGbW/KAbBJu0dcDHWe5xNOteozjGHQi0FU2+9JczcKoNSkHo+Kd1vPIGJSgFsoViPn7erL7bfO74QZDueN292Za4UBD0IOuZBWck1+c1vJsZHTtJY+5IuqDAxLa7HADpSEvUhaRI6QS599qbMahqGIkvKqfMqONmeiam1ofArmwYis95FWPKt0B/U3sWAz61Jr8emtmTRHppmWx4elFBNNtojpUI1C6mACPGxIj1dKxSCpTBeTAH0v4vW2R3YyQz93ZYVU/3bAx9F2oGIhWTPcKrqrp25CeviOuMKxjM9JbTL24tBtoIArPanIjy5S/CHZ+L24spH0c/y65lAG5zKBAcOkge2HUo+S7sFwAH/zQDW2nl1crjvfygyGVaCX0P4YNJiUw6/+xKDR4pdMcIHTjGQlg2SI4IIWzfM4/7/OshJ2Hrpp/7CGeZfn/QxDedrfaoYnbZ0vPPj5oRDXC4gFjUiTUzniJObnTenWIkMUsaDbpVVYFSN8BjF7DhX9kKiwHqr+Cpr3e5EUyB0u5PdRyOS1HQrTDot5FbstHg6Hj0Y5twzh+Vv5xMs/6y2n895gMFBmVk8oJlJw6HsoIiq1xh3mnnNG90EZGoM0V1f2S0R+wW5ncuIjFVA/Sqt0HGgzy6NHt7stze3GcPss5myomuTYw0UXkYl86baLnOjPIUpTWnMhyBJniBk2r/MDlIBGG/aTW/YKurmd83sQiLkDDSB/KRRzwhlOkYP1NWPMk6cmJDNCAgMsQ7Nwk3NQbpnPe2iFEwalE4pAHSEkRXqQY1MppYjjM0ha29QCOv13iazoANw8DfIsd8VTVfwSkMXskDpwQ/NEFYzHNkbfjuRwqaSyEPzsUdailAbSBlVLQqMKKT0t7GhGPcJ2OHfMaii9fbda8HG30f4JOZ9Gu/3/IrktEuDhotUI5G5Nf07owEFG4bkX2YFh3Fd2ZdPyc5rqIpPdYZqtKw+Gtt1trelhJICuNuqTXY7pb0D2EVJgGs9xZFcWzQ3/rLIkcuNNyPNcneOQJKmFrKXejx4xChcx6A3gIzLv9HuM5AK5HlEKcKQbL7//hebDwaxmPOXhZwvECBC5LAGASt4LNqpvtKkXYCtqPQyqbzstW1Y019vvHxZxVRx9LwS00DX7bjuRtNeFiXgVJV6luJ4ZvMCH60hjOZds3fLCK8yoKWnS9wdDssntzy2SCyjxDlzzDRz/vEiJxBbPbVEej1z54j1N7l/0Dd37k2KWiV03g/pfoNrsRKTh3BugXKLQ/emLNYjejhphbwdBBn6MI+hZKwCYCkUOPuzllMJH/tkeiyXsJXHqEDiqbCGj/xWjSUOUpCvIqFrnmJ0a8P5I5fbK8cu9iCUQ5gNeuSsZQ3hHB/HhFI3iYrm9VABr82X580gHcC9j2Ofl+QXrX0gzP/biMl4yBat4napxSRpqz+zW3z5CQ0GsN+wsziVjLC3679VYrUsw=","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 6d74163c-de22-4c25-c9ac-08de3d7f419b","X-MS-Exchange-CrossTenant-AuthSource":"TYWP286MB2697.JPNP286.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"17 Dec 2025 15:16:30.4752\n (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"7a57bee8-f73d-4c5f-a4f7-d72c91c8c111","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n +x7B5+xRqtBusGu5r7rTgBc6gaxBmwECwu9v2b+5DsS8NZnV//+pdv0LVZz0e5uzG9kPAnuLo8JqGW8LVmITkA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYCP286MB2863"},"content":"When a channel is configured to suppress host side interruption (RIE=0),\nthe host side driver cannot rely on IRQ-driven progress. Add an optional\npolling path for such channels. Polling is only enabled for channels where\ndw_edma_chan_ignore_irq() is true.\n\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\n drivers/dma/dw-edma/dw-edma-core.c | 97 ++++++++++++++++++++++++------\n drivers/dma/dw-edma/dw-edma-core.h |  4 ++\n 2 files changed, 84 insertions(+), 17 deletions(-)","diff":"diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c\nindex 0bceca2d56c5..09b10ad1f38a 100644\n--- a/drivers/dma/dw-edma/dw-edma-core.c\n+++ b/drivers/dma/dw-edma/dw-edma-core.c\n@@ -303,23 +303,6 @@ static int dw_edma_device_terminate_all(struct dma_chan *dchan)\n \treturn err;\n }\n \n-static void dw_edma_device_issue_pending(struct dma_chan *dchan)\n-{\n-\tstruct dw_edma_chan *chan = dchan2dw_edma_chan(dchan);\n-\tunsigned long flags;\n-\n-\tif (!chan->configured)\n-\t\treturn;\n-\n-\tspin_lock_irqsave(&chan->vc.lock, flags);\n-\tif (vchan_issue_pending(&chan->vc) && chan->request == EDMA_REQ_NONE &&\n-\t    chan->status == EDMA_ST_IDLE) {\n-\t\tchan->status = EDMA_ST_BUSY;\n-\t\tdw_edma_start_transfer(chan);\n-\t}\n-\tspin_unlock_irqrestore(&chan->vc.lock, flags);\n-}\n-\n static enum dma_status\n dw_edma_device_tx_status(struct dma_chan *dchan, dma_cookie_t cookie,\n \t\t\t struct dma_tx_state *txstate)\n@@ -707,6 +690,68 @@ static irqreturn_t dw_edma_interrupt_common(int irq, void *data)\n \treturn ret;\n }\n \n+static void dw_edma_done_arm(struct dw_edma_chan *chan)\n+{\n+\tif (!dw_edma_chan_ignore_irq(&chan->vc.chan))\n+\t\t/* no need to arm since it's not to be ignored */\n+\t\treturn;\n+\n+\tqueue_delayed_work(system_wq, &chan->poll_work, 1);\n+}\n+\n+static void dw_edma_chan_poll_done(struct dma_chan *dchan)\n+{\n+\tstruct dw_edma_chan *chan = dchan2dw_edma_chan(dchan);\n+\tenum dma_status st;\n+\n+\tif (!dw_edma_chan_ignore_irq(dchan))\n+\t\t/* no need to poll since it's not to be ignored */\n+\t\treturn;\n+\n+\tguard(spinlock_irqsave)(&chan->poll_lock);\n+\n+\tif (chan->status != EDMA_ST_BUSY)\n+\t\treturn;\n+\n+\tst = dw_edma_core_ch_status(chan);\n+\n+\tswitch (st) {\n+\tcase DMA_COMPLETE:\n+\t\tdw_edma_done_interrupt(chan);\n+\t\tif (chan->status == EDMA_ST_BUSY)\n+\t\t\tdw_edma_done_arm(chan);\n+\t\tbreak;\n+\tcase DMA_IN_PROGRESS:\n+\t\tdw_edma_done_arm(chan);\n+\t\tbreak;\n+\tcase DMA_ERROR:\n+\t\tdw_edma_abort_interrupt(chan);\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+}\n+\n+static void dw_edma_device_issue_pending(struct dma_chan *dchan)\n+{\n+\tstruct dw_edma_chan *chan = dchan2dw_edma_chan(dchan);\n+\tunsigned long flags;\n+\n+\tif (!chan->configured)\n+\t\treturn;\n+\n+\tdw_edma_chan_poll_done(dchan);\n+\n+\tspin_lock_irqsave(&chan->vc.lock, flags);\n+\tif (vchan_issue_pending(&chan->vc) && chan->request == EDMA_REQ_NONE &&\n+\t    chan->status == EDMA_ST_IDLE) {\n+\t\tchan->status = EDMA_ST_BUSY;\n+\t\tdw_edma_start_transfer(chan);\n+\t} else\n+\t\tdw_edma_done_arm(chan);\n+\tspin_unlock_irqrestore(&chan->vc.lock, flags);\n+}\n+\n static int dw_edma_alloc_chan_resources(struct dma_chan *dchan)\n {\n \tstruct dw_edma_chan *chan = dchan2dw_edma_chan(dchan);\n@@ -1060,6 +1105,19 @@ int dw_edma_remove(struct dw_edma_chip *chip)\n }\n EXPORT_SYMBOL_GPL(dw_edma_remove);\n \n+static void dw_edma_poll_work(struct work_struct *work)\n+{\n+\tstruct delayed_work *dwork = to_delayed_work(work);\n+\tstruct dw_edma_chan *chan =\n+\t\tcontainer_of(dwork, struct dw_edma_chan, poll_work);\n+\tstruct dma_chan *dchan = &chan->vc.chan;\n+\n+\tif (!chan->configured)\n+\t\treturn;\n+\n+\tdw_edma_chan_poll_done(dchan);\n+}\n+\n int dw_edma_chan_irq_config(struct dma_chan *dchan,\n \t\t\t    enum dw_edma_ch_irq_mode mode)\n {\n@@ -1083,6 +1141,11 @@ int dw_edma_chan_irq_config(struct dma_chan *dchan,\n \t\t str_write_read(chan->dir == EDMA_DIR_WRITE),\n \t\t chan->id, mode);\n \n+\tif (dw_edma_chan_ignore_irq(&chan->vc.chan)) {\n+\t\tspin_lock_init(&chan->poll_lock);\n+\t\tINIT_DELAYED_WORK(&chan->poll_work, dw_edma_poll_work);\n+\t}\n+\n \treturn 0;\n }\n EXPORT_SYMBOL_GPL(dw_edma_chan_irq_config);\ndiff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-edma-core.h\nindex 8458d676551a..11fe4532f0bf 100644\n--- a/drivers/dma/dw-edma/dw-edma-core.h\n+++ b/drivers/dma/dw-edma/dw-edma-core.h\n@@ -11,6 +11,7 @@\n \n #include <linux/msi.h>\n #include <linux/dma/edma.h>\n+#include <linux/workqueue.h>\n \n #include \"../virt-dma.h\"\n \n@@ -83,6 +84,9 @@ struct dw_edma_chan {\n \n \tenum dw_edma_ch_irq_mode\tirq_mode;\n \n+\tstruct delayed_work\t\tpoll_work;\n+\tspinlock_t\t\t\tpoll_lock;\n+\n \tenum dw_edma_request\t\trequest;\n \tenum dw_edma_status\t\tstatus;\n \tu8\t\t\t\tconfigured;\n","prefixes":["RFC","v3","19/35"]}