msm: qdss: migrate to RPM based qdss clk management

CRs-Fixed: 312547
Change-Id: I31625b10a93135a59f56af688d55511a4cd6995e
Signed-off-by: Pratik Patel <pratikp@codeaurora.org>
diff --git a/arch/arm/mach-msm/qdss-ptm.c b/arch/arm/mach-msm/qdss-ptm.c
index ce61b1d..00d46ee 100644
--- a/arch/arm/mach-msm/qdss-ptm.c
+++ b/arch/arm/mach-msm/qdss-ptm.c
@@ -26,11 +26,16 @@
 #include <linux/smp.h>
 #include <linux/wakelock.h>
 #include <linux/pm_qos_params.h>
-#include <linux/clk.h>
 #include <asm/atomic.h>
+#include <mach/rpm.h>
 
+#include "rpm_resources.h"
 #include "qdss.h"
 
+#define QDSS_CLK_ON_DBG			0x1
+#define QDSS_CLK_ON_HSDBG		0x2
+#define QDSS_CLK_OFF			0x0
+
 #define ptm_writel(ptm, cpu, val, off)	\
 			__raw_writel((val), ptm.base + (SZ_4K * cpu) + off)
 #define ptm_readl(ptm, cpu, off)	\
@@ -179,61 +184,37 @@
 	struct pm_qos_request_list	qos_req;
 	atomic_t			in_use;
 	struct device			*dev;
-	struct clk			*qdss_at_clk;
-	struct clk			*qdss_pclkdbg_clk;
-	struct clk			*qdss_pclk;
-	struct clk			*qdss_traceclkin_clk;
-	struct clk			*qdss_tsctr_clk;
 };
 
 static struct ptm_ctx ptm;
 
 
-static int ptm_clock_enable(void)
+int qdss_clk_enable(void)
 {
 	int ret;
 
-	ret = clk_enable(ptm.qdss_at_clk);
-	if (WARN(ret, "qdss_at_clk not enabled (%d)\n", ret))
-		goto err;
-
-	ret = clk_enable(ptm.qdss_pclkdbg_clk);
-	if (WARN(ret, "qdss_pclkdbg_clk not enabled (%d)\n", ret))
-		goto err_pclkdbg;
-
-	ret = clk_enable(ptm.qdss_pclk);
-	if (WARN(ret, "qdss_pclk not enabled (%d)\n", ret))
-		goto err_pclk;
-
-	ret = clk_enable(ptm.qdss_traceclkin_clk);
-	if (WARN(ret, "qdss_traceclkin_clk not enabled (%d)\n", ret))
-		goto err_traceclkin;
-
-	ret = clk_enable(ptm.qdss_tsctr_clk);
-	if (WARN(ret, "qdss_tsctr_clk not enabled (%d)\n", ret))
-		goto err_tsctr;
+	struct msm_rpm_iv_pair iv;
+	iv.id = MSM_RPM_ID_QDSS_CLK;
+	iv.value = QDSS_CLK_ON_DBG;
+	ret = msm_rpmrs_set(MSM_RPM_CTX_SET_0, &iv, 1);
+	if (WARN(ret, "qdss clks not enabled (%d)\n", ret))
+		goto err_clk;
 
 	return 0;
 
-err_tsctr:
-	clk_disable(ptm.qdss_traceclkin_clk);
-err_traceclkin:
-	clk_disable(ptm.qdss_pclk);
-err_pclk:
-	clk_disable(ptm.qdss_pclkdbg_clk);
-err_pclkdbg:
-	clk_disable(ptm.qdss_at_clk);
-err:
+err_clk:
 	return ret;
 }
 
-static void ptm_clock_disable(void)
+void qdss_clk_disable(void)
 {
-	clk_disable(ptm.qdss_tsctr_clk);
-	clk_disable(ptm.qdss_traceclkin_clk);
-	clk_disable(ptm.qdss_pclk);
-	clk_disable(ptm.qdss_pclkdbg_clk);
-	clk_disable(ptm.qdss_at_clk);
+	int ret;
+	struct msm_rpm_iv_pair iv;
+
+	iv.id = MSM_RPM_ID_QDSS_CLK;
+	iv.value = QDSS_CLK_OFF;
+	ret = msm_rpmrs_set(MSM_RPM_CTX_SET_0, &iv, 1);
+	WARN(ret, "qdss clks not disabled (%d)\n", ret);
 }
 
 /* ETM clock is derived from the processor clock and gets enabled on a
@@ -357,7 +338,7 @@
 {
 	int ret, cpu;
 
-	ret = ptm_clock_enable();
+	ret = qdss_clk_enable();
 	if (ret)
 		return ret;
 
@@ -425,7 +406,7 @@
 	pm_qos_update_request(&ptm.qos_req, PM_QOS_DEFAULT_VALUE);
 	wake_unlock(&ptm.wake_lock);
 
-	ptm_clock_disable();
+	qdss_clk_disable();
 }
 
 static int ptm_open(struct inode *inode, struct file *file)
@@ -690,61 +671,9 @@
 	if (ret)
 		goto err_misc;
 
-	ptm.qdss_at_clk = clk_get(NULL, "qdss_at_clk");
-	if (IS_ERR(ptm.qdss_at_clk)) {
-		ret = PTR_ERR(ptm.qdss_at_clk);
-		goto err_at;
-	}
-	ret = clk_set_rate(ptm.qdss_at_clk, 300000000);
+	ret = qdss_clk_enable();
 	if (ret)
-		goto err_at_rate;
-	ret = clk_enable(ptm.qdss_at_clk);
-	if (ret)
-		goto err_at_enable;
-
-	ptm.qdss_pclkdbg_clk = clk_get(NULL, "qdss_pclkdbg_clk");
-	if (IS_ERR(ptm.qdss_pclkdbg_clk)) {
-		ret = PTR_ERR(ptm.qdss_pclkdbg_clk);
-		goto err_pclkdbg;
-	}
-	ret = clk_enable(ptm.qdss_pclkdbg_clk);
-	if (ret)
-		goto err_pclkdbg_enable;
-
-	ptm.qdss_pclk = clk_get(NULL, "qdss_pclk");
-	if (IS_ERR(ptm.qdss_pclk)) {
-		ret = PTR_ERR(ptm.qdss_pclk);
-		goto err_pclk;
-	}
-
-	ret = clk_enable(ptm.qdss_pclk);
-	if (ret)
-		goto err_pclk_enable;
-
-	ptm.qdss_traceclkin_clk = clk_get(NULL, "qdss_traceclkin_clk");
-	if (IS_ERR(ptm.qdss_traceclkin_clk)) {
-		ret = PTR_ERR(ptm.qdss_traceclkin_clk);
-		goto err_traceclkin;
-	}
-	ret = clk_set_rate(ptm.qdss_traceclkin_clk, 300000000);
-	if (ret)
-		goto err_traceclkin_rate;
-	ret = clk_enable(ptm.qdss_traceclkin_clk);
-	if (ret)
-		goto err_traceclkin_enable;
-
-	ptm.qdss_tsctr_clk = clk_get(NULL, "qdss_tsctr_clk");
-	if (IS_ERR(ptm.qdss_tsctr_clk)) {
-		ret = PTR_ERR(ptm.qdss_tsctr_clk);
-		goto err_tsctr;
-	}
-	ret = clk_set_rate(ptm.qdss_tsctr_clk, 400000000);
-	if (ret)
-		goto err_tsctr_rate;
-
-	ret = clk_enable(ptm.qdss_tsctr_clk);
-	if (ret)
-		goto err_tsctr_enable;
+		goto err_clk;
 
 	ptm_cfg_ro_init();
 	ptm_cfg_rw_init();
@@ -756,11 +685,7 @@
 						PM_QOS_DEFAULT_VALUE);
 	atomic_set(&ptm.in_use, 0);
 
-	clk_disable(ptm.qdss_tsctr_clk);
-	clk_disable(ptm.qdss_traceclkin_clk);
-	clk_disable(ptm.qdss_pclk);
-	clk_disable(ptm.qdss_pclkdbg_clk);
-	clk_disable(ptm.qdss_at_clk);
+	qdss_clk_disable();
 
 	dev_info(ptm.dev, "PTM intialized.\n");
 
@@ -773,28 +698,7 @@
 
 	return 0;
 
-err_tsctr_enable:
-err_tsctr_rate:
-	clk_put(ptm.qdss_tsctr_clk);
-err_tsctr:
-	clk_disable(ptm.qdss_traceclkin_clk);
-err_traceclkin_enable:
-err_traceclkin_rate:
-	clk_put(ptm.qdss_traceclkin_clk);
-err_traceclkin:
-	clk_disable(ptm.qdss_pclk);
-err_pclk_enable:
-	clk_put(ptm.qdss_pclk);
-err_pclk:
-	clk_disable(ptm.qdss_pclkdbg_clk);
-err_pclkdbg_enable:
-	clk_put(ptm.qdss_pclkdbg_clk);
-err_pclkdbg:
-	clk_disable(ptm.qdss_at_clk);
-err_at_enable:
-err_at_rate:
-	clk_put(ptm.qdss_at_clk);
-err_at:
+err_clk:
 	misc_deregister(&ptm_misc);
 err_misc:
 	iounmap(ptm.base);
@@ -809,11 +713,6 @@
 		ptm_trace_disable();
 	pm_qos_remove_request(&ptm.qos_req);
 	wake_lock_destroy(&ptm.wake_lock);
-	clk_put(ptm.qdss_tsctr_clk);
-	clk_put(ptm.qdss_traceclkin_clk);
-	clk_put(ptm.qdss_pclk);
-	clk_put(ptm.qdss_pclkdbg_clk);
-	clk_put(ptm.qdss_at_clk);
 	misc_deregister(&ptm_misc);
 	iounmap(ptm.base);