From nobody Sat Feb 7 22:01:48 2026 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) (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 C29CB238C3B for ; Sun, 12 Oct 2025 10:00:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760263235; cv=none; b=NfzcnkrkNE9tbvauR/soylXoAe98WjujZelIqfoDCfhKFFnkOAq4IriKeGEb9iBymougobFL1nEUgt5iHichjH/LjrLqLkxFpLejusO+hKDrq8dAZaknWZ8C8rynhXaENypeAcATrbgAm5ZHmY2404zrkBnO+OjR1j+NmnfDqRQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760263235; c=relaxed/simple; bh=vZJNHbvvtVosuU810afY1IEoJqCYkWU2Iw4KMxlX0Dc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d8/SY4wlJYXoJ1e7fVOw3QWMKar6upIfKAU2ASKPi3yR104uioWQ9tPt/yHICucUzP1OgXYsxLVy+zvAAKmZPgDr4Hp69Zc5LXPGgop9AaDV/7ekY2GIvrDCeT9CABufDptVNSblqZz/7RE/1l+8yOyIbdrR2/hkI/UgTv0tfMM= 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=GCN2Gccv; arc=none smtp.client-ip=209.85.167.41 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="GCN2Gccv" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-586883eb9fbso4492373e87.1 for ; Sun, 12 Oct 2025 03:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760263232; x=1760868032; 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=VYDF2+npqHbQw9zSrp12H/s1KYxESvsd8Xn/2hyxl7A=; b=GCN2Gccv2X4u50HDv4LL4dUGYD8cj8jbSPc/zMvVMEtSNvkOob2aCHUEMG1DMaXu9U CwI5eJWZGNDSjXukCts21CpwXhgl6QSzg6hUlPSjakZbK93RoD0xhc6sPxfhMBYLfqPo Vcd4QMcsIKa6ijlh08RIzipdB5Lbjv1lOQsB54cVNrm3YVaR5piU7Zp4rJHVtm5LJwGK 9VchAf5pU0aVz1tl3SkCTbtT71sXTJQjc+HaDyuBbf3Re+8e+c2DjJupzXPfcVuAhY7d mcgN1axuwGFO9jG5d8QllzldxZw+81D8xmyU7nXHSQlHj4rxnGKTLXaneMbPaPDOTCtn 9Lkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760263232; x=1760868032; 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=VYDF2+npqHbQw9zSrp12H/s1KYxESvsd8Xn/2hyxl7A=; b=Kr0heqjEfhFvtOqA+1v/SJB30DwO7JMsxVml7T5vl0HJMd2GUulMbCnZaaRtjVMmOh GdA40gp63LBbyBSIIdL7OBe8i2XUTKuQlEjPpj6LRfTDkbHClPVt+fohdaVNKrEiV65J cd5mru0kHRwfFVnbeXVfmKm6UsgY0G6ZEskJ4SDqk4Mb/M+FzfQaI7aHnZYzw89enEKw BLjxash5/GDS8oK56ufm/FhSFYbyUHGyz0lKHfXzH8UCGGnKjzYyQttD4HDyRAXI66Tp EJABvOtgy4BBrCjWYJBS0GBPPBsyooKbt379ys6GgABeQz8GzlwC+EPv2YqTJMN1rG06 P5OA== X-Forwarded-Encrypted: i=1; AJvYcCUcRUboY5DE/mJmYXqJOm980bOKnwrm2ir2rRGtwFalQUCSSubYn1m+2JCyMnX6jYb7O8W3CjsnB1MCXIQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/ZQcufcRnp94lnes94q/wrHG8kPp8/V2grwzupuQoUlf5v8mX zKGC9ZNOYCoOjd5fVuurkGGAcRzqM+kULxnfgV87UHG7zVPaOyf2heeC X-Gm-Gg: ASbGncsfdSOgVdSJa1fLYYMYDZL8j+0FovDbXbLwoZXTNQzFn3PJi8f8W4OwvD+CHEL QHskh2+Dho20EURWB32PMDIc6xoWNym7E3wYoAIYTshBAHWUPiWZMskdi3PSnrcuOjHy1PU/xDL YYVj9C1ElNbilduXkhwTb0G+MFlg65UkY3rjFprw80hLkpK6T/E0BCP0ej9BbHOG+Lv8ptXuMQk 7MMWodZS+6aZSvWu2ld4JaYTljJwbphSAkOVABxBNm0W35eZiMJ8mdkDg+0LIAR11buwORuwcby vM4hsQDl6UD4s0wl1LDNnQ4/OaRxUoXkFeDw0AwJHoZNX8o0NtbP8Ce+UTIXA+iByg83F7AI/vh Ont5yMNcrcOIbHBZuqykaQ5f350YLAFeHB5/+NGdWWKYltTSxTw0Y X-Google-Smtp-Source: AGHT+IGWL1ei9PIDD8TDC51CGyly0xILPwGmdbo+11xbW/F19i3aU0zPMr0X7T0T3NyywfF50qx2wg== X-Received: by 2002:a05:6512:2c04:b0:562:c06c:8c03 with SMTP id 2adb3069b0e04-5906d896d2dmr4569190e87.21.1760263231566; Sun, 12 Oct 2025 03:00:31 -0700 (PDT) Received: from NB-6746.. ([94.25.228.43]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59088585860sm2823882e87.128.2025.10.12.03.00.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Oct 2025 03:00:31 -0700 (PDT) From: Artem Shimko To: Eugeniy Paltsev , Vinod Koul Cc: a.shimko.dev@gmail.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] dmaengine: dw-axi-dmac: simplify PM functions and use modern macros Date: Sun, 12 Oct 2025 12:59:59 +0300 Message-ID: <20251012100002.2959213-2-a.shimko.dev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251012100002.2959213-1-a.shimko.dev@gmail.com> References: <20251012100002.2959213-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(). 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 Sat Feb 7 22:01:48 2026 Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) (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 A80DB26056A for ; Sun, 12 Oct 2025 10:00:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760263253; cv=none; b=kMRIlZLWFrUNpS4htLH5BMUTN280VW9b05huckmKYjDRN12rwXo9ZuEDnv+UgiOovIU1y6xpRVG53T4S6n0Hhsu18PiVuOS2vuPmoXS06WuoNIPovTrH5dY63AODmTUVdlh4Vvd8GoDDM6+259Oe5MM76BesoZRrHT2R+S/CYeo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760263253; c=relaxed/simple; bh=NpLOcZjJLcpiLDNkxx1t2kSCTYhfiFQWIPqEvtzTMpw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kYkHwkjFQZl/G1htZ4d7a3/NTsgeM1l+kK+7NrMlSobE3C/8AoxG7fy7bh6ldqoN1JTbE7nckWZWdRXYOFQHrFLGSvqk/GCGjOEUGnQ7iwgi7YlJCyRSO62U7fUdCvFqh/fpI3jh0NzmAQ8Rh0xgFv+mFUDSTm6Vr3tCJbBdsWo= 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=B522r6L2; arc=none smtp.client-ip=209.85.167.54 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="B522r6L2" Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-57f1b88354eso3737747e87.1 for ; Sun, 12 Oct 2025 03:00:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760263250; x=1760868050; 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=gt/08zDoZHi6QCv0lr9Mfxvpxfaye7PST9WTNSBZ4AE=; b=B522r6L2LgCb6MFlEjprPs/ip9ruvdWMKvkHpCQe0kiIguLShmG7ScDFyUrSZEwbhz qODd43sSMiXHC7/itg4HzOKeLcw4H/CQv4Eyq6l2lEeByZKGTKY3Ze2hcfkeTuKBRJMU +i2RzMTx9iwV/ZJpUd9y70F+yfwYPSG5/kdXZM0rDh1jg2vgT90DIoqe48SH+NWvaUrP PsQfVy1heI0eOCCmY3b94zEthN+VGvanlFDNuVOzdLpm1A0NR5+Vau7xQQ12x/55v5o8 HKNnwtJsrWpKCd6RHZm0NTCsFbxJscTNLeeDUzwQjTFWsdA1BpLCNQpTluZDknUPzKiI tIWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760263250; x=1760868050; 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=gt/08zDoZHi6QCv0lr9Mfxvpxfaye7PST9WTNSBZ4AE=; b=QwIOW/QjNYlhOAIfCLhP4GZZzwjCjqRIYrIADt3dlAEQunxg5RWEkl1ONxP5EK/682 cgrhA1lydOWvxV1pxgtCm0xSLASnSVL+3HMKfu10KpUG9xl8pLV5pvO7+XEReF2z7/f2 qa7kN6/hTPFT5DaWZEKfyxMJf6PUSafXCpq1C3wqZXHsl0njYE/JYpYRwKIxtQClzZn7 RG1KbzKZbtEV/0/9iSvOTnb94iwCs35baMngjywWszcTm8He8KnHp2S4BJasPGzkDXV7 AHlLxcFciIhRRH/h8YGpGOHQ/agZXS5wMeaI7vFAxs/W0VNIL5sw5h3RpLPkLJ4/N/25 UQ7A== X-Forwarded-Encrypted: i=1; AJvYcCW8QCFM1rYATE2li4vW4OMF6cX3oncqPdVZ0EVZQkT8DW/2QMzTlGwnXlfRumx4yqI6Qa/j2HkQyrFjJsI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3gak6Ce6/cEi/GuWTLpICJ4/N5F6rBFpKvAh+sfn1ALwwUDEf qXYxYrGpgD6YnjqrvC8XmgvvmgrY3u0bbLL/im7Y/83eGlMyvPf9Pcg0 X-Gm-Gg: ASbGncu2x7S3EpEsy7vu0BvtEicnZcqni0mzd7mzYembnGFn5cnElpfHd7V80lcqbFx honixke9oKih4bc4QFNNt3nbkFGjACuc9+OXedh0kBjctLb06axlx6Xyy685iqopHS1qB+XB8Ll dbjzCwTws/CG8SB8wJXRBbgCcKKZzNO2gwDwAw8vkmpXio8GMBbNUDBxz2vWFYsKiQjgbpwtr5J UOCjqqf2giFfhvDysRyevZyuSY6VAoSZdbucPhHHxrHJO9PY/+r8yZV2yiazjqui945vXxjxw6m 9w9ouNkoaJ74sKHZ0WjnTUANN+h7Co7camTaJoYCM+XKsUwqLrWWDU+S/9/gqevqYytburUqae8 0D9co2NOyQBKZhvK44wSCoypJM4BrXbPQ2MAt/V4Fnw== X-Google-Smtp-Source: AGHT+IEvjh++oNk5D6Hd/JRHER8RRDiSIgrbmvMDu6YMHrVhPmjga47WRCExnEXlmGwt+/hye4sK+g== X-Received: by 2002:a05:6512:68f:b0:55f:6fb4:e084 with SMTP id 2adb3069b0e04-5906db047d7mr4801424e87.50.1760263249647; Sun, 12 Oct 2025 03:00:49 -0700 (PDT) Received: from NB-6746.. ([94.25.228.43]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59088585860sm2823882e87.128.2025.10.12.03.00.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Oct 2025 03:00:49 -0700 (PDT) From: Artem Shimko To: Eugeniy Paltsev , Vinod Koul , Philipp Zabel Cc: a.shimko.dev@gmail.com, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] dmaengine: dw-axi-dmac: add reset control support Date: Sun, 12 Oct 2025 13:00:00 +0300 Message-ID: <20251012100002.2959213-3-a.shimko.dev@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251012100002.2959213-1-a.shimko.dev@gmail.com> References: <20251012100002.2959213-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 | 41 ++++++++++++------- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 2 + 2 files changed, 28 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..3f4dd2178498 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,9 @@ static int axi_dma_suspend(struct device *dev) axi_dma_irq_disable(chip); axi_dma_disable(chip); =20 + if (chip->has_resets) + reset_control_assert(chip->resets); + clk_disable_unprepare(chip->core_clk); clk_disable_unprepare(chip->cfgr_clk); =20 @@ -1340,6 +1343,9 @@ static int axi_dma_resume(struct device *dev) if (ret < 0) return ret; =20 + if (chip->has_resets) + reset_control_deassert(chip->resets); + axi_dma_enable(chip); axi_dma_irq_enable(chip); =20 @@ -1455,7 +1461,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 +1492,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 +1502,31 @@ static int dw_probe(struct platform_device *pdev) if (IS_ERR(chip->cfgr_clk)) return PTR_ERR(chip->cfgr_clk); =20 + chip->has_resets =3D !!(flags & AXI_DMA_FLAG_HAS_RESETS); + if (chip->has_resets) { + chip->resets =3D devm_reset_control_array_get_exclusive(&pdev->dev); + 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 +1613,9 @@ static int dw_probe(struct platform_device *pdev) =20 err_pm_disable: pm_runtime_disable(chip->dev); +err_exit: + if (chip->has_resets) + 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..56dc3d75fe92 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -71,6 +71,8 @@ struct axi_dma_chip { struct clk *core_clk; struct clk *cfgr_clk; struct dw_axi_dma *dw; + struct reset_control *resets; + bool has_resets; }; =20 /* LLI =3D=3D Linked List Item */ --=20 2.43.0