msm: pil: Extract secure PIL operations

Move secure pil code into one file so we stop duplicating it in
each peripheral-reset-$(ARCH) file.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/peripheral-reset.c b/arch/arm/mach-msm/peripheral-reset.c
index 7089772..d19f1b2 100644
--- a/arch/arm/mach-msm/peripheral-reset.c
+++ b/arch/arm/mach-msm/peripheral-reset.c
@@ -26,6 +26,7 @@
 #include <mach/msm_xo.h>
 
 #include "peripheral-loader.h"
+#include "scm-pas.h"
 
 #define PROXY_VOTE_TIMEOUT		10000
 
@@ -63,73 +64,14 @@
 #define PPSS_PROC_CLK_CTL		(MSM_CLK_CTL_BASE + 0x2588)
 #define CLK_HALT_DFAB_STATE		(MSM_CLK_CTL_BASE + 0x2FC8)
 
-#define PAS_MODEM	0
-#define PAS_Q6		1
-#define PAS_DSPS	2
-#define PAS_PLAYREADY	3
-
-#define PAS_INIT_IMAGE_CMD	1
-#define PAS_MEM_CMD		2
-#define PAS_AUTH_AND_RESET_CMD	5
-#define PAS_SHUTDOWN_CMD	6
-
-struct pas_init_image_req {
-	u32	proc;
-	u32	image_addr;
-};
-
-struct pas_init_image_resp {
-	u32	image_valid;
-};
-
-struct pas_auth_image_req {
-	u32	proc;
-};
-
-struct pas_auth_image_resp {
-	u32	reset_initiated;
-};
-
-struct pas_shutdown_req {
-	u32	proc;
-};
-
-struct pas_shutdown_resp {
-	u32	success;
-};
-
 static int modem_start, q6_start, dsps_start;
 static void __iomem *msm_mms_regs_base;
 static void __iomem *msm_lpass_qdsp6ss_base;
 
-static int init_image_trusted(int id, const u8 *metadata, size_t size)
-{
-	int ret;
-	struct pas_init_image_req request;
-	struct pas_init_image_resp resp = {0};
-	void *mdata_buf;
-
-	/* Make memory physically contiguous */
-	mdata_buf = kmemdup(metadata, size, GFP_KERNEL);
-	if (!mdata_buf)
-		return -ENOMEM;
-
-	request.proc = id;
-	request.image_addr = virt_to_phys(mdata_buf);
-
-	ret = scm_call(SCM_SVC_PIL, PAS_INIT_IMAGE_CMD, &request,
-			sizeof(request), &resp, sizeof(resp));
-	kfree(mdata_buf);
-
-	if (ret)
-		return ret;
-	return resp.image_valid;
-}
-
 static int init_image_modem_trusted(struct pil_device *pil, const u8 *metadata,
 				    size_t size)
 {
-	return init_image_trusted(PAS_MODEM, metadata, size);
+	return pas_init_image(PAS_MODEM, metadata, size);
 }
 
 static int init_image_modem_untrusted(struct pil_device *pil,
@@ -143,7 +85,7 @@
 static int init_image_q6_trusted(struct pil_device *pil,
 				 const u8 *metadata, size_t size)
 {
-	return init_image_trusted(PAS_Q6, metadata, size);
+	return pas_init_image(PAS_Q6, metadata, size);
 }
 
 static int init_image_q6_untrusted(struct pil_device *pil, const u8 *metadata,
@@ -157,7 +99,7 @@
 static int init_image_dsps_trusted(struct pil_device *pil, const u8 *metadata,
 				   size_t size)
 {
-	return init_image_trusted(PAS_DSPS, metadata, size);
+	return pas_init_image(PAS_DSPS, metadata, size);
 }
 
 static int init_image_dsps_untrusted(struct pil_device *pil, const u8 *metadata,
@@ -176,21 +118,6 @@
 	return 0;
 }
 
-static int auth_and_reset_trusted(int id)
-{
-	int ret;
-	struct pas_auth_image_req request;
-	struct pas_auth_image_resp resp = {0};
-
-	request.proc = id;
-	ret = scm_call(SCM_SVC_PIL, PAS_AUTH_AND_RESET_CMD, &request,
-			sizeof(request), &resp, sizeof(resp));
-	if (ret)
-		return ret;
-
-	return resp.reset_initiated;
-}
-
 static struct msm_xo_voter *pxo;
 static void remove_modem_proxy_votes(unsigned long data)
 {
@@ -300,28 +227,13 @@
 
 	make_modem_proxy_votes();
 
-	ret = auth_and_reset_trusted(PAS_MODEM);
+	ret = pas_auth_and_reset(PAS_MODEM);
 	if (ret)
 		remove_modem_proxy_votes_now();
 
 	return ret;
 }
 
-static int shutdown_trusted(int id)
-{
-	int ret;
-	struct pas_shutdown_req request;
-	struct pas_shutdown_resp resp = {0};
-
-	request.proc = id;
-	ret = scm_call(SCM_SVC_PIL, PAS_SHUTDOWN_CMD, &request, sizeof(request),
-			&resp, sizeof(resp));
-	if (ret)
-		return ret;
-
-	return resp.success;
-}
-
 static int shutdown_modem_untrusted(struct pil_device *pil)
 {
 	u32 reg;
@@ -367,7 +279,7 @@
 {
 	int ret;
 
-	ret = shutdown_trusted(PAS_MODEM);
+	ret = pas_shutdown(PAS_MODEM);
 	if (ret)
 		return ret;
 
@@ -481,7 +393,7 @@
 {
 	make_q6_proxy_votes();
 
-	return auth_and_reset_trusted(PAS_Q6);
+	return pas_auth_and_reset(PAS_Q6);
 }
 
 static int shutdown_q6_untrusted(struct pil_device *pil)
@@ -515,7 +427,7 @@
 {
 	int ret;
 
-	ret = shutdown_trusted(PAS_Q6);
+	ret = pas_shutdown(PAS_Q6);
 	if (ret)
 		return ret;
 
@@ -537,12 +449,12 @@
 
 static int reset_dsps_trusted(struct pil_device *pil)
 {
-	return auth_and_reset_trusted(PAS_DSPS);
+	return pas_auth_and_reset(PAS_DSPS);
 }
 
 static int shutdown_dsps_trusted(struct pil_device *pil)
 {
-	return shutdown_trusted(PAS_DSPS);
+	return pas_shutdown(PAS_DSPS);
 }
 
 static int shutdown_dsps_untrusted(struct pil_device *pil)
@@ -555,17 +467,17 @@
 static int init_image_playready(struct pil_device *pil, const u8 *metadata,
 		size_t size)
 {
-	return init_image_trusted(PAS_PLAYREADY, metadata, size);
+	return pas_init_image(PAS_PLAYREADY, metadata, size);
 }
 
 static int reset_playready(struct pil_device *pil)
 {
-	return auth_and_reset_trusted(PAS_PLAYREADY);
+	return pas_auth_and_reset(PAS_PLAYREADY);
 }
 
 static int shutdown_playready(struct pil_device *pil)
 {
-	return shutdown_trusted(PAS_PLAYREADY);
+	return pas_shutdown(PAS_PLAYREADY);
 }
 
 struct pil_reset_ops pil_modem_ops = {
@@ -633,12 +545,6 @@
 	.ops = &pil_dsps_ops,
 };
 
-#ifdef CONFIG_MSM_SECURE_PIL
-#define SECURE_PIL 1
-#else
-#define SECURE_PIL 0
-#endif
-
 static int __init msm_peripheral_reset_init(void)
 {
 	unsigned i;
@@ -659,15 +565,19 @@
 	if (IS_ERR(pll4))
 		goto err_clk;
 
-	if (SECURE_PIL) {
+	if (pas_supported(PAS_MODEM) > 0) {
 		pil_modem_ops.init_image = init_image_modem_trusted;
 		pil_modem_ops.auth_and_reset = reset_modem_trusted;
 		pil_modem_ops.shutdown = shutdown_modem_trusted;
+	}
 
+	if (pas_supported(PAS_Q6) > 0) {
 		pil_q6_ops.init_image = init_image_q6_trusted;
 		pil_q6_ops.auth_and_reset = reset_q6_trusted;
 		pil_q6_ops.shutdown = shutdown_q6_trusted;
+	}
 
+	if (pas_supported(PAS_DSPS) > 0) {
 		pil_dsps_ops.init_image = init_image_dsps_trusted;
 		pil_dsps_ops.auth_and_reset = reset_dsps_trusted;
 		pil_dsps_ops.shutdown = shutdown_dsps_trusted;