tegra: pcie: Remove unnecessary clock operations
Manoj Chourasia [Tue, 22 Nov 2011 18:11:37 +0000 (23:11 +0530)]
All these clock operations should be handled by
powergate operations.

bug 840051

Reviewed-on: http://git-master/r/66177
(cherry picked from commit 1ad8fe3e184db04063275c837e240827bda009e9)

Change-Id: I0159c6c1f64932b22b25d31d4bb1ff9d41385879
Reviewed-on: http://git-master/r/86126
Tested-by: Jay Agarwal <jagarwal@nvidia.com>
Reviewed-by: Manoj Chourasia <mchourasia@nvidia.com>
Reviewed-by: Krishna Thota <kthota@nvidia.com>
Reviewed-by: Mayuresh Kulkarni <mkulkarni@nvidia.com>
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>

Rebase-Id: R51086a12e0d30b6aa707d18072676762fa6fd127

arch/arm/mach-tegra/pcie.c
arch/arm/mach-tegra/powergate.c

index 7f69db9..f9b2d97 100644 (file)
 #define  PADS_PLL_CTL_TXCLKREF_DIV5                            (1 << 20)
 
 /* PMC access is required for PCIE xclk (un)clamping */
-#define PMC_SCRATCH42                                                  0x144
+#define PMC_SCRATCH42                                          0x144
 #define PMC_SCRATCH42_PCX_CLAMP                                        (1 << 0)
 
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
@@ -322,8 +322,6 @@ struct tegra_pcie_info {
        struct regulator        *regulator_avdd_plle;
        struct clk              *pcie_xclk;
        struct clk              *pll_e;
-       struct clk              *clk_cml0;
-       struct clk              *clk_tera_pcie_cml;
        struct tegra_pci_platform_data *plat_data;
 };
 
@@ -789,18 +787,6 @@ static int tegra_pcie_enable_controller(void)
        return 0;
 }
 
-static void tegra_pcie_xclk_clamp(bool clamp)
-{
-       u32 reg;
-
-       reg = pmc_readl(PMC_SCRATCH42) & ~PMC_SCRATCH42_PCX_CLAMP;
-
-       if (clamp)
-               reg |= PMC_SCRATCH42_PCX_CLAMP;
-
-       pmc_writel(reg, PMC_SCRATCH42);
-}
-
 static int tegra_pci_enable_regulators(void)
 {
        if (tegra_pcie.power_rails_enabled)
@@ -885,10 +871,6 @@ static int tegra_pcie_power_on(void)
        err = tegra_unpowergate_partition_with_clk_on(TEGRA_POWERGATE_PCIE);
        if (err)
                goto err_exit;
-       if (tegra_pcie.clk_cml0)
-               clk_enable(tegra_pcie.clk_cml0);
-       if (tegra_pcie.clk_tera_pcie_cml)
-               clk_enable(tegra_pcie.clk_tera_pcie_cml);
        if (tegra_pcie.pll_e)
                clk_enable(tegra_pcie.pll_e);
 
@@ -902,15 +884,13 @@ static int tegra_pcie_power_off(void)
        int err = 0;
        if (tegra_pcie.pcie_power_enabled == 0)
                return 0;
+       if (tegra_pcie.pll_e)
+               clk_disable(tegra_pcie.pll_e);
+
        err = tegra_powergate_partition_with_clk_off(TEGRA_POWERGATE_PCIE);
        if (err)
                goto err_exit;
-       if (tegra_pcie.clk_cml0)
-               clk_disable(tegra_pcie.clk_cml0);
-       if (tegra_pcie.clk_tera_pcie_cml)
-               clk_disable(tegra_pcie.clk_tera_pcie_cml);
-       if (tegra_pcie.pll_e)
-               clk_disable(tegra_pcie.pll_e);
+
        err = tegra_pci_disable_regulators();
 
        tegra_pcie.pcie_power_enabled = 0;
@@ -933,7 +913,7 @@ static int tegra_pcie_power_regate(void)
 static int tegra_pcie_clocks_get(void)
 {
        /* reset the PCIEXCLK */
-       tegra_pcie.pcie_xclk = clk_get(NULL, "pciex");
+       tegra_pcie.pcie_xclk = clk_get_sys("tegra_pcie", "pciex");
        if (IS_ERR_OR_NULL(tegra_pcie.pcie_xclk)) {
                pr_err("%s: unable to get PCIE Xclock\n", __func__);
                goto error_exit;
@@ -943,29 +923,8 @@ static int tegra_pcie_clocks_get(void)
                pr_err("%s: unable to get PLLE\n", __func__);
                goto error_exit;
        }
-#ifndef CONFIG_ARCH_TEGRA_2x_SOC
-
-       tegra_pcie.clk_cml0 = clk_get_sys(NULL, "cml0");
-       if (IS_ERR_OR_NULL(tegra_pcie.clk_cml0)) {
-               pr_err("%s: unable to get cml0\n", __func__);
-               goto error_exit;
-       }
-
-       tegra_pcie.clk_tera_pcie_cml = clk_get_sys("tegra_pcie", "cml");
-       if (IS_ERR_OR_NULL(tegra_pcie.clk_tera_pcie_cml)) {
-               pr_err("%s: unable to get cml0\n", __func__);
-               goto error_exit;
-       }
-       clk_enable(tegra_pcie.clk_cml0);
-       clk_enable(tegra_pcie.clk_tera_pcie_cml);
-#endif
-
        return 0;
 error_exit:
-       if (tegra_pcie.clk_cml0)
-               clk_put(tegra_pcie.clk_cml0);
-       if (tegra_pcie.clk_tera_pcie_cml)
-               clk_put(tegra_pcie.clk_tera_pcie_cml);
        if (tegra_pcie.pcie_xclk)
                clk_put(tegra_pcie.pcie_xclk);
        if (tegra_pcie.pll_e)
@@ -975,10 +934,6 @@ error_exit:
 
 static void tegra_pcie_clocks_put(void)
 {
-#ifndef CONFIG_ARCH_TEGRA_2x_SOC
-       clk_put(tegra_pcie.clk_cml0);
-       clk_put(tegra_pcie.clk_tera_pcie_cml);
-#endif
        clk_put(tegra_pcie.pll_e);
        clk_put(tegra_pcie.pcie_xclk);
 }
@@ -987,12 +942,12 @@ static int __init tegra_pcie_get_resources(void)
 {
        int err;
        tegra_pcie.power_rails_enabled = 0;
-       tegra_unpowergate_partition(TEGRA_POWERGATE_PCIE);
        err = tegra_pci_enable_regulators();
        if (err) {
                pr_err("PCIE: failed to enable power rails %d\n", err);
                goto err_pwr_on_rail;
        }
+       tegra_unpowergate_partition(TEGRA_POWERGATE_PCIE);
 
        err = tegra_pcie_clocks_get();
        if (err) {
index 17b51ca..572d5e7 100644 (file)
@@ -134,6 +134,9 @@ static struct powergate_partition powergate_partition_info[] = {
                                                {MC_CLIENT_AFI, MC_CLIENT_LAST},
                                                {{"afi", CLK_AND_RST},
                                                {"pcie", CLK_AND_RST},
+#ifndef CONFIG_ARCH_TEGRA_2x_SOC
+                                               {"cml0", CLK_ONLY},
+#endif
                                                {"pciex", RST_ONLY} }, },
        [TEGRA_POWERGATE_VDEC]  = { "vde",
                                                {MC_CLIENT_VDE, MC_CLIENT_LAST},