From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 4EA38477982; Wed, 6 May 2026 13:42:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074936; cv=none; b=lbRVdZlXW0SBVV9a2BwMlw010Q2VuLF0EFPFYAA9ltH/czI9gGV0VB9+sIDLEqX6G0CUKhFCi5lDD/rHIHEqIAuGzGXjoJj3Jng1Kcok8MC/Z79dN55kb0Dz030wdLEEYDIZwwGSaOCBdzdtBhdqVWI3vqWllDoAMoESX+NLhSs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074936; c=relaxed/simple; bh=mBnLUZMGhM091DpLc/U5zErdLqXnLgpupJv9YgGKdUI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o5mweAk4rf/aVlV5H7mi+yNIDPbZhZjveOn5jcxQ48GzD/fP6PfY+D99FAhE/bR4lSg7h3yPv1dVMmh5VblOiGqymjYhOOOnLj6G07HNXAjcvMJRp3aFCZ+lRIq9Di8GvYIYpUfdrwitf6euP5nhoyVCyON+O/BtG7oBKcZgx9Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=THtIptsl; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="THtIptsl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 516DEC2BCC9; Wed, 6 May 2026 13:42:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074936; bh=mBnLUZMGhM091DpLc/U5zErdLqXnLgpupJv9YgGKdUI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=THtIptsl/EzTcknji8Sr7FZocfL59iionTpaj9jsaQAsNkW59Js6CON4LILpwJmR0 oLdboQHRAfNjp4OPCsxOQv02ppiDM9CLZ0xqHMTvJdOzdMqTSvgPx19bWd8M6sKJaz 90b3OmrPxHplmwJT2afntzUpR9iNzmuZ6SEIGKAzoRhl2MRyXCRtwnw9b/mAg+0/0c TlKdskWrN6+E3o1LcsPisph5lJhM2D0PlACMZ1tte43bSRB88PdcpgF29UUQoZgpBp Nu9exKX7YtAifz5j97TwBGMd18glKob487U6z17EieQIbvmv0/22ekvFpGej+dOOxr 0XBfEHreJ8JQQ== From: Thierry Reding Date: Wed, 06 May 2026 15:41:52 +0200 Subject: [PATCH 1/9] ata: ahci_tegra: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-1-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2433; i=treding@nvidia.com; h=from:subject:message-id; bh=CzZgWVZZSZZ3cjegVsK5oiOvQGLlRFg7d8ikashi5Ls=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UvwgGq03mhNWzC/Ms1bLh5lNTjVlpCh+IHt YPQUMgqVaiJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFLwAKCRDdI6zXfz6z obDtD/9X/qtjzKNCvjJ1NN5bLe5DDKPANAIxNXbNDKMmYnrdRH3rAzFrl5eNg4E7GB72CADzGvi e9x77y2TmP/+jeZjbQ0KXZtseKmDMBqqYwMUvbd8KVFp0AXCMklVBdpfGZB3iCPw0qK2UlqmaUn Fud3PfVmxypldtelOZHVw/YH6r2ZfNvHnGE03XUclDfu1MkoVpdjPM+b/1MTBWmmsik/R+RB4GB Iw6TLbbUQwHrJwAF/rCNJxacbnXgKhdhhGB+jmOKJIWQe9VNO+MMw6hezHyGYCjFTD685fzqFm+ SzzjV3gQ29jU4kYDqJlx/9+g/WbOuYHK3Wa1YbWeUzI5HKx+lbJRe0Oj6H94PXOsmHGIz0JD28n cHl7bHrZlAKQOoIvo8Q88SYHg8VmPrS6vj+ZjJrlOZYcKw7M0s6tx4BIP5NQ4jJAfMUoTnR3ngV t1uAci/JktTzGCsn91tQBxMfZbHUhU9yd1tekKDx8KEpGvD6jlfr3+rtW5iJpm/1Jgbe8N/P0b2 dEgKpALYXVeMYixFdtlpU/D/8TAn5SG4PEd3IwTqAcOVhdOBfQCBy8615wrwgPDQcC+FT3H+2hI VAm8EFtN1iorZQelz0wvngIceHQqiwtYvc/6Q/zaIEFnhQLn6SzoUf9ZkY58QVWvkWdJJIkigGE b8rYJVlg885kbyg== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Damien Le Moal Acked-by: Jon Hunter --- drivers/ata/ahci_tegra.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/ata/ahci_tegra.c b/drivers/ata/ahci_tegra.c index 44584eed6374..554f05e09f98 100644 --- a/drivers/ata/ahci_tegra.c +++ b/drivers/ata/ahci_tegra.c @@ -175,6 +175,7 @@ struct tegra_ahci_priv { struct reset_control *sata_cold_rst; /* Needs special handling, cannot use ahci_platform */ struct clk *sata_clk; + struct tegra_pmc *pmc; struct regulator_bulk_data *supplies; const struct tegra_ahci_soc *soc; }; @@ -246,9 +247,10 @@ static int tegra_ahci_power_on(struct ahci_host_priv *= hpriv) return ret; =20 if (!tegra->pdev->dev.pm_domain) { - ret =3D tegra_powergate_sequence_power_up(TEGRA_POWERGATE_SATA, - tegra->sata_clk, - tegra->sata_rst); + ret =3D tegra_pmc_powergate_sequence_power_up(tegra->pmc, + TEGRA_POWERGATE_SATA, + tegra->sata_clk, + tegra->sata_rst); if (ret) goto disable_regulators; } @@ -269,7 +271,7 @@ static int tegra_ahci_power_on(struct ahci_host_priv *h= priv) clk_disable_unprepare(tegra->sata_clk); =20 if (!tegra->pdev->dev.pm_domain) - tegra_powergate_power_off(TEGRA_POWERGATE_SATA); + tegra_pmc_powergate_power_off(tegra->pmc, TEGRA_POWERGATE_SATA); =20 disable_regulators: regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies); @@ -289,7 +291,7 @@ static void tegra_ahci_power_off(struct ahci_host_priv = *hpriv) =20 clk_disable_unprepare(tegra->sata_clk); if (!tegra->pdev->dev.pm_domain) - tegra_powergate_power_off(TEGRA_POWERGATE_SATA); + tegra_pmc_powergate_power_off(tegra->pmc, TEGRA_POWERGATE_SATA); =20 regulator_bulk_disable(tegra->soc->num_supplies, tegra->supplies); } @@ -571,6 +573,11 @@ static int tegra_ahci_probe(struct platform_device *pd= ev) return PTR_ERR(tegra->sata_clk); } =20 + tegra->pmc =3D devm_tegra_pmc_get(&pdev->dev); + if (IS_ERR(tegra->pmc)) + return dev_err_probe(&pdev->dev, PTR_ERR(tegra->pmc), + "failed to get PMC\n"); + tegra->supplies =3D devm_kcalloc(&pdev->dev, tegra->soc->num_supplies, sizeof(*tegra->supplies), GFP_KERNEL); --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 55DA3477E37; Wed, 6 May 2026 13:42:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074940; cv=none; b=Xu+80xQCIubf9sOdsIri+CX9baVteKmHvt+nPXeLpc1WubQ/g9fvWigzoimfHQi1iYELT+U0862frsIbZqSfWfQgyDkxQ6ZpQPbU333vFgH0iLWkflK1G18FcCOeKUuq7kVTJjB5/9lkHaNFRfOcaxekxpTA13Avznk7Y6ndPVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074940; c=relaxed/simple; bh=yAYc840Jzox92Oy7x86kKq1dkgwkDjAdvn1/sg+lx58=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C6m9GaGAJ74Lslyv5kilMhHklBVQ2rZo6x0jHfbYa7baRYo9RqddN/Y3GAChwcysio9uCkPMNHzhirjViibVLZsLMQX3+9ZiIbfvV9MLJ7/oFBMbfs/wm8EF8QlJJ1A+GYpkqCVhsYkC05P0B2uWbjzKuSFLo/L4ynywSZRkz94= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pm9Rnq6K; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pm9Rnq6K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 29468C2BCB8; Wed, 6 May 2026 13:42:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074940; bh=yAYc840Jzox92Oy7x86kKq1dkgwkDjAdvn1/sg+lx58=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pm9Rnq6K9gJJMNXIWLrgyFOp68t+rA2iV/LHBaqJKRCAsPQCeM/ZAEWs6vAwLlZGJ d9z+KkaMzo55TamZ/uLbZtAxvhH+EIiCH/F1X//24cn77f+JSN3VYwpzEUKdJUyjqZ hW2neer6M21yjLAD2atOXu7qbVlI7QrlBdwoiWyXYhiH53m1K4CCl4uFSWz+rj+rVb wdIGyT0llWeOZMvuOd3gym3r0l8MxBH1OLwVk3Dx++Yebh4lVvgdn7qP2TqjRkXXJA 40mWCdHBvWGbXP71vf3PRqUXO2Zy7PK8Bal4/vfx6aAB3cp2rFwakpoy0tYXhQdBM2 OhzjoTpF0J+UA== From: Thierry Reding Date: Wed, 06 May 2026 15:41:53 +0200 Subject: [PATCH 2/9] drm/nouveau: tegra: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-2-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1790; i=treding@nvidia.com; h=from:subject:message-id; bh=8+nv7sk7Akwz75J9dY7T6KYUmn88Q/uMOZjp/QVHnwE=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UwWa1SvQWmP/QpBTIYpH/p5BjW/vNe3PQFW PIJtKK0Yc+JAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z oT55D/9UlLXiJUGNHvbif1WyheZOPAmCfQiBGs4tT3nSsGD8ADVsjiCwxXPwjZLNPbJHn7cbFVF ysSL8Eu8nGtZq8uzRoV48KFaDU2hheMMjC32m/Vwlqq6Mi8HTtbd/pAxKNJcHFebCHCNQSQiVZ9 Hj7RPGo7EE++sFH78dSJyxFS26Ls+O51QEGh2GT/2M05Jn/N8WPHdGRZ+tvKf9wSmj7yljpcxeq hxs7zZgwaTxiMPqux14/8a+wyfC9qKiOWYvrqyYa6QVd7ox5OMLOgHc3eWp9oE7JoWpmuz2RCkv h4Z12oUWR2Zb9JGgeaQ9uazJ0gnRmI4qiC6hvI6O/znhvHL44z1ys/MJ23jNaeIREOGj926+qTU U+HYS42RwN6q01vAYwbcmp/2b/gCcXxnZBvtBzwvFQaIqb1AI4Qyfs1OBgcQdI+xTeLYbmTWcSg mP8/kKzYvqzYROVlX7OloVAR68X4SESXFKM9MA0v+iojV5I9JNsxVdXYW8BoQ1J8sZAA6dOwm3u vWFxSpJuLw6Du+t0ET3+7dhymYxHiw7SbgfU+Bev3DIvyNfwTNXykX02Vrh2wqblBVnIeMKbnVt kK7TY61hKlczNad2u16XUyDACkaE64sjKVfPoc0d6TDZEL+BaGgM2SBtoMNSrtEsGc2aNeSxahD TaS1nZNuBTY0KJQ== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Danilo Krummrich Acked-by: Jon Hunter --- drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h | 2 ++ drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h b/drivers/gp= u/drm/nouveau/include/nvkm/core/tegra.h index 57bc542780bb..6aaa30ef167f 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h @@ -18,6 +18,8 @@ struct nvkm_device_tegra { =20 struct regulator *vdd; =20 + struct tegra_pmc *pmc; + struct { /* * Protects accesses to mm from subsystems diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/g= pu/drm/nouveau/nvkm/engine/device/tegra.c index 46bb55a1f565..3c8d0878891a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c @@ -54,7 +54,8 @@ nvkm_device_tegra_power_up(struct nvkm_device_tegra *tdev) reset_control_assert(tdev->rst); udelay(10); =20 - ret =3D tegra_powergate_remove_clamping(TEGRA_POWERGATE_3D); + ret =3D tegra_pmc_powergate_remove_clamping(tdev->pmc, + TEGRA_POWERGATE_3D); if (ret) goto err_clamp; udelay(10); @@ -307,6 +308,12 @@ nvkm_device_tegra_new(const struct nvkm_device_tegra_f= unc *func, goto free; } =20 + tdev->pmc =3D devm_tegra_pmc_get(&pdev->dev); + if (IS_ERR(tdev->pmc)) { + ret =3D PTR_ERR(tdev->pmc); + goto free; + } + /** * The IOMMU bit defines the upper limit of the GPU-addressable space. */ --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 607C746AF2C; Wed, 6 May 2026 13:42:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074944; cv=none; b=ZTYhLiXgK5wERZsWwVzZPOuhpfEbkiSRhXxiUn1j7vM2OfYb9aEdHX2SQPGmlncHiY7lruJ3ZPHro7TdE2VfNTkhemz0nRZEQqFBhu5AxrqyqadxEfQNjV4CyYvUFQODfJniyqCXGa/0l2Jh6u/bL7rQ1RwL0vwgC29tXmyaia0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074944; c=relaxed/simple; bh=mRUAjElokfCLlryiKurN6OdVdNDlBl90aqBT3kdVSS4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g8Kw1irlLknBX9mfymIJFt/FPgeBw2C7Rbl5BVE4dZ82OZWT2jgFn4DqR1dLlYgvepJD9HSSb/Ev4cDQlYwzNXnFMgDqpNlO8S7Y+LWSpGBYkOETR1FAaTcE48L0IIImt5yvyuVUcPsAUNJDOQ5lVNpWcQ6TaHs3JvC69hHQkqc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EPCcSvNc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EPCcSvNc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1656CC2BCB8; Wed, 6 May 2026 13:42:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074943; bh=mRUAjElokfCLlryiKurN6OdVdNDlBl90aqBT3kdVSS4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EPCcSvNcsYfqQk9979aGLZYLlIOppQetN8bvItpeWP8qAWXWM82kXR6gCR6ZqvsIp dZ0+N8zpe+yWMCo30T45XpwsKvY70EfV4HH082bD3XKo65HtjAcDKjAU23WR9l/eAn E0APksuOOH1vBvMxG5Wm3OPmHo64b0fKhi60zq4tyfrgKHkCxEVPaBCASlhsLIj1k4 W68UHr2b9cmTneI+IWWUr2xq9AtO6pcGkL2iUS42jpMkH238iU8atkLse3QUUmdLsA WGut+oyXmSQabwJ+hUse3Y46XTYaQw28YmFBurHaCXCbo0vcKyFKUnSwgzd+KmoztS f9X1dDsBOOshQ== From: Thierry Reding Date: Wed, 06 May 2026 15:41:54 +0200 Subject: [PATCH 3/9] drm/tegra: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-3-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=5673; i=treding@nvidia.com; h=from:subject:message-id; bh=w3MJGfdYzraD5ekl0lHsYILyyuiEKQeRdpE6UsHEGqA=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0Uwbyd9AZVUF95uI3Go833QdOFS/rz66XeOE 7R7HeNM2eeJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z ocofEACdb1o4wiNkcg34ScLCNPddLTxCrmhpadYSQ6RYiQR2+QaC1DXB9vQ6M8QUdM5MCoDuJML l6b/yD0uVRnCD724taIKpUelAilWbLndaxUyEuIS475dFGCB7tq2P4IE1yhI5jZ80bibbLKN3bN LMBwQimqSWo7XF4rrpE0zG83miTNWWlhSyK0MRSzn3PksNk3jp7vICWSfGHzsD3pcdAW+bUz5G7 XSKscwbYeP+gJz+x5Sb/xM712bL3u7VXs0F0zhWgK3k2Reqxyx5WiltXi6jkIQ2tWyzyeLbW89d b/R11gZ51a6IpDAjkwrDY6C4GGTILswECVsSPhpkTzMnz/U8d7YJM3FrhNGJMTT17ivt6HMKgVz 16bPKMIeptePSKaCO3cxAV+hJoZp3m7Ntvwy9FIwcRDa/Hgu5sI3GBJboDxO7gH0OEaTygEFL09 WZkRHtTohi4pKYOqdIxZndtouYv4AMgZHrLRwuWjFT+Cd9KYGxrhVT/DbZ5HMFBtctBdjSjKEwZ uA5Z1zChC3vY3/CCa4sO/BEtvuBVTFGMqPLWdCE41LgxU6f4WDNvaf888ojDfkerEXiLOguOhnI L7hpRSaUkspobfo0X1+SCTNqXs/GrmNTxwPerhk09fja1nUZbdTXbAE3LeC1DPNVA6LgS+l/28W tQFUeWYd3UDXhnQ== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Jon Hunter --- drivers/gpu/drm/tegra/dc.c | 14 ++++++++++---- drivers/gpu/drm/tegra/dc.h | 1 + drivers/gpu/drm/tegra/gr3d.c | 9 ++++++++- drivers/gpu/drm/tegra/sor.c | 16 ++++++++++++---- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 06370b7e0e56..e6099f5aced7 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -2780,7 +2780,7 @@ static int tegra_dc_runtime_suspend(struct host1x_cli= ent *client) } =20 if (dc->soc->has_powergate) - tegra_powergate_power_off(dc->powergate); + tegra_pmc_powergate_power_off(dc->pmc, dc->powergate); =20 clk_disable_unprepare(dc->clk); pm_runtime_put_sync(dev); @@ -2801,8 +2801,9 @@ static int tegra_dc_runtime_resume(struct host1x_clie= nt *client) } =20 if (dc->soc->has_powergate) { - err =3D tegra_powergate_sequence_power_up(dc->powergate, dc->clk, - dc->rst); + err =3D tegra_pmc_powergate_sequence_power_up(dc->pmc, + dc->powergate, + dc->clk, dc->rst); if (err < 0) { dev_err(dev, "failed to power partition: %d\n", err); goto put_rpm; @@ -3231,12 +3232,17 @@ static int tegra_dc_probe(struct platform_device *p= dev) clk_disable_unprepare(dc->clk); =20 if (dc->soc->has_powergate) { + dc->pmc =3D devm_tegra_pmc_get(dc->dev); + if (IS_ERR(dc->pmc)) + return dev_err_probe(dc->dev, PTR_ERR(dc->pmc), + "failed to get PMC\n"); + if (dc->pipe =3D=3D 0) dc->powergate =3D TEGRA_POWERGATE_DIS; else dc->powergate =3D TEGRA_POWERGATE_DISB; =20 - tegra_powergate_power_off(dc->powergate); + tegra_pmc_powergate_power_off(dc->pmc, dc->powergate); } =20 err =3D tegra_dc_init_opp_table(dc); diff --git a/drivers/gpu/drm/tegra/dc.h b/drivers/gpu/drm/tegra/dc.h index 0559fa6b1bf7..10b86250e4ca 100644 --- a/drivers/gpu/drm/tegra/dc.h +++ b/drivers/gpu/drm/tegra/dc.h @@ -94,6 +94,7 @@ struct tegra_dc { int irq; =20 struct tegra_output *rgb; + struct tegra_pmc *pmc; =20 struct tegra_dc_stats stats; struct list_head list; diff --git a/drivers/gpu/drm/tegra/gr3d.c b/drivers/gpu/drm/tegra/gr3d.c index 42e9656ab80c..debf66fa4eeb 100644 --- a/drivers/gpu/drm/tegra/gr3d.c +++ b/drivers/gpu/drm/tegra/gr3d.c @@ -46,6 +46,7 @@ struct gr3d { unsigned int nclocks; struct reset_control_bulk_data resets[RST_GR3D_MAX]; unsigned int nresets; + struct tegra_pmc *pmc; struct dev_pm_domain_list *pd_list; =20 DECLARE_BITMAP(addr_regs, GR3D_NUM_REGS); @@ -353,7 +354,8 @@ static int gr3d_power_up_legacy_domain(struct device *d= ev, const char *name, if (err) { dev_err(dev, "failed to acquire %s reset: %d\n", name, err); } else { - err =3D tegra_powergate_sequence_power_up(id, clk, reset); + err =3D tegra_pmc_powergate_sequence_power_up(gr3d->pmc, id, + clk, reset); reset_control_release(reset); } =20 @@ -385,6 +387,11 @@ static int gr3d_init_power(struct device *dev, struct = gr3d *gr3d) if (err !=3D -ENOENT) return err; =20 + gr3d->pmc =3D devm_tegra_pmc_get(dev); + if (IS_ERR(gr3d->pmc)) + return dev_err_probe(dev, PTR_ERR(gr3d->pmc), + "failed to get PMC\n"); + /* * Older device-trees don't use GENPD. In this case we should * toggle power domain manually. diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index de8b2dfc4984..a76095838133 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -422,6 +422,8 @@ struct tegra_sor { struct clk *clk_dp; struct clk *clk; =20 + struct tegra_pmc *pmc; + u8 xbar_cfg[5]; =20 struct drm_dp_link link; @@ -2237,7 +2239,7 @@ static void tegra_sor_hdmi_disable(struct drm_encoder= *encoder) if (err < 0) dev_err(sor->dev, "failed to power down SOR: %d\n", err); =20 - err =3D tegra_io_pad_power_disable(sor->pad); + err =3D tegra_pmc_io_pad_power_disable(sor->pmc, sor->pad); if (err < 0) dev_err(sor->dev, "failed to power off I/O pad: %d\n", err); =20 @@ -2277,7 +2279,7 @@ static void tegra_sor_hdmi_enable(struct drm_encoder = *encoder) =20 div =3D clk_get_rate(sor->clk) / 1000000 * 4; =20 - err =3D tegra_io_pad_power_enable(sor->pad); + err =3D tegra_pmc_io_pad_power_enable(sor->pmc, sor->pad); if (err < 0) dev_err(sor->dev, "failed to power on I/O pad: %d\n", err); =20 @@ -2701,7 +2703,7 @@ static void tegra_sor_dp_disable(struct drm_encoder *= encoder) if (err < 0) dev_err(sor->dev, "failed to power down SOR: %d\n", err); =20 - err =3D tegra_io_pad_power_disable(sor->pad); + err =3D tegra_pmc_io_pad_power_disable(sor->pmc, sor->pad); if (err < 0) dev_err(sor->dev, "failed to power off I/O pad: %d\n", err); =20 @@ -2743,7 +2745,7 @@ static void tegra_sor_dp_enable(struct drm_encoder *e= ncoder) if (err < 0) dev_err(sor->dev, "failed to set safe parent clock: %d\n", err); =20 - err =3D tegra_io_pad_power_enable(sor->pad); + err =3D tegra_pmc_io_pad_power_enable(sor->pmc, sor->pad); if (err < 0) dev_err(sor->dev, "failed to power on LVDS rail: %d\n", err); =20 @@ -3730,6 +3732,12 @@ static int tegra_sor_probe(struct platform_device *p= dev) =20 sor->num_settings =3D sor->soc->num_settings; =20 + sor->pmc =3D devm_tegra_pmc_get(&pdev->dev); + if (IS_ERR(sor->pmc)) { + err =3D PTR_ERR(sor->pmc); + goto put_aux; + } + np =3D of_parse_phandle(pdev->dev.of_node, "nvidia,dpaux", 0); if (np) { sor->aux =3D drm_dp_aux_find_by_of_node(np); --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7B4EF4266AC; Wed, 6 May 2026 13:42:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074950; cv=none; b=bdvHNA8NjGtJWgZ5Foxnro9DBXQ2KGnu7i9QMdDzsnKVM/FCBjPcu7+eHmD1kNunESzxm3YRi1wj0QDODA+mcvQOR0MNTa7BIR1oUI+5AHrLrcd3Lg+0IUX+BWSMyVlxCAA4Ej7X07/b+nCnPDblLsBipn/WJu9+oqZ1kFe769M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074950; c=relaxed/simple; bh=lM5/bP9mU6uA47yq2TORb0MSyMeH+anPQDvkVAb3Yl4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gku2CG+nR+kVtRh832we2Z7DQ184hy0ble7GBj+MnJukxSW1XHPHIta2oKOV3hl5+o1t8/Dn0yqfu6IclgoeIRQHlEo6xtGOvYj/2cTdTwxsG2MefM+oUjkHhynksyOjM3HmLLJf9X6jko2s+LrPdR339o9/d9zH54zDg9ZYs8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jVDFM1lj; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jVDFM1lj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E73FEC2BCB8; Wed, 6 May 2026 13:42:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074948; bh=lM5/bP9mU6uA47yq2TORb0MSyMeH+anPQDvkVAb3Yl4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jVDFM1ljm+D1MKK68jui0ASR3iLVHmVCa2NlaEZmehVgV2UY850Uy8Rp/vm5Haw19 8Dv8RarP+XK6DLm6ackSxohnieuchFCiIFXxEIePWOLdMcuP9IBAHJm7bN28UWxXk0 j3sbQXznWOJzhaimVtsG/K5aFI2C3mil0qhkcafoZmhORbOhMez9KRK5j2cGcGusyz /1oZsZuYE8cmSmFFQhMdXVeztrkwVcMuX+pyVVuM1Ql3kQ3xDIY/X9sXhKlKcFi+oH ZbcXxxW8RxGdcevHMyZPApTCzCS7plevx8NISmFh09Z4L1AIsIMldYMizxuoF2ztGa PeqXOkBz0DpWg== From: Thierry Reding Date: Wed, 06 May 2026 15:41:55 +0200 Subject: [PATCH 4/9] media: vde: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-4-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2554; i=treding@nvidia.com; h=from:subject:message-id; bh=+F+ps27/gnJ3VnvU71JsyKx65gpxKzUbon2OBL1Lc3o=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UwSnUbmWcBCoWZiLfTGYBiCZlAr3oKcuDi9 DR4XL10BtSJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z obUwD/wN3jLuZ4txgWlc5UZCnKsseYhyfQYSaJ+z4eIgUuui8P1iNG/qMKUUM1qBuuOO294iza1 DA/hK1jsz/rRCppDEwK9/Uhgb8hYyaiSZkKMFgDvHbpowPlQK8BI+D35vDIox6+vpC0I5viYo3f idcAaQTwAqLeLU+49H7GvmPV603Uju/CHCZMX5ZamDJYHIze/4cCVig85yf1tZjmP/+AfQmrph8 aFWqOn5ttLW4YWivLFKm9q4ziygXiqZj2g8W8p6V/SaYERB+gOE8tRUGHXMl+GEKCtUAnlMl3gZ aRbjZdY+qYT0Ddnc7NCn9ZcTn7+dp9nA2VcUnDHhnJb8A4P02ij9T+EzQILCx7heG/cH1aXRAVu lvhZGQahIx1ytl7ASTTnSfQKglmsIgoZ15OK42+kDYrUxdE+hUUul8gWgCRddRzFpERykGK/v+Z t8hDXVnCyvk398jt48SvExynU3WVPfKZkpHo5UTFkVNwtusRqzc/CRoTwfI/k9ver+6h1vmTmrA yFudRUWvcYT3Z1j5nrJCOHv6fdhzKNZnccm4KwEnQQ84u2TXvlw+Nc3Y9ezkzb+wobLaJeZOlPv lIGrTuRzMCYmoqsd49vf2fPApaeMOpuimym6P82BZ8Dd16B3MjcNXbCG6+4x2a/vMrfo3ty26eo XaZ+fJSoiFqb4HQ== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Jon Hunter --- drivers/media/platform/nvidia/tegra-vde/vde.c | 15 +++++++++++---- drivers/media/platform/nvidia/tegra-vde/vde.h | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/nvidia/tegra-vde/vde.c b/drivers/media/= platform/nvidia/tegra-vde/vde.c index 2b3898828304..c3097085ad9d 100644 --- a/drivers/media/platform/nvidia/tegra-vde/vde.c +++ b/drivers/media/platform/nvidia/tegra-vde/vde.c @@ -161,7 +161,8 @@ static __maybe_unused int tegra_vde_runtime_suspend(str= uct device *dev) int err; =20 if (!dev->pm_domain) { - err =3D tegra_powergate_power_off(TEGRA_POWERGATE_VDEC); + err =3D tegra_pmc_powergate_power_off(vde->pmc, + TEGRA_POWERGATE_VDEC); if (err) { dev_err(dev, "Failed to power down HW: %d\n", err); return err; @@ -193,15 +194,16 @@ static __maybe_unused int tegra_vde_runtime_resume(st= ruct device *dev) } =20 if (!dev->pm_domain) { - err =3D tegra_powergate_sequence_power_up(TEGRA_POWERGATE_VDEC, - vde->clk, vde->rst); + err =3D tegra_pmc_powergate_sequence_power_up(vde->pmc, + TEGRA_POWERGATE_VDEC, + vde->clk, vde->rst); if (err) { dev_err(dev, "Failed to power up HW : %d\n", err); goto release_reset; } } else { /* - * tegra_powergate_sequence_power_up() leaves clocks enabled, + * tegra_pmc_powergate_sequence_power_up() leaves clocks enabled, * while GENPD not. */ err =3D clk_prepare_enable(vde->clk); @@ -293,6 +295,11 @@ static int tegra_vde_probe(struct platform_device *pde= v) return err; } =20 + vde->pmc =3D devm_tegra_pmc_get(dev); + if (IS_ERR(vde->pmc)) + return dev_err_probe(dev, PTR_ERR(vde->pmc), + "failed to get PMC\n"); + irq =3D platform_get_irq_byname(pdev, "sync-token"); if (irq < 0) return irq; diff --git a/drivers/media/platform/nvidia/tegra-vde/vde.h b/drivers/media/= platform/nvidia/tegra-vde/vde.h index b2890484b7c3..abac0221d6e4 100644 --- a/drivers/media/platform/nvidia/tegra-vde/vde.h +++ b/drivers/media/platform/nvidia/tegra-vde/vde.h @@ -107,6 +107,7 @@ struct tegra_vde { struct list_head map_list; struct reset_control *rst; struct reset_control *rst_mc; + struct tegra_pmc *pmc; struct gen_pool *iram_pool; struct completion decode_completion; struct clk *clk; --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 0ACAF47A0BE; Wed, 6 May 2026 13:42:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074952; cv=none; b=h/jbraw/XsYBdbTbdRHjo92Sbfws9XyHPfwPGcyvG8J8J9Ztlp/jyXura34jc7+XrghDpJIooiIpmqFaYZbfnKZ4JKAs5Nm1lxtb2eZqNkzmbfcYjM6d11piPHlO5ICgOl6pyZcmrs/R10fw2Kj+/kKbnqfxIZO/LtG15/FbzDQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074952; c=relaxed/simple; bh=/Dwzo/puqQx4aqXdp4eoDtcbjc2mbw6uNmOMRrS8AgY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HfKD4iwdMlP+NCUiPYrJ1StIjSXs05Nt8buy3YhPEnhBhEVeN1NmOpd6S13Ua5X26TwaKL4q3HzGeTdzoo3wX+PxWhlUX4gzNoF+tf9bKsiRqo2KEjy8SUMdGiwg/QppLeB/jC2z+ZPYVZGt5LAWbIpd2lTE0QUDvUpXOvrY2rU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Erbupagc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Erbupagc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FDF1C2BCC9; Wed, 6 May 2026 13:42:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074951; bh=/Dwzo/puqQx4aqXdp4eoDtcbjc2mbw6uNmOMRrS8AgY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ErbupagchoYysG/5Mic6W9/FxVP4EkCRqNgj+nOQ5/oyyIOvAu9y+jVntJiX4EOWP qX3YNOXM3J11a2ggGn6Ob0wSGX+TIjNi2MH9uBjZNnbidRL3mqa9yTAi6I/FvrJk8w x36BP8Ze9RLEHu8WwXMABmJ7MyBUhPYA4LAOL3krDNc6IoJoq0r6AcLOhpqmhKmL2B spxjC5z7Jyh7jtfFugqRgDPIEaTGe5YAxbdsfJJnRg1a1Tu556HOEwMSZc3k3q+YJX 3b9ADud9BuNiwSy9DSkbuOMsOU8AOPk9RbhBoSLgvO5dLWDL3SKRS6qxwpaUs0pvKE 7SVHAC0lazJjw== From: Thierry Reding Date: Wed, 06 May 2026 15:41:56 +0200 Subject: [PATCH 5/9] PCI: tegra: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-5-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2848; i=treding@nvidia.com; h=from:subject:message-id; bh=CYr96E6ms2Tk8ZDR+mP5HFZviPNyyl97Fe72pEjoZuw=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UwxL3VvzItqN2RUEDLi5k9l0Y21sq4kNtrK qnl9jDEtjmJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z ofMMD/0eaFvDXeIaU/iJrk/ytzSRyQdrahoL/bFCGo1OX82cfER4LwQC6h01yPnCRfaPgB9EMy6 +CH8w/uVW2W1ZBpIrcfsl3kPKaLOlVeLXbY+A0iqY6vjxo2bH2AqnxpprUK/G9AO7oDeTZaOvdT LpzXOyzMOgr0YNTTI8iGg4OoRuz6al8myVgv88eBTdI18op304dE7dpjFbxgsxe+CVcUhm05Y9j X/HuIvzVGxaOkhFIYUpLZfaSOeufkfxOjyAhi4j0XWIyGJ2eqk+/rZujKIWWnZCNbj5CQbp7GIB 8DjffrNzntPo2TtFqM4ENhBu0r6UowLe3t3sEoqrAS7wBUGCbVAztRG2g6vkBpy3GfozfpWp39y kSULfGPUuDg1khofowoLEXTS7RZEOX1KyEBKtqyONnNbIGE8CIVYBsvnJtDoF7p5b2BBc1sigjR OZ5o/S78nK668Kr/PM99OCnDkKnjB3F/bmoQAL0TP7OUBKnrWRm3At6SgRTGNE1pGtEhSWvPKZU pfAk9gELQMzSyDhljS1nNXbScYiUSki26vIewOMAde0XnFIIUga2sFx2L0pgkLH1wEwe6I2k7U6 fC5CfKU9DjCPQ9mu8mSYRof9LHRFnqZzmU19VFET7c5hkSuDzdjy6KSMYmoI+DXV5BgVYTETzNG fgN6bB+QAB/82/g== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Jon Hunter Acked-by: Manivannan Sadhasivam --- drivers/pci/controller/pci-tegra.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pc= i-tegra.c index 512309763d1f..2c6c521e6901 100644 --- a/drivers/pci/controller/pci-tegra.c +++ b/drivers/pci/controller/pci-tegra.c @@ -340,6 +340,8 @@ struct tegra_pcie { struct reset_control *afi_rst; struct reset_control *pcie_xrst; =20 + struct tegra_pmc *pmc; + bool legacy_phy; struct phy *phy; =20 @@ -1165,7 +1167,7 @@ static void tegra_pcie_power_off(struct tegra_pcie *p= cie) clk_disable_unprepare(pcie->afi_clk); =20 if (!dev->pm_domain) - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE); + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE); =20 err =3D regulator_bulk_disable(pcie->num_supplies, pcie->supplies); if (err < 0) @@ -1183,7 +1185,7 @@ static int tegra_pcie_power_on(struct tegra_pcie *pci= e) reset_control_assert(pcie->pex_rst); =20 if (!dev->pm_domain) - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE); + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE); =20 /* enable regulators */ err =3D regulator_bulk_enable(pcie->num_supplies, pcie->supplies); @@ -1191,12 +1193,14 @@ static int tegra_pcie_power_on(struct tegra_pcie *p= cie) dev_err(dev, "failed to enable regulators: %d\n", err); =20 if (!dev->pm_domain) { - err =3D tegra_powergate_power_on(TEGRA_POWERGATE_PCIE); + err =3D tegra_pmc_powergate_power_on(pcie->pmc, + TEGRA_POWERGATE_PCIE); if (err) { dev_err(dev, "failed to power ungate: %d\n", err); goto regulator_disable; } - err =3D tegra_powergate_remove_clamping(TEGRA_POWERGATE_PCIE); + err =3D tegra_pmc_powergate_remove_clamping(pcie->pmc, + TEGRA_POWERGATE_PCIE); if (err) { dev_err(dev, "failed to remove clamp: %d\n", err); goto powergate; @@ -1234,7 +1238,7 @@ static int tegra_pcie_power_on(struct tegra_pcie *pci= e) clk_disable_unprepare(pcie->afi_clk); powergate: if (!dev->pm_domain) - tegra_powergate_power_off(TEGRA_POWERGATE_PCIE); + tegra_pmc_powergate_power_off(pcie->pmc, TEGRA_POWERGATE_PCIE); regulator_disable: regulator_bulk_disable(pcie->num_supplies, pcie->supplies); =20 @@ -1432,6 +1436,12 @@ static int tegra_pcie_get_resources(struct tegra_pci= e *pcie) return err; } =20 + pcie->pmc =3D devm_tegra_pmc_get(dev); + if (IS_ERR(pcie->pmc)) { + dev_err_probe(dev, PTR_ERR(pcie->pmc), "failed to get PMC\n"); + return err; + } + if (soc->program_uphy) { err =3D tegra_pcie_phys_get(pcie); if (err < 0) { --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E321547D934; Wed, 6 May 2026 13:42:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074956; cv=none; b=XsIh849Pu1n+btV0Eq7CofDCK07D6kXLrm6fmLlyK/diisR7uFLo5c8tusVkMZQF0YWKumBHpbbHqYLlMFpyH0v7TClRaqamtYBjLbGkCGZEBlddTNGu+1APrnpzRqzAJVvpQnSDLsI3L9AnvdtCkh+PqbK3sy26bGCbuYcW1eg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074956; c=relaxed/simple; bh=YMBtIgkv/0vd1T2Q/REmFWl7B9kwD1JjOym1CYgrerA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GuJkdovncR6Pm8PFfbboui+Tr/kQnMl78/AUyZkJJhZDaDDv/B0W0D70c5FVupq0ClhnV96k73hHEgVPNXf5sPmhbA947N8TDMqhAlB02LxDG/QJYCKYMke44VhZdz7lcJVwHAguM7P9WXaAYcYxbKzShCZDCYe2iyKcJrH05j8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q8VZAc1j; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="q8VZAc1j" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 00DFCC2BCC4; Wed, 6 May 2026 13:42:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074955; bh=YMBtIgkv/0vd1T2Q/REmFWl7B9kwD1JjOym1CYgrerA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=q8VZAc1jKjhYkUce5aTh0zexq4y8C1u0/kYwDMq/fi4b5/BGgGyEcabyeYJr2ikps tbpHkK4690619IA7Seo//dI++5K1FUI3MmCTv0/vzsBwZEXPOqSrLvrdbiVu7Mx8gh 6yKGnfFXcHTtCbFFKM/SjKiOJJvhnL8mk4DfpMTNViV3MWj0ZemPBcQT4+6rZv3khS 3oY/zdjZjDFl89TJNF69XmL51iMVurwGfhOUV6G88SCgKYU99B7tsnIhky3MMB8qLU nWnHmzlT8Dy78VVc2SxQV8y/kc8NqAZVOezC+KtmDYUdzgjp6Da2lA63wKF4f7Z+je qJzoK1/Nxy0PA== From: Thierry Reding Date: Wed, 06 May 2026 15:41:57 +0200 Subject: [PATCH 6/9] usb: xhci: tegra: Explicitly specify PMC instance to use 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: <20260506-pmc-v1-6-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3100; i=treding@nvidia.com; h=from:subject:message-id; bh=59LKaPbdXc/3cXqAypoqqQT4hvZBv70PYCPPUxuHdSE=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0Uwjf/7ylsfyp/FAMe7OvIMjXJRmECcGvqVZ UdgOe3ty+OJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z oUr/D/oDRCFAmlPpPBjksDR0c4WYjTIIgAxZyXVTwR/BZIayR2+hDUes+Ers37L4X+dcwam6dP1 Mh/NYLYivVsc8JPA2s4Sh8AnPMZDnR73dmYHAkjioFdvHKQ9kCPf6VDL9LuJ8iHM5ml+5lNy1Cd LEE9AWIbrzoUTUxwgy4XQVyUOomYhY3vukCkUqteP4y4BGfUhevwYGzQFbHCV4vyZAT4+urTydX 2b2k1jShmK+uEkkYXm7WUTIF5BUVdAn6d/IKzSBt21YmXtDXpaX6Tzn+8a17jB3R6wsdi2kNpnH MLP4k1/ipPn21FyY5bWaNkTBeOkW+rF3KSSf7E99TqvZQCJHFEvtGMeDxq112bFWeAu6Vim9TIP JivdrWQUbK2iZb+US3DF3Hiey/aSvj1ttSAQPOoMG6CdRr19XJZKfufMvYkjowSHTfwbwhNMeTj RDh7pJoTmia0m+gfXVGJyvu/1iWbTk0kWTQWuPqAwsCmQUJaArldYdeLColaKSwzr4p14oLhGeE +9jWHeQtlhstICfUV296Vsv9hYdp7inn9h/qimHAe24rzHd8Zszs7xDWkcgxHPZkNIUOna/FwXp +7hy6gArw+JwkdIuoFtay+dwoxXVMNRoYw+h/Nta0GmCYAqeutmeXlwpl2+fAHui33MG3YOA3iE pWK00Z5pZRkvs6w== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding Currently the kernel relies on a global variable to reference the PMC context. Use an explicit lookup for the PMC and pass that to the public PMC APIs. Signed-off-by: Thierry Reding Acked-by: Jon Hunter Acked-by: Mathias Nyman --- drivers/usb/host/xhci-tegra.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c index d2214d309e96..122b711929ef 100644 --- a/drivers/usb/host/xhci-tegra.c +++ b/drivers/usb/host/xhci-tegra.c @@ -292,6 +292,7 @@ struct tegra_xusb { struct reset_control *host_rst; struct reset_control *ss_rst; =20 + struct tegra_pmc *pmc; struct device *genpd_dev_host; struct device *genpd_dev_ss; bool use_genpd; @@ -1188,20 +1189,23 @@ static int tegra_xusb_unpowergate_partitions(struct= tegra_xusb *tegra) return rc; } } else { - rc =3D tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBA, - tegra->ss_clk, - tegra->ss_rst); + rc =3D tegra_pmc_powergate_sequence_power_up(tegra->pmc, + TEGRA_POWERGATE_XUSBA, + tegra->ss_clk, + tegra->ss_rst); if (rc < 0) { dev_err(dev, "failed to enable XUSB SS partition\n"); return rc; } =20 - rc =3D tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBC, - tegra->host_clk, - tegra->host_rst); + rc =3D tegra_pmc_powergate_sequence_power_up(tegra->pmc, + TEGRA_POWERGATE_XUSBC, + tegra->host_clk, + tegra->host_rst); if (rc < 0) { dev_err(dev, "failed to enable XUSB Host partition\n"); - tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA); + tegra_pmc_powergate_power_off(tegra->pmc, + TEGRA_POWERGATE_XUSBA); return rc; } } @@ -1228,18 +1232,21 @@ static int tegra_xusb_powergate_partitions(struct t= egra_xusb *tegra) return rc; } } else { - rc =3D tegra_powergate_power_off(TEGRA_POWERGATE_XUSBC); + rc =3D tegra_pmc_powergate_power_off(tegra->pmc, + TEGRA_POWERGATE_XUSBC); if (rc < 0) { dev_err(dev, "failed to disable XUSB Host partition\n"); return rc; } =20 - rc =3D tegra_powergate_power_off(TEGRA_POWERGATE_XUSBA); + rc =3D tegra_pmc_powergate_power_off(tegra->pmc, + TEGRA_POWERGATE_XUSBA); if (rc < 0) { dev_err(dev, "failed to disable XUSB SS partition\n"); - tegra_powergate_sequence_power_up(TEGRA_POWERGATE_XUSBC, - tegra->host_clk, - tegra->host_rst); + tegra_pmc_powergate_sequence_power_up(tegra->pmc, + TEGRA_POWERGATE_XUSBC, + tegra->host_clk, + tegra->host_rst); return rc; } } @@ -1733,6 +1740,13 @@ static int tegra_xusb_probe(struct platform_device *= pdev) err); goto put_padctl; } + + tegra->pmc =3D devm_tegra_pmc_get(&pdev->dev); + if (IS_ERR(tegra->pmc)) { + err =3D dev_err_probe(&pdev->dev, PTR_ERR(tegra->pmc), + "failed to get PMC\n"); + goto put_padctl; + } } else { err =3D tegra_xusb_powerdomain_init(&pdev->dev, tegra); if (err) --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 2F67F477E41; Wed, 6 May 2026 13:42:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074961; cv=none; b=ui2MMFN1qw0U6p5qc+k0iGmrNUGl11w4NAg0Gb3Vq4PjVdI3DqE6hhKknBtDdYYXHlLNaphgvpVGZUWYqRp7Xv9MjsTmyX/yWcd3yha1VbMZFhCm3NVpVEinHe8dn+1O+/wwTchYMVwrfX+CJHgPMtAFsIqEaAHwlnomnS8L+z8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074961; c=relaxed/simple; bh=GzvYqLBHa10ogEHwvgCnoArzT31y2X8S61UB92LEw+0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KuuWCGy5z4t3sQo5BROjBN9xW/9JHCoxdK42BZUOL+AzUg3CmoWEq21xd6bO5/2EZKevsczleidYBD8et5iTuVp/wg16DV2Ws5EmvUflnA6NOFkhckYwRTGslFs8V/dmInB2SwvNV7B77T4sCS2Ly04vsJXEFpChE7qM47op1Q0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QROSwP7d; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QROSwP7d" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A467BC2BCB8; Wed, 6 May 2026 13:42:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074960; bh=GzvYqLBHa10ogEHwvgCnoArzT31y2X8S61UB92LEw+0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QROSwP7dCYpy++6YGkFnlerA6jokOc9Q5MpG9kpJq3pAdpp97nzKQaK+9Kw/sYwqU GZA9YJkVu10OqqVyCi1j+MLedrSpwPJBL80Jvciq8jRHQWCj+5YbUB0wa7zPQy4F9f lQlQfqvQG/L+VuJx2g03QD8re3gJCkZD+7w727QoTSteoscZOx8RHNRISumA6EPAlM mbeS2czuAHh2BqxEU2CK8VSkHLjbqjdIBbYRcZH60bxXBvYOH5pLwQWsIN8jeRQF/Q gmr8nwxbDiLtdxN94k6B9uINsJVInCkX+aYHnOEXi28/kXXfRni8gFvYKf4rRRpr47 +Vza1leGoQt3g== From: Thierry Reding Date: Wed, 06 May 2026 15:41:58 +0200 Subject: [PATCH 7/9] soc/tegra: pmc: Create PMC context dynamically 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: <20260506-pmc-v1-7-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=12390; i=treding@nvidia.com; h=from:subject:message-id; bh=ieQNrDMUI2HLi2qVsTf9kfTL6HO37KXQx0E4QZcdDNY=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UwJ11ZPOdKaa8TMCKvQdd/49Wr5o9NxpDbN 0T9dNqMg8WJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z oYmuEACQSBnFEOjhklSxB5iUwVE6ZYi/7wScPINyFetgzAPyQqJXwbdrPIHmq/Vg5AEIvqDHvY/ IRdCm388t/X67AThMIbcu/zzv+T+wM5ADI2CY2p+xNqLyfDJJHkt0y6MwU/l2jei6oyeBbUQfpj GLHQR9B8uoCJxTvcaZ2ZqtfOGHMdfYx7OevSu0i4Now1AE+wFSll4o9ZwOXH+YoVSF0G0TbzELc GYLuGBJcAwXC/yscD7S+bJFax7tA9TP39/4filRhG5BqRVmoxOWJohXbOT4geLuAIBrr2yWlpRw Y1Lv1blKbavUOMgFFR4z0AEdpqL5EyadOg72hT8cSB9j+l4nwJfN9RGMQuQHG7f7j33R5ysDA18 jn0EmJla8T3O4xDcWj9tUQmvhaiuQ/CRHVSHMZS/7+UK49GANW06TJ3ksyOZ9cQnHUzxAPXriN4 aQPXqU5dvirKtSA+XfFDYt1qsBilkcUP2PqMsomD3Bnx1wGKbw5oR7gnso9hKeRwHvwN9p0L7uo fiV8cEM9a8A4moa1iSqvi7hVCpUSTCZ3UAeJ06NjkJ3JTaLKA+WrQVT1rYXS7bprsg/UKZrz06l G/qMUn3glYOSIRrIW3A5uGjDmQIJmaEYgT3vSQLnnRMoKYp8s/qJblQmk+7I6GIG/YThXQPaoZY QjQn/4E2iEAG8LA== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding For legacy purposes, an early PMC context is needed to support certain drivers and functionalities. However, when the PMC driver is probed in the later boot stages, the early context is no longer needed. Allocate the PMC context dynamically at probe time so that it can be used going forward. While at it, rename the early PMC context to more accurately reflect what it is used for. It's technically not only for early boot stages, but also to support some code that doesn't have a way of obtaining the correct context otherwise (e.g. no access to device tree). Signed-off-by: Thierry Reding Acked-by: Jon Hunter --- drivers/soc/tegra/pmc.c | 163 ++++++++++++++++++++++++++------------------= ---- 1 file changed, 88 insertions(+), 75 deletions(-) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 2ee6539d796a..50969b07fd8c 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -512,7 +512,7 @@ struct tegra_pmc { u32 *wake_status; }; =20 -static struct tegra_pmc *pmc =3D &(struct tegra_pmc) { +static struct tegra_pmc *early_pmc =3D &(struct tegra_pmc) { .base =3D NULL, .suspend_mode =3D TEGRA_SUSPEND_NOT_READY, }; @@ -1069,7 +1069,7 @@ EXPORT_SYMBOL(tegra_pmc_powergate_power_on); */ int tegra_powergate_power_on(unsigned int id) { - return tegra_pmc_powergate_power_on(pmc, id); + return tegra_pmc_powergate_power_on(early_pmc, id); } EXPORT_SYMBOL(tegra_powergate_power_on); =20 @@ -1093,7 +1093,7 @@ EXPORT_SYMBOL(tegra_pmc_powergate_power_off); */ int tegra_powergate_power_off(unsigned int id) { - return tegra_pmc_powergate_power_off(pmc, id); + return tegra_pmc_powergate_power_off(early_pmc, id); } EXPORT_SYMBOL(tegra_powergate_power_off); =20 @@ -1130,7 +1130,7 @@ EXPORT_SYMBOL(tegra_pmc_powergate_remove_clamping); */ int tegra_powergate_remove_clamping(unsigned int id) { - return tegra_pmc_powergate_remove_clamping(pmc, id); + return tegra_pmc_powergate_remove_clamping(early_pmc, id); } EXPORT_SYMBOL(tegra_powergate_remove_clamping); =20 @@ -1192,7 +1192,7 @@ EXPORT_SYMBOL(tegra_pmc_powergate_sequence_power_up); int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk, struct reset_control *rst) { - return tegra_pmc_powergate_sequence_power_up(pmc, id, clk, rst); + return tegra_pmc_powergate_sequence_power_up(early_pmc, id, clk, rst); } EXPORT_SYMBOL(tegra_powergate_sequence_power_up); =20 @@ -1221,11 +1221,11 @@ bool tegra_pmc_cpu_is_powered(unsigned int cpuid) { int id; =20 - id =3D tegra_get_cpu_powergate_id(pmc, cpuid); + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); if (id < 0) return false; =20 - return tegra_powergate_is_powered(pmc, id); + return tegra_powergate_is_powered(early_pmc, id); } =20 /** @@ -1236,11 +1236,11 @@ int tegra_pmc_cpu_power_on(unsigned int cpuid) { int id; =20 - id =3D tegra_get_cpu_powergate_id(pmc, cpuid); + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); if (id < 0) return id; =20 - return tegra_powergate_set(pmc, id, true); + return tegra_powergate_set(early_pmc, id, true); } =20 /** @@ -1251,11 +1251,11 @@ int tegra_pmc_cpu_remove_clamping(unsigned int cpui= d) { int id; =20 - id =3D tegra_get_cpu_powergate_id(pmc, cpuid); + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); if (id < 0) return id; =20 - return tegra_powergate_remove_clamping(id); + return tegra_pmc_powergate_remove_clamping(early_pmc, id); } =20 static void tegra_pmc_program_reboot_reason(struct tegra_pmc *pmc, @@ -1533,7 +1533,7 @@ static int tegra_powergate_add(struct tegra_pmc *pmc,= struct device_node *np) =20 bool tegra_pmc_core_domain_state_synced(void) { - return pmc->core_domain_state_synced; + return early_pmc->core_domain_state_synced; } =20 static int @@ -1831,7 +1831,7 @@ EXPORT_SYMBOL(tegra_pmc_io_pad_power_enable); */ int tegra_io_pad_power_enable(enum tegra_io_pad id) { - return tegra_pmc_io_pad_power_enable(pmc, id); + return tegra_pmc_io_pad_power_enable(early_pmc, id); } EXPORT_SYMBOL(tegra_io_pad_power_enable); =20 @@ -1887,7 +1887,7 @@ EXPORT_SYMBOL(tegra_pmc_io_pad_power_disable); */ int tegra_io_pad_power_disable(enum tegra_io_pad id) { - return tegra_pmc_io_pad_power_disable(pmc, id); + return tegra_pmc_io_pad_power_disable(early_pmc, id); } EXPORT_SYMBOL(tegra_io_pad_power_disable); =20 @@ -1976,7 +1976,7 @@ static int tegra_io_pad_get_voltage(struct tegra_pmc = *pmc, enum tegra_io_pad id) #ifdef CONFIG_PM_SLEEP enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) { - return pmc->suspend_mode; + return early_pmc->suspend_mode; } =20 void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) @@ -1984,7 +1984,7 @@ void tegra_pmc_set_suspend_mode(enum tegra_suspend_mo= de mode) if (mode < TEGRA_SUSPEND_NONE || mode >=3D TEGRA_MAX_SUSPEND_MODE) return; =20 - pmc->suspend_mode =3D mode; + early_pmc->suspend_mode =3D mode; } =20 void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) @@ -1999,7 +1999,7 @@ void tegra_pmc_enter_suspend_mode(enum tegra_suspend_= mode mode) break; =20 case TEGRA_SUSPEND_LP2: - rate =3D pmc->rate; + rate =3D early_pmc->rate; break; =20 default: @@ -2009,18 +2009,18 @@ void tegra_pmc_enter_suspend_mode(enum tegra_suspen= d_mode mode) if (WARN_ON_ONCE(rate =3D=3D 0)) rate =3D 100000000; =20 - ticks =3D pmc->cpu_good_time * rate + USEC_PER_SEC - 1; + ticks =3D early_pmc->cpu_good_time * rate + USEC_PER_SEC - 1; do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER); + tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWRGOOD_TIMER); =20 - ticks =3D pmc->cpu_off_time * rate + USEC_PER_SEC - 1; + ticks =3D early_pmc->cpu_off_time * rate + USEC_PER_SEC - 1; do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER); + tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWROFF_TIMER); =20 - value =3D tegra_pmc_readl(pmc, PMC_CNTRL); + value =3D tegra_pmc_readl(early_pmc, PMC_CNTRL); value &=3D ~PMC_CNTRL_SIDE_EFFECT_LP0; value |=3D PMC_CNTRL_CPU_PWRREQ_OE; - tegra_pmc_writel(pmc, value, PMC_CNTRL); + tegra_pmc_writel(early_pmc, value, PMC_CNTRL); } #endif =20 @@ -3110,6 +3110,44 @@ static int tegra_pmc_regmap_init(struct tegra_pmc *p= mc) return 0; } =20 +static bool tegra_pmc_detect_tz_only(struct tegra_pmc *pmc) +{ + u32 value, saved; + + saved =3D readl(pmc->base + pmc->soc->regs->scratch0); + value =3D saved ^ 0xffffffff; + + if (value =3D=3D 0xffffffff) + value =3D 0xdeadbeef; + + /* write pattern and read it back */ + writel(value, pmc->base + pmc->soc->regs->scratch0); + value =3D readl(pmc->base + pmc->soc->regs->scratch0); + + /* if we read all-zeroes, access is restricted to TZ only */ + if (value =3D=3D 0) { + pr_info("access to PMC is restricted to TZ\n"); + return true; + } + + /* restore original value */ + writel(saved, pmc->base + pmc->soc->regs->scratch0); + + return false; +} + +static void tegra_pmc_init_common(struct tegra_pmc *pmc) +{ + unsigned int i; + + pmc->tz_only =3D tegra_pmc_detect_tz_only(pmc); + + /* Create a bitmap of the available and valid partitions */ + for (i =3D 0; i < pmc->soc->num_powergates; i++) + if (pmc->soc->powergates[i]) + set_bit(i, pmc->powergates_available); +} + static void tegra_pmc_reset_suspend_mode(void *data) { struct tegra_pmc *pmc =3D data; @@ -3119,7 +3157,7 @@ static void tegra_pmc_reset_suspend_mode(void *data) =20 static int tegra_pmc_probe(struct platform_device *pdev) { - void __iomem *base; + struct tegra_pmc *pmc; struct resource *res; int err; =20 @@ -3128,9 +3166,16 @@ static int tegra_pmc_probe(struct platform_device *p= dev) * register mapping and setup the soc data pointer. If these * are not valid then something went badly wrong! */ - if (WARN_ON(!pmc->base || !pmc->soc)) + if (WARN_ON(!early_pmc->base || !early_pmc->soc)) return -ENODEV; =20 + pmc =3D devm_kzalloc(&pdev->dev, sizeof(*pmc), GFP_KERNEL); + if (!pmc) + return -ENOMEM; + + pmc->soc =3D device_get_match_data(&pdev->dev); + tegra_pmc_init_common(pmc); + err =3D tegra_pmc_parse_dt(pmc, pdev->dev.of_node); if (err < 0) return err; @@ -3141,14 +3186,14 @@ static int tegra_pmc_probe(struct platform_device *= pdev) return err; =20 /* take over the memory region from the early initialization */ - base =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(base)) - return PTR_ERR(base); + pmc->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(pmc->base)) + return PTR_ERR(pmc->base); =20 if (pmc->soc->has_single_mmio_aperture) { - pmc->wake =3D base; - pmc->aotag =3D base; - pmc->scratch =3D base; + pmc->wake =3D pmc->base; + pmc->aotag =3D pmc->base; + pmc->scratch =3D pmc->base; } else { pmc->wake =3D devm_platform_ioremap_resource_byname(pdev, "wake"); if (IS_ERR(pmc->wake)) @@ -3167,7 +3212,7 @@ static int tegra_pmc_probe(struct platform_device *pd= ev) =20 /* "scratch" is an optional aperture */ res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - "scratch"); + "scratch"); if (res) { pmc->scratch =3D devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(pmc->scratch)) @@ -3271,10 +3316,10 @@ static int tegra_pmc_probe(struct platform_device *= pdev) if (err < 0) goto cleanup_powergates; =20 - mutex_lock(&pmc->powergates_lock); - iounmap(pmc->base); - pmc->base =3D base; - mutex_unlock(&pmc->powergates_lock); + mutex_lock(&early_pmc->powergates_lock); + iounmap(early_pmc->base); + early_pmc->base =3D pmc->base; + mutex_unlock(&early_pmc->powergates_lock); =20 tegra_pmc_clock_register(pmc, pdev->dev.of_node); platform_set_drvdata(pdev, pmc); @@ -4799,6 +4844,7 @@ static const struct of_device_id tegra_pmc_match[] = =3D { =20 static void tegra_pmc_sync_state(struct device *dev) { + struct tegra_pmc *pmc =3D dev_get_drvdata(dev); struct device_node *np, *child; int err; =20 @@ -4856,32 +4902,6 @@ static struct platform_driver tegra_pmc_driver =3D { }; builtin_platform_driver(tegra_pmc_driver); =20 -static bool __init tegra_pmc_detect_tz_only(struct tegra_pmc *pmc) -{ - u32 value, saved; - - saved =3D readl(pmc->base + pmc->soc->regs->scratch0); - value =3D saved ^ 0xffffffff; - - if (value =3D=3D 0xffffffff) - value =3D 0xdeadbeef; - - /* write pattern and read it back */ - writel(value, pmc->base + pmc->soc->regs->scratch0); - value =3D readl(pmc->base + pmc->soc->regs->scratch0); - - /* if we read all-zeroes, access is restricted to TZ only */ - if (value =3D=3D 0) { - pr_info("access to PMC is restricted to TZ\n"); - return true; - } - - /* restore original value */ - writel(saved, pmc->base + pmc->soc->regs->scratch0); - - return false; -} - /* * Early initialization to allow access to registers in the very early boot * process. @@ -4891,10 +4911,9 @@ static int __init tegra_pmc_early_init(void) const struct of_device_id *match; struct device_node *np; struct resource regs; - unsigned int i; bool invert; =20 - mutex_init(&pmc->powergates_lock); + mutex_init(&early_pmc->powergates_lock); =20 np =3D of_find_matching_node_and_match(NULL, tegra_pmc_match, &match); if (!np) { @@ -4935,23 +4954,17 @@ static int __init tegra_pmc_early_init(void) } } =20 - pmc->base =3D ioremap(regs.start, resource_size(®s)); - if (!pmc->base) { + early_pmc->base =3D ioremap(regs.start, resource_size(®s)); + if (!early_pmc->base) { pr_err("failed to map PMC registers\n"); of_node_put(np); return -ENXIO; } =20 if (of_device_is_available(np)) { - pmc->soc =3D match->data; - - if (pmc->soc->maybe_tz_only) - pmc->tz_only =3D tegra_pmc_detect_tz_only(pmc); + early_pmc->soc =3D match->data; =20 - /* Create a bitmap of the available and valid partitions */ - for (i =3D 0; i < pmc->soc->num_powergates; i++) - if (pmc->soc->powergates[i]) - set_bit(i, pmc->powergates_available); + tegra_pmc_init_common(early_pmc); =20 /* * Invert the interrupt polarity if a PMC device tree node @@ -4959,7 +4972,7 @@ static int __init tegra_pmc_early_init(void) */ invert =3D of_property_read_bool(np, "nvidia,invert-interrupt"); =20 - pmc->soc->setup_irq_polarity(pmc, np, invert); + early_pmc->soc->setup_irq_polarity(early_pmc, np, invert); =20 of_node_put(np); } --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 593B647DD6A; Wed, 6 May 2026 13:42:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074965; cv=none; b=XlfpGKGNsKw/HZjpnqgpqLno9WtT2TObpb3Bp3cuN5F2OlG7tkT49DCl6TT99D5UaOWnOMHIN5mkcXZmhJ7XJaGt+g9JmdUYvzwkZ3XlFgw2rDap/3t4aRS1ylsmddIWc1R+FVvJKAXjDcaYT+4xAHpFA4h7+NJcPu208IwLdC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074965; c=relaxed/simple; bh=dhMIYzn0naroh7wEiEyD8mkr0lrPyoEZWpMhxfeiflg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SQmWgBwME1EeypvyrbyhFvp73HuvfMLyl8gKvv5V59nBMgRp5jlLKVVUYza6CcgQPfVGqQMtpXw1Ivgn9WmHkblao0jR/ENtk+xRblRINiNf0eEw75IY5vFFfNKE4w+rhvD8VnTLJykjtXEil+nqHc8CkeyrXg4LKJsIie7mzBc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u4raWXQI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u4raWXQI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6A44C2BCF4; Wed, 6 May 2026 13:42:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074964; bh=dhMIYzn0naroh7wEiEyD8mkr0lrPyoEZWpMhxfeiflg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=u4raWXQI2Wdg2bSaXn1HETF5GEiFQ72ibwRAa47bfqpVI5SWMD22kH7/5OHnxWAuA 1nkPxWf2dUD6NBJrnsoj5jr2nmWTyQA5D4J1WGXVYy03x3+80bBhsvg4qklXeIIfFL lQ37+dZSZSLw+NvBFwKbyRufAjNV7Fv4SY06xl9H2YOnZPBomHdcPMDEd1lYXRpuCj zqrf9woH9IGS6n3JI8+N9SmSpfBfLQJwdaZHD0AwqFezKLnqFo5J3wa2c3Y2IF9nN0 BeSgqxoIq/OsSo1iBpgfRUd61q0JkOZWtXUorD1+XhaQW0Q+QAapdQg3L7D+QySIMX N9rvPBR1683CQ== From: Thierry Reding Date: Wed, 06 May 2026 15:41:59 +0200 Subject: [PATCH 8/9] soc/tegra: pmc: Remove unused legacy functions 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: <20260506-pmc-v1-8-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=6033; i=treding@nvidia.com; h=from:subject:message-id; bh=dxlHQ75ERZaZquoLYGMUADgl07hpLeMdSph/VRfteA4=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0UwuL+I1tfaN0jTu1yVVepluyb/zMAaRVo8U 1kKyKV8KLKJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z oWAfEACW9hIvJoBpm7XmtiXmDNPsqhddpmCXDTVkthnNVLlro96hP5Dv2CUNMRM8pGdOeH3dsVQ a5gNS6b6IH6+37XFlyJZ4zzfwUGP/uUt/KFi4npTpNj1I6n2TIjaqQRrrPUvETmr3r1s4EjerZu /CRCiQBfKAz7cUL/uefUs6gpvhYNSFOeh1a4v5hfk6NHT95PfuF8VSN4MiHrdSckuM5OaMkcIfT u7sX/Y3KelzOdwiOXvnTyf0GPKLm7jdMk91HBp2yRJcTOmDVVQ3XeF82n4QObPwLfXwKOFktinm wtJSIWqlDX41pnlaSl7dZFHFbXXSBfQXty9ThTbf/hFbeDn4NvSTDTEKt/x/g1egVMFIR5JMhNN 58uO/Eada7kc4dTr9Mu8M44pRimV6u/fhm17Sq6IGe9KwEer/UUzHPtlHt3gI5WnnomTx6EwqyN 1XkFTVwtIVpytMnRpxkmWN6+Egflui44aLVnJNBg+Ldt2Oiux6hEmJQdvZyXBUq6rH9/xpBKQbt UbYABWRui3RMG5NgXP2lUNNh8r9hSnEovvU+PxWgK1nolDjr3ZAqXMCVz0tSrKV6bJpu+jD5Ryt +D0Ylz+OFFthcaFZD0bdvmLftdoqwWDTAzUl1O/ANMam/Hth1tc0M8VThOMJojdQYbOylxM9JMO MiFRUXJb9h0ke1w== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding All callers of these functions have been replaced by their variants taking a PMC context as an input, so they are no longer used and can be removed. Signed-off-by: Thierry Reding Acked-by: Jon Hunter --- drivers/soc/tegra/pmc.c | 69 ---------------------------------------------= ---- include/soc/tegra/pmc.h | 47 --------------------------------- 2 files changed, 116 deletions(-) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 50969b07fd8c..f25c8e73475c 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -1063,16 +1063,6 @@ int tegra_pmc_powergate_power_on(struct tegra_pmc *p= mc, unsigned int id) } EXPORT_SYMBOL(tegra_pmc_powergate_power_on); =20 -/** - * tegra_powergate_power_on() - power on partition - * @id: partition ID - */ -int tegra_powergate_power_on(unsigned int id) -{ - return tegra_pmc_powergate_power_on(early_pmc, id); -} -EXPORT_SYMBOL(tegra_powergate_power_on); - /** * tegra_pmc_powergate_power_off() - power off partition * @pmc: power management controller @@ -1087,16 +1077,6 @@ int tegra_pmc_powergate_power_off(struct tegra_pmc *= pmc, unsigned int id) } EXPORT_SYMBOL(tegra_pmc_powergate_power_off); =20 -/** - * tegra_powergate_power_off() - power off partition - * @id: partition ID - */ -int tegra_powergate_power_off(unsigned int id) -{ - return tegra_pmc_powergate_power_off(early_pmc, id); -} -EXPORT_SYMBOL(tegra_powergate_power_off); - /** * tegra_powergate_is_powered() - check if partition is powered * @pmc: power management controller @@ -1124,16 +1104,6 @@ int tegra_pmc_powergate_remove_clamping(struct tegra= _pmc *pmc, unsigned int id) } EXPORT_SYMBOL(tegra_pmc_powergate_remove_clamping); =20 -/** - * tegra_powergate_remove_clamping() - remove power clamps for partition - * @id: partition ID - */ -int tegra_powergate_remove_clamping(unsigned int id) -{ - return tegra_pmc_powergate_remove_clamping(early_pmc, id); -} -EXPORT_SYMBOL(tegra_powergate_remove_clamping); - /** * tegra_pmc_powergate_sequence_power_up() - power up partition * @pmc: power management controller @@ -1181,21 +1151,6 @@ int tegra_pmc_powergate_sequence_power_up(struct teg= ra_pmc *pmc, } EXPORT_SYMBOL(tegra_pmc_powergate_sequence_power_up); =20 -/** - * tegra_powergate_sequence_power_up() - power up partition - * @id: partition ID - * @clk: clock for partition - * @rst: reset for partition - * - * Must be called with clk disabled, and returns with clk enabled. - */ -int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk, - struct reset_control *rst) -{ - return tegra_pmc_powergate_sequence_power_up(early_pmc, id, clk, rst); -} -EXPORT_SYMBOL(tegra_powergate_sequence_power_up); - /** * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID * @pmc: power management controller @@ -1823,18 +1778,6 @@ int tegra_pmc_io_pad_power_enable(struct tegra_pmc *= pmc, enum tegra_io_pad id) } EXPORT_SYMBOL(tegra_pmc_io_pad_power_enable); =20 -/** - * tegra_io_pad_power_enable() - enable power to I/O pad - * @id: Tegra I/O pad ID for which to enable power - * - * Returns: 0 on success or a negative error code on failure. - */ -int tegra_io_pad_power_enable(enum tegra_io_pad id) -{ - return tegra_pmc_io_pad_power_enable(early_pmc, id); -} -EXPORT_SYMBOL(tegra_io_pad_power_enable); - /** * tegra_pmc_io_pad_power_disable() - disable power to I/O pad * @pmc: power management controller @@ -1879,18 +1822,6 @@ int tegra_pmc_io_pad_power_disable(struct tegra_pmc = *pmc, enum tegra_io_pad id) } EXPORT_SYMBOL(tegra_pmc_io_pad_power_disable); =20 -/** - * tegra_io_pad_power_disable() - disable power to I/O pad - * @id: Tegra I/O pad ID for which to disable power - * - * Returns: 0 on success or a negative error code on failure. - */ -int tegra_io_pad_power_disable(enum tegra_io_pad id) -{ - return tegra_pmc_io_pad_power_disable(early_pmc, id); -} -EXPORT_SYMBOL(tegra_io_pad_power_disable); - static int tegra_io_pad_is_powered(struct tegra_pmc *pmc, enum tegra_io_pa= d id) { const struct tegra_io_pad_soc *pad; diff --git a/include/soc/tegra/pmc.h b/include/soc/tegra/pmc.h index 1fd21be02577..8b4bcdea849e 100644 --- a/include/soc/tegra/pmc.h +++ b/include/soc/tegra/pmc.h @@ -164,16 +164,6 @@ int tegra_pmc_io_pad_power_enable(struct tegra_pmc *pm= c, enum tegra_io_pad id); int tegra_pmc_io_pad_power_disable(struct tegra_pmc *pmc, enum tegra_io_pa= d id); =20 /* legacy */ -int tegra_powergate_power_on(unsigned int id); -int tegra_powergate_power_off(unsigned int id); -int tegra_powergate_remove_clamping(unsigned int id); - -int tegra_powergate_sequence_power_up(unsigned int id, struct clk *clk, - struct reset_control *rst); - -int tegra_io_pad_power_enable(enum tegra_io_pad id); -int tegra_io_pad_power_disable(enum tegra_io_pad id); - void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode); void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode); =20 @@ -224,43 +214,6 @@ tegra_pmc_io_pad_power_disable(struct tegra_pmc *pmc, = enum tegra_io_pad id) return -ENOSYS; } =20 -static inline int tegra_powergate_power_on(unsigned int id) -{ - return -ENOSYS; -} - -static inline int tegra_powergate_power_off(unsigned int id) -{ - return -ENOSYS; -} - -static inline int tegra_powergate_remove_clamping(unsigned int id) -{ - return -ENOSYS; -} - -static inline int tegra_powergate_sequence_power_up(unsigned int id, - struct clk *clk, - struct reset_control *rst) -{ - return -ENOSYS; -} - -static inline int tegra_io_pad_power_enable(enum tegra_io_pad id) -{ - return -ENOSYS; -} - -static inline int tegra_io_pad_power_disable(enum tegra_io_pad id) -{ - return -ENOSYS; -} - -static inline int tegra_io_pad_get_voltage(enum tegra_io_pad id) -{ - return -ENOSYS; -} - static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) { } --=20 2.52.0 From nobody Sat Jun 13 16:18:03 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 5CE0346AF16; Wed, 6 May 2026 13:42:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074970; cv=none; b=i76Tx5XQdOaZzWoQDLryaolNGL4KvBK41iKrfLLYCUYiKNIhUP6tIQKflnKe3NIrcLlAt4PCB1IM+VSsUOy4GGO8FZLbLmN6znM/kAWzH/oeoyAzJkdwBbaE5KNzR9yRWbdXObiuIfAzFhirrWUdf2/ONkUycDrS4YAI/SLbfGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778074970; c=relaxed/simple; bh=8clIhaG9YT+RicfNbrRJG1fzZK7c593cBoVydv8+je0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HbmR5a7wwnZOTFKcK/ODwBahQkm3yAYZ0hJz6rzTDrDK0eGAS+A0+91JO5maoOjilEHvpxTcY6hT0AyjZl8KDTn/N3NXjI1Km8C7oQtZuG00XFWa/n6ZAbammHLow8Ouesq7JzziYaZ8mawxDNhY/gl0NU5xT1091QGGsb8SHm0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ap1J+KX6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ap1J+KX6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8FC5C2BCB8; Wed, 6 May 2026 13:42:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778074970; bh=8clIhaG9YT+RicfNbrRJG1fzZK7c593cBoVydv8+je0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ap1J+KX6D+abcfbsFFSliI+BiD2p3yOoMy3Zr3WwBOdo7/3uM79CwAn9N/CuoOZ+/ woEtsubpWmET1bjIwaDT3nUjkbtsek7AQqyUrtpDdUqmD/rqyurnYTG+qUb/bqUxwc prlRSEdKiu1Az141DnKzbkYm4QgM/sfXdV7/vjH2+sRsKfaYUZSIaPQJZQjcVnqFxU /1pM5CeXE4Txr85tZz8V/CM5haea7bjmY6rAVUyf7GLIIILvN2iaxQy1s5NZuLWDA9 N3+O4jN3oEiJmZzO51mJVmlZ5bYcAf5BFFS0OFrR2axBZg58qVlP8NRYojchETbIMw bUzGk6fQ4K0iA== From: Thierry Reding Date: Wed, 06 May 2026 15:42:00 +0200 Subject: [PATCH 9/9] soc/tegra: pmc: Move legacy code behind CONFIG_ARM guard 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: <20260506-pmc-v1-9-a6de5da7216b@nvidia.com> References: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> In-Reply-To: <20260506-pmc-v1-0-a6de5da7216b@nvidia.com> To: Damien Le Moal , Niklas Cassel , Thierry Reding , Jonathan Hunter , Lyude Paul , Danilo Krummrich , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Mikko Perttunen , Dmitry Osipenko , Mauro Carvalho Chehab , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Bjorn Helgaas , Mathias Nyman , Greg Kroah-Hartman , Philipp Zabel Cc: linux-ide@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org, linux-usb@vger.kernel.org, Thierry Reding X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=11347; i=treding@nvidia.com; h=from:subject:message-id; bh=rnaTW07ykMQIUMrTm2x41oL5ZIPzV0A53TZ/cWTcvIk=; b=owEBbQKS/ZANAwAKAd0jrNd/PrOhAcsmYgBp+0Uw+Om1CC6cWGLXkcsRH4QOzUfPEehLKUXB+ /aWRr/jutiJAjMEAAEKAB0WIQSI6sMIAUnM98CNyJ/dI6zXfz6zoQUCaftFMAAKCRDdI6zXfz6z ofO5D/4n6GWlwbtRKEFnXQPHzN+4U2vIXY7E/Q4XCMNpcLlktsuaOWLcAUr6cafqI7LOf5XGcPS Wj9loKFIMs7ozQCBRafPYWCy+8kPy9kUHsjf6JznJ9u9fymj3R6NgZVIv5WQYsg4LlMB93lp48M eYqGkGxih+tFqNhINd2FETG/86cTg2QDw1C3dnnSg2HxW1tDiYJmIRbkjcMs9JPBNxUk7pVHvss zqSzgxXSLbIQvh62YHNMqWWpX+guAPedavt1Duzas2P0hl7Fe8PIfUcnDdXZNrzf68hw4IT8XD3 4GYVr3knvs1mmWvaA8fCnsyFDUmQKUFIfSjR4R/RGecba/fhcr9Ma+92jUhfRXeD7j4hn+lsRod S9i4uEG2UlEu+V6QUaJ+CC0okb27pU7Q/G16Ws2UBZcIaEr0jlSo0BERJfvKN4FfZibw2TMiGRU h2l00BFL7BZ8FMqEIvKU1GXAjyGEtV+ydWaimoMaz7msHmdC/Ggw9IfWAPpq0PtbwPlQ5aBEDdR NMAaaZsy8LA3KyTBm4YW+IrPGDYzsiNHg8qvnba0IzjOopAnv1I948Zgg74LvJrxDjVkOFAIDgo 6Y6Qg65xdFlvMgVglXomSHtYoKqg/lbE3RxgRxnhNI9m8gmEwZDV2PshyeaTYtSylMM8fVN/l7B /Roh/kWUeC0ipUw== X-Developer-Key: i=treding@nvidia.com; a=openpgp; fpr=88EAC3080149CCF7C08DC89FDD23ACD77F3EB3A1 From: Thierry Reding None of this legacy code is needed on 64-bit ARM devices, so it can be moved behind a corresponding preprocessor guard. This more cleanly separates out the legacy code from code needed on current platforms. Signed-off-by: Thierry Reding Acked-by: Jon Hunter --- Changes in v2: - fix build issue for ARM && !PM_SLEEP --- drivers/soc/tegra/pmc.c | 244 +++++++++++++++++++++++++-------------------= ---- include/soc/tegra/pmc.h | 42 ++++----- 2 files changed, 147 insertions(+), 139 deletions(-) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index f25c8e73475c..210ee5124119 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -512,10 +512,12 @@ struct tegra_pmc { u32 *wake_status; }; =20 +#if defined(CONFIG_ARM) static struct tegra_pmc *early_pmc =3D &(struct tegra_pmc) { .base =3D NULL, .suspend_mode =3D TEGRA_SUSPEND_NOT_READY, }; +#endif =20 static inline struct tegra_powergate * to_powergate(struct generic_pm_domain *domain) @@ -1151,68 +1153,6 @@ int tegra_pmc_powergate_sequence_power_up(struct teg= ra_pmc *pmc, } EXPORT_SYMBOL(tegra_pmc_powergate_sequence_power_up); =20 -/** - * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID - * @pmc: power management controller - * @cpuid: CPU partition ID - * - * Returns the partition ID corresponding to the CPU partition ID or a - * negative error code on failure. - */ -static int tegra_get_cpu_powergate_id(struct tegra_pmc *pmc, - unsigned int cpuid) -{ - if (pmc->soc && cpuid < pmc->soc->num_cpu_powergates) - return pmc->soc->cpu_powergates[cpuid]; - - return -EINVAL; -} - -/** - * tegra_pmc_cpu_is_powered() - check if CPU partition is powered - * @cpuid: CPU partition ID - */ -bool tegra_pmc_cpu_is_powered(unsigned int cpuid) -{ - int id; - - id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); - if (id < 0) - return false; - - return tegra_powergate_is_powered(early_pmc, id); -} - -/** - * tegra_pmc_cpu_power_on() - power on CPU partition - * @cpuid: CPU partition ID - */ -int tegra_pmc_cpu_power_on(unsigned int cpuid) -{ - int id; - - id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); - if (id < 0) - return id; - - return tegra_powergate_set(early_pmc, id, true); -} - -/** - * tegra_pmc_cpu_remove_clamping() - remove power clamps for CPU partition - * @cpuid: CPU partition ID - */ -int tegra_pmc_cpu_remove_clamping(unsigned int cpuid) -{ - int id; - - id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); - if (id < 0) - return id; - - return tegra_pmc_powergate_remove_clamping(early_pmc, id); -} - static void tegra_pmc_program_reboot_reason(struct tegra_pmc *pmc, const char *cmd) { @@ -1486,11 +1426,6 @@ static int tegra_powergate_add(struct tegra_pmc *pmc= , struct device_node *np) return err; } =20 -bool tegra_pmc_core_domain_state_synced(void) -{ - return early_pmc->core_domain_state_synced; -} - static int tegra_pmc_core_pd_set_performance_state(struct generic_pm_domain *genpd, unsigned int level) @@ -1904,57 +1839,6 @@ static int tegra_io_pad_get_voltage(struct tegra_pmc= *pmc, enum tegra_io_pad id) return TEGRA_IO_PAD_VOLTAGE_3V3; } =20 -#ifdef CONFIG_PM_SLEEP -enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) -{ - return early_pmc->suspend_mode; -} - -void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) -{ - if (mode < TEGRA_SUSPEND_NONE || mode >=3D TEGRA_MAX_SUSPEND_MODE) - return; - - early_pmc->suspend_mode =3D mode; -} - -void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) -{ - unsigned long long rate =3D 0; - u64 ticks; - u32 value; - - switch (mode) { - case TEGRA_SUSPEND_LP1: - rate =3D 32768; - break; - - case TEGRA_SUSPEND_LP2: - rate =3D early_pmc->rate; - break; - - default: - break; - } - - if (WARN_ON_ONCE(rate =3D=3D 0)) - rate =3D 100000000; - - ticks =3D early_pmc->cpu_good_time * rate + USEC_PER_SEC - 1; - do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWRGOOD_TIMER); - - ticks =3D early_pmc->cpu_off_time * rate + USEC_PER_SEC - 1; - do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWROFF_TIMER); - - value =3D tegra_pmc_readl(early_pmc, PMC_CNTRL); - value &=3D ~PMC_CNTRL_SIDE_EFFECT_LP0; - value |=3D PMC_CNTRL_CPU_PWRREQ_OE; - tegra_pmc_writel(early_pmc, value, PMC_CNTRL); -} -#endif - static int tegra_pmc_parse_dt(struct tegra_pmc *pmc, struct device_node *n= p) { u32 value, values[2]; @@ -3092,6 +2976,7 @@ static int tegra_pmc_probe(struct platform_device *pd= ev) struct resource *res; int err; =20 +#if defined(CONFIG_ARM) /* * Early initialisation should have configured an initial * register mapping and setup the soc data pointer. If these @@ -3099,6 +2984,7 @@ static int tegra_pmc_probe(struct platform_device *pd= ev) */ if (WARN_ON(!early_pmc->base || !early_pmc->soc)) return -ENODEV; +#endif =20 pmc =3D devm_kzalloc(&pdev->dev, sizeof(*pmc), GFP_KERNEL); if (!pmc) @@ -3247,10 +3133,12 @@ static int tegra_pmc_probe(struct platform_device *= pdev) if (err < 0) goto cleanup_powergates; =20 +#if defined(CONFIG_ARM) mutex_lock(&early_pmc->powergates_lock); iounmap(early_pmc->base); early_pmc->base =3D pmc->base; mutex_unlock(&early_pmc->powergates_lock); +#endif =20 tegra_pmc_clock_register(pmc, pdev->dev.of_node); platform_set_drvdata(pdev, pmc); @@ -4833,6 +4721,125 @@ static struct platform_driver tegra_pmc_driver =3D { }; builtin_platform_driver(tegra_pmc_driver); =20 +#if defined(CONFIG_ARM) +/** + * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID + * @pmc: power management controller + * @cpuid: CPU partition ID + * + * Returns the partition ID corresponding to the CPU partition ID or a + * negative error code on failure. + */ +static int tegra_get_cpu_powergate_id(struct tegra_pmc *pmc, + unsigned int cpuid) +{ + if (pmc->soc && cpuid < pmc->soc->num_cpu_powergates) + return pmc->soc->cpu_powergates[cpuid]; + + return -EINVAL; +} + +/** + * tegra_pmc_cpu_is_powered() - check if CPU partition is powered + * @cpuid: CPU partition ID + */ +bool tegra_pmc_cpu_is_powered(unsigned int cpuid) +{ + int id; + + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); + if (id < 0) + return false; + + return tegra_powergate_is_powered(early_pmc, id); +} + +/** + * tegra_pmc_cpu_power_on() - power on CPU partition + * @cpuid: CPU partition ID + */ +int tegra_pmc_cpu_power_on(unsigned int cpuid) +{ + int id; + + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); + if (id < 0) + return id; + + return tegra_powergate_set(early_pmc, id, true); +} + +/** + * tegra_pmc_cpu_remove_clamping() - remove power clamps for CPU partition + * @cpuid: CPU partition ID + */ +int tegra_pmc_cpu_remove_clamping(unsigned int cpuid) +{ + int id; + + id =3D tegra_get_cpu_powergate_id(early_pmc, cpuid); + if (id < 0) + return id; + + return tegra_pmc_powergate_remove_clamping(early_pmc, id); +} + +bool tegra_pmc_core_domain_state_synced(void) +{ + return early_pmc->core_domain_state_synced; +} + +#ifdef CONFIG_PM_SLEEP +enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) +{ + return early_pmc->suspend_mode; +} + +void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) +{ + if (mode < TEGRA_SUSPEND_NONE || mode >=3D TEGRA_MAX_SUSPEND_MODE) + return; + + early_pmc->suspend_mode =3D mode; +} + +void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) +{ + unsigned long long rate =3D 0; + u64 ticks; + u32 value; + + switch (mode) { + case TEGRA_SUSPEND_LP1: + rate =3D 32768; + break; + + case TEGRA_SUSPEND_LP2: + rate =3D early_pmc->rate; + break; + + default: + break; + } + + if (WARN_ON_ONCE(rate =3D=3D 0)) + rate =3D 100000000; + + ticks =3D early_pmc->cpu_good_time * rate + USEC_PER_SEC - 1; + do_div(ticks, USEC_PER_SEC); + tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWRGOOD_TIMER); + + ticks =3D early_pmc->cpu_off_time * rate + USEC_PER_SEC - 1; + do_div(ticks, USEC_PER_SEC); + tegra_pmc_writel(early_pmc, ticks, PMC_CPUPWROFF_TIMER); + + value =3D tegra_pmc_readl(early_pmc, PMC_CNTRL); + value &=3D ~PMC_CNTRL_SIDE_EFFECT_LP0; + value |=3D PMC_CNTRL_CPU_PWRREQ_OE; + tegra_pmc_writel(early_pmc, value, PMC_CNTRL); +} +#endif /* CONFIG_PM_SLEEP */ + /* * Early initialization to allow access to registers in the very early boot * process. @@ -4911,3 +4918,4 @@ static int __init tegra_pmc_early_init(void) return 0; } early_initcall(tegra_pmc_early_init); +#endif /* CONFIG_ARM */ diff --git a/include/soc/tegra/pmc.h b/include/soc/tegra/pmc.h index 8b4bcdea849e..4bcbf19d75ac 100644 --- a/include/soc/tegra/pmc.h +++ b/include/soc/tegra/pmc.h @@ -18,10 +18,6 @@ struct clk; struct reset_control; struct tegra_pmc; =20 -bool tegra_pmc_cpu_is_powered(unsigned int cpuid); -int tegra_pmc_cpu_power_on(unsigned int cpuid); -int tegra_pmc_cpu_remove_clamping(unsigned int cpuid); - /* * powergate and I/O rail APIs */ @@ -163,12 +159,6 @@ int tegra_pmc_powergate_sequence_power_up(struct tegra= _pmc *pmc, int tegra_pmc_io_pad_power_enable(struct tegra_pmc *pmc, enum tegra_io_pad= id); int tegra_pmc_io_pad_power_disable(struct tegra_pmc *pmc, enum tegra_io_pa= d id); =20 -/* legacy */ -void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode); -void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode); - -bool tegra_pmc_core_domain_state_synced(void); - #else static inline struct tegra_pmc *devm_tegra_pmc_get(struct device *dev) { @@ -213,28 +203,38 @@ tegra_pmc_io_pad_power_disable(struct tegra_pmc *pmc,= enum tegra_io_pad id) { return -ENOSYS; } +#endif /* CONFIG_SOC_TEGRA_PMC */ =20 -static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) +/* 32-bit ARM platforms only */ +#if defined(CONFIG_ARM) +bool tegra_pmc_cpu_is_powered(unsigned int cpuid); +int tegra_pmc_cpu_power_on(unsigned int cpuid); +int tegra_pmc_cpu_remove_clamping(unsigned int cpuid); +bool tegra_pmc_core_domain_state_synced(void); + +#if defined(CONFIG_SOC_TEGRA_PMC) && defined(CONFIG_PM_SLEEP) +enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void); +void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode); +void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode); +#else +static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) { + return TEGRA_SUSPEND_NONE; } =20 -static inline void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mo= de) +static inline void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) { } =20 -static inline bool tegra_pmc_core_domain_state_synced(void) +static inline void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mo= de) { - return false; } - -#endif /* CONFIG_SOC_TEGRA_PMC */ - -#if defined(CONFIG_SOC_TEGRA_PMC) && defined(CONFIG_PM_SLEEP) -enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void); +#endif #else -static inline enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void) +/* needed for COMPILE_TEST */ +static inline bool tegra_pmc_core_domain_state_synced(void) { - return TEGRA_SUSPEND_NONE; + return false; } #endif =20 --=20 2.52.0