diff --git a/Android.mk b/Android.mk index f8606881a7..0b38bf9f60 100644 --- a/Android.mk +++ b/Android.mk @@ -111,7 +111,6 @@ LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) include $(DLKM_DIR)/Build_external_kernelmodule.mk ################################################### ################################################### -ifneq (, $(filter true, $(TARGET_ENABLE_QSEECOM) $(TARGET_BOARD_AUTO))) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(SSG_SRC_FILES) LOCAL_MODULE := qseecom_dlkm.ko @@ -120,7 +119,6 @@ LOCAL_MODULE_TAGS := optional LOCAL_MODULE_DEBUG_ENABLE := true LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) include $(DLKM_DIR)/Build_external_kernelmodule.mk -endif #TARGET_ENABLE_QSEECOM OR TARGET_BOARD_AUTO ################################################### ################################################### ifeq ($(TARGET_USES_SMMU_PROXY), true) diff --git a/Kbuild b/Kbuild index 18b94a718c..8445ccc1e8 100644 --- a/Kbuild +++ b/Kbuild @@ -13,11 +13,13 @@ endif ifneq (, $(filter y, $(CONFIG_QTI_QUIN_GVM) $(CONFIG_ARCH_KHAJE) $(CONFIG_ARCH_SA8155))) include $(SSG_MODULE_ROOT)/config/sec-kernel_defconfig_qseecom.conf LINUXINCLUDE += -include $(SSG_MODULE_ROOT)/config/sec-kernel_defconfig_qseecom.h - - obj-$(CONFIG_QSEECOM) += qseecom_dlkm.o - qseecom_dlkm-objs := qseecom/qseecom.o +else + LINUXINCLUDE += -include $(SSG_MODULE_ROOT)/config/sec-kernel_defconfig_qseecom_compat.h endif +obj-$(CONFIG_QSEECOM) += qseecom_dlkm.o +qseecom_dlkm-objs := qseecom/qseecom.o + include $(SSG_MODULE_ROOT)/config/sec-kernel_defconfig_smcinvoke.conf LINUXINCLUDE += -include $(SSG_MODULE_ROOT)/config/sec-kernel_defconfig_smcinvoke.h diff --git a/config/sec-kernel_defconfig.conf b/config/sec-kernel_defconfig.conf index db6cd22434..fe9e15eeed 100644 --- a/config/sec-kernel_defconfig.conf +++ b/config/sec-kernel_defconfig.conf @@ -3,3 +3,5 @@ export CONFIG_CRYPTO_DEV_QCEDEV=m export CONFIG_CRYPTO_DEV_QCRYPTO=m export CONFIG_HDCP_QSEECOM=m export CONFIG_HW_RANDOM_MSM_LEGACY=m +export CONFIG_QSEECOM_PROXY=m +export CONFIG_QSEECOM=m diff --git a/config/sec-kernel_defconfig_qseecom.conf b/config/sec-kernel_defconfig_qseecom.conf index ec586b6537..39517cb364 100644 --- a/config/sec-kernel_defconfig_qseecom.conf +++ b/config/sec-kernel_defconfig_qseecom.conf @@ -1 +1 @@ -export CONFIG_QSEECOM=m +export CONFIG_QTI_CRYPTO_FDE=m diff --git a/config/sec-kernel_defconfig_qseecom_compat.h b/config/sec-kernel_defconfig_qseecom_compat.h new file mode 100644 index 0000000000..bb4f2cd621 --- /dev/null +++ b/config/sec-kernel_defconfig_qseecom_compat.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.. + */ + +#define CONFIG_QSEECOM_COMPAT 1 diff --git a/linux/misc/qseecom_priv.h b/linux/misc/qseecom_priv.h index f15115fa93..b1d8221552 100644 --- a/linux/misc/qseecom_priv.h +++ b/linux/misc/qseecom_priv.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef __QSEECOM_PRIV_H_ @@ -20,6 +20,5 @@ static inline int qseecom_process_listener_from_smcinvoke(uint32_t *result, } #endif -int get_qseecom_kernel_fun_ops(void); #endif diff --git a/pineapple.bzl b/pineapple.bzl index 5a45c5eeb2..dc29c2796b 100644 --- a/pineapple.bzl +++ b/pineapple.bzl @@ -11,7 +11,8 @@ def define_pineapple(): "qcedev-mod_dlkm", "qrng_dlkm", "qcrypto-msm_dlkm", - "smmu_proxy_dlkm" + "smmu_proxy_dlkm", + "qseecom_dlkm" ], extra_options = [ "CONFIG_QCOM_SMCINVOKE", diff --git a/qseecom/qseecom.c b/qseecom/qseecom.c index 3c8525d65c..6c68e538df 100644 --- a/qseecom/qseecom.c +++ b/qseecom/qseecom.c @@ -380,6 +380,7 @@ struct qseecom_control { struct task_struct *unload_app_kthread_task; wait_queue_head_t unload_app_kthread_wq; atomic_t unload_app_kthread_state; + bool no_user_contig_mem_support; }; struct qseecom_unload_app_pending_list { @@ -4720,6 +4721,8 @@ static void __qseecom_free_coherent_buf(uint32_t size, dma_free_coherent(qseecom.dev, size, vaddr, paddr); } + +#if IS_ENABLED(CONFIG_QSEECOM) static int __qseecom_load_fw(struct qseecom_dev_handle *data, char *appname, uint32_t *app_id) { @@ -4859,6 +4862,7 @@ exit_free_img_data: __qseecom_free_coherent_buf(fw_size, img_data, pa); return ret; } +#endif static int qseecom_load_commonlib_image(struct qseecom_dev_handle *data, char *cmnlib_name) @@ -5006,6 +5010,7 @@ static int qseecom_unload_commonlib_image(void) return ret; } +#if IS_ENABLED(CONFIG_QSEECOM) static int __qseecom_start_app(struct qseecom_handle **handle, char *app_name, uint32_t size) { @@ -5313,6 +5318,7 @@ static int __qseecom_send_command(struct qseecom_handle *handle, void *send_buf, return ret; } +#if IS_ENABLED(CONFIG_QSEECOM) #if IS_ENABLED(CONFIG_QSEECOM_PROXY) const static struct qseecom_drv_ops qseecom_driver_ops = { .qseecom_send_command = __qseecom_send_command, @@ -5348,6 +5354,7 @@ int qseecom_send_command(struct qseecom_handle *handle, void *send_buf, } EXPORT_SYMBOL(qseecom_send_command); #endif +#endif int qseecom_set_bandwidth(struct qseecom_handle *handle, bool high) { @@ -5429,7 +5436,7 @@ int qseecom_process_listener_from_smcinvoke(uint32_t *result, return ret; } EXPORT_SYMBOL(qseecom_process_listener_from_smcinvoke); - +#endif static int qseecom_send_resp(void) { qseecom.send_resp_flag = 1; @@ -9500,12 +9507,18 @@ static int qseecom_register_shmbridge(struct platform_device *pdev) qtee_shmbridge_deregister(qseecom.ta_bridge_handle); return ret; } - ret = qseecom_register_heap_shmbridge(pdev, "user_contig_mem", - &qseecom.user_contig_bridge_handle); - if (ret) { - qtee_shmbridge_deregister(qseecom.qseecom_bridge_handle); - qtee_shmbridge_deregister(qseecom.ta_bridge_handle); - return ret; + + /* no-user-contig-mem is present in dtsi if user_contig_region is not needed*/ + qseecom.no_user_contig_mem_support = of_property_read_bool((&pdev->dev)->of_node, + "qcom,no-user-contig-mem-support"); + if (!qseecom.no_user_contig_mem_support) { + ret = qseecom_register_heap_shmbridge(pdev, "user_contig_mem", + &qseecom.user_contig_bridge_handle); + if (ret) { + qtee_shmbridge_deregister(qseecom.qseecom_bridge_handle); + qtee_shmbridge_deregister(qseecom.ta_bridge_handle); + return ret; + } } return 0; } @@ -9549,7 +9562,7 @@ static int qseecom_probe(struct platform_device *pdev) if (rc) goto exit_deinit_bus; -#if IS_ENABLED(CONFIG_QSEECOM_PROXY) +#if IS_ENABLED(CONFIG_QSEECOM) && IS_ENABLED(CONFIG_QSEECOM_PROXY) /*If the api fails to get the func ops, print the error and continue * Do not treat it as fatal*/ rc = get_qseecom_kernel_fun_ops(); diff --git a/securemsm_kernel_product_board.mk b/securemsm_kernel_product_board.mk index dab1ebc108..4c60556953 100644 --- a/securemsm_kernel_product_board.mk +++ b/securemsm_kernel_product_board.mk @@ -16,16 +16,12 @@ PRODUCT_PACKAGES += qcrypto-msm_dlkm.ko PRODUCT_PACKAGES += hdcp_qseecom_dlkm.ko PRODUCT_PACKAGES += qrng_dlkm.ko PRODUCT_PACKAGES += smcinvoke_dlkm.ko +PRODUCT_PACKAGES += qseecom_dlkm.ko ifeq ($(TARGET_USES_SMMU_PROXY), true) PRODUCT_PACKAGES += smmu_proxy_dlkm.ko endif -#Enable Qseecom if TARGET_ENABLE_QSEECOM or TARGET_BOARD_AUTO is set to true -ifneq (, $(filter true, $(TARGET_ENABLE_QSEECOM) $(TARGET_BOARD_AUTO))) -PRODUCT_PACKAGES += qseecom_dlkm.ko -endif #TARGET_ENABLE_QSEECOM OR TARGET_BOARD_AUTO - endif #ENABLE_SECUREMSM_DLKM diff --git a/securemsm_kernel_vendor_board.mk b/securemsm_kernel_vendor_board.mk index c382f3f513..1bef9a52bc 100644 --- a/securemsm_kernel_vendor_board.mk +++ b/securemsm_kernel_vendor_board.mk @@ -24,14 +24,13 @@ BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/smcinvoke_dlkm.ko BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/smcinvoke_dlkm.ko BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD += $(KERNEL_MODULES_OUT)/smcinvoke_dlkm.ko + +BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko +BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko +BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko + ifeq ($(TARGET_USES_SMMU_PROXY), true) BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/smmu_proxy_dlkm.ko endif -#Enable Qseecom if TARGET_ENABLE_QSEECOM or TARGET_BOARD_AUTO is set to true -ifneq (, $(filter true, $(TARGET_ENABLE_QSEECOM) $(TARGET_BOARD_AUTO))) -BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko -BOARD_VENDOR_RAMDISK_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko -BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD += $(KERNEL_MODULES_OUT)/qseecom_dlkm.ko -endif #TARGET_ENABLE_QSEECOM OR TARGET_BOARD_AUTO endif #ENABLE_SECUREMSM_DLKM diff --git a/smcinvoke/smcinvoke.c b/smcinvoke/smcinvoke.c index e64cc401f1..f5894cb16b 100644 --- a/smcinvoke/smcinvoke.c +++ b/smcinvoke/smcinvoke.c @@ -3226,7 +3226,7 @@ static int smcinvoke_probe(struct platform_device *pdev) } smcinvoke_pdev = pdev; -#if !IS_ENABLED(CONFIG_QSEECOM) && IS_ENABLED(CONFIG_QSEECOM_PROXY) +#if IS_ENABLED(CONFIG_QSEECOM_COMPAT) && IS_ENABLED(CONFIG_QSEECOM_PROXY) /*If the api fails to get the func ops, print the error and continue * Do not treat it as fatal*/ rc = get_qseecom_kernel_fun_ops(); diff --git a/smcinvoke/smcinvoke_kernel.c b/smcinvoke/smcinvoke_kernel.c index 71ca971e1e..e83f388f41 100644 --- a/smcinvoke/smcinvoke_kernel.c +++ b/smcinvoke/smcinvoke_kernel.c @@ -16,7 +16,7 @@ #include "smcinvoke.h" #include "smcinvoke_object.h" #include "IClientEnv.h" -#if !IS_ENABLED(CONFIG_QSEECOM) +#if IS_ENABLED(CONFIG_QSEECOM_COMPAT) #include "IQSEEComCompat.h" #include "IQSEEComCompatAppLoader.h" #include "linux/qseecom_api.h" @@ -323,7 +323,7 @@ int32_t get_client_env_object(struct Object *clientEnvObj) } EXPORT_SYMBOL(get_client_env_object); -#if !IS_ENABLED(CONFIG_QSEECOM) +#if IS_ENABLED(CONFIG_QSEECOM_COMPAT) static int load_app(struct qseecom_compat_context *cxt, const char *app_name) {