author | Chao Liu <chao.liu@amlogic.com> | 2018-12-18 09:12:59 (GMT) |
---|---|---|
committer | Chao Liu <chao.liu@amlogic.com> | 2018-12-21 01:39:58 (GMT) |
commit | 3e78c51775a2ec96a9013db377fc363bb98fcb54 (patch) | |
tree | 1228167951f6408df4e7ea297a8b632cde4ec669 | |
parent | 6e3eadec2ed80f4b18782828ccee340fb11e65a0 (diff) | |
download | tdk_linuxdriver-p-tv-atom.zip tdk_linuxdriver-p-tv-atom.tar.gz tdk_linuxdriver-p-tv-atom.tar.bz2 |
linuxdriver: merge code from branch p-amlogic-mainline [2/2]
PD#OTT-924
Problem:
the code of the branch p-tv-atom is too old
Solution:
update code to newest
Verify:
verified on txlx
p-amlogic-mainline commit:
8d691592e0caf3188fb005bff81a3d69f59b3307
Change-Id: I7d5abb9322e731bbbcfffa47212d03ef35ed50ea
Signed-off-by: Chao Liu <chao.liu@amlogic.com>
-rwxr-xr-x | Android.mk | 31 | ||||
-rwxr-xr-x | optee/Makefile | 4 | ||||
-rw-r--r-- | optee/core.c | 7 | ||||
-rw-r--r-- | optee/smccc-call-a32.S | 64 |
4 files changed, 90 insertions, 16 deletions
@@ -6,33 +6,34 @@ KERNEL_DIR := kernel/common_3.14 else KERNEL_DIR := common endif -KERNEL_OUT_DIR := out/target/product/$(TARGET_BOOTLOADER_BOARD_NAME)/obj/KERNEL_OBJ +KERNEL_OUT_DIR := $(PRODUCT_OUT)/obj/KERNEL_OBJ +ifeq ($(KERNEL_A32_SUPPORT), true) +KERNEL_ARCH := arm +KERNEL_DRIVER_CROSS_COMPILE := /opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- +KERNEL_CONFIG=meson64_a32_defconfig +else KERNEL_ARCH := arm64 -PREFIX_CROSS_COMPILE := aarch64-linux-gnu- +KERNEL_DRIVER_CROSS_COMPILE := aarch64-linux-gnu- KERNEL_CONFIG=meson64_defconfig +endif +OPTEE_MODULES := $(shell pwd)/$(PRODUCT_OUT)/obj/optee_modules include $(CLEAR_VARS) $(info $(shell if [ ! -d $(KERNEL_OUT_DIR) ]; then mkdir -p $(KERNEL_OUT_DIR); fi)) -$(info $(shell if [ ! -e $(KERNEL_OUT_DIR)/include/generated/autoconf.h ]; then $(MAKE) -C $(KERNEL_DIR) O=../$(KERNEL_OUT_DIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(PREFIX_CROSS_COMPILE) $(KERNEL_CONFIG); fi)) - -$(info $(shell if [ ! -e $(KERNEL_OUT_DIR)/include/generated/autoconf.h ]; then $(MAKE) -C $(KERNEL_DIR) O=../$(KERNEL_OUT_DIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(PREFIX_CROSS_COMPILE) modules_prepare; fi)) +$(info $(shell if [ ! -e $(KERNEL_OUT_DIR)/include/generated/autoconf.h ]; then $(MAKE) -C $(KERNEL_DIR) O=../$(KERNEL_OUT_DIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_DRIVER_CROSS_COMPILE) $(KERNEL_CONFIG); fi)) -$(info $(shell $(MAKE) -C $(shell pwd)/$(KERNEL_OUT_DIR) M=$(shell pwd)/$(BOARD_AML_VENDOR_PATH)/tdk/linuxdriver/ ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(PREFIX_CROSS_COMPILE) modules)) -$(info $(shell mkdir -p $(PRODUCT_OUT)/obj/lib)) -$(info $(shell cp -vf $(LOCAL_PATH)/optee/optee_armtz.ko $(PRODUCT_OUT)/obj/lib)) -$(info $(shell cp -vf $(LOCAL_PATH)/optee.ko $(PRODUCT_OUT)/obj/lib)) +$(info $(shell if [ ! -e $(KERNEL_OUT_DIR)/include/generated/autoconf.h ]; then $(MAKE) -C $(KERNEL_DIR) O=../$(KERNEL_OUT_DIR) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_DRIVER_CROSS_COMPILE) modules_prepare; fi)) -armtz_ko_file := $(wildcard $(LOCAL_PATH)/optee/*.ko) -armtz_ko_file := $(patsubst $(LOCAL_PATH)/optee/%,%,$(armtz_ko_file)) +$(info $(shell if [ ! -d $(OPTEE_MODULES) ]; then mkdir -p $(OPTEE_MODULES); fi)) +$(info $(shell cp $(LOCAL_PATH)/* $(OPTEE_MODULES) -rfa)) +$(info $(shell $(MAKE) -C $(shell pwd)/$(KERNEL_OUT_DIR) M=$(OPTEE_MODULES) KERNEL_A32_SUPPORT=$(KERNEL_A32_SUPPORT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_DRIVER_CROSS_COMPILE) modules)) -core_ko_file := $(wildcard $(LOCAL_PATH)/*.ko) -core_ko_file := $(patsubst $(LOCAL_PATH)/%,%,$(core_ko_file)) include $(CLEAR_VARS) LOCAL_MODULE := optee_armtz -LOCAL_SRC_FILES := optee/$(armtz_ko_file) +LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_MODULES)/optee/optee_armtz.ko LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_SUFFIX := .ko @@ -42,7 +43,7 @@ include $(BUILD_PREBUILT) include $(CLEAR_VARS) LOCAL_MODULE := optee -LOCAL_SRC_FILES := $(core_ko_file) +LOCAL_PREBUILT_MODULE_FILE := $(OPTEE_MODULES)/optee.ko LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_SUFFIX := .ko diff --git a/optee/Makefile b/optee/Makefile index 85d2fc9..b104819 100755 --- a/optee/Makefile +++ b/optee/Makefile @@ -8,4 +8,8 @@ optee_armtz-objs += core.o optee_armtz-objs += call.o optee_armtz-objs += rpc.o optee_armtz-objs += supp.o +ifeq ($(KERNEL_A32_SUPPORT), true) +optee_armtz-objs += smccc-call-a32.o +else optee_armtz-objs += smccc-call.o +endif diff --git a/optee/core.c b/optee/core.c index efffb3d..efacf4f 100644 --- a/optee/core.c +++ b/optee/core.c @@ -379,7 +379,12 @@ optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm) return ERR_PTR(-EINVAL); } - va = ioremap_cache(paddr, size); + /* For normal memory we already have a cacheable mapping. */ + if (pfn_valid(__phys_to_pfn(paddr))) + va = (void __iomem *)__phys_to_virt(paddr); + else + va = ioremap_cache(paddr, size); + if (!va) { pr_err("shared memory ioremap failed\n"); return ERR_PTR(-EINVAL); diff --git a/optee/smccc-call-a32.S b/optee/smccc-call-a32.S new file mode 100644 index 0000000..e5d4306 --- a/dev/null +++ b/optee/smccc-call-a32.S @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2015, Linaro Limited + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#include <linux/linkage.h> + +#include <asm/opcodes-sec.h> +#include <asm/opcodes-virt.h> +#include <asm/unwind.h> + + /* + * Wrap c macros in asm macros to delay expansion until after the + * SMCCC asm macro is expanded. + */ + .macro SMCCC_SMC + __SMC(0) + .endm + + .macro SMCCC_HVC + __HVC(0) + .endm + + .macro SMCCC instr +UNWIND( .fnstart) + mov r12, sp + push {r4-r7} +UNWIND( .save {r4-r7}) + ldm r12, {r4-r7} + \instr + pop {r4-r7} + ldr r12, [sp, #(4 * 4)] + stm r12, {r0-r3} + bx lr +UNWIND( .fnend) + .endm + +/* + * void smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2, + * unsigned long a3, unsigned long a4, unsigned long a5, + * unsigned long a6, unsigned long a7, struct arm_smccc_res *res, + * struct arm_smccc_quirk *quirk) + */ +ENTRY(__arm_smccc_smc) + SMCCC SMCCC_SMC +ENDPROC(__arm_smccc_smc) + +/* + * void smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2, + * unsigned long a3, unsigned long a4, unsigned long a5, + * unsigned long a6, unsigned long a7, struct arm_smccc_res *res, + * struct arm_smccc_quirk *quirk) + */ +ENTRY(__arm_smccc_hvc) + SMCCC SMCCC_HVC +ENDPROC(__arm_smccc_hvc) |