From nobody Fri Dec 19 15:38:37 2025 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4425230E84F for ; Mon, 13 Oct 2025 15:03:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367803; cv=none; b=JQiQ7BjdDij+ta4fQMBhWxMmCXspnR82mgfr8kTFtOqAW9pKOtm3DBRoIomXvhQ+9EdbPhRKPEttNfqy6wOieaBEcVaN5AwSRXN7iOJsTqEdxxHgUTejJ/03/mf9JLRw2l/lWEfQO5B1OOUDSpPXs1eGgALy7C1AutmWobL5710= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367803; c=relaxed/simple; bh=OzK0aYW2LWITX9fdd4z7rDbgFG5oDHlyFtFytqntWLc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eX6jVLiyxWuYMbUFhwntM119qjszyGMNfBqgQB7/5eCaKACS1L/RUeGuS8vg1ZuHco+N7eAoB3tN3dr25HvLinRioy8tD6UnxFAmlPRC7mnyVI5gQPU9zeu9gfyO/uvpfEJXav7EUCkYcE69Jngg7ITo9Y6Bua4WfH4c/cPTUjo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KIzWI5jm; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KIzWI5jm" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b3e234fcd4bso724434166b.3 for ; Mon, 13 Oct 2025 08:03:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760367799; x=1760972599; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KXSMFjXcnbUgtoA/eC/AHIzf0ylAZ7zJ33rVYw0AFyk=; b=KIzWI5jm6d4NAvRN8ov3Ehp4l4UiXqcDbDLv2khd3EUnlROlFkt4TwzK4YQTATCR8e mbUE+3ZWCaNJzpIzrLa1z7PxOa5pP8nB4aB6hZlI1lwkPPUacT/9ZvrFRgpXLkgK9iCJ Dg4U1gCCEZzN/+1vJw9j7RPGhFDEB8PZJjEh6AINhrKQkyXbKdtazB0KJRkhOYuTv9sR undva1bYu/OsFpKDVH+xLWqSngEh9moGFb+uYpkSI94dG312eg/V235PkHp4LGqliBAk 7bvByDhzaEIbI/zmFQVGMU4Vow35SFxdMoTd0rvjNlogFwAzlJftSAVO/oc1Fydcn8/1 uWpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760367799; x=1760972599; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KXSMFjXcnbUgtoA/eC/AHIzf0ylAZ7zJ33rVYw0AFyk=; b=TmZ3oiCM3uE5HMbErB8oKTg3vz7LqTaI2HB9ikZUa5m5W+Kw3XEkylyD7t0WFKLaLb 4J0mcKtUg5I07OWXZNK8lUB19FUS51L+08gyIaTYCS5cd8ob5xCRX1fPmfF0BFpai7bj JYPDx3fxORmWGL3Q4cGLvAVD5cGNK8IBxwSk38XY17zlZM3uXgqcbc6sI0p8X7XRVqca 9xJzeB+Mkh8jE9p/Sc0D8xO868OwRB4Vs19t7gTckNkvDW3r/aC1/c/JP3/gxVxFwmUs baHAE56gHADwsWRY6w1VlcKMRGbwZHY2hYdHR55X5+RkApiv9K+k9wbzVGTRfv7IBNJ/ nArA== X-Forwarded-Encrypted: i=1; AJvYcCUIykiABBL7Aud0081EFjAZ8kpG6hzVTuSv1UQV7XdrD3CRlOKZF9QcToo4JlTdSlnoSF+oqipVQAtsm+E=@vger.kernel.org X-Gm-Message-State: AOJu0YwSFjWzu75S0YMelB7/ySa0YPEd0fYhR2PFu2j5rU6x7MkxEtZd ssbWju7Y44gkQThyz6gx00X/zO+U4Aj6y/kof0zPQHokPwlRu6MJsGM5 X-Gm-Gg: ASbGncvikqAeyP/qy2OA0cM7fmFZMxp22erF/dNQceuHQ2jaDV6Wysk+aPSol3Ng65q Xb2oPFwPJ6pdMT5yZltSim/dy7b7TUzeDIEGZz6GZJxCZDzt0RC1+38iArDxSxQR766hiLFXOqF Ab6rNf6uJtzhEJwGMjZWMDuMWykoA5z5Ofyb0FCzdqhKVI1LQF0arH7/wgwT6fY8RpAZpya3Vod mnrFWyyZ8lKdwIvW6rVo/5KUeGqfgJPP3V71C/+3vAaV68UrESRF5g4Z0LIq6zdl4V6Ex3IPpw/ JddbSKhKHBkJuzaFJ499613eJoHPo11MejfutSok2EuTTUMDdAkXTpQ6k309jH0eM4FWusxZowy /G3rmTsKfa4Lb9fM8TUY0y+9UGj2YJYWsO09K2J40P81fxMDqCFGo1PyhNxBYsy1+12QGnHIrxw == X-Google-Smtp-Source: AGHT+IGXCqTReJ94d66EEB+8s5ZF34ZclwL1Q/rIdYVO7a5YUFeWWK/uxTC9yxu7YownwJ8zZfnCzQ== X-Received: by 2002:a17:907:da2:b0:b2c:fa41:c1be with SMTP id a640c23a62f3a-b50acd299ffmr2305092066b.61.1760367799090; Mon, 13 Oct 2025 08:03:19 -0700 (PDT) Received: from NB-6746.corp.yadro.com ([188.243.183.84]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d8c129c4sm957903866b.41.2025.10.13.08.03.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Oct 2025 08:03:18 -0700 (PDT) From: Artem Shimko To: Eugeniy Paltsev , Vinod Koul Cc: p.zabel@pengutronix.de, Artem Shimko , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] dmaengine: dw-axi-dmac: simplify PM functions and use modern macros Date: Mon, 13 Oct 2025 18:02:32 +0300 Message-ID: <20251013150234.3200627-2-a.shimko.dev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251013150234.3200627-1-a.shimko.dev@gmail.com> References: <20251013150234.3200627-1-a.shimko.dev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Simplify the power management code by removing redundant wrapper functions and using modern kernel PM macros. This reduces code duplication and improves maintainability. The changes convert the suspend/resume functions to take device pointer directly instead of the chip structure, allowing removal of the runtime PM wrapper functions. The manual PM ops definition is replaced with DEFINE_RUNTIME_DEV_PM_OPS() macro and pm_ptr() is used for the platform driver. Probe and remove functions are updated to call PM functions with device pointer. Signed-off-by: Artem Shimko --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index b23536645ff7..8b7cf3baf5d3 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1314,8 +1314,10 @@ static int dma_chan_resume(struct dma_chan *dchan) return 0; } =20 -static int axi_dma_suspend(struct axi_dma_chip *chip) +static int axi_dma_suspend(struct device *dev) { + struct axi_dma_chip *chip =3D dev_get_drvdata(dev); + axi_dma_irq_disable(chip); axi_dma_disable(chip); =20 @@ -1325,9 +1327,10 @@ static int axi_dma_suspend(struct axi_dma_chip *chip) return 0; } =20 -static int axi_dma_resume(struct axi_dma_chip *chip) +static int axi_dma_resume(struct device *dev) { int ret; + struct axi_dma_chip *chip =3D dev_get_drvdata(dev); =20 ret =3D clk_prepare_enable(chip->cfgr_clk); if (ret < 0) @@ -1343,20 +1346,6 @@ static int axi_dma_resume(struct axi_dma_chip *chip) return 0; } =20 -static int __maybe_unused axi_dma_runtime_suspend(struct device *dev) -{ - struct axi_dma_chip *chip =3D dev_get_drvdata(dev); - - return axi_dma_suspend(chip); -} - -static int __maybe_unused axi_dma_runtime_resume(struct device *dev) -{ - struct axi_dma_chip *chip =3D dev_get_drvdata(dev); - - return axi_dma_resume(chip); -} - static struct dma_chan *dw_axi_dma_of_xlate(struct of_phandle_args *dma_sp= ec, struct of_dma *ofdma) { @@ -1590,7 +1579,7 @@ static int dw_probe(struct platform_device *pdev) * driver to work also without Runtime PM. */ pm_runtime_get_noresume(chip->dev); - ret =3D axi_dma_resume(chip); + ret =3D axi_dma_resume(chip->dev); if (ret < 0) goto err_pm_disable; =20 @@ -1638,7 +1627,7 @@ static void dw_remove(struct platform_device *pdev) axi_dma_disable(chip); =20 pm_runtime_disable(chip->dev); - axi_dma_suspend(chip); + axi_dma_suspend(chip->dev); =20 for (i =3D 0; i < DMAC_MAX_CHANNELS; i++) if (chip->irq[i] > 0) @@ -1653,9 +1642,7 @@ static void dw_remove(struct platform_device *pdev) } } =20 -static const struct dev_pm_ops dw_axi_dma_pm_ops =3D { - SET_RUNTIME_PM_OPS(axi_dma_runtime_suspend, axi_dma_runtime_resume, NULL) -}; +static DEFINE_RUNTIME_DEV_PM_OPS(dw_axi_dma_pm_ops, axi_dma_suspend, axi_d= ma_resume, NULL); =20 static const struct of_device_id dw_dma_of_id_table[] =3D { { @@ -1680,7 +1667,7 @@ static struct platform_driver dw_driver =3D { .driver =3D { .name =3D KBUILD_MODNAME, .of_match_table =3D dw_dma_of_id_table, - .pm =3D &dw_axi_dma_pm_ops, + .pm =3D pm_ptr(&dw_axi_dma_pm_ops), }, }; module_platform_driver(dw_driver); --=20 2.43.0 From nobody Fri Dec 19 15:38:37 2025 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4913730EF7B for ; Mon, 13 Oct 2025 15:03:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367813; cv=none; b=tuH9UsVSTFv3ZarCrPxDi3pjyK0murK1atKJMrzR+3hVpNpGXgMm97LISAm1Sstw/uV5tij4dlQHixOnGDj95qU+RGi9wjSjUWXRPNf8kqZhXmQcLZLbaU2aJj7QCUmEDZ8iCEE+Eye0AJ1HJ0nXs/U+VX/fGnxezf6onSVjI5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760367813; c=relaxed/simple; bh=lyPLERlw8vWrCfdgV/iodmJO/gUP26Jw77ReDaknTuM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E5iLx/N3IACOkaUCgUcXr0LHroMVn3GXgqqDahZTAWoSSvURCIggDRCTEzHLyB6vN/6bucc9+9r3BRgnVKm3yRqFeiZKVNmae23hZDw3oxSjV7UjgVB0eJIKVpkM+Fgr9o3jfDA96mQYGXT6GoA7vSy9xKE8ADx9MtzpHELI8QY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZpQ02ceP; arc=none smtp.client-ip=209.85.208.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZpQ02ceP" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-63babfdb52cso1663408a12.3 for ; Mon, 13 Oct 2025 08:03:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760367809; x=1760972609; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J9V/zYY62mF3Jc1sYvz1gRNG552w5eZEPTjzgxmkZz0=; b=ZpQ02cePZ6iDwEKZeyjTFJWekuc8SNL1VYAiNRwCHwwo3JHqxZFb/hYeYu8FWYHR9O eXkrlZThhl4QsjSdeCiPM+229TWRF1tn/pGCTT+SoA9pLVRNJelHOez9pgZbkR20qZ3v EcApYhI+Za25qGNm9R1EEvnTP8gDUdgLDDEtTqZYTLzWXVC1ncMSkq4etO4V3cZy/hTY i1OIJLQXY8pFq3lNecAox8D45ItSXQs/SORr11PrOcm5lnXHYpRcUWKj553Dc13CnNws titzqyDYj645gtAPql9cJBvj6YCMSiDj7njXYWVGulAzoLmFOCq4RZTWTr9tpzYiVhF/ 2ABQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760367809; x=1760972609; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J9V/zYY62mF3Jc1sYvz1gRNG552w5eZEPTjzgxmkZz0=; b=gywI+ZE84/qgin0rJSxh7cpvplA7JNygs4csaSGPBOU3+S/V4Hc4xk8cVftBtKNe5K MDgBCjAcVE2J7anWNT7zNpvWeFcZSITTvQKQT2EYJD7sqc9j9JvHbmiS2QC4rHikNKn1 fjmayEQ35VtEYrWB+kxXZkLR2eOY6Lkid3TgIqX0oLNd0r/pbLkqYIThyZ8xM9KcCUWh vMg5N23PwAEkoK/OHxMTYaF3x/ucr4zwpBbSiLhDpsVOaT82l0cYIydU+HBnE7Se7pkB 6zMCaTGeUpk051auW4/N8ZYTXNcMZcX4uNWDv5Bk7C0XwnsiDWGuQPDJAy375mg80Rn6 ojQQ== X-Forwarded-Encrypted: i=1; AJvYcCXOYrBUvbnadUcOub5ujjtJJCv5SUC4SkUbTTsykkxzzcexIzbaMZSqQxlwM7o6ogMWjv6Ibpk8V1RaDzw=@vger.kernel.org X-Gm-Message-State: AOJu0YwqWjngw5Es8nhUG8ZJnAtBqTH++U5jCKzNdnJ6Asat5EzZYrim kg7V4Dtrlu/WaNdg5ySruOrkUzL0ZgAz+gd0o8mdGVVGiUEoeJzbEdvl X-Gm-Gg: ASbGncubZMlfAhz4MVG/+xmLOcrMXNLP5PL0t6tVY5LGmYbbkcTaJThvzG7HOV36Qst 80toxpz9NKHVbNTFA9hPsR2zloswqcxNBckzQ9SqOoFr2yRJD10CC02ShMQvDf41QT+GW63ruKz 5eHGPFwUiPvwqp46b+GWqYbBA1lZFIIFdP1kKWWlLXMLZi6FoGiEmFUyUHkWpZoBBx6dWMQWSBu 8r2wzsKSfJVNhrOMsZ1af8ddkthRbUvjrGRFMJ1fYdPAQ4Iqc1dVhoFY3aHDvVMJ6Fmgzz+1bBE FjOOLvEhd1uDBajBgB+VYsM9oIi1i3eIhL7B5r2V/dYVAcYrevlc24IKJOMKnE2YAQ5R+eOW1nt Cc2wLUwcJ4IAnL5g2CI5nbZKLzjbpQhr7aSjCvV5g5b0bPMMUaPBhkyMCjScJSxFAhBW10eEY5c KnhjSmnjS+ X-Google-Smtp-Source: AGHT+IGPUxbjx1UJw3F56nxVVbUiRufE1LBjyJOtx0bj65ahQeDXudyFNDV/YxETMB9LOQKCQqoQxw== X-Received: by 2002:a17:907:72d3:b0:b42:9840:eac1 with SMTP id a640c23a62f3a-b50ac7e7a29mr2205488866b.49.1760367809042; Mon, 13 Oct 2025 08:03:29 -0700 (PDT) Received: from NB-6746.corp.yadro.com ([188.243.183.84]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b55d8c129c4sm957903866b.41.2025.10.13.08.03.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Oct 2025 08:03:28 -0700 (PDT) From: Artem Shimko To: Eugeniy Paltsev , Vinod Koul , Philipp Zabel Cc: Artem Shimko , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] dmaengine: dw-axi-dmac: add reset control support Date: Mon, 13 Oct 2025 18:02:33 +0300 Message-ID: <20251013150234.3200627-3-a.shimko.dev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251013150234.3200627-1-a.shimko.dev@gmail.com> References: <20251013150234.3200627-1-a.shimko.dev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add proper reset control handling to the AXI DMA driver to ensure reliable initialization and power management. The driver now manages resets during probe, remove, and system suspend/resume operations. The implementation stores reset control in the chip structure and adds reset assert/deassert calls at the appropriate points: resets are deasserted during probe after clock acquisition, asserted during remove and error cleanup, and properly managed during suspend/resume cycles. Additionally, proper error handling is implemented for reset control operations to ensure robust behavior. This ensures the controller is properly reset during power transitions and prevents potential issues with incomplete initialization. Signed-off-by: Artem Shimko --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 35 +++++++++++-------- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 8b7cf3baf5d3..8d9cecfc9a99 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1321,6 +1321,8 @@ static int axi_dma_suspend(struct device *dev) axi_dma_irq_disable(chip); axi_dma_disable(chip); =20 + reset_control_assert(chip->resets); + clk_disable_unprepare(chip->core_clk); clk_disable_unprepare(chip->cfgr_clk); =20 @@ -1340,6 +1342,8 @@ static int axi_dma_resume(struct device *dev) if (ret < 0) return ret; =20 + reset_control_deassert(chip->resets); + axi_dma_enable(chip); axi_dma_irq_enable(chip); =20 @@ -1455,7 +1459,6 @@ static int dw_probe(struct platform_device *pdev) struct axi_dma_chip *chip; struct dw_axi_dma *dw; struct dw_axi_dma_hcfg *hdata; - struct reset_control *resets; unsigned int flags; u32 i; int ret; @@ -1487,16 +1490,6 @@ static int dw_probe(struct platform_device *pdev) return PTR_ERR(chip->apb_regs); } =20 - if (flags & AXI_DMA_FLAG_HAS_RESETS) { - resets =3D devm_reset_control_array_get_exclusive(&pdev->dev); - if (IS_ERR(resets)) - return PTR_ERR(resets); - - ret =3D reset_control_deassert(resets); - if (ret) - return ret; - } - chip->dw->hdata->use_cfg2 =3D !!(flags & AXI_DMA_FLAG_USE_CFG2); =20 chip->core_clk =3D devm_clk_get(chip->dev, "core-clk"); @@ -1507,18 +1500,28 @@ static int dw_probe(struct platform_device *pdev) if (IS_ERR(chip->cfgr_clk)) return PTR_ERR(chip->cfgr_clk); =20 + chip->resets =3D devm_reset_control_array_get_optional_exclusive(&pdev->d= ev); + if (IS_ERR(chip->resets)) + return PTR_ERR(chip->resets); + + ret =3D reset_control_deassert(chip->resets); + if (ret) + return dev_err_probe(&pdev->dev, ret, "Failed to deassert resets\n"); + ret =3D parse_device_properties(chip); if (ret) - return ret; + goto err_exit; =20 dw->chan =3D devm_kcalloc(chip->dev, hdata->nr_channels, sizeof(*dw->chan), GFP_KERNEL); - if (!dw->chan) - return -ENOMEM; + if (!dw->chan) { + ret =3D -ENOMEM; + goto err_exit; + } =20 ret =3D axi_req_irqs(pdev, chip); if (ret) - return ret; + goto err_exit; =20 INIT_LIST_HEAD(&dw->dma.channels); for (i =3D 0; i < hdata->nr_channels; i++) { @@ -1605,6 +1608,8 @@ static int dw_probe(struct platform_device *pdev) =20 err_pm_disable: pm_runtime_disable(chip->dev); +err_exit: + reset_control_assert(chip->resets); =20 return ret; } diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dma= c/dw-axi-dmac.h index b842e6a8d90d..c74affb9f344 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -71,6 +71,7 @@ struct axi_dma_chip { struct clk *core_clk; struct clk *cfgr_clk; struct dw_axi_dma *dw; + struct reset_control *resets; }; =20 /* LLI =3D=3D Linked List Item */ --=20 2.43.0