From: Sowjanya Komatineni <skomatineni@nvidia.com>
To: <skomatineni@nvidia.com>, <thierry.reding@gmail.com>,
<jonathanh@nvidia.com>, <digetx@gmail.com>,
<mperttunen@nvidia.com>, <gregkh@linuxfoundation.org>,
<sboyd@kernel.org>, <tglx@linutronix.de>, <robh+dt@kernel.org>,
<mark.rutland@arm.com>
Cc: <allison@lohutok.net>, <pdeschrijver@nvidia.com>,
<pgaikwad@nvidia.com>, <mturquette@baylibre.com>,
<horms+renesas@verge.net.au>, <Jisheng.Zhang@synaptics.com>,
<krzk@kernel.org>, <arnd@arndb.de>, <spujar@nvidia.com>,
<josephl@nvidia.com>, <vidyas@nvidia.com>,
<daniel.lezcano@linaro.org>, <mmaddireddy@nvidia.com>,
<markz@nvidia.com>, <devicetree@vger.kernel.org>,
<linux-clk@vger.kernel.org>, <linux-tegra@vger.kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: [PATCH v2 04/11] soc: pmc: Add blink output clock registration to Tegra PMC
Date: Tue, 26 Nov 2019 20:59:26 -0800 [thread overview]
Message-ID: <1574830773-14892-5-git-send-email-skomatineni@nvidia.com> (raw)
In-Reply-To: <1574830773-14892-1-git-send-email-skomatineni@nvidia.com>
Tegra PMC has blink control to output 32 Khz clock out to Tegra
blink pin. Blink pad DPD state and enable controls are part of
Tegra PMC register space.
Currently Tegra clock driver registers blink control by passing
PMC address and register offset to clk_register_gate which performs
direct PMC access during clk_ops and with this when PMC is in secure
mode, any access from non-secure world does not go through.
This patch adds blink control registration to the Tegra PMC driver
using PMC specific clock gate operations that use tegra_pmc_readl
and tegra_pmc_writel to support both secure mode and non-secure
mode PMC register access.
Signed-off-by: Sowjanya Komatineni <skomatineni@nvidia.com>
---
drivers/soc/tegra/pmc.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index a353f6d0a832..1cfb7797dbd5 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -61,12 +61,15 @@
#define PMC_CNTRL_SYSCLK_OE BIT(11) /* system clock enable */
#define PMC_CNTRL_SYSCLK_POLARITY BIT(10) /* sys clk polarity */
#define PMC_CNTRL_PWRREQ_POLARITY BIT(8)
+#define PMC_CNTRL_BLINK_EN BIT(7)
#define PMC_CNTRL_MAIN_RST BIT(4)
#define PMC_WAKE_MASK 0x0c
#define PMC_WAKE_LEVEL 0x10
#define PMC_WAKE_STATUS 0x14
#define PMC_SW_WAKE_STATUS 0x18
+#define PMC_DPD_PADS_ORIDE 0x1c
+#define PMC_DPD_PADS_ORIDE_BLINK BIT(20)
#define DPD_SAMPLE 0x020
#define DPD_SAMPLE_ENABLE BIT(0)
@@ -79,6 +82,7 @@
#define PWRGATE_STATUS 0x38
+#define TEGRA210_PMC_BLINK_TIMER 0x40
#define PMC_IMPL_E_33V_PWR 0x40
#define PMC_PWR_DET 0x48
@@ -347,6 +351,8 @@ struct tegra_pmc_soc {
struct pmc_clk_init_data *pmc_clks_data;
unsigned int num_pmc_clks;
+ bool has_blink_output;
+ bool blink_init_state;
};
static const char * const tegra186_reset_sources[] = {
@@ -2396,6 +2402,9 @@ static void tegra_pmc_clock_register(struct tegra_pmc *pmc,
/* each pmc clock output has a mux and a gate */
num_clks = pmc->soc->num_pmc_clks * 2;
+ if (pmc->soc->has_blink_output)
+ num_clks += 1;
+
if (!num_clks)
return;
@@ -2468,6 +2477,34 @@ static void tegra_pmc_clock_register(struct tegra_pmc *pmc,
}
}
+ if (pmc->soc->has_blink_output) {
+ tegra_pmc_writel(pmc, 0x0, TEGRA210_PMC_BLINK_TIMER);
+ clk = tegra_pmc_clk_gate_register("blink_override",
+ "clk_32k", 0,
+ PMC_DPD_PADS_ORIDE,
+ PMC_DPD_PADS_ORIDE_BLINK);
+ if (IS_ERR(clk))
+ goto free_clks;
+
+ clk = tegra_pmc_clk_gate_register("blink",
+ "blink_override", 0,
+ PMC_CNTRL,
+ PMC_CNTRL_BLINK_EN);
+ if (IS_ERR(clk))
+ goto free_clks;
+
+ clk_data->clks[TEGRA_PMC_CLK_BLINK] = clk;
+ clk_register_clkdev(clk, "blink", NULL);
+
+ if (pmc->soc->blink_init_state) {
+ if (clk_prepare_enable(clk)) {
+ pr_err("%s: Failed to enable %s\n", __func__,
+ __clk_get_name(clk));
+ WARN_ON(1);
+ }
+ }
+ }
+
of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
return;
@@ -2740,6 +2777,8 @@ static const struct tegra_pmc_soc tegra20_pmc_soc = {
.num_reset_levels = 0,
.pmc_clks_data = NULL,
.num_pmc_clks = 0,
+ .has_blink_output = true,
+ .blink_init_state = true,
};
static const char * const tegra30_powergates[] = {
@@ -2789,6 +2828,8 @@ static const struct tegra_pmc_soc tegra30_pmc_soc = {
.num_reset_levels = 0,
.pmc_clks_data = tegra_pmc_clks_data,
.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
+ .has_blink_output = true,
+ .blink_init_state = true,
};
static const char * const tegra114_powergates[] = {
@@ -2842,6 +2883,8 @@ static const struct tegra_pmc_soc tegra114_pmc_soc = {
.num_reset_levels = 0,
.pmc_clks_data = tegra_pmc_clks_data,
.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
+ .has_blink_output = true,
+ .blink_init_state = false,
};
static const char * const tegra124_powergates[] = {
@@ -2955,6 +2998,8 @@ static const struct tegra_pmc_soc tegra124_pmc_soc = {
.num_reset_levels = 0,
.pmc_clks_data = tegra_pmc_clks_data,
.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
+ .has_blink_output = true,
+ .blink_init_state = false,
};
static const char * const tegra210_powergates[] = {
@@ -3071,6 +3116,8 @@ static const struct tegra_pmc_soc tegra210_pmc_soc = {
.wake_events = tegra210_wake_events,
.pmc_clks_data = tegra_pmc_clks_data,
.num_pmc_clks = ARRAY_SIZE(tegra_pmc_clks_data),
+ .has_blink_output = true,
+ .blink_init_state = false,
};
#define TEGRA186_IO_PAD_TABLE(_pad) \
@@ -3202,6 +3249,7 @@ static const struct tegra_pmc_soc tegra186_pmc_soc = {
.wake_events = tegra186_wake_events,
.pmc_clks_data = NULL,
.num_pmc_clks = 0,
+ .has_blink_output = false,
};
static const struct tegra_io_pad_soc tegra194_io_pads[] = {
@@ -3321,6 +3369,7 @@ static const struct tegra_pmc_soc tegra194_pmc_soc = {
.wake_events = tegra194_wake_events,
.pmc_clks_data = NULL,
.num_pmc_clks = 0,
+ .has_blink_output = false,
};
static const struct of_device_id tegra_pmc_match[] = {
--
2.7.4
next prev parent reply other threads:[~2019-11-27 4:59 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-27 4:59 [PATCH v2 00/11] Move PMC clocks into Tegra PMC driver Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 01/11] dt-bindings: soc: tegra-pmc: Add Tegra PMC clock ids Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 02/11] soc: tegra: Add Tegra PMC clock registrations into PMC driver Sowjanya Komatineni
2019-11-27 14:32 ` Dmitry Osipenko
2019-11-27 14:32 ` Dmitry Osipenko
2019-11-27 15:14 ` Dmitry Osipenko
2019-11-27 22:57 ` Sowjanya Komatineni
2019-11-28 13:25 ` Dmitry Osipenko
2019-12-02 20:09 ` Sowjanya Komatineni
2019-12-02 21:50 ` Dmitry Osipenko
2019-12-02 22:58 ` Sowjanya Komatineni
2019-12-02 23:10 ` Sowjanya Komatineni
2019-12-02 23:14 ` Sowjanya Komatineni
2019-12-03 0:07 ` Sowjanya Komatineni
2019-12-03 16:45 ` Sowjanya Komatineni
2019-12-04 13:39 ` Dmitry Osipenko
2019-12-04 16:02 ` Sowjanya Komatineni
2019-12-04 20:08 ` Sowjanya Komatineni
2019-12-04 20:28 ` Dmitry Osipenko
2019-12-04 20:33 ` Sowjanya Komatineni
2019-12-04 21:12 ` Dmitry Osipenko
2019-12-04 21:26 ` Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 03/11] dt-bindings: soc: tegra-pmc: Add id for Tegra PMC blink control Sowjanya Komatineni
2019-11-27 4:59 ` Sowjanya Komatineni [this message]
2019-11-28 13:07 ` [PATCH v2 04/11] soc: pmc: Add blink output clock registration to Tegra PMC Dmitry Osipenko
2019-11-27 4:59 ` [PATCH v2 05/11] clk: tegra: Remove tegra_pmc_clk_init along with clk ids Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 06/11] dt-bindings: clock: tegra: Remove pmc clock ids from clock dt-bindings Sowjanya Komatineni
2019-11-27 14:32 ` Dmitry Osipenko
2019-11-27 17:06 ` Sowjanya Komatineni
2019-11-28 12:18 ` Thierry Reding
2019-11-28 13:07 ` Dmitry Osipenko
2019-11-27 4:59 ` [PATCH v2 07/11] arm: tegra: Add clock-cells property to Tegra PMC Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 08/11] arm64: tegra: Add clock-cells property to Tegra pmc Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 09/11] dt-bindings: Add Tegra PMC clock configuration bindings Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 10/11] arm64: tegra: smaug: Change clk_out_2 provider from tegra_car to pmc Sowjanya Komatineni
2019-11-27 4:59 ` [PATCH v2 11/11] ASoC: nau8825: change Tegra " Sowjanya Komatineni
2019-11-27 14:31 ` [PATCH v2 00/11] Move PMC clocks into Tegra PMC driver Dmitry Osipenko
2019-11-27 17:02 ` Sowjanya Komatineni
2019-11-27 21:38 ` Sowjanya Komatineni
2019-11-28 13:06 ` Dmitry Osipenko
2019-12-02 17:09 ` Dmitry Osipenko
2019-12-02 18:47 ` Sowjanya Komatineni
2019-11-28 12:26 ` Thierry Reding
2019-11-28 13:10 ` Dmitry Osipenko
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=1574830773-14892-5-git-send-email-skomatineni@nvidia.com \
--to=skomatineni@nvidia.com \
--cc=Jisheng.Zhang@synaptics.com \
--cc=allison@lohutok.net \
--cc=arnd@arndb.de \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=digetx@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=horms+renesas@verge.net.au \
--cc=jonathanh@nvidia.com \
--cc=josephl@nvidia.com \
--cc=krzk@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=markz@nvidia.com \
--cc=mmaddireddy@nvidia.com \
--cc=mperttunen@nvidia.com \
--cc=mturquette@baylibre.com \
--cc=pdeschrijver@nvidia.com \
--cc=pgaikwad@nvidia.com \
--cc=robh+dt@kernel.org \
--cc=sboyd@kernel.org \
--cc=spujar@nvidia.com \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=vidyas@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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).