[PATCH 1/3] [ARM] tegra: add PCI Express clocks
Colin Cross
ccross at google.com
Thu Sep 16 17:27:47 EDT 2010
On Thu, Sep 16, 2010 at 9:53 AM, Mike Rapoport <mike at compulab.co.il> wrote:
> Signed-off-by: Mike Rapoport <mike at compulab.co.il>
> ---
> arch/arm/mach-tegra/tegra2_clocks.c | 76 +++++++++++++++++++++++++++++++++-
> 1 files changed, 73 insertions(+), 3 deletions(-)
<snip>
> -static int tegra2_pll_clk_wait_for_lock(struct clk *c)
> +static int tegra2_pll_clk_wait_for_bit_set(struct clk *c, int bit)
> {
> ktime_t before;
>
> before = ktime_get();
> - while (!(clk_readl(c->reg + PLL_BASE) & PLL_BASE_LOCK)) {
> + while (!(clk_readl(c->reg + PLL_BASE) & bit)) {
> if (ktime_us_delta(ktime_get(), before) > 5000) {
> pr_err("Timed out waiting for lock bit on pll %s",
> c->name);
> @@ -414,7 +416,7 @@ static int tegra2_pll_clk_enable(struct clk *c)
> val |= PLL_MISC_LOCK_ENABLE;
> clk_writel(val, c->reg + PLL_MISC(c));
>
> - tegra2_pll_clk_wait_for_lock(c);
> + tegra2_pll_clk_wait_for_bit_set(c, PLL_BASE_LOCK);
>
> return 0;
> }
I've been told by Nvidia that the pll lock bits are not reliable, and
will be removing uses of tegra2_pll_clk_wait_for_lock and replacing
them with delays selected by each pll. Can you confirm with Nvidia
that PLLE_MISC_READY works?
<snip>
> +static struct clk_ops tegra_pcie_clk_ops = {
> + .enable = tegra2_periph_clk_enable,
> + .disable = tegra2_periph_clk_disable,
> +};
Why is this needed? Won't the regular periph ops work?
<snip>
> +static struct clk tegra_clk_pex = {
> + .name = "pex",
> + .flags = PERIPH_MANUAL_RESET,
> + .ops = &tegra_pcie_clk_ops,
> + .clk_num = 70,
> +};
> +
> +static struct clk tegra_clk_afi = {
> + .name = "afi",
> + .flags = PERIPH_MANUAL_RESET,
> + .ops = &tegra_pcie_clk_ops,
> + .clk_num = 72,
> +};
> +
> +/* the pcie_xclk is required for reset of PCIE subsystem */
> +static struct clk tegra_clk_pcie_xclk = {
> + .name = "pcie_xclk",
> + .clk_num = 74,
> +};
These should probably all be defined in the CLK_PERIPH table.
More information about the linux-arm-kernel
mailing list