Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1ca2e06 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "soc: qcom: ocmem_core: Add support for the new scm_call2 API"

parents b913d50b 59f10715
Loading
Loading
Loading
Loading
+43 −27
Original line number Diff line number Diff line
@@ -624,14 +624,20 @@ static int do_lock(enum ocmem_client id, unsigned long offset,
		u32 size;
		u32 mode;
	} request;
	struct scm_desc desc = {0};

	request.id = get_tz_id(id);
	request.offset = offset;
	request.size = len;
	request.mode = mode;
	desc.arginfo = SCM_ARGS(4);
	desc.args[0] = request.id = get_tz_id(id);
	desc.args[1] = request.offset = offset;
	desc.args[2] = request.size = len;
	desc.args[3] = request.mode = mode;

	if (!is_scm_armv8())
		rc = scm_call(OCMEM_SVC_ID, OCMEM_LOCK_CMD_ID, &request,
				sizeof(request), NULL, 0);
	else
		rc = scm_call2(SCM_SIP_FNID(OCMEM_SVC_ID, OCMEM_LOCK_CMD_ID),
			       &desc);
	if (rc)
		pr_err("ocmem: Failed to lock region %s[%lx -- %lx] ret = %d\n",
				get_name(id), offset, offset + len - 1, rc);
@@ -647,13 +653,19 @@ static int do_unlock(enum ocmem_client id, unsigned long offset,
		u32 offset;
		u32 size;
	} request;
	struct scm_desc desc = {0};

	request.id = get_tz_id(id);
	request.offset = offset;
	request.size = len;
	desc.arginfo = SCM_ARGS(3);
	desc.args[0] = request.id = get_tz_id(id);
	desc.args[1] = request.offset = offset;
	desc.args[2] = request.size = len;

	if (!is_scm_armv8())
		rc = scm_call(OCMEM_SVC_ID, OCMEM_UNLOCK_CMD_ID, &request,
					sizeof(request), NULL, 0);
	else
		rc = scm_call2(SCM_SIP_FNID(OCMEM_SVC_ID, OCMEM_UNLOCK_CMD_ID),
			       &desc);
	if (rc)
		pr_err("ocmem: Failed to unlock region %s[%lx -- %lx] ret = %d\n",
				get_name(id), offset, offset + len - 1, rc);
@@ -669,13 +681,19 @@ int ocmem_enable_dump(enum ocmem_client id, unsigned long offset,
		u32 offset;
		u32 size;
	} request;
	struct scm_desc desc = {0};

	request.id = get_tz_id(id);
	request.offset = offset;
	request.size = len;
	desc.arginfo = SCM_ARGS(3);
	desc.args[0] = request.id = get_tz_id(id);
	desc.args[1] = request.offset = offset;
	desc.args[2] = request.size = len;

	if (!is_scm_armv8())
		rc = scm_call(OCMEM_SVC_ID, OCMEM_ENABLE_DUMP_CMD_ID, &request,
				sizeof(request), NULL, 0);
	else
		rc = scm_call2(SCM_SIP_FNID(OCMEM_SVC_ID,
			       OCMEM_ENABLE_DUMP_CMD_ID), &desc);
	if (rc)
		pr_err("ocmem: Failed to enable dump %s[%lx -- %lx] ret = %d\n",
				get_name(id), offset, offset + len - 1, rc);
@@ -691,13 +709,19 @@ int ocmem_disable_dump(enum ocmem_client id, unsigned long offset,
		u32 offset;
		u32 size;
	} request;
	struct scm_desc desc = {0};

	request.id = get_tz_id(id);
	request.offset = offset;
	request.size = len;
	desc.arginfo = SCM_ARGS(3);
	desc.args[0] = request.id = get_tz_id(id);
	desc.args[1] = request.offset = offset;
	desc.args[2] = request.size = len;

	if (!is_scm_armv8())
		rc = scm_call(OCMEM_SVC_ID, OCMEM_DISABLE_DUMP_CMD_ID, &request,
				sizeof(request), NULL, 0);
	else
		rc = scm_call2(SCM_SIP_FNID(OCMEM_SVC_ID,
			       OCMEM_DISABLE_DUMP_CMD_ID), &desc);
	if (rc)
		pr_err("ocmem: Failed to disable dump %s[%lx -- %lx] ret = %d\n",
				get_name(id), offset, offset + len - 1, rc);
@@ -707,16 +731,8 @@ int ocmem_disable_dump(enum ocmem_client id, unsigned long offset,
int ocmem_restore_sec_program(int sec_id)
{
	int rc, scm_ret = 0;
	struct msm_scm_sec_cfg {
		unsigned int id;
		unsigned int spare;
	} cfg;

	cfg.id = sec_id;

	rc = scm_call(OCMEM_SECURE_SVC_ID, OCMEM_SECURE_CFG_ID, &cfg,
			sizeof(cfg), &scm_ret, sizeof(scm_ret));

	rc = scm_restore_sec_cfg(sec_id, 0, &scm_ret);
	if (rc || scm_ret) {
		pr_err("ocmem: Failed to enable secure programming\n");
		return rc ? rc : -EINVAL;