summaryrefslogtreecommitdiff
authorChao 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)
commit3e78c51775a2ec96a9013db377fc363bb98fcb54 (patch)
tree1228167951f6408df4e7ea297a8b632cde4ec669
parent6e3eadec2ed80f4b18782828ccee340fb11e65a0 (diff)
downloadtdk_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>
Diffstat
-rwxr-xr-xAndroid.mk31
-rwxr-xr-xoptee/Makefile4
-rw-r--r--optee/core.c7
-rw-r--r--optee/smccc-call-a32.S64
4 files changed, 90 insertions, 16 deletions
diff --git a/Android.mk b/Android.mk
index 576419f..de85d75 100755
--- a/Android.mk
+++ b/Android.mk
@@ -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)