From: Colin Cross <ccross@android.com>
To: linux-tegra@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, konkers@android.com,
olof@lixom.net, Colin Cross <ccross@android.com>,
Russell King <linux@arm.linux.org.uk>,
linux-kernel@vger.kernel.org
Subject: [PATCH 04/21] ARM: tegra: clock: Don't use PLL lock bits
Date: Sun, 13 Feb 2011 01:40:16 -0800 [thread overview]
Message-ID: <1297590033-15035-5-git-send-email-ccross@android.com> (raw)
In-Reply-To: <1297590033-15035-1-git-send-email-ccross@android.com>
The PLL lock bits are not reliable, use per-PLL timeouts instead.
Signed-off-by: Colin Cross <ccross@android.com>
---
arch/arm/mach-tegra/clock.h | 2 +-
arch/arm/mach-tegra/tegra2_clocks.c | 31 +++++++++----------------------
2 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/arch/arm/mach-tegra/clock.h b/arch/arm/mach-tegra/clock.h
index 42f00c0..b76d33d 100644
--- a/arch/arm/mach-tegra/clock.h
+++ b/arch/arm/mach-tegra/clock.h
@@ -53,7 +53,6 @@ struct dvfs_process_id_table {
struct dvfs_table *table;
};
-
struct dvfs {
struct regulator *reg;
struct dvfs_table *table;
@@ -128,6 +127,7 @@ struct clk {
unsigned long vco_min;
unsigned long vco_max;
const struct clk_pll_table *pll_table;
+ int pll_lock_delay;
/* DIV */
u32 div;
diff --git a/arch/arm/mach-tegra/tegra2_clocks.c b/arch/arm/mach-tegra/tegra2_clocks.c
index db27e59..36da2e8 100644
--- a/arch/arm/mach-tegra/tegra2_clocks.c
+++ b/arch/arm/mach-tegra/tegra2_clocks.c
@@ -79,7 +79,6 @@
#define PLL_BASE_ENABLE (1<<30)
#define PLL_BASE_REF_ENABLE (1<<29)
#define PLL_BASE_OVERRIDE (1<<28)
-#define PLL_BASE_LOCK (1<<27)
#define PLL_BASE_DIVP_MASK (0x7<<20)
#define PLL_BASE_DIVP_SHIFT 20
#define PLL_BASE_DIVN_MASK (0x3FF<<8)
@@ -94,7 +93,6 @@
#define PLL_OUT_RESET_DISABLE (1<<0)
#define PLL_MISC(c) (((c)->flags & PLL_ALT_MISC_REG) ? 0x4 : 0xc)
-#define PLL_MISC_LOCK_ENABLE(c) (((c)->flags & PLLU) ? (1<<22) : (1<<18))
#define PLL_MISC_DCCON_SHIFT 20
#define PLL_MISC_CPCON_SHIFT 8
@@ -546,17 +544,7 @@ static struct clk_ops tegra_blink_clk_ops = {
/* PLL Functions */
static int tegra2_pll_clk_wait_for_lock(struct clk *c)
{
- ktime_t before;
-
- before = ktime_get();
-
- while (!(clk_readl(c->reg + PLL_BASE) & PLL_BASE_LOCK)) {
- if (ktime_us_delta(ktime_get(), before) > 5000) {
- pr_err("Timed out waiting for lock bit on pll %s",
- c->name);
- return -1;
- }
- }
+ udelay(c->pll_lock_delay);
return 0;
}
@@ -594,10 +582,6 @@ static int tegra2_pll_clk_enable(struct clk *c)
val |= PLL_BASE_ENABLE;
clk_writel(val, c->reg + PLL_BASE);
- val = clk_readl(c->reg + PLL_MISC(c));
- val |= PLL_MISC_LOCK_ENABLE(c);
- clk_writel(val, c->reg + PLL_MISC(c));
-
tegra2_pll_clk_wait_for_lock(c);
return 0;
@@ -1177,6 +1161,7 @@ static struct clk tegra_pll_s = {
.vco_max = 26000000,
.pll_table = tegra_pll_s_table,
.max_rate = 26000000,
+ .pll_lock_delay = 300,
};
static struct clk_mux_sel tegra_clk_m_sel[] = {
@@ -1213,6 +1198,7 @@ static struct clk tegra_pll_c = {
.vco_max = 1400000000,
.pll_table = tegra_pll_c_table,
.max_rate = 600000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_c_out1 = {
@@ -1251,6 +1237,7 @@ static struct clk tegra_pll_m = {
.vco_max = 1200000000,
.pll_table = tegra_pll_m_table,
.max_rate = 800000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_m_out1 = {
@@ -1289,6 +1276,7 @@ static struct clk tegra_pll_p = {
.vco_max = 1400000000,
.pll_table = tegra_pll_p_table,
.max_rate = 432000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_p_out1 = {
@@ -1354,6 +1342,7 @@ static struct clk tegra_pll_a = {
.vco_max = 1400000000,
.pll_table = tegra_pll_a_table,
.max_rate = 56448000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_a_out0 = {
@@ -1399,6 +1388,7 @@ static struct clk tegra_pll_d = {
.vco_max = 1000000000,
.pll_table = tegra_pll_d_table,
.max_rate = 1000000000,
+ .pll_lock_delay = 1000,
};
static struct clk tegra_pll_d_out0 = {
@@ -1431,6 +1421,7 @@ static struct clk tegra_pll_u = {
.vco_max = 960000000,
.pll_table = tegra_pll_u_table,
.max_rate = 480000000,
+ .pll_lock_delay = 1000,
};
static struct clk_pll_table tegra_pll_x_table[] = {
@@ -1493,6 +1484,7 @@ static struct clk tegra_pll_x = {
.vco_max = 1200000000,
.pll_table = tegra_pll_x_table,
.max_rate = 1000000000,
+ .pll_lock_delay = 300,
};
static struct clk_pll_table tegra_pll_e_table[] = {
@@ -1966,7 +1958,6 @@ static u32 clk_rst_suspend[RST_DEVICES_NUM + CLK_OUT_ENB_NUM +
void tegra_clk_suspend(void)
{
unsigned long off, i;
- u32 pllx_misc;
u32 *ctx = clk_rst_suspend;
*ctx++ = clk_readl(OSC_CTRL) & OSC_CTRL_MASK;
@@ -2007,10 +1998,6 @@ void tegra_clk_suspend(void)
*ctx++ = clk_readl(MISC_CLK_ENB);
*ctx++ = clk_readl(CLK_MASK_ARM);
-
- pllx_misc = clk_readl(tegra_pll_x.reg + PLL_MISC(&tegra_pll_x));
- pllx_misc &= ~PLL_MISC_LOCK_ENABLE(&tegra_pll_x);
- clk_writel(pllx_misc, tegra_pll_x.reg + PLL_MISC(&tegra_pll_x));
}
void tegra_clk_resume(void)
--
1.7.3.1
WARNING: multiple messages have this Message-ID (diff)
From: ccross@android.com (Colin Cross)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 04/21] ARM: tegra: clock: Don't use PLL lock bits
Date: Sun, 13 Feb 2011 01:40:16 -0800 [thread overview]
Message-ID: <1297590033-15035-5-git-send-email-ccross@android.com> (raw)
In-Reply-To: <1297590033-15035-1-git-send-email-ccross@android.com>
The PLL lock bits are not reliable, use per-PLL timeouts instead.
Signed-off-by: Colin Cross <ccross@android.com>
---
arch/arm/mach-tegra/clock.h | 2 +-
arch/arm/mach-tegra/tegra2_clocks.c | 31 +++++++++----------------------
2 files changed, 10 insertions(+), 23 deletions(-)
diff --git a/arch/arm/mach-tegra/clock.h b/arch/arm/mach-tegra/clock.h
index 42f00c0..b76d33d 100644
--- a/arch/arm/mach-tegra/clock.h
+++ b/arch/arm/mach-tegra/clock.h
@@ -53,7 +53,6 @@ struct dvfs_process_id_table {
struct dvfs_table *table;
};
-
struct dvfs {
struct regulator *reg;
struct dvfs_table *table;
@@ -128,6 +127,7 @@ struct clk {
unsigned long vco_min;
unsigned long vco_max;
const struct clk_pll_table *pll_table;
+ int pll_lock_delay;
/* DIV */
u32 div;
diff --git a/arch/arm/mach-tegra/tegra2_clocks.c b/arch/arm/mach-tegra/tegra2_clocks.c
index db27e59..36da2e8 100644
--- a/arch/arm/mach-tegra/tegra2_clocks.c
+++ b/arch/arm/mach-tegra/tegra2_clocks.c
@@ -79,7 +79,6 @@
#define PLL_BASE_ENABLE (1<<30)
#define PLL_BASE_REF_ENABLE (1<<29)
#define PLL_BASE_OVERRIDE (1<<28)
-#define PLL_BASE_LOCK (1<<27)
#define PLL_BASE_DIVP_MASK (0x7<<20)
#define PLL_BASE_DIVP_SHIFT 20
#define PLL_BASE_DIVN_MASK (0x3FF<<8)
@@ -94,7 +93,6 @@
#define PLL_OUT_RESET_DISABLE (1<<0)
#define PLL_MISC(c) (((c)->flags & PLL_ALT_MISC_REG) ? 0x4 : 0xc)
-#define PLL_MISC_LOCK_ENABLE(c) (((c)->flags & PLLU) ? (1<<22) : (1<<18))
#define PLL_MISC_DCCON_SHIFT 20
#define PLL_MISC_CPCON_SHIFT 8
@@ -546,17 +544,7 @@ static struct clk_ops tegra_blink_clk_ops = {
/* PLL Functions */
static int tegra2_pll_clk_wait_for_lock(struct clk *c)
{
- ktime_t before;
-
- before = ktime_get();
-
- while (!(clk_readl(c->reg + PLL_BASE) & PLL_BASE_LOCK)) {
- if (ktime_us_delta(ktime_get(), before) > 5000) {
- pr_err("Timed out waiting for lock bit on pll %s",
- c->name);
- return -1;
- }
- }
+ udelay(c->pll_lock_delay);
return 0;
}
@@ -594,10 +582,6 @@ static int tegra2_pll_clk_enable(struct clk *c)
val |= PLL_BASE_ENABLE;
clk_writel(val, c->reg + PLL_BASE);
- val = clk_readl(c->reg + PLL_MISC(c));
- val |= PLL_MISC_LOCK_ENABLE(c);
- clk_writel(val, c->reg + PLL_MISC(c));
-
tegra2_pll_clk_wait_for_lock(c);
return 0;
@@ -1177,6 +1161,7 @@ static struct clk tegra_pll_s = {
.vco_max = 26000000,
.pll_table = tegra_pll_s_table,
.max_rate = 26000000,
+ .pll_lock_delay = 300,
};
static struct clk_mux_sel tegra_clk_m_sel[] = {
@@ -1213,6 +1198,7 @@ static struct clk tegra_pll_c = {
.vco_max = 1400000000,
.pll_table = tegra_pll_c_table,
.max_rate = 600000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_c_out1 = {
@@ -1251,6 +1237,7 @@ static struct clk tegra_pll_m = {
.vco_max = 1200000000,
.pll_table = tegra_pll_m_table,
.max_rate = 800000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_m_out1 = {
@@ -1289,6 +1276,7 @@ static struct clk tegra_pll_p = {
.vco_max = 1400000000,
.pll_table = tegra_pll_p_table,
.max_rate = 432000000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_p_out1 = {
@@ -1354,6 +1342,7 @@ static struct clk tegra_pll_a = {
.vco_max = 1400000000,
.pll_table = tegra_pll_a_table,
.max_rate = 56448000,
+ .pll_lock_delay = 300,
};
static struct clk tegra_pll_a_out0 = {
@@ -1399,6 +1388,7 @@ static struct clk tegra_pll_d = {
.vco_max = 1000000000,
.pll_table = tegra_pll_d_table,
.max_rate = 1000000000,
+ .pll_lock_delay = 1000,
};
static struct clk tegra_pll_d_out0 = {
@@ -1431,6 +1421,7 @@ static struct clk tegra_pll_u = {
.vco_max = 960000000,
.pll_table = tegra_pll_u_table,
.max_rate = 480000000,
+ .pll_lock_delay = 1000,
};
static struct clk_pll_table tegra_pll_x_table[] = {
@@ -1493,6 +1484,7 @@ static struct clk tegra_pll_x = {
.vco_max = 1200000000,
.pll_table = tegra_pll_x_table,
.max_rate = 1000000000,
+ .pll_lock_delay = 300,
};
static struct clk_pll_table tegra_pll_e_table[] = {
@@ -1966,7 +1958,6 @@ static u32 clk_rst_suspend[RST_DEVICES_NUM + CLK_OUT_ENB_NUM +
void tegra_clk_suspend(void)
{
unsigned long off, i;
- u32 pllx_misc;
u32 *ctx = clk_rst_suspend;
*ctx++ = clk_readl(OSC_CTRL) & OSC_CTRL_MASK;
@@ -2007,10 +1998,6 @@ void tegra_clk_suspend(void)
*ctx++ = clk_readl(MISC_CLK_ENB);
*ctx++ = clk_readl(CLK_MASK_ARM);
-
- pllx_misc = clk_readl(tegra_pll_x.reg + PLL_MISC(&tegra_pll_x));
- pllx_misc &= ~PLL_MISC_LOCK_ENABLE(&tegra_pll_x);
- clk_writel(pllx_misc, tegra_pll_x.reg + PLL_MISC(&tegra_pll_x));
}
void tegra_clk_resume(void)
--
1.7.3.1
next prev parent reply other threads:[~2011-02-13 9:40 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-13 9:40 [PATCH 00/21] Tegra clock updates for 2.6.39 Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross [this message]
2011-02-13 9:40 ` [PATCH 04/21] ARM: tegra: clock: Don't use PLL lock bits Colin Cross
[not found] ` <1297590033-15035-1-git-send-email-ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>
2011-02-13 9:40 ` [PATCH 01/21] ARM: tegra: clock: enable clk reset for non-peripheral clocks Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 02/21] ARM: tegra: clock: Don't BUG on changing an enabled PLL Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 03/21] ARM: tegra: clock: Drop debugging Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 05/21] ARM: tegra: clock: Disable clocks left on by bootloader Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 06/21] ARM: tegra: clock: Initialize clocks that have no enable Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 07/21] ARM: tegra: clock: Drop CPU dvfs Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 08/21] ARM: tegra: clock: Rearrange static clock tables Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 09/21] ARM: tegra: clock: Move unshared clk struct members into union Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 10/21] ARM: tegra: clock: Convert global lock to a lock per clock Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 11/21] ARM: tegra: cpufreq: Take an extra reference to pllx Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 12/21] ARM: tegra: clock: Add shared bus clock type Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
[not found] ` <1297590033-15035-13-git-send-email-ccross-z5hGa2qSFaRBDgjK7y7TUQ@public.gmane.org>
2011-02-16 20:34 ` Stephen Boyd
2011-02-16 20:34 ` Stephen Boyd
2011-02-16 20:34 ` Stephen Boyd
[not found] ` <4D5C34E0.5000209-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2011-02-16 21:01 ` Colin Cross
2011-02-16 21:01 ` Colin Cross
2011-02-16 21:01 ` Colin Cross
[not found] ` <AANLkTi=knKY65xaOT85jFidy6Be8K8RT0L1XtGqq_v2V-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-02-16 21:51 ` Stephen Boyd
2011-02-16 21:51 ` Stephen Boyd
2011-02-16 21:51 ` Stephen Boyd
[not found] ` <4D5C46D7.1040903-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2011-02-16 22:03 ` Colin Cross
2011-02-16 22:03 ` Colin Cross
2011-02-16 22:03 ` Colin Cross
2011-02-13 9:40 ` [PATCH 13/21] ARM: tegra: clock: Remove unnecessary uses of #ifdef CONFIG_DEBUG_FS Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 14/21] ARM: tegra: clock: Refcount periph clock enables Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 16/21] ARM: tegra: Add external memory controller driver Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 18/21] ARM: tegra: cpufreq: Adjust memory frequency with cpu frequency Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 19/21] ARM: tegra: clock: Add function to set SDMMC tap delay Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 20/21] ARM: tegra: clock: Fix clock issues in suspend Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 15/21] ARM: tegra: clock: Round rate before setting rate Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 17/21] ARM: tegra: clocks: Add emc scaling Colin Cross
2011-02-13 9:40 ` Colin Cross
2011-02-13 9:40 ` [PATCH 21/21] ARM: tegra: clock: Miscellaneous clock updates Colin Cross
2011-02-13 9:40 ` Colin Cross
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=1297590033-15035-5-git-send-email-ccross@android.com \
--to=ccross@android.com \
--cc=konkers@android.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=olof@lixom.net \
/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 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.