From 4d0fbd6baf51ce57d776f0141bb50ad9c11c228e Mon Sep 17 00:00:00 2001 From: Siddharth Gupta Date: Wed, 13 Nov 2019 11:48:46 -0800 Subject: [PATCH] firmware: qcom_scm: Merge qtee_shmbridge and qcom_scm Merge qtee_shmbridge and qcom_scm drivers into a single compilation unit. Change-Id: Icfbf7c335fc8d9468236cdc08dfda52fa563be40 Signed-off-by: Siddharth Gupta Signed-off-by: Elliot Berman --- arch/arm64/configs/vendor/lahaina_QGKI.config | 1 + arch/arm64/configs/vendor/lahaina_debug.config | 1 - drivers/firmware/Kconfig | 10 ++++++++++ drivers/firmware/Makefile | 1 + drivers/firmware/qcom_scm.c | 18 +++++++++++++++++- .../{soc/qcom => firmware}/qtee_shmbridge.c | 14 +++++++++++--- drivers/firmware/qtee_shmbridge_internal.h | 10 ++++++++++ drivers/soc/qcom/Kconfig | 10 ---------- drivers/soc/qcom/Makefile | 1 - include/{soc/qcom => linux}/qtee_shmbridge.h | 0 10 files changed, 50 insertions(+), 16 deletions(-) rename drivers/{soc/qcom => firmware}/qtee_shmbridge.c (97%) create mode 100644 drivers/firmware/qtee_shmbridge_internal.h rename include/{soc/qcom => linux}/qtee_shmbridge.h (100%) diff --git a/arch/arm64/configs/vendor/lahaina_QGKI.config b/arch/arm64/configs/vendor/lahaina_QGKI.config index 77235fede973..59511471a539 100644 --- a/arch/arm64/configs/vendor/lahaina_QGKI.config +++ b/arch/arm64/configs/vendor/lahaina_QGKI.config @@ -29,3 +29,4 @@ CONFIG_ION_POOL_AUTO_REFILL=y CONFIG_MSM_BT_POWER=m CONFIG_QCOM_SCM=y # CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set +CONFIG_QTEE_SHM_BRIDGE=y diff --git a/arch/arm64/configs/vendor/lahaina_debug.config b/arch/arm64/configs/vendor/lahaina_debug.config index 422d5096b672..0d350683986c 100644 --- a/arch/arm64/configs/vendor/lahaina_debug.config +++ b/arch/arm64/configs/vendor/lahaina_debug.config @@ -9,7 +9,6 @@ CONFIG_ATOMIC64_SELFTEST=m CONFIG_TEST_USER_COPY=m CONFIG_PAGE_POISONING_ENABLE_DEFAULT=y CONFIG_OF_RESERVED_MEM_CHECK=y -CONFIG_QTEE_SHM_BRIDGE=y CONFIG_SERIAL_MSM_GENI=y CONFIG_SERIAL_MSM_GENI_CONSOLE=y CONFIG_MSM_GENI_SE=y diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig index 8456c09b76eb..a37ed1a677de 100644 --- a/drivers/firmware/Kconfig +++ b/drivers/firmware/Kconfig @@ -255,6 +255,16 @@ config QCOM_SCM_DOWNLOAD_MODE_DEFAULT Say Y here to enable "download mode" by default. +config QTEE_SHM_BRIDGE + bool "QTI TEE shared memory bridge" + depends on QCOM_SCM + help + QTEE shared memory bridge driver provides kernel APIs to share + memory between trustzone & other VMs through shared memory bridge. + It allows kernel clients to create bridge, delete bridge, and do + memory sub-allocation and free from the default kernel bridge + created by bridge driver. + config TI_SCI_PROTOCOL tristate "TI System Control Interface (TISCI) Message Protocol" depends on TI_MESSAGE_MANAGER diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile index 111ceff24d44..16a080bdec9b 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile @@ -19,6 +19,7 @@ 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_scm-$(CONFIG_QTEE_SHM_BRIDGE) += qtee_shmbridge.o obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o obj-$(CONFIG_TURRIS_MOX_RWTM) += turris-mox-rwtm.o diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c index 6b04dd357561..3b8141e4e07a 100644 --- a/drivers/firmware/qcom_scm.c +++ b/drivers/firmware/qcom_scm.c @@ -18,6 +18,7 @@ #include #include "qcom_scm.h" +#include "qtee_shmbridge_internal.h" static bool download_mode = IS_ENABLED(CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT); module_param(download_mode, bool, 0); @@ -632,6 +633,21 @@ static struct platform_driver qcom_scm_driver = { static int __init qcom_scm_init(void) { - return platform_driver_register(&qcom_scm_driver); + int ret; + + ret = platform_driver_register(&qcom_scm_driver); + if (ret) + return ret; + + return qtee_shmbridge_driver_init(); } subsys_initcall(qcom_scm_init); + +#if IS_MODULE(CONFIG_QCOM_SCM) +static void __exit qcom_scm_exit(void) +{ + platform_driver_unregister(&qcom_scm_driver); + qtee_shmbridge_driver_exit(); +} +module_exit(qcom_scm_exit); +#endif diff --git a/drivers/soc/qcom/qtee_shmbridge.c b/drivers/firmware/qtee_shmbridge.c similarity index 97% rename from drivers/soc/qcom/qtee_shmbridge.c rename to drivers/firmware/qtee_shmbridge.c index 234eaa8c2d59..e24df44e694c 100644 --- a/drivers/soc/qcom/qtee_shmbridge.c +++ b/drivers/firmware/qtee_shmbridge.c @@ -13,7 +13,9 @@ #include #include #include -#include +#include + +#include "qtee_shmbridge_internal.h" #define DEFAULT_BRIDGE_SIZE SZ_4M /*4M*/ /* @@ -430,6 +432,12 @@ static struct platform_driver qtee_shmbridge_driver = { }, }; -module_platform_driver(qtee_shmbridge_driver); +int __init qtee_shmbridge_driver_init(void) +{ + return platform_driver_register(&qtee_shmbridge_driver); +} -MODULE_LICENSE("GPL v2"); +void __exit qtee_shmbridge_driver_exit(void) +{ + platform_driver_unregister(&qtee_shmbridge_driver); +} diff --git a/drivers/firmware/qtee_shmbridge_internal.h b/drivers/firmware/qtee_shmbridge_internal.h new file mode 100644 index 000000000000..f83cef79833d --- /dev/null +++ b/drivers/firmware/qtee_shmbridge_internal.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* Copyright (c) 2019 The Linux Foundation. All rights reserved. + */ +#ifndef __QCOM_QTEE_SHM_BRIDGE_INT_H_ +#define __QCOM_QTEE_SHM_BRIDGE_INT_H_ + +int __init qtee_shmbridge_driver_init(void); +void __exit qtee_shmbridge_driver_exit(void); + +#endif diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig index 01fd480970b3..288f8d33d01d 100644 --- a/drivers/soc/qcom/Kconfig +++ b/drivers/soc/qcom/Kconfig @@ -559,16 +559,6 @@ config QCOM_SOC_SLEEP_STATS various SoC level low power modes statistics and export to sysfs interface. -config QTEE_SHM_BRIDGE - tristate "QTI TEE shared memory bridge" - depends on QCOM_SECURE_CHAN_MANAGER - help - QTEE shared memory bridge driver provides kernel APIs to share - memory between trustzone & other VMs through shared memory bridge. - It allows kernel clients to create bridge, delete bridge, and do - memory sub-allocation and free from the default kernel bridge - created by bridge driver. - config QCOM_WATCHDOG tristate "Qualcomm Watchdog Support" depends on ARCH_QCOM diff --git a/drivers/soc/qcom/Makefile b/drivers/soc/qcom/Makefile index 8c78df0645bf..0eebe2ecf7a6 100644 --- a/drivers/soc/qcom/Makefile +++ b/drivers/soc/qcom/Makefile @@ -56,6 +56,5 @@ obj-$(CONFIG_QTI_SYSTEM_PM) += system_pm.o obj-$(CONFIG_MSM_SPSS_UTILS) += spss_utils.o obj-$(CONFIG_MSM_IDLE_STATS) += lpm-stats.o obj-$(CONFIG_QTI_RPM_STATS_LOG) += rpmh_master_stat.o -obj-$(CONFIG_QTEE_SHM_BRIDGE) += qtee_shmbridge.o obj-$(CONFIG_QPNP_PBS) += qpnp-pbs.o obj-$(CONFIG_QCOM_WATCHDOG) += qcom_watchdog.o diff --git a/include/soc/qcom/qtee_shmbridge.h b/include/linux/qtee_shmbridge.h similarity index 100% rename from include/soc/qcom/qtee_shmbridge.h rename to include/linux/qtee_shmbridge.h