From: Jon Hunter <jonathanh@nvidia.com> To: "Stephen Warren" <swarren@wwwdotorg.org>, "Thierry Reding" <thierry.reding@gmail.com>, "Alexandre Courbot" <gnurou@gmail.com>, "Philipp Zabel" <p.zabel@pengutronix.de>, "Peter De Schrijver" <pdeschrijver@nvidia.com>, "Prashant Gaikwad" <pgaikwad@nvidia.com>, "Terje Bergström" <tbergstrom@nvidia.com>, "Hans de Goede" <hdegoede@redhat.com>, "Tejun Heo" <tj@kernel.org> Cc: Vince Hsu <vinceh@nvidia.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Kevin Hilman <khilman@kernel.org>, Ulf Hansson <ulf.hansson@linaro.org>, linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, Jon Hunter <jonathanh@nvidia.com> Subject: [PATCH V3 09/19] soc: tegra: pmc: Prepare for migrating to generic PM domains Date: Mon, 13 Jul 2015 13:39:47 +0100 [thread overview] Message-ID: <1436791197-32358-10-git-send-email-jonathanh@nvidia.com> (raw) In-Reply-To: <1436791197-32358-1-git-send-email-jonathanh@nvidia.com> When turning on and off power-domains it is necessary to enable specific clocks in order to de-assert/assert various reset signals to place the logic into a good state. Currently, clocks required for turning on a power-domain are left enabled by the PMC driver because these clocks are also needed by the IP blocks to operated. When migrating to the generic PM domain infrastructure, control of the powergates is abstracted from the drivers and therefore, it is desirable to disabled the clocks after turning on the power-domain and let the drivers enable the clocks it needs later. However, because this behaviour is different it is necessary to add a new API that drivers can use whether generic PM domains are used or not so that the behaviour is the same. Hence, add a new API that disables the clocks after turning on the power domain. Similarly, for disabling a power-domain add a new API to abstract the management of the clocks so that drivers can be migrated to generic PM domains. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> --- drivers/soc/tegra/pmc.c | 23 +++++++++++++++++++++++ include/soc/tegra/pmc.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 180d434deec5..934653785bb7 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -331,6 +331,29 @@ err_power: } EXPORT_SYMBOL(tegra_powergate_sequence_power_up); +int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + int ret; + + ret = clk_prepare_enable(clk); + if (ret) + return ret; + + usleep_range(10, 20); + + reset_control_assert(rst); + + usleep_range(10, 20); + + clk_disable_unprepare(clk); + + usleep_range(10, 20); + + return tegra_powergate_power_off(id); +} +EXPORT_SYMBOL(tegra_powergate_power_off_legacy); + #ifdef CONFIG_SMP /** * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID diff --git a/include/soc/tegra/pmc.h b/include/soc/tegra/pmc.h index 3a014c121399..4ca91d39304d 100644 --- a/include/soc/tegra/pmc.h +++ b/include/soc/tegra/pmc.h @@ -19,6 +19,8 @@ #ifndef __SOC_TEGRA_PMC_H__ #define __SOC_TEGRA_PMC_H__ +#include <linux/clk.h> +#include <linux/delay.h> #include <linux/reboot.h> #include <soc/tegra/pm.h> @@ -117,6 +119,22 @@ int tegra_powergate_remove_clamping(int id); int tegra_powergate_sequence_power_up(int id, struct clk *clk, struct reset_control *rst); +static inline int tegra_powergate_power_on_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + int err = tegra_powergate_sequence_power_up(id, clk, rst); + + if (!err) { + usleep_range(10, 20); + clk_disable_unprepare(clk); + } + + return err; +} + +int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst); + int tegra_io_rail_power_on(int id); int tegra_io_rail_power_off(int id); #else @@ -155,6 +173,18 @@ static inline int tegra_io_rail_power_off(int id) { return -ENOSYS; } + +static inline int tegra_powergate_power_on_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + return -ENOTSUPP; +} + +static inline int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + return -ENOTSUPP; +} #endif /* CONFIG_ARCH_TEGRA */ #endif /* __SOC_TEGRA_PMC_H__ */ -- 2.1.4
WARNING: multiple messages have this Message-ID (diff)
From: jonathanh@nvidia.com (Jon Hunter) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V3 09/19] soc: tegra: pmc: Prepare for migrating to generic PM domains Date: Mon, 13 Jul 2015 13:39:47 +0100 [thread overview] Message-ID: <1436791197-32358-10-git-send-email-jonathanh@nvidia.com> (raw) In-Reply-To: <1436791197-32358-1-git-send-email-jonathanh@nvidia.com> When turning on and off power-domains it is necessary to enable specific clocks in order to de-assert/assert various reset signals to place the logic into a good state. Currently, clocks required for turning on a power-domain are left enabled by the PMC driver because these clocks are also needed by the IP blocks to operated. When migrating to the generic PM domain infrastructure, control of the powergates is abstracted from the drivers and therefore, it is desirable to disabled the clocks after turning on the power-domain and let the drivers enable the clocks it needs later. However, because this behaviour is different it is necessary to add a new API that drivers can use whether generic PM domains are used or not so that the behaviour is the same. Hence, add a new API that disables the clocks after turning on the power domain. Similarly, for disabling a power-domain add a new API to abstract the management of the clocks so that drivers can be migrated to generic PM domains. Signed-off-by: Jon Hunter <jonathanh@nvidia.com> --- drivers/soc/tegra/pmc.c | 23 +++++++++++++++++++++++ include/soc/tegra/pmc.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 180d434deec5..934653785bb7 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -331,6 +331,29 @@ err_power: } EXPORT_SYMBOL(tegra_powergate_sequence_power_up); +int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + int ret; + + ret = clk_prepare_enable(clk); + if (ret) + return ret; + + usleep_range(10, 20); + + reset_control_assert(rst); + + usleep_range(10, 20); + + clk_disable_unprepare(clk); + + usleep_range(10, 20); + + return tegra_powergate_power_off(id); +} +EXPORT_SYMBOL(tegra_powergate_power_off_legacy); + #ifdef CONFIG_SMP /** * tegra_get_cpu_powergate_id() - convert from CPU ID to partition ID diff --git a/include/soc/tegra/pmc.h b/include/soc/tegra/pmc.h index 3a014c121399..4ca91d39304d 100644 --- a/include/soc/tegra/pmc.h +++ b/include/soc/tegra/pmc.h @@ -19,6 +19,8 @@ #ifndef __SOC_TEGRA_PMC_H__ #define __SOC_TEGRA_PMC_H__ +#include <linux/clk.h> +#include <linux/delay.h> #include <linux/reboot.h> #include <soc/tegra/pm.h> @@ -117,6 +119,22 @@ int tegra_powergate_remove_clamping(int id); int tegra_powergate_sequence_power_up(int id, struct clk *clk, struct reset_control *rst); +static inline int tegra_powergate_power_on_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + int err = tegra_powergate_sequence_power_up(id, clk, rst); + + if (!err) { + usleep_range(10, 20); + clk_disable_unprepare(clk); + } + + return err; +} + +int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst); + int tegra_io_rail_power_on(int id); int tegra_io_rail_power_off(int id); #else @@ -155,6 +173,18 @@ static inline int tegra_io_rail_power_off(int id) { return -ENOSYS; } + +static inline int tegra_powergate_power_on_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + return -ENOTSUPP; +} + +static inline int tegra_powergate_power_off_legacy(int id, struct clk *clk, + struct reset_control *rst) +{ + return -ENOTSUPP; +} #endif /* CONFIG_ARCH_TEGRA */ #endif /* __SOC_TEGRA_PMC_H__ */ -- 2.1.4
next prev parent reply other threads:[~2015-07-13 12:39 UTC|newest] Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-07-13 12:39 [PATCH V3 00/19] Add generic PM domain support for Tegra SoCs Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 06/19] clk: tegra: remove TEGRA_PLL_USE_LOCK for PLLD/PLLD2 Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-7-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-13 13:41 ` Peter De Schrijver 2015-07-13 13:41 ` Peter De Schrijver 2015-07-13 14:02 ` Jon Hunter 2015-07-13 14:02 ` Jon Hunter [not found] ` <55A3C50E.7060706-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-14 11:59 ` Jon Hunter 2015-07-14 11:59 ` Jon Hunter 2015-07-14 11:59 ` Jon Hunter [not found] ` <55A4F985.7010503-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-15 8:16 ` Peter De Schrijver 2015-07-15 8:16 ` Peter De Schrijver [not found] ` <1436791197-32358-1-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-13 12:39 ` [PATCH V3 01/19] reset: add of_reset_control_get_by_index() Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-2-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 12:08 ` Philipp Zabel 2015-07-17 12:08 ` Philipp Zabel 2015-07-13 12:39 ` [PATCH V3 02/19] memory: tegra: Add MC flush support Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-17 9:57 ` Thierry Reding 2015-07-17 9:57 ` Thierry Reding 2015-07-17 10:20 ` Peter De Schrijver 2015-07-17 10:20 ` Peter De Schrijver [not found] ` <20150717102049.GQ6287-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org> 2015-07-17 11:31 ` Thierry Reding 2015-07-17 11:31 ` Thierry Reding 2015-07-20 8:46 ` Jon Hunter 2015-07-20 8:46 ` Jon Hunter 2015-07-20 9:17 ` Thierry Reding 2015-07-20 9:17 ` Thierry Reding 2015-07-20 9:59 ` Peter De Schrijver 2015-07-20 9:59 ` Peter De Schrijver [not found] ` <20150720095941.GZ6287-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org> 2015-07-20 13:14 ` Thierry Reding 2015-07-20 13:14 ` Thierry Reding 2015-07-21 10:57 ` Peter De Schrijver 2015-07-21 10:57 ` Peter De Schrijver 2015-07-13 12:39 ` [PATCH V3 03/19] memory: tegra: add flush operation for Tegra30 memory clients Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-4-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 10:03 ` Thierry Reding 2015-07-17 10:03 ` Thierry Reding 2015-07-21 8:54 ` Jon Hunter 2015-07-21 8:54 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 04/19] memory: tegra: add flush operation for Tegra114 " Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-5-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 10:05 ` Thierry Reding 2015-07-17 10:05 ` Thierry Reding 2015-07-13 12:39 ` [PATCH V3 05/19] memory: tegra: add flush operation for Tegra124 " Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-17 10:05 ` Thierry Reding 2015-07-17 10:05 ` Thierry Reding 2015-07-13 12:39 ` [PATCH V3 07/19] soc: tegra: pmc: Wait for powergate state to change Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-8-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 10:17 ` Thierry Reding 2015-07-17 10:17 ` Thierry Reding 2015-07-21 9:34 ` Jon Hunter 2015-07-21 9:34 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 08/19] soc: tegra: pmc: Clean-up PMC helper functions Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-17 10:25 ` Thierry Reding 2015-07-17 10:25 ` Thierry Reding 2015-07-21 9:38 ` Jon Hunter 2015-07-21 9:38 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 14/19] Documentation: DT: bindings: Add power domain info for NVIDIA PMC Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-15-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 9:38 ` Thierry Reding 2015-07-17 9:38 ` Thierry Reding 2015-07-13 12:39 ` [PATCH V3 15/19] soc: tegra: pmc: Add generic PM domain support Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-16-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 11:29 ` Thierry Reding 2015-07-17 11:29 ` Thierry Reding 2015-07-13 12:39 ` [PATCH V3 16/19] soc: tegra: pmc: Remove the deprecated powergate APIs Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 18/19] ARM: tegra: add GPU power supply to Jetson TK1 DT Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-19-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 9:28 ` Thierry Reding 2015-07-17 9:28 ` Thierry Reding 2015-07-13 12:39 ` [PATCH V3 19/19] ARM: tegra: select PM_GENERIC_DOMAINS Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-13 13:50 ` Peter De Schrijver 2015-07-13 13:50 ` Peter De Schrijver [not found] ` <20150713135047.GR6287-Rysk9IDjsxmJz7etNGeUX8VPkgjIgRvpAL8bYrjMMd8@public.gmane.org> 2015-07-13 14:03 ` Jon Hunter 2015-07-13 14:03 ` Jon Hunter 2015-07-14 11:59 ` Jon Hunter 2015-07-14 11:59 ` Jon Hunter 2015-07-14 11:59 ` Jon Hunter [not found] ` <55A4F9B6.1070904-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-15 8:17 ` Peter De Schrijver 2015-07-15 8:17 ` Peter De Schrijver 2015-07-13 12:39 ` Jon Hunter [this message] 2015-07-13 12:39 ` [PATCH V3 09/19] soc: tegra: pmc: Prepare for migrating to generic PM domains Jon Hunter 2015-07-13 12:39 ` [PATCH V3 10/19] drm/tegra: dc: Prepare for " Jon Hunter 2015-07-13 12:39 ` Jon Hunter [not found] ` <1436791197-32358-11-git-send-email-jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-17 10:41 ` Thierry Reding 2015-07-17 10:41 ` Thierry Reding 2015-07-28 8:30 ` Jon Hunter 2015-07-28 8:30 ` Jon Hunter [not found] ` <55B73D8C.103-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> 2015-07-28 11:20 ` Thierry Reding 2015-07-28 11:20 ` Thierry Reding [not found] ` <20150728112030.GA10949-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org> 2015-07-28 15:30 ` Jon Hunter 2015-07-28 15:30 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 11/19] PCI: tegra: Add support " Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-17 10:45 ` Thierry Reding 2015-07-17 10:45 ` Thierry Reding 2015-07-28 8:35 ` Jon Hunter 2015-07-28 8:35 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 12/19] ata: ahci_tegra: " Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 13/19] drm/tegra: gr3d: " Jon Hunter 2015-07-13 12:39 ` Jon Hunter 2015-07-13 12:39 ` [PATCH V3 17/19] ARM: tegra: Add PM domain device nodes to Tegra124 DT Jon Hunter 2015-07-13 12:39 ` Jon Hunter
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1436791197-32358-10-git-send-email-jonathanh@nvidia.com \ --to=jonathanh@nvidia.com \ --cc=devicetree@vger.kernel.org \ --cc=gnurou@gmail.com \ --cc=hdegoede@redhat.com \ --cc=khilman@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-tegra@vger.kernel.org \ --cc=p.zabel@pengutronix.de \ --cc=pdeschrijver@nvidia.com \ --cc=pgaikwad@nvidia.com \ --cc=rjw@rjwysocki.net \ --cc=swarren@wwwdotorg.org \ --cc=tbergstrom@nvidia.com \ --cc=thierry.reding@gmail.com \ --cc=tj@kernel.org \ --cc=ulf.hansson@linaro.org \ --cc=vinceh@nvidia.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.