From b4f766a33e84ac2db4fe40c2a4190f5bc017cbdd Mon Sep 17 00:00:00 2001 From: Siddharth Gupta Date: Wed, 4 Dec 2019 18:51:43 -0800 Subject: [PATCH] firmware: qcom_scm: Move qseecom specific workarounds Move qseecom specific workarounds to the main file. This allows access to the scm device struct. Change-Id: I08bb227e88a7ba21bce0d3e7911819b07815c83f Signed-off-by: Siddharth Gupta --- drivers/firmware/Makefile | 2 +- drivers/firmware/qcom_scm-smc.c | 7 ++++--- drivers/firmware/qcom_scm.c | 15 +++++++++++++++ drivers/firmware/qcom_scm.h | 3 +++ drivers/firmware/qcom_smc.c | 19 ------------------- include/soc/qcom/qseecom_scm.h | 2 -- 6 files changed, 23 insertions(+), 25 deletions(-) delete mode 100644 drivers/firmware/qcom_smc.c diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile index f678b8055598..16a080bdec9b 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile @@ -18,7 +18,7 @@ obj-$(CONFIG_FIRMWARE_MEMMAP) += memmap.o obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o obj-$(CONFIG_FW_CFG_SYSFS) += qemu_fw_cfg.o obj-$(CONFIG_QCOM_SCM) += _qcom_scm.o -_qcom_scm-y += qcom_scm.o qcom_scm-smc.o qcom_smc.o +_qcom_scm-y += qcom_scm.o qcom_scm-smc.o _qcom_scm-$(CONFIG_QTEE_SHM_BRIDGE) += qtee_shmbridge.o obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o diff --git a/drivers/firmware/qcom_scm-smc.c b/drivers/firmware/qcom_scm-smc.c index aceeeb41aad0..70639ddf7234 100644 --- a/drivers/firmware/qcom_scm-smc.c +++ b/drivers/firmware/qcom_scm-smc.c @@ -1915,7 +1915,8 @@ int __qcom_scm_invoke_callback_response(struct device *dev, phys_addr_t out_buf, return ret; } -int __qcom_scm_qseecom_do(u32 cmd_id, struct scm_desc *desc, bool retry) +int __qcom_scm_qseecom_do(struct device *dev, u32 cmd_id, struct scm_desc *desc, + bool retry) { int _ret; struct qcom_scm_desc _desc; @@ -1927,9 +1928,9 @@ int __qcom_scm_qseecom_do(u32 cmd_id, struct scm_desc *desc, bool retry) _desc.arginfo = desc->arginfo; if (retry) - _ret = qcom_scm_call(NULL, &_desc); + _ret = qcom_scm_call(dev, &_desc); else - _ret = qcom_scm_call_noretry(NULL, &_desc); + _ret = qcom_scm_call_noretry(dev, &_desc); memcpy(desc->ret, &_desc.res, sizeof(_desc.res)); diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index c14e09e1a94f..b2ea07d127c5 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "qcom_scm.h" #include "qtee_shmbridge_internal.h" @@ -895,6 +896,20 @@ int qcom_scm_invoke_callback_response(phys_addr_t out_buf, out_buf_size, result, response_type, data); } +int qcom_scm_qseecom_call(u32 cmd_id, struct scm_desc *desc) +{ + return __qcom_scm_qseecom_do(__scm ? __scm->dev : NULL, cmd_id, desc, + true); +} +EXPORT_SYMBOL(qcom_scm_qseecom_call); + +int qcom_scm_qseecom_call_noretry(u32 cmd_id, struct scm_desc *desc) +{ + return __qcom_scm_qseecom_do(__scm ? __scm->dev : NULL, cmd_id, desc, + false); +} +EXPORT_SYMBOL(qcom_scm_qseecom_call_noretry); + /** * qcom_scm_is_available() - Checks if SCM is available */ diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h index 87c5520f6f06..2c578b0123cc 100644 --- a/drivers/firmware/qcom_scm.h +++ b/drivers/firmware/qcom_scm.h @@ -218,6 +218,9 @@ extern int __qcom_scm_camera_protect_all(struct device *dev, uint32_t protect, extern int __qcom_scm_camera_protect_phy_lanes(struct device *dev, bool protect, u64 regmask); +extern int __qcom_scm_qseecom_do(struct device *dev, u32 cmd_id, + struct scm_desc *desc, bool retry); + // TOS Services and Function IDs #define QCOM_SCM_SVC_QSEELOG 0x01 #define QCOM_SCM_QSEELOG_REGISTER 0x06 diff --git a/drivers/firmware/qcom_smc.c b/drivers/firmware/qcom_smc.c deleted file mode 100644 index cf39ee557a2f..000000000000 --- a/drivers/firmware/qcom_smc.c +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (c) 2019 The Linux Foundation. All rights reserved. - */ -#include -#include -#include - -int qcom_scm_qseecom_call(u32 cmd_id, struct scm_desc *desc) -{ - return __qcom_scm_qseecom_do(cmd_id, desc, true); -} -EXPORT_SYMBOL(qcom_scm_qseecom_call); - -int qcom_scm_qseecom_call_noretry(u32 cmd_id, struct scm_desc *desc) -{ - return __qcom_scm_qseecom_do(cmd_id, desc, false); -} -EXPORT_SYMBOL(qcom_scm_qseecom_call_noretry); diff --git a/include/soc/qcom/qseecom_scm.h b/include/soc/qcom/qseecom_scm.h index 557e7f4bc625..fd6cb4573fad 100644 --- a/include/soc/qcom/qseecom_scm.h +++ b/include/soc/qcom/qseecom_scm.h @@ -75,8 +75,6 @@ struct scm_desc { u64 ret[MAX_SCM_RETS]; }; -extern int __qcom_scm_qseecom_do(u32 cmd_id, struct scm_desc *desc, bool retry); - #if IS_ENABLED(CONFIG_QCOM_SCM) int qcom_scm_qseecom_call(u32 cmd_id, struct scm_desc *desc);