From nobody Fri Jun 12 14:00:00 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.176]) (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 79F4E388361 for ; Thu, 14 May 2026 13:52:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778766767; cv=none; b=sYY6FD7qkH7Ij+zty9HL1OuOlEF9lkC8VYyHgOLKIev1h99B1LDyL36s99ZTb58M3fdSzGCsa4L5bYyY2UEeN7lLolFH2FZM8smhYv9NiA1oJgNRpOrZLDOizamObgqJ3YXBEpgpG2t+S/lPOs/ipRsdV67HS40QSAy9JCzeVe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778766767; c=relaxed/simple; bh=NhHX6IBXjO/0G1g+R1TOgHR37BItrClQUpm46od0UVo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=D9fgsf32aS6hj9AGf+DN/2q2z+o5NflguThyLOHXrhaXoaWV9t7VTFwsyhgzZv9Hw7AeYHFGOXOiKuUD7Fkd4gDNPS9K1q7UQiQZVsPHSd6N+j/66a7hcwFKMDQ7M6QWgDqi6tN4EXOiMXKuWmETO89H6yzsYtw4GPnWCUTAI0I= 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=Ml1gFk9k; arc=none smtp.client-ip=74.125.82.176 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="Ml1gFk9k" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2f0ad52830cso11737478eec.1 for ; Thu, 14 May 2026 06:52:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778766765; x=1779371565; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=Stmpo+0lPViteLuiSq8jsNNiYrzYXEO7tqXW2BNyTVw=; b=Ml1gFk9kciRQSnP7KdHHwT9DpJKaxT2tGSED0Np4tI/HwL9KihwSxKdmcq34CRC4Nw hSsYrXiniUSJciCvc6u6IRYTvTgydgS2asH9SHwRK7tVH+quA70MB22mG4XGaFEx5PrB Jz7EzNrqU960SDiexWukpKdcUN5UqKqyAnaTTAa5FVPsWSPq8Bwj1hHVH/6s5kfX7JtT fi2z4H2b1NG1phahvwMD0Dy//ZGSkFvnVECfId75ZlqqkuCR3mMPWcWDDfLqgwniVO+L SPKq6BRFTY0YwKSQgf95oKB4gwx+vgBM+NhaD7OlWPzClTi6V96Dhu7wMe5+sfwCZ8Et NkyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778766765; x=1779371565; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Stmpo+0lPViteLuiSq8jsNNiYrzYXEO7tqXW2BNyTVw=; b=KytQjG3kFVt4feA/YOHCPzJTZ6ylvF7ujUxAj3B7FpyP/z8yrU0QhGmjfwlh9sgHM0 V/xdEJDB/4tv+Av5AMaR6koPglckvPRctMm7OsI5AWSNUbVqxvZGt9Av1B7mvJ0+296I 3bladevkT+m7/0x1NkiverI7kk9wSUX9zWrRtJYZBcwut0oJsxwLipiBV2SMh57xJsHB M7oeqeP8uBQnjosmTiVZpI3hPS02z5bviBxm7Ju5eBhtOJBpuybeIinNV4ii6Mj30OaC 3IrfcRq88YUBXlFvM4IBD7jY2rzAubKzN6EUTg/OSRG2wGzE7/Xf8UzLcPNgg8h8HZYf T1HQ== X-Forwarded-Encrypted: i=1; AFNElJ8uHPzW+jrF6F9QjW+NUGwypdB02Vm3Zj7myl1zB7XOlXZC4Mo+k1QmmAlH+7F29AhlJ+s7Z+/G6S3qZOA=@vger.kernel.org X-Gm-Message-State: AOJu0YwUIDi+l+7T6UyRjqz68r9l+UHRhIk9PmBDWHn3WgyqpLTM73cT u3O1wOli1JEUaTN9xVMc5Yn2GEF2LlmxZnuJY0ufMXDMZn0hNXYlHIWB X-Gm-Gg: Acq92OGupublHt07Rtd7OUe40PdlY4yUsIFLPH7senmcw0UG5ZrPg1hX2NcP8FGT1Rm nJ5GRfwmsL1bPqDVJwIBpiDhjiWXHs8P1Xkcca5pxVh+d41neOVF41rwu3DWgUVdfNqkM50RoUw kmvXB9Cx0RXliXMiMWl91ZRSbYuR7G+oUA6xI8GC8bY5wvSShfcCK6JVXZdXavL9Imo+NAC4qiL VdeKaWPjC5x9P4EVbJQq72aSc6Dh21qOr70N3UsasoyzfYh4SyL9rG4zzk9BAFT1MZv+OUIbZEl VnoWz/oNRH7jzz2YIuVcIvl3q0FMA5DdWDmMSz5a160qTAt+vfh+Pah4/e2G6uioOXAbWRqM0kj RXjQLLB/PPi80esgU5cBCk6BFM8eWhFsDh/zG3ThTAngZ79NBFFbU3nuJG0Cl7Y6OZvbxPZKo/Y Fs6uttvVJZ1DrJuu5s1tBs2yaR2FJdSRUzzH+JzCCmX+ykbtrYUBHi2t4A1K36exGWvFv5OG2t1 A== X-Received: by 2002:a05:7301:4002:b0:2ea:b975:3db1 with SMTP id 5a478bee46e88-30119f6d53emr5000426eec.23.1778766765152; Thu, 14 May 2026 06:52:45 -0700 (PDT) Received: from [192.168.1.18] (177-4-161-87.user3p.v-tal.net.br. [177.4.161.87]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30293e2ea78sm3029289eec.6.2026.05.14.06.52.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 14 May 2026 06:52:44 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Thu, 14 May 2026 10:52:35 -0300 Subject: [PATCH] ASoC: mediatek: mt8189: Fix probe resource cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260514-asoc-mt8189-probe-cleanup-v1-1-ded733363281@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yXMQQ6CMBBA0auQWTsJ04RavIpxUcqgY7RtOmBMC Hen6PIt/l9BuQgrXJoVCn9EJcUKOjUQHj7eGWWsBtMa23Zk0GsK+J4duR5zSQNjeLGPS8buPPZ EztLkLNQ+F57k+3tfb3/rMjw5zMcQtm0HHpQo2H0AAAA= X-Change-ID: 20260512-asoc-mt8189-probe-cleanup-57d911861f86 To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Matthias Brugger , AngeloGioacchino Del Regno , Cyril Chao Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4629; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=NhHX6IBXjO/0G1g+R1TOgHR37BItrClQUpm46od0UVo=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDFmsl5caqG1/d3ySrujjHf3qbZvmXZ/P2yGtUm3V8iWp8 cIfl+meHaUsDGJcDLJiiiyrkxZZ7ul6cLU+boUHzBxWJpAhDFycAjARHi1GhvbDrLpCpRNfZT84 uuzrjZyfc0S4Evvfvqlx+D6rL7wr6zzDP+umW/Xavy6KS5jGKXE9X91SUzzv6SJBM7d7cWEFq9y +MwMA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 The MT8189 AFE probe assigns reserved memory with of_reserved_mem_device_init(), but only releases that assignment from .remove(). If probe fails after the reserved memory has been assigned, the assignment record is left behind. The probe path also uses pm_runtime_get_sync() without checking its return value. If runtime resume fails, pm_runtime_get_sync() leaves the usage count incremented and the driver continues initialization without the device being resumed. Use pm_runtime_resume_and_get() so resume errors abort probe without leaking a PM usage count. Finally, component registration failure currently jumps to a label that drops a runtime PM reference even though the temporary probe reference was already released. Return the component registration error directly, and do not drop an unmatched PM reference from .remove(). Fixes: 7eb153585598 ("ASoC: mediatek: mt8189: add platform driver") Signed-off-by: C=C3=A1ssio Gabriel --- sound/soc/mediatek/mt8189/mt8189-afe-pcm.c | 38 ++++++++++++++++++++++----= ---- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c b/sound/soc/mediate= k/mt8189/mt8189-afe-pcm.c index 24b0c78815f6..77cf2b604f6c 100644 --- a/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c +++ b/sound/soc/mediatek/mt8189/mt8189-afe-pcm.c @@ -2351,9 +2351,13 @@ static int mt8189_afe_runtime_resume(struct device *= dev) static int mt8189_afe_component_probe(struct snd_soc_component *component) { struct mtk_base_afe *afe =3D snd_soc_component_get_drvdata(component); + int ret; =20 /* enable clock for regcache get default value from hw */ - pm_runtime_get_sync(afe->dev); + ret =3D pm_runtime_resume_and_get(afe->dev); + if (ret) + return dev_err_probe(afe->dev, ret, "failed to resume device\n"); + mtk_afe_add_sub_dai_control(component); pm_runtime_put_sync(afe->dev); =20 @@ -2417,6 +2421,11 @@ static const struct reg_sequence mt8189_cg_patch[] = =3D { { AUDIO_TOP_CON4, 0x361c }, }; =20 +static void mt8189_afe_release_reserved_mem(void *data) +{ + of_reserved_mem_device_release(data); +} + static int mt8189_afe_pcm_dev_probe(struct platform_device *pdev) { int ret, i; @@ -2431,8 +2440,15 @@ static int mt8189_afe_pcm_dev_probe(struct platform_= device *pdev) return ret; =20 ret =3D of_reserved_mem_device_init(dev); - if (ret) + if (ret) { dev_warn(dev, "failed to assign memory region: %d\n", ret); + } else { + ret =3D devm_add_action_or_reset(dev, + mt8189_afe_release_reserved_mem, + dev); + if (ret) + return ret; + } =20 afe =3D devm_kzalloc(dev, sizeof(*afe), GFP_KERNEL); if (!afe) @@ -2533,18 +2549,22 @@ static int mt8189_afe_pcm_dev_probe(struct platform= _device *pdev) dev_pm_syscore_device(dev, true); =20 /* enable clock for regcache get default value from hw */ - pm_runtime_get_sync(dev); + ret =3D pm_runtime_resume_and_get(dev); + if (ret) + return dev_err_probe(dev, ret, "failed to resume device\n"); =20 afe->regmap =3D devm_regmap_init_mmio(dev, afe->base_addr, &mt8189_afe_regmap_config); - if (IS_ERR(afe->regmap)) - return PTR_ERR(afe->regmap); + if (IS_ERR(afe->regmap)) { + ret =3D PTR_ERR(afe->regmap); + goto err_pm_put; + } =20 ret =3D regmap_register_patch(afe->regmap, mt8189_cg_patch, ARRAY_SIZE(mt8189_cg_patch)); if (ret < 0) { dev_err(dev, "Failed to apply cg patch\n"); - goto err_pm_disable; + goto err_pm_put; } =20 regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &tmp_reg); @@ -2563,12 +2583,12 @@ static int mt8189_afe_pcm_dev_probe(struct platform= _device *pdev) afe->num_dai_drivers); if (ret) { dev_err(dev, "afe component err: %d\n", ret); - goto err_pm_disable; + return ret; } =20 return 0; =20 -err_pm_disable: +err_pm_put: pm_runtime_put_sync(dev); return ret; } @@ -2578,14 +2598,12 @@ static void mt8189_afe_pcm_dev_remove(struct platfo= rm_device *pdev) struct mtk_base_afe *afe =3D platform_get_drvdata(pdev); struct device *dev =3D &pdev->dev; =20 - pm_runtime_put_sync(dev); if (!pm_runtime_status_suspended(dev)) mt8189_afe_runtime_suspend(dev); =20 mt8189_afe_disable_main_clock(afe); /* disable afe clock */ mt8189_afe_disable_reg_rw_clk(afe); - of_reserved_mem_device_release(dev); } =20 static const struct of_device_id mt8189_afe_pcm_dt_match[] =3D { --- base-commit: eeecc92a9f1dd213dd52d9b8f42d155595b1d278 change-id: 20260512-asoc-mt8189-probe-cleanup-57d911861f86 Best regards, -- =20 C=C3=A1ssio Gabriel