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-8960.c b/arch/arm/mach-msm/peripheral-reset-8960.c
index ef73244..51cd204 100644
--- a/arch/arm/mach-msm/peripheral-reset-8960.c
+++ b/arch/arm/mach-msm/peripheral-reset-8960.c
@@ -25,6 +25,7 @@
 #include <mach/scm.h>
 
 #include "peripheral-loader.h"
+#include "scm-pas.h"
 
 #define MSM_FW_QDSP6SS_PHYS	0x08800000
 #define MSM_SW_QDSP6SS_PHYS	0x08900000
@@ -119,43 +120,6 @@
 #define PPSS_PROC_CLK_CTL		(MSM_CLK_CTL_BASE + 0x2588)
 #define PPSS_HCLK_CTL			(MSM_CLK_CTL_BASE + 0x2580)
 
-#define PAS_Q6		1
-#define PAS_DSPS	2
-#define PAS_MODEM_SW	4
-#define PAS_MODEM_FW	5
-#define PAS_RIVA	6
-
-#define PAS_INIT_IMAGE_CMD	1
-#define PAS_MEM_CMD		2
-#define PAS_AUTH_AND_RESET_CMD	5
-#define PAS_SHUTDOWN_CMD	6
-#define PAS_IS_SUPPORTED_CMD	7
-
-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;
-};
-
 struct q6_data {
 	const unsigned strap_tcm_base;
 	const unsigned strap_ahb_upper;
@@ -203,46 +167,22 @@
 static void __iomem *msm_riva_base;
 static unsigned long riva_start;
 
-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_lpass_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_modem_fw_q6_trusted(struct pil_device *pil,
 					  const u8 *metadata, size_t size)
 {
-	return init_image_trusted(PAS_MODEM_FW, metadata, size);
+	return pas_init_image(PAS_MODEM_FW, metadata, size);
 }
 
 static int init_image_modem_sw_q6_trusted(struct pil_device *pil,
 					  const u8 *metadata, size_t size)
 {
-	return init_image_trusted(PAS_MODEM_SW, metadata, size);
+	return pas_init_image(PAS_MODEM_SW, metadata, size);
 }
 
 static int init_image_lpass_q6_untrusted(struct pil_device *pil,
@@ -274,21 +214,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 int power_up_q6(struct q6_data *q6)
 {
 	int err;
@@ -317,7 +242,7 @@
 	int err = power_up_q6(q6);
 	if (err)
 		return err;
-	return auth_and_reset_trusted(id);
+	return pas_auth_and_reset(id);
 }
 
 static int reset_lpass_q6_trusted(struct pil_device *pil)
@@ -454,26 +379,11 @@
 	return reset_q6_untrusted(&q6_modem_sw);
 }
 
-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_q6_trusted(int id, struct q6_data *q6)
 {
 	int ret;
 
-	ret = shutdown_trusted(id);
+	ret = pas_shutdown(id);
 	if (ret)
 		return ret;
 
@@ -655,17 +565,17 @@
 static int init_image_riva_trusted(struct pil_device *pil, const u8 *metadata,
 				   size_t size)
 {
-	return init_image_trusted(PAS_RIVA, metadata, size);
+	return pas_init_image(PAS_RIVA, metadata, size);
 }
 
 static int reset_riva_trusted(struct pil_device *pil)
 {
-	return auth_and_reset_trusted(PAS_RIVA);
+	return pas_auth_and_reset(PAS_RIVA);
 }
 
 static int shutdown_riva_trusted(struct pil_device *pil)
 {
-	return shutdown_trusted(PAS_RIVA);
+	return pas_shutdown(PAS_RIVA);
 }
 
 static int init_image_dsps_untrusted(struct pil_device *pil, const u8 *metadata,
@@ -695,17 +605,17 @@
 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 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 struct pil_reset_ops pil_modem_fw_q6_ops = {
@@ -814,59 +724,41 @@
 	return err;
 }
 
-static int __init can_secure_boot(int id)
-{
-	int ret;
-	u32 periph = id;
-	u32 ret_val = 0;
-
-	ret = scm_call(SCM_SVC_PIL, PAS_IS_SUPPORTED_CMD, &periph,
-			sizeof(periph), &ret_val, sizeof(ret_val));
-	if (ret)
-		return ret;
-
-	return ret_val;
-}
-
-static bool secure_pil = true;
-
 static void __init use_secure_pil(void)
 {
 
-	if (scm_is_call_available(SCM_SVC_PIL, PAS_IS_SUPPORTED_CMD) <= 0)
-		return;
-
-	if (can_secure_boot(PAS_Q6) > 0) {
+	if (pas_supported(PAS_Q6) > 0) {
 		pil_lpass_q6_ops.init_image = init_image_lpass_q6_trusted;
 		pil_lpass_q6_ops.auth_and_reset = reset_lpass_q6_trusted;
 		pil_lpass_q6_ops.shutdown = shutdown_lpass_q6_trusted;
 	}
 
-	if (can_secure_boot(PAS_MODEM_FW) > 0) {
+	if (pas_supported(PAS_MODEM_FW) > 0) {
 		pil_modem_fw_q6_ops.init_image = init_image_modem_fw_q6_trusted;
 		pil_modem_fw_q6_ops.auth_and_reset = reset_modem_fw_q6_trusted;
 		pil_modem_fw_q6_ops.shutdown = shutdown_modem_fw_q6_trusted;
 	}
 
-	if (can_secure_boot(PAS_MODEM_SW) > 0) {
+	if (pas_supported(PAS_MODEM_SW) > 0) {
 		pil_modem_sw_q6_ops.init_image = init_image_modem_sw_q6_trusted;
 		pil_modem_sw_q6_ops.auth_and_reset = reset_modem_sw_q6_trusted;
 		pil_modem_sw_q6_ops.shutdown = shutdown_modem_sw_q6_trusted;
 	}
 
-	if (can_secure_boot(PAS_DSPS) > 0) {
+	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;
 	}
 
-	if (can_secure_boot(PAS_RIVA) > 0) {
+	if (pas_supported(PAS_RIVA) > 0) {
 		pil_riva_ops.init_image = init_image_riva_trusted;
 		pil_riva_ops.auth_and_reset = reset_riva_trusted;
 		pil_riva_ops.shutdown = shutdown_riva_trusted;
 	}
 }
 
+
 static int __init msm_peripheral_reset_init(void)
 {
 	int err;
@@ -878,8 +770,7 @@
 	if (machine_is_msm8960_sim() || machine_is_msm8960_rumi3())
 		return 0;
 
-	if (secure_pil)
-		use_secure_pil();
+	use_secure_pil();
 
 	err = q6_reset_init(&q6_lpass);
 	if (err)
@@ -912,5 +803,3 @@
 	return 0;
 }
 arch_initcall(msm_peripheral_reset_init);
-module_param(secure_pil, bool, S_IRUGO);
-MODULE_PARM_DESC(secure_pil, "Use Secure PIL");