[Feature][T8TSK-81][SDK]Merge T800_SDK meta file into T800 repo

Change-Id: I9b637e1abfbee16698839ee0ec3e38782cb22c48
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/COPYING.MIT b/meta-sdk/meta/meta-lynqSDK-T800/COPYING.MIT
new file mode 100644
index 0000000..fb950dc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is 
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
+THE SOFTWARE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/LICENSE
new file mode 100644
index 0000000..79d493b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/LICENSE
@@ -0,0 +1 @@
+All metadata in this layer is MIT licensed unless otherwise stated, see COPYING.MIT.
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/README b/meta-sdk/meta/meta-lynqSDK-T800/README
new file mode 100644
index 0000000..ebbb909
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/README
@@ -0,0 +1,41 @@
+This README file contains information on the contents of the meta-lynqSDK-T800 layer.
+
+Please see the corresponding sections below for details.
+
+Dependencies
+============
+
+  URI: <first dependency>
+  branch: <branch name>
+
+  URI: <second dependency>
+  branch: <branch name>
+
+  .
+  .
+  .
+
+Patches
+=======
+
+Please submit any patches against the meta-lynqSDK-T800 layer to the xxxx mailing list (xxxx@zzzz.org)
+and cc: the maintainer:
+
+Maintainer: XXX YYYYYY <xxx.yyyyyy@zzzzz.com>
+
+Table of Contents
+=================
+
+  I. Adding the meta-lynqSDK-T800 layer to your build
+ II. Misc
+
+
+I. Adding the meta-lynqSDK-T800 layer to your build
+=================================================
+
+Run 'bitbake-layers add-layer meta-lynqSDK-T800'
+
+II. Misc
+========
+
+--- replace with specific information about the meta-lynqSDK-T800 layer ---
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/md-fitimage.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/md-fitimage.bbclass
new file mode 100644
index 0000000..1a48a6e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/md-fitimage.bbclass
@@ -0,0 +1,148 @@
+inherit hsm-sign-env
+
+python __anonymous () {
+        depends = d.getVar("DEPENDS", True)
+        depends = "%s u-boot-mkimage-native lz4-native" % depends
+        d.setVar("DEPENDS", depends)
+}
+
+#
+# Emit the fitImage ITS header
+#
+fitimage_emit_fit_header() {
+        cat << EOF >> ${WORKDIR}/fit-image.its
+/dts-v1/;
+
+/ {
+        description = "MD fitImage";
+        #address-cells = <1>;
+EOF
+}
+
+#
+# Emit the fitImage section bits
+#
+# $1 ... Section bit type: imagestart - image section start
+#                          confstart  - configuration section start
+#                          sectend    - section end
+#                          fitend     - fitimage end
+#
+fitimage_emit_section_maint() {
+        case $1 in
+        imagestart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        images {
+EOF
+        ;;
+        confstart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        configurations {
+EOF
+        ;;
+        sectend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+        };
+EOF
+        ;;
+        fitend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+};
+EOF
+        ;;
+        esac
+}
+
+fitimage_emit_section_md() {
+
+        if [ -n "${IMAGE_HASH_ALGO}" ] ; then
+            md_csum="${IMAGE_HASH_ALGO}"
+        else
+            md_csum="sha256"
+        fi
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                md1img_1 {
+                        description = "LK based MD Image";
+                        data = /incbin/("${1}");
+                        type = "kernel";
+                        arch = "arm";
+                        os = "linux";
+                        compression = "none";
+                        load = <${MD_LOADADDRESS}>;
+                        entry = <${MD_ENTRYPOINT}>;
+                        hash_1 {
+                                algo = "${md_csum}";
+                        };
+                };
+EOF
+}
+
+#
+# Emit the fitImage ITS configuration section
+#
+fitimage_emit_section_config_md() {
+
+        if [ -n "${VB_HASH_ALGO}" ] && [ -n "${VB_RSA_ALGO}" ] ; then
+            conf_csum="${VB_HASH_ALGO},${VB_RSA_ALGO}"
+        else
+            conf_csum="sha256,rsa2048"
+        fi
+        conf_key_name="dev"
+
+        conf_desc="${MTK_PROJECT} configuration"
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                default = "conf_1";
+                conf_1 {
+                        description = "${conf_desc}";
+                        kernel = "md1img_1";
+                        signature_1 {
+                                algo = "${conf_csum}";
+                                key-name-hint="${conf_key_name}";
+                                sign-images = "kernel";
+                        };
+                };
+EOF
+}
+
+do_assemble_mdfitimage() {
+
+                rm -f ${WORKDIR}/fit-image.its
+
+                fitimage_emit_fit_header
+
+                #
+                # Step 1: Prepare a md image section.
+                #
+                fitimage_emit_section_maint imagestart
+
+
+                fitimage_emit_section_md ${WORKDIR}/modem-org.img
+
+                fitimage_emit_section_maint sectend
+
+                #
+                # Step 2: Prepare a configurations section
+                #
+                fitimage_emit_section_maint confstart
+
+                fitimage_emit_section_config_md
+
+                fitimage_emit_section_maint sectend
+
+                fitimage_emit_section_maint fitend
+
+                #
+                # Step 3: Assemble the image
+                #
+                ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -f ${WORKDIR}/fit-image.its ${WORKDIR}/${MD_IMAGE}
+
+                if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+                        mkdir -p ${WORKDIR}/mykeys
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+                        ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -k ${WORKDIR}/mykeys -f ${WORKDIR}/fit-image.its -r ${WORKDIR}/${MD_IMAGE}
+                fi
+}
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mddsp-fitimage.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mddsp-fitimage.bbclass
new file mode 100644
index 0000000..593df1c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mddsp-fitimage.bbclass
@@ -0,0 +1,147 @@
+inherit hsm-sign-env
+
+python __anonymous () {
+        depends = d.getVar("DEPENDS", True)
+        depends = "%s u-boot-mkimage-native lz4-native" % depends
+        d.setVar("DEPENDS", depends)
+}
+
+#
+# Emit the fitImage ITS header
+#
+fitimage_emit_fit_header() {
+        cat << EOF >> ${WORKDIR}/fit-image.its
+/dts-v1/;
+
+/ {
+        description = "MD dsp fitImage";
+        #address-cells = <1>;
+EOF
+}
+
+#
+# Emit the fitImage section bits
+#
+# $1 ... Section bit type: imagestart - image section start
+#                          confstart  - configuration section start
+#                          sectend    - section end
+#                          fitend     - fitimage end
+#
+fitimage_emit_section_maint() {
+        case $1 in
+        imagestart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        images {
+EOF
+        ;;
+        confstart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        configurations {
+EOF
+        ;;
+        sectend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+        };
+EOF
+        ;;
+        fitend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+};
+EOF
+        ;;
+        esac
+}
+
+fitimage_emit_section_dsp() {
+
+        if [ -n "${IMAGE_HASH_ALGO}" ] ; then
+            md_csum="${IMAGE_HASH_ALGO}"
+        else
+            md_csum="sha256"
+        fi
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                md1dsp_1 {
+                        description = "LK based MD dsp Image";
+                        data = /incbin/("${1}");
+                        type = "kernel";
+                        arch = "arm";
+                        os = "linux";
+                        compression = "none";
+                        load = <${MDDSP_LOADADDRESS}>;
+                        entry = <${MDDSP_ENTRYPOINT}>;
+                        hash_1 {
+                                algo = "${md_csum}";
+                        };
+                };
+EOF
+}
+
+#
+# Emit the fitImage ITS configuration section
+#
+fitimage_emit_section_config_dsp() {
+
+        if [ -n "${VB_HASH_ALGO}" ] && [ -n "${VB_RSA_ALGO}" ] ; then
+            conf_csum="${VB_HASH_ALGO},${VB_RSA_ALGO}"
+        else
+            conf_csum="sha256,rsa2048"
+        fi
+        conf_key_name="dev"
+
+        conf_desc="${MTK_PROJECT} configuration"
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                default = "conf_1";
+                conf_1 {
+                        description = "${conf_desc}";
+                        kernel = "md1dsp_1";
+                        signature_1 {
+                                algo = "${conf_csum}";
+                                key-name-hint="${conf_key_name}";
+                                sign-images = "kernel";
+                        };
+                };
+EOF
+}
+
+do_assemble_fitimage() {
+                rm -f ${WORKDIR}/fit-image.its
+
+                fitimage_emit_fit_header
+
+                #
+                # Step 1: Prepare a md image section.
+                #
+                fitimage_emit_section_maint imagestart
+
+
+                fitimage_emit_section_dsp ${WORKDIR}/dsp-org.bin
+
+                fitimage_emit_section_maint sectend
+
+                #
+                # Step 2: Prepare a configurations section
+                #
+                fitimage_emit_section_maint confstart
+
+                fitimage_emit_section_config_dsp
+
+                fitimage_emit_section_maint sectend
+
+                fitimage_emit_section_maint fitend
+
+                #
+                # Step 3: Assemble the image
+                #
+                ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -f ${WORKDIR}/fit-image.its ${WORKDIR}/${MDDSP_IMAGE}
+
+                if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+                        mkdir -p ${WORKDIR}/mykeys
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+                        ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -k ${WORKDIR}/mykeys -f ${WORKDIR}/fit-image.its -r ${WORKDIR}/${MDDSP_IMAGE}
+                fi
+}
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/medmcu-fitimage.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/medmcu-fitimage.bbclass
new file mode 100644
index 0000000..93dbc02
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/medmcu-fitimage.bbclass
@@ -0,0 +1,163 @@
+inherit hsm-sign-env
+
+python __anonymous () {
+    medmcutype = d.getVar('MEDMCU_IMAGETYPE', True)
+    if medmcutype == 'fitImage':
+        depends = d.getVar("DEPENDS", True)
+        depends = "%s u-boot-mkimage-native lz4-native dtc-native " % depends
+        d.setVar("DEPENDS", depends)
+}
+
+#
+# Emit the fitImage ITS header
+#
+fitimage_emit_fit_header() {
+        cat << EOF >> ${WORKDIR}/fit-image.its
+/dts-v1/;
+
+/ {
+        description = "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}";
+        #address-cells = <1>;
+EOF
+}
+
+#
+# Emit the fitImage section bits
+#
+# $1 ... Section bit type: imagestart - image section start
+#                          confstart  - configuration section start
+#                          sectend    - section end
+#                          fitend     - fitimage end
+#
+fitimage_emit_section_maint() {
+        case $1 in
+        imagestart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        images {
+EOF
+        ;;
+        confstart)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+
+        configurations {
+EOF
+        ;;
+        sectend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+        };
+EOF
+        ;;
+        fitend)
+                cat << EOF >> ${WORKDIR}/fit-image.its
+};
+EOF
+        ;;
+        esac
+}
+
+#
+# Emit the fitImage ITS medmcu section
+#
+# $1 ... Path to medmcu image
+# $2 ... Compression type
+fitimage_emit_section_medmcu() {
+
+        if [ -n "${IMAGE_HASH_ALGO}" ] ; then
+            medmcu_csum="${IMAGE_HASH_ALGO}"
+        else
+            medmcu_csum="sha256"
+        fi
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                medmcu_1 {
+                        description = "medmcu";
+                        data = /incbin/("${1}");
+                        type = "kernel";
+                        arch = "arm";
+                        os = "linux";
+                        compression = "none";
+                        load = <${MEDMCU_LOADADDRESS}>;
+                        entry = <${MEDMCU_ENTRYPOINT}>;
+                        hash_1 {
+                                algo = "${medmcu_csum}";
+                        };
+                };
+EOF
+}
+
+#
+# Emit the fitImage ITS configuration section
+#
+# $1 ... medmcu image ID
+fitimage_emit_section_config() {
+
+        if [ -n "${VB_HASH_ALGO}" -a -n "${VB_RSA_ALGO}" ] ; then
+            conf_csum="${VB_HASH_ALGO},${VB_RSA_ALGO}"
+        else
+            conf_csum="sha256,rsa2048"
+        fi
+        conf_key_name="dev"
+        conf_desc="medmcu configuration"
+
+        medmcu_line="kernel = \"medmcu_1\";"
+        sign_images_line="sign-images = \"kernel\";"
+
+        cat << EOF >> ${WORKDIR}/fit-image.its
+                default = "conf_1";
+                conf_1 {
+                        description = "${conf_desc}";
+                        ${medmcu_line}
+                        signature_1 {
+                                algo = "${conf_csum}";
+                                key-name-hint="${conf_key_name}";
+                                ${sign_images_line}
+                        };
+                };
+EOF
+}
+
+do_assemble_fitimage() {
+                rm -f ${WORKDIR}/fit-image.its
+
+                fitimage_emit_fit_header
+
+                #
+                # Step 1: Prepare a medmcu image section.
+                #
+                fitimage_emit_section_maint imagestart
+
+                fitimage_emit_section_medmcu ${MEDMCU_OUT}/${MEDMCU_BINARY_SELECT}
+
+                fitimage_emit_section_maint sectend
+
+                #
+                # Step 2: Prepare a configurations section
+                #
+                fitimage_emit_section_maint confstart
+
+                fitimage_emit_section_config
+
+                fitimage_emit_section_maint sectend
+
+                fitimage_emit_section_maint fitend
+
+                #
+                # Step 3: Assemble the image
+                #
+
+                if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+                        if [ "${STANDALONE_SIGN_PREPARE}" = "yes" ];then
+                                ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -f ${WORKDIR}/fit-image.its ${MEDMCU_OUT}/${MEDMCU_BINARY}
+                                exit 0
+                        fi
+                        mkdir -p ${WORKDIR}/mykeys
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+                        cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+                        ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -k ${WORKDIR}/mykeys -f ${WORKDIR}/fit-image.its -r ${MEDMCU_OUT}/${MEDMCU_BINARY}
+                else
+                        ${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -f ${WORKDIR}/fit-image.its ${MEDMCU_OUT}/${MEDMCU_BINARY}
+                fi
+}
+
+addtask assemble_fitimage before do_deploy after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mkmcf.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkmcf.bbclass
new file mode 100644
index 0000000..915ae45
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkmcf.bbclass
@@ -0,0 +1,61 @@
+IMAGE_FSTYPES_NO_WHITESPACE="$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"
+MCF_FS_PARTITION = "mcf_fs.ubi"
+
+DEPENDS += "mtd-utils-native coreutils-native"
+
+mk_mcf_image() {
+	if test -f ${DEPLOY_DIR_IMAGE}/MCF_OTA_FILES.tar.gz; then
+		cd ${WORKDIR}
+
+		# Create empty directory for MCF_OTA_1
+		rm -rf MCF_OTA_1
+		mkdir MCF_OTA_1
+
+		# Extract tar to MCF_OTA_2
+		rm -rf MCF_OTA_2
+		mkdir MCF_OTA_2
+		tar zxvf ${DEPLOY_DIR_IMAGE}/MCF_OTA_FILES.tar.gz -C MCF_OTA_2
+
+		if test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ubi" || test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "squashfs"; then
+			echo \[ubifs\] > ubinize_mcf.cfg
+			echo mode=ubi >> ubinize_mcf.cfg
+			echo image=${MCF_FS_PARTITION} >> ubinize_mcf.cfg
+			echo vol_id=0 >> ubinize_mcf.cfg
+			echo vol_type=dynamic >> ubinize_mcf.cfg
+			echo vol_name=mcf >> ubinize_mcf.cfg
+			echo vol_flags=autoresize >> ubinize_mcf.cfg
+
+			# MCF_OTA_1
+			echo mkfs.ubifs -r MCF_OTA_1 ${MKUBIFS_MCF_ARGS} -o ${MCF_FS_PARTITION}
+			mkfs.ubifs -r MCF_OTA_1 ${MKUBIFS_MCF_ARGS} -o ${MCF_FS_PARTITION}
+
+			echo ubinize -o MCF_MOD_OTA.img ${UBINIZE_ARGS} ubinize_mcf.cfg
+			ubinize -o ${DEPLOY_DIR_IMAGE}/MCF_MOD_OTA.img ${UBINIZE_ARGS} ubinize_mcf.cfg
+
+			rm ${MCF_FS_PARTITION}
+
+			# MCF_OTA_2
+			echo mkfs.ubifs -r MCF_OTA_2 ${MKUBIFS_MCF_ARGS} -o ${MCF_FS_PARTITION}
+			mkfs.ubifs -r MCF_OTA_2 ${MKUBIFS_MCF_ARGS} -o ${MCF_FS_PARTITION}
+
+			echo ubinize -o MCF_OEM_OTA.img ${UBINIZE_ARGS} ubinize_mcf.cfg
+			ubinize -o ${DEPLOY_DIR_IMAGE}/MCF_OEM_OTA.img ${UBINIZE_ARGS} ubinize_mcf.cfg
+
+		elif test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ext4"; then
+			# MCF_OTA_1
+			dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/MCF_MOD_OTA.img seek=4096 count=0 bs=1k
+			mkfs.ext4 -F -i 4096 ${DEPLOY_DIR_IMAGE}/MCF_MOD_OTA.img -d MCF_OTA_1
+
+			# MCF_OTA_2
+			dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/MCF_OEM_OTA.img seek=4096 count=0 bs=1k
+			mkfs.ext4 -F -i 4096 ${DEPLOY_DIR_IMAGE}/MCF_OEM_OTA.img -d MCF_OTA_2
+		else
+			echo "This type of file system is not supported for MCF image: ${IMAGE_FSTYPES_NO_WHITESPACE}"
+		fi
+
+		cd -
+	fi
+}
+
+ROOTFS_POSTPROCESS_COMMAND += " mk_mcf_image;"
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mknvram.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mknvram.bbclass
new file mode 100644
index 0000000..eff4459
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mknvram.bbclass
@@ -0,0 +1,45 @@
+NVRAM_DIR_IMAGE_SIZE ?= "20480"

+NVRAM_DIR_IMAGE_PATH = "${DEPLOY_DIR_IMAGE}/nvram"

+IMAGE_FSTYPES_NO_WHITESPACE="$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"

+NVRAM_FS_PARTITION = "nvram_fs.ubi"

+NVRAM_PARTITION = "nvram.ubi"

+DEPENDS += "mtd-utils-native coreutils-native"

+mk_nvram_image() {

+

+	rm -rf ${NVRAM_DIR_IMAGE_PATH}

+	mkdir -p ${NVRAM_DIR_IMAGE_PATH}

+

+	touch ${NVRAM_DIR_IMAGE_PATH}/raw

+	truncate -s 16384K ${NVRAM_DIR_IMAGE_PATH}/raw

+

+  if test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ubi" || test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "squashfs"; then

+	echo \[ubifs\] > ubinize_nvram.cfg

+	echo mode=ubi >> ubinize_nvram.cfg

+	echo image=${DEPLOY_DIR_IMAGE}/${NVRAM_FS_PARTITION} >> ubinize_nvram.cfg

+	echo vol_id=0 >> ubinize_nvram.cfg

+	echo vol_size=20480KiB >> ubinize_nvram.cfg

+	echo vol_type=dynamic >> ubinize_nvram.cfg

+	echo vol_name=nvram >> ubinize_nvram.cfg

+	echo vol_flags=autoresize >> ubinize_nvram.cfg

+	echo dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${NVRAM_FS_PARTITION} seek=${NVRAM_DIR_IMAGE_SIZE} count=0 bs=1k

+	dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${NVRAM_FS_PARTITION} seek=${NVRAM_DIR_IMAGE_SIZE} count=0 bs=1k

+

+	echo mkfs.ubifs -r ${NVRAM_DIR_IMAGE_PATH} ${MKUBIFS_NVRAM_CONFIG_ARGS} -o ${DEPLOY_DIR_IMAGE}/${NVRAM_FS_PARTITION}

+	mkfs.ubifs -r ${NVRAM_DIR_IMAGE_PATH} ${MKUBIFS_NVRAM_CONFIG_ARGS} -o ${DEPLOY_DIR_IMAGE}/${NVRAM_FS_PARTITION}

+

+	echo ubinize -o ${NVRAM_PARTITION} ${UBINIZE_ARGS} ubinize_nvram.cfg

+	ubinize -o ${NVRAM_PARTITION} ${UBINIZE_ARGS} ubinize_nvram.cfg

+

+	cp ${NVRAM_PARTITION} ${DEPLOY_DIR_IMAGE}/${NVRAM_PARTITION}

+

+  elif test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ext4"; then

+	STATE_PARTITION="nvram.ext4"

+	dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} seek=${NVRAM_DIR_IMAGE_SIZE} count=0 bs=1k

+	mkfs.ext4 -F -i 4096 ${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} -d ${NVRAM_DIR_IMAGE_PATH}

+	else

+	echo "No method to make ${IMAGE_FSTYPES_NO_WHITESPACE} type state image"

+  fi

+}

+

+ROOTFS_POSTPROCESS_COMMAND += " mk_nvram_image;"

+

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemapp2img.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemapp2img.bbclass
new file mode 100755
index 0000000..6c3d6a1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemapp2img.bbclass
@@ -0,0 +1,15 @@
+IMAGE_FSTYPES_NO_WHITESPACE ?= "$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"
+EXTRA_DIR_OEMAPP2_IMAGE_PATH := "${DEPLOY_DIR_IMAGE}/oemapp2"
+
+mk_oemapp2_image(){
+	if [ ! -d "$EXTRA_DIR_OEMAPP2_IMAGE_PATH" ]; then
+		mkdir -p ${EXTRA_DIR_OEMAPP2_IMAGE_PATH}
+		#echo "just test mount a read-write directory /oemapp2 12 22222222222222222" > ${EXTRA_DIR_OEMAPP2_IMAGE_PATH}/test.txt
+	fi
+
+	OEMAPP_IMG="oemapp2.img"	
+	mksquashfs ${EXTRA_DIR_OEMAPP2_IMAGE_PATH} ${DEPLOY_DIR_IMAGE}/${OEMAPP_IMG} -b 64K -comp xz -noappend
+}
+
+
+ROOTFS_POSTPROCESS_COMMAND += " mk_oemapp2_image;"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemappimg.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemappimg.bbclass
new file mode 100755
index 0000000..e3faf0c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemappimg.bbclass
@@ -0,0 +1,16 @@
+IMAGE_FSTYPES_NO_WHITESPACE ?= "$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"
+EXTRA_DIR_OEMAPP_IMAGE_PATH := "${DEPLOY_DIR_IMAGE}/oemapp"
+
+mk_oemapp_image(){
+	if [ ! -d "$EXTRA_DIR_OEMAPP_IMAGE_PATH" ]; then
+		mkdir -p ${EXTRA_DIR_OEMAPP_IMAGE_PATH}
+		#echo "just test mount a read-write directory /oemapp 12 1111111111" > ${EXTRA_DIR_OEMAPP_IMAGE_PATH}/test.txt
+	fi
+
+	ls ${EXTRA_DIR_OEMAPP_IMAGE_PATH}
+	OEMAPP_IMG="oemapp.img"	
+	mksquashfs ${EXTRA_DIR_OEMAPP_IMAGE_PATH} ${DEPLOY_DIR_IMAGE}/${OEMAPP_IMG} -b 64K -comp xz -noappend
+}
+
+
+ROOTFS_POSTPROCESS_COMMAND += " mk_oemapp_image;"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemdataimg.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemdataimg.bbclass
new file mode 100755
index 0000000..bdd9b21
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkoemdataimg.bbclass
@@ -0,0 +1,29 @@
+IMAGE_FSTYPES_NO_WHITESPACE ?= "$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"
+EXTRA_DIR_IMAGE_PATH := "${DEPLOY_DIR_IMAGE}/oemdata"
+
+mk_oemdata_image(){
+	if [ ! -d "$EXTRA_DIR_IMAGE_PATH" ]; then
+		mkdir -p ${EXTRA_DIR_IMAGE_PATH}
+		#echo "just test mount a read-write directory /oemdata" > ${EXTRA_DIR_IMAGE_PATH}/test.txt
+	fi
+
+	STATE_PARTITION="oemdata.ubifs"
+	STATE_UBI="oemdata.img"	
+	STATE_UBINIZE_CFG="oemdata.cfg"
+	cat << EOF > ${STATE_UBINIZE_CFG}
+[ubifs]
+mode=ubi
+image=${DEPLOY_DIR_IMAGE}/${STATE_PARTITION}
+vol_id=0
+vol_type=dynamic
+vol_name=oemdata
+vol_flags=autoresize
+EOF
+
+	#mkfs.ubifs -r ${EXTRA_DIR_IMAGE_PATH} -m 4096 -e 253952 -c 240 -o ${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} ${MKUBIFS_ARGS}
+	#ubinize -o ${DEPLOY_DIR_IMAGE}/${STATE_UBI} -m 4096 -p 256KiB -s 4096 ${UBINIZE_ARGS} ${STATE_UBINIZE_CFG}
+
+	mkfs.ubifs -r ${EXTRA_DIR_IMAGE_PATH} -o ${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} ${MKUBIFS_ARGS}
+	ubinize -o ${DEPLOY_DIR_IMAGE}/${STATE_UBI} ${UBINIZE_ARGS} ${STATE_UBINIZE_CFG}
+}
+ROOTFS_POSTPROCESS_COMMAND += " mk_oemdata_image;"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/mkuserdataimg.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkuserdataimg.bbclass
new file mode 100644
index 0000000..446d4ca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/mkuserdataimg.bbclass
@@ -0,0 +1,68 @@
+STATE_DIR_IMAGE_SIZE ?= "131072"

+STATE_DIR_IMAGE_PATH = "${DEPLOY_DIR_IMAGE}/state"

+STATE_DIR_CONTENT ?= "${IMAGE_ROOTFS}/home ${IMAGE_ROOTFS}/var ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d ${STATE_DIR_IMAGE_PATH}/usr/local ${STATE_DIR_IMAGE_PATH}/srv"

+IMAGE_FSTYPES_NO_WHITESPACE="$(echo "${IMAGE_FSTYPES}" | tr -d '[:space:]')"

+DEPENDS += "mtd-utils-native"

+

+mk_state_image() {

+    rm -rf ${STATE_DIR_IMAGE_PATH}

+    install -d ${STATE_DIR_CONTENT}

+    for i in ${STATE_DIR_CONTENT}; do

+        STATE_DIR_FILE_PATH=${STATE_DIR_IMAGE_PATH}/${i##${IMAGE_ROOTFS}}

+        install -d ${STATE_DIR_FILE_PATH}

+        cp -a ${i}/. ${STATE_DIR_FILE_PATH}

+    done

+

+    # remove package management data

+    if [ -d "${STATE_DIR_IMAGE_PATH}/var/lib/dnf" ]; then

+        rm -rf ${STATE_DIR_IMAGE_PATH}/var/lib/dnf

+    fi

+    if [ -d "${STATE_DIR_IMAGE_PATH}/var/lib/rpm" ]; then

+        rm -rf ${STATE_DIR_IMAGE_PATH}/var/lib/rpm

+    fi

+

+    if test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ubi" || test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "squashfs"; then

+        STATE_PARTITION="userdata.ubifs"

+        STATE_UBI="userdata.ubi"

+        STATE_UBINIZE_CFG="ubinize-state.cfg"

+        dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} seek=${STATE_DIR_IMAGE_SIZE} count=0 bs=1k

+        cat << EOF > ${STATE_UBINIZE_CFG}

+[ubifs]

+mode=ubi

+image=${DEPLOY_DIR_IMAGE}/${STATE_PARTITION}

+vol_id=0

+vol_type=dynamic

+vol_name=state

+vol_flags=autoresize

+EOF

+        mkfs.ubifs -r ${STATE_DIR_IMAGE_PATH} -o ${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} ${MKUBIFS_ARGS}

+        ubinize -o ${DEPLOY_DIR_IMAGE}/${STATE_UBI} ${UBINIZE_ARGS} ${STATE_UBINIZE_CFG}

+    elif test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "ext4"; then

+        STATE_PARTITION="userdata.ext4"

+        dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} seek=${STATE_DIR_IMAGE_SIZE} count=0 bs=1k

+        mkfs.ext4 -F -i 4096 ${DEPLOY_DIR_IMAGE}/${STATE_PARTITION} -d ${STATE_DIR_IMAGE_PATH}

+    else

+        echo "No method to make ${IMAGE_FSTYPES_NO_WHITESPACE} type state image"

+    fi

+}

+

+ROOTFS_POSTPROCESS_COMMAND += " mk_state_image;"

+

+mk_rootfs_folder() {

+    install -d ${IMAGE_ROOTFS}/mnt/userdata ${IMAGE_ROOTFS}/srv

+    if test "${DISTRO}" != "poky-agl"; then

+        install -d ${IMAGE_ROOTFS}/usr/local

+    fi

+}

+

+ROOTFS_PREPROCESS_COMMAND += " mk_rootfs_folder;"

+

+do_sparse_userdata_image() {

+if test -e ${DEPLOY_DIR_IMAGE}/userdata.ubi ; then

+    img2simg ${DEPLOY_DIR_IMAGE}/userdata.ubi ${DEPLOY_DIR_IMAGE}/userdata.img

+elif test -e ${DEPLOY_DIR_IMAGE}/userdata.ext4 ; then

+    img2simg ${DEPLOY_DIR_IMAGE}/userdata.ext4 ${DEPLOY_DIR_IMAGE}/userdata.img

+fi

+}

+

+do_image_complete[postfuncs] += "do_sparse_userdata_image"

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-image-build.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-image-build.bbclass
new file mode 100644
index 0000000..a0ec4fe
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-image-build.bbclass
@@ -0,0 +1,122 @@
+TZ_BINARY = "tee.img"
+ATF_RAW_BINARY="atf_raw.img"
+ATF_SIGNED_BINARY="atf_signed.img"
+
+TZ_RAW_BINARY= "tz.raw.img"
+TZ_SIGNED_BINARY = "tz_signed.img"
+
+TZ_TMP_SIGNED_BINARY = "tz_tmp_signed.img"
+TZ_TMP_RAW_BINARY = "tz_tmp_raw.img"
+TZ_TMP_BINARY = "tz_tmp.img"
+
+TRUSTEDOS_RAW_BINARY = "trusedos.img"
+TRUSTEDOS_SIGNED_BINARY = "trusedos_signed.img"
+
+TZ_ASSEMBLE_OUT = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TL_ALIGN_SIZE = "0xb000"
+
+TRUSTZONE_VERSION = "20200422"
+
+do_mkdir_assemble () {
+        mkdir -p ${TZ_ASSEMBLE_OUT}
+}
+addtask mkdir_assemble before do_compile after do_configure
+
+python __anonymous () {
+        tee_loadaddress = d.getVar('TRUSTZONE_LOADADDRESS', True)
+        tee_entrypoint = d.getVar('TRUSTZONE_ENTRYPOINT', True)
+        if tee_loadaddress is None or tee_entrypoint is None:
+                return
+        else:
+                tee_loadaddress = int(tee_loadaddress, 16)
+                tee_entrypoint = int(tee_entrypoint, 16)
+
+        tl_align_size = int(d.getVar('TL_ALIGN_SIZE', True), 16)
+        tee_loadaddress = tee_loadaddress - tl_align_size
+        tee_loadaddress_str = hex(tee_loadaddress).replace('L', '')
+        d.setVar('TEE_LOADADDRESS', tee_loadaddress_str)
+
+        tee_entrypoint = tee_entrypoint - tl_align_size
+        tee_entrypoint_str = hex(tee_entrypoint).replace('L', '')
+        d.setVar('TEE_ENTRYPOINT', tee_entrypoint_str)
+
+        image_desc = d.getVar('DESCRIPTION', True)
+        if image_desc == 'ARM trusted firmware':
+                atf_src = d.getVar('MTK_SRC', True)
+                mach_type = d.getVar('MTK_MACH_TYPE', True)
+                tee_support = d.getVar('TEE_SUPPORT', True)
+                atf_ver = d.getVar('ATF_VER', True)
+
+                if os.path.exists(atf_src+'/.git'):
+                        bb.warn('please change your atf folder to new layout')
+                        # backward to old atf layout
+                        # change the mt8516 to v1.21 folder
+                        # others remain the original path
+                        if mach_type == "mt8516":
+                                d.setVar('ATF_VER','1.21')
+                else:
+                        # new atf layout, change to use folder atf_tbase
+                        # if tee_support is tbase and atf version is 1.0
+                        if tee_support == 'tbase' and atf_ver == '1.0':
+                                d.setVar('B',atf_src+'_'+tee_support)
+                        else:
+                                # change folder to CHIP_TYPE {mt2xxx/mt8xxx}
+                                tgtplt = d.getVar('TARGET_PLATFORM', True)
+                                if tgtplt[0:3] == "mt2":
+                                    d.setVar('CHIP_TYPE', tgtplt[0:3]+'xxx')
+                                else:
+                                    atf_path = os.path.join(atf_src,"v"+atf_ver,tgtplt)
+                                    if os.path.exists(atf_path+'/.git'):
+                                        d.setVar('CHIP_TYPE', tgtplt)
+                                    else:
+                                        d.setVar('CHIP_TYPE', 'mt8xxx')
+
+        if image_desc == 'TrustZone Image':
+                multilibs = d.getVar('MULTILIBS', True)
+                if multilibs == 'multilib:lib64':
+                        d.appendVarFlag('do_cleansstate', 'depends', ' lib64-teeloader-image:do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' lib64-teeloader-image:do_deploy')
+                else:
+                        d.appendVarFlag('do_cleansstate', 'depends', ' teeloader-image:do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' teeloader-image:do_deploy')
+
+                atfsupport = d.getVar('ATF_SUPPORT', True)
+                if atfsupport == 'yes':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-atf-image:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-atf-image:do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' atf:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' atf-image:do_deploy')
+
+                tee_support = d.getVar('TEE_SUPPORT', True)
+                if tee_support is None:
+                        tee_support = "mtee"
+                        d.appendVarFlag('do_cleansstate', 'depends', ' tee-'+tee_support+':do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' tee-'+tee_support+':do_deploy')
+                if tee_support == 'optee':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-optee-os:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-optee-os:do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' optee-os-image:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' optee-os-image:do_deploy')
+                elif tee_support != 'none':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-tee-'+tee_support+':do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-tee-'+tee_support+':do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' tee-'+tee_support+':do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' tee-'+tee_support+':do_deploy')
+
+        secure_boot_enable = d.getVar('SECURE_BOOT_ENABLE', True)
+        force_disable_tee_encryption = d.getVar('FORCE_DISABLE_TEE_ENCRYPTION', True)
+        if  secure_boot_enable == 'yes' and force_disable_tee_encryption != 'yes' :
+                d.setVar("ATF_BINARY_SELECT", '${ATF_SIGNED_BINARY}')
+                d.setVar("TZ_BINARY_SELECT", '${TZ_SIGNED_BINARY}')
+                d.setVar("TRUSTEDOS_BINARY_SELECT", '${TRUSTEDOS_SIGNED_BINARY}')
+        else:
+                d.setVar("ATF_BINARY_SELECT", '${ATF_RAW_BINARY}')
+                d.setVar("TZ_BINARY_SELECT", '${TZ_RAW_BINARY}')
+                d.setVar("TRUSTEDOS_BINARY_SELECT", '${TRUSTEDOS_RAW_BINARY}')
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-src-build.bbclass b/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-src-build.bbclass
new file mode 100755
index 0000000..ee914d3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/classes/trustzone-src-build.bbclass
@@ -0,0 +1,123 @@
+TZ_BINARY = "tee.img"
+ATF_RAW_BINARY="atf_raw.img"
+ATF_SIGNED_BINARY="atf_signed.img"
+
+TZ_RAW_BINARY= "tz.raw.img"
+TZ_SIGNED_BINARY = "tz_signed.img"
+
+TZ_TMP_SIGNED_BINARY = "tz_tmp_signed.img"
+TZ_TMP_RAW_BINARY = "tz_tmp_raw.img"
+TZ_TMP_BINARY = "tz_tmp.img"
+
+TRUSTEDOS_RAW_BINARY = "trusedos.img"
+TRUSTEDOS_SIGNED_BINARY = "trusedos_signed.img"
+
+TZ_ASSEMBLE_OUT = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TL_ALIGN_SIZE = "0xb000"
+
+TRUSTZONE_VERSION = "20200422"
+
+
+do_mkdir_assemble () {
+        mkdir -p ${TZ_ASSEMBLE_OUT}
+}
+addtask mkdir_assemble before do_compile after do_configure
+
+python __anonymous () {
+        tee_loadaddress = d.getVar('TRUSTZONE_LOADADDRESS', True)
+        tee_entrypoint = d.getVar('TRUSTZONE_ENTRYPOINT', True)
+        if tee_loadaddress is None or tee_entrypoint is None:
+                return
+        else:
+                tee_loadaddress = int(tee_loadaddress, 16)
+                tee_entrypoint = int(tee_entrypoint, 16)
+
+        tl_align_size = int(d.getVar('TL_ALIGN_SIZE', True), 16)
+        tee_loadaddress = tee_loadaddress - tl_align_size
+        tee_loadaddress_str = hex(tee_loadaddress).replace('L', '')
+        d.setVar('TEE_LOADADDRESS', tee_loadaddress_str)
+
+        tee_entrypoint = tee_entrypoint - tl_align_size
+        tee_entrypoint_str = hex(tee_entrypoint).replace('L', '')
+        d.setVar('TEE_ENTRYPOINT', tee_entrypoint_str)
+
+        image_desc = d.getVar('DESCRIPTION', True)
+        if image_desc == 'ARM trusted firmware':
+                atf_src = d.getVar('MTK_SRC', True)
+                mach_type = d.getVar('MTK_MACH_TYPE', True)
+                tee_support = d.getVar('TEE_SUPPORT', True)
+                atf_ver = d.getVar('ATF_VER', True)
+
+                if os.path.exists(atf_src+'/.git'):
+                        bb.warn('please change your atf folder to new layout')
+                        # backward to old atf layout
+                        # change the mt8516 to v1.21 folder
+                        # others remain the original path
+                        if mach_type == "mt8516":
+                                d.setVar('ATF_VER','1.21')
+                else:
+                        # new atf layout, change to use folder atf_tbase
+                        # if tee_support is tbase and atf version is 1.0
+                        if tee_support == 'tbase' and atf_ver == '1.0':
+                                d.setVar('B',atf_src+'_'+tee_support)
+                        else:
+                                # change folder to CHIP_TYPE {mt2xxx/mt8xxx}
+                                tgtplt = d.getVar('TARGET_PLATFORM', True)
+                                if tgtplt[0:3] == "mt2":
+                                    d.setVar('CHIP_TYPE', tgtplt[0:3]+'xxx')
+                                else:
+                                    atf_path = os.path.join(atf_src,"v"+atf_ver,tgtplt)
+                                    if os.path.exists(atf_path+'/.git'):
+                                        d.setVar('CHIP_TYPE', tgtplt)
+                                    else:
+                                        d.setVar('CHIP_TYPE', 'mt8xxx')
+
+        if image_desc == 'TrustZone Src':
+                multilibs = d.getVar('MULTILIBS', True)
+                if multilibs == 'multilib:lib64':
+                        d.appendVarFlag('do_cleansstate', 'depends', ' lib64-teeloader-image:do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' lib64-teeloader-image:do_deploy')
+                else:
+                        d.appendVarFlag('do_cleansstate', 'depends', ' teeloader-image:do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' teeloader-image:do_deploy')
+
+                atfsupport = d.getVar('ATF_SUPPORT', True)
+                if atfsupport == 'yes':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-atf-image:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-atf-image:do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' atf:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' atf-image:do_deploy')
+
+                tee_support = d.getVar('TEE_SUPPORT', True)
+                if tee_support is None:
+                        tee_support = "mtee"
+                        d.appendVarFlag('do_cleansstate', 'depends', ' tee-'+tee_support+':do_cleansstate')
+                        d.appendVarFlag('do_compile', 'depends', ' tee-'+tee_support+':do_deploy')
+                if tee_support == 'optee':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-optee-os:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-optee-os:do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' optee-os:do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' optee-os:do_deploy')
+                elif tee_support != 'none':
+                        if multilibs == 'multilib:lib64':
+                                d.appendVarFlag('do_cleansstate', 'depends', ' lib64-tee-'+tee_support+':do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' lib64-tee-'+tee_support+':do_deploy')
+                        else:
+                                d.appendVarFlag('do_cleansstate', 'depends', ' tee-'+tee_support+':do_cleansstate')
+                                d.appendVarFlag('do_compile', 'depends', ' tee-'+tee_support+':do_deploy')
+
+        secure_boot_enable = d.getVar('SECURE_BOOT_ENABLE', True)
+        force_disable_tee_encryption = d.getVar('FORCE_DISABLE_TEE_ENCRYPTION', True)
+        if  secure_boot_enable == 'yes' and force_disable_tee_encryption != 'yes' :
+                d.setVar("ATF_BINARY_SELECT", '${ATF_SIGNED_BINARY}')
+                d.setVar("TZ_BINARY_SELECT", '${TZ_SIGNED_BINARY}')
+                d.setVar("TRUSTEDOS_BINARY_SELECT", '${TRUSTEDOS_SIGNED_BINARY}')
+        else:
+                d.setVar("ATF_BINARY_SELECT", '${ATF_RAW_BINARY}')
+                d.setVar("TZ_BINARY_SELECT", '${TZ_RAW_BINARY}')
+                d.setVar("TRUSTEDOS_BINARY_SELECT", '${TRUSTEDOS_RAW_BINARY}')
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/local.conf.sample
new file mode 100644
index 0000000..f11678e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-base/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-base"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/bblayers.conf.sample
new file mode 100644
index 0000000..c6c5868
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-lynqSDK-T800/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/local.conf.sample
new file mode 100644
index 0000000..186cdcc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main-user/local.conf.sample
@@ -0,0 +1,5 @@
+require conf/base/local-common.conf
+
+require conf/base/security_flags.inc
+
+MACHINE ??= "auto2735evb-ivt-main-user"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/bblayers.conf.sample
new file mode 100644
index 0000000..c6c5868
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-lynqSDK-T800/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/local.conf.sample
new file mode 100644
index 0000000..e65457d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-main/local.conf.sample
@@ -0,0 +1,5 @@
+require conf/base/local-common.conf
+
+require conf/base/security_flags.inc
+
+MACHINE ??= "auto2735evb-ivt-main"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/local.conf.sample
new file mode 100644
index 0000000..e31dc52
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-smt/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-smt"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/local.conf.sample
new file mode 100644
index 0000000..9f20696
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp1/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-vp1"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/local.conf.sample
new file mode 100644
index 0000000..36db599
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2-user/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-vp2-user"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/local.conf.sample
new file mode 100644
index 0000000..4edbc5f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp2/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-vp2"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/bblayers.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/bblayers.conf.sample
new file mode 100644
index 0000000..68a1d7b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/bblayers.conf.sample
@@ -0,0 +1,3 @@
+METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
+
+require ${METADIR}/meta-mediatek-mt2735/conf/base/bblayers-common.conf
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/local.conf.sample b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/local.conf.sample
new file mode 100644
index 0000000..5926ba5
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/auto2735evb-ivt-vp3/local.conf.sample
@@ -0,0 +1,3 @@
+require conf/base/local-common.conf
+
+MACHINE ??= "auto2735evb-ivt-vp3"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/bblayers-common.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/bblayers-common.conf
new file mode 100644
index 0000000..39fee04
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/bblayers-common.conf
@@ -0,0 +1,29 @@
+# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+LCONF_VERSION = "6"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+  ${METADIR}/poky/meta \
+  ${METADIR}/poky/meta-poky \
+  ${METADIR}/poky/meta-yocto-bsp \
+  ${METADIR}/meta-gplv2 \
+  ${METADIR}/meta-openembedded/meta-filesystems \
+  ${METADIR}/meta-openembedded/meta-oe \
+  ${METADIR}/meta-openembedded/meta-python \
+  ${METADIR}/meta-openembedded/meta-networking \
+  ${METADIR}/meta-openembedded/meta-multimedia \
+  ${METADIR}/meta-mediatek \
+  ${METADIR}/meta-mediatek-gpl \
+  ${METADIR}/meta-mediatek-ivt \
+  ${METADIR}/meta-lynqSDK-T800 \
+  "
+BBLAYERS_NON_REMOVABLE ?= " \
+  ${METADIR}/poky/meta \
+  ${METADIR}/poky/meta-poky \
+  "
+
+BBLAYERS += "${@'${METADIR}/meta-mediatek-anwbt' if os.path.exists('${METADIR}/meta-mediatek-anwbt') else ''}"
+BBLAYERS += "${@'${METADIR}/meta-mediatek-adr' if os.path.exists('${METADIR}/meta-mediatek-adr') else ''}"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/local-common.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/local-common.conf
new file mode 100644
index 0000000..6df5948
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/local-common.conf
@@ -0,0 +1,59 @@
+MACHINE ??= "auto2735evb-ivt-base"
+
+DISTRO ?= "poky-ivt-systemd"
+
+# Multilib
+DEFAULTTUNE ?= "aarch64"
+require conf/machine/arch-arm64-tune-cortexa7-multilib.inc
+
+require conf/multilib.conf
+DEFAULTTUNE_virtclass-multilib-lib32 = "cortexa7hf-neon-vfpv4"
+
+# Default path
+DL_DIR ?= "${TOPDIR}/../downloads"
+SSTATE_DIR ?= "${TOPDIR}/../sstate-cache"
+
+# Additional hosttools needed
+HOSTTOOLS += "java zip unzip"
+
+# Buildhistory
+INHERIT += "buildhistory"
+BUILDHISTORY_COMMIT = "1"
+
+# Network
+CONNECTIVITY_CHECK_URIS = ""
+
+# Disk space monitoring
+BB_DISKMON_DIRS = "\
+    STOPTASKS,${TMPDIR},1G,100K \
+    STOPTASKS,${DL_DIR},1G,100K \
+    STOPTASKS,${SSTATE_DIR},1G,100K \
+    ABORT,${TMPDIR},100M,1K \
+    ABORT,${DL_DIR},100M,1K \
+    ABORT,${SSTATE_DIR},100M,1K"
+
+# License
+INCOMPATIBLE_LICENSE ?= "GPL-3.0 LGPL-3.0 AGPL-3.0"
+LICENSE_FLAGS_WHITELIST = "\
+    commercial_faac \
+    commercial_faad2"
+WHITELIST_GPL-3.0 = "\
+    gcc-arc"
+
+# Patch
+PATCHRESOLVE = "noop"
+
+# Package
+PACKAGE_CLASSES ?= "package_rpm"
+
+# Image
+EXTRA_IMAGE_FEATURES = "debug-tweaks"
+USER_CLASSES ?= "buildstats image-mklibs image-prelink"
+
+# System
+VOLATILE_LOG_DIR = "no"
+
+CONF_VERSION = "1"
+
+BBMASK += "meta-mediatek/recipes-devtools/clang"
+BBMASK += "meta-mediatek-ivt/recipes-core/base-files"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/base/security_flags.inc b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/security_flags.inc
new file mode 100644
index 0000000..4497a21
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/base/security_flags.inc
@@ -0,0 +1,71 @@
+# Setup extra CFLAGS and LDFLAGS which have 'security' benefits. These
+# don't work universally, there are recipes which can't use one, the other
+# or both so a blacklist is maintained here. The idea would be over
+# time to reduce this list to nothing.
+# From a Yocto Project perspective, this file is included and tested
+# in the DISTRO="poky" configuration.
+
+GCCPIE ?= "--enable-default-pie"
+# If static PIE is known to work well, GLIBCPIE="--enable-static-pie" can be set
+
+# _FORTIFY_SOURCE requires -O1 or higher, so disable in debug builds as they use
+# -O0 which then results in a compiler warning.
+lcl_maybe_fortify ?= "${@oe.utils.conditional('DEBUG_BUILD','1','','-D_FORTIFY_SOURCE=2',d)}"
+
+# Error on use of format strings that represent possible security problems
+SECURITY_STRINGFORMAT ?= "-Wformat -Wformat-security"
+
+# Inject pie flags into compiler flags if not configured with gcc itself
+# especially useful with external toolchains
+SECURITY_PIE_CFLAGS ?= "${@'' if '${GCCPIE}' else '-pie -fPIE'}"
+
+SECURITY_NOPIE_CFLAGS ?= "-no-pie -fno-PIE"
+
+SECURITY_STACK_PROTECTOR ?= "-fstack-protector-strong"
+
+SECURITY_CFLAGS ?= "${SECURITY_STACK_PROTECTOR} ${SECURITY_PIE_CFLAGS} ${SECURITY_STRINGFORMAT}"
+SECURITY_NO_PIE_CFLAGS ?= "${SECURITY_STACK_PROTECTOR} ${SECURITY_STRINGFORMAT}"
+
+SECURITY_LDFLAGS ?= "${SECURITY_STACK_PROTECTOR} -Wl,-z,relro,-z,now"
+SECURITY_X_LDFLAGS ?= "${SECURITY_STACK_PROTECTOR} -Wl,-z,relro"
+
+# powerpc does not get on with pie for reasons not looked into as yet
+GCCPIE_powerpc = ""
+GLIBCPIE_powerpc = ""
+SECURITY_CFLAGS_remove_powerpc = "${SECURITY_PIE_CFLAGS}"
+SECURITY_CFLAGS_pn-libgcc_powerpc = ""
+
+SECURITY_CFLAGS_pn-glibc = ""
+SECURITY_CFLAGS_pn-glibc-initial = ""
+SECURITY_CFLAGS_pn-gcc-runtime = ""
+SECURITY_CFLAGS_pn-grub = ""
+SECURITY_CFLAGS_pn-grub-efi = ""
+SECURITY_CFLAGS_pn-grub-efi-native = ""
+SECURITY_CFLAGS_pn-grub-efi-x86-native = ""
+SECURITY_CFLAGS_pn-grub-efi-i586-native = ""
+SECURITY_CFLAGS_pn-grub-efi-x86-64-native = ""
+SECURITY_CFLAGS_pn-mkelfimage_x86 = ""
+
+SECURITY_CFLAGS_pn-valgrind = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS_pn-valgrind = ""
+SECURITY_CFLAGS_pn-sysklogd = "${SECURITY_NOPIE_CFLAGS}"
+SECURITY_LDFLAGS_pn-sysklogd = ""
+
+# Recipes which fail to compile when elevating -Wformat-security to an error
+SECURITY_STRINGFORMAT_pn-busybox = ""
+SECURITY_STRINGFORMAT_pn-gcc = ""
+
+TARGET_CC_ARCH_append_class-target = " ${SECURITY_CFLAGS}"
+TARGET_LDFLAGS_append_class-target = " ${SECURITY_LDFLAGS}"
+
+SECURITY_STACK_PROTECTOR_pn-gcc-runtime = ""
+SECURITY_STACK_PROTECTOR_pn-glibc = ""
+SECURITY_STACK_PROTECTOR_pn-glibc-initial = ""
+# All xorg module drivers need to be linked this way as well and are
+# handled in recipes-graphics/xorg-driver/xorg-driver-common.inc
+SECURITY_LDFLAGS_pn-xserver-xorg = "${SECURITY_X_LDFLAGS}"
+
+TARGET_CC_ARCH_append_pn-binutils = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH_append_pn-gcc = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH_append_pn-gdb = " ${SELECTED_OPTIMIZATION}"
+TARGET_CC_ARCH_append_pn-perf = " ${SELECTED_OPTIMIZATION}"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/layer.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/layer.conf
new file mode 100644
index 0000000..812d1b0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/layer.conf
@@ -0,0 +1,13 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+            ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-lynqSDK-T800"
+BBFILE_PATTERN_meta-lynqSDK-T800 = "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-lynqSDK-T800 = "10"
+
+#LAYERDEPENDS_meta-lynqSDK-T800 = "core"
+LAYERSERIES_COMPAT_meta-lynqSDK-T800 = "thud"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
new file mode 100644
index 0000000..fc7e6f6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-base.conf
@@ -0,0 +1,230 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-base"
+TARGET_PLATFORM = "mt2735"
+BUILD_TYPE = "eng"
+LINUX_KERNEL = "linux-4.19.98"
+KERNELDIR = "../kernel/linux/v4.19"
+MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
+
+# License
+MTK_LICENSE_DIR = "${TOPDIR}/../meta/meta-mediatek/files/additional-licenses"
+
+# BACH
+BACH_SRC = "${TOPDIR}/../src/bach/build.bach/work"
+
+# Secure boot
+SECURE_BOOT_ENABLE = "yes"
+SECURE_BOOT_TYPE = "avb"
+VERIFIED_KEY = "verified_${VB_RSA_ALGO}_key"
+MTK_KEY_DIR = "${TOPDIR}/../meta/meta-mediatek/conf/machine/keys"
+SBC_RSA_ALGO = "rsa2048"
+SBC_HASH_ALGO = "sha256"
+IMAGE_HASH_ALGO = "sha256"
+SBC_KEY = "sbc_key"
+# verify boot algo, for both fit and avb verify
+VB_HASH_ALGO = "sha256"
+VB_RSA_ALGO = "rsa2048"
+
+# LK
+LK_PROJECT = "auto2735-evb-ivt-nand"
+BOOTDEV_TYPE = "nand"
+NAND_TYPE = "slc"
+TARGET_CFLAGS += "-DMTK_BOOTDEV_TYPE=1 -Os"
+# nand name should be the same with the one in nand-utils/nand_device_list_mt2735_hsm.txt
+NAND_CHIP_NAME = "JSFDDQ5QHAxGD"
+# nand brom header version:
+#        1.0 or null: header sytle from Tablet SOC, which is independent of PMBR
+#        2.0: header sytle from mt2712, which is designed for GPT, and is part of PMBR
+NAND_HEADER_VERSION = "5.0"
+FIT_LK_IMAGE = "yes"
+LK_LOAD_OFFSET = "0x1000"
+LK_LOADADDRESS = "0x201000"
+LK_ENTRYPOINT = "0x201000"
+LK_MAX_SIZE = "0x3c000"
+
+# BL33
+BL33_PROJECT = "auto2735-evb-ivt-nand-bl33"
+BL33_LOAD_OFFSET = "0x0"
+BL33_LOADADDRESS = "0x42110000"
+BL33_ENTRYPOINT = "0x42110000"
+BL33_COMPRESS = "none"
+BL33_MAX_SIZE = "0xfd000"
+
+# SPMFW
+SPMFW_IMAGETYPE = "fitImage"
+SPMFW_LOADADDRESS = "0x42100000"
+SPMFW_ENTRYPOINT = "0x42100000"
+SPMFW_COMPRESS = "lz4"
+
+# MEDMCU
+MEDMCU_ENTRYPOINT = "0x60000000"
+MEDMCU_LOADADDRESS = "0x60000000"
+
+# AB update
+AB_OTA_UPDATER = "yes"
+AB_OTA_PARTITIONS = "boot system tee md1img md1dsp"
+
+# Trustzone
+TZ_PROJECT = "mt2735-common-optee"
+TZ_PLATFORM = "${TARGET_PLATFORM}"
+ATF_SUPPORT = "yes"
+PREFERRED_VERSION_atf = "1.6"
+ATF_INSTALL_MODE = "debug"
+MTK_MACH_TYPE = "${TARGET_PLATFORM}"
+TRUSTZONE_HEADER = "fit"
+TRUSTZONE_ENTRYPOINT = "0x42FB1000"
+TRUSTZONE_LOADADDRESS = "0x42FB1000"
+TRUSTZONE_COMPRESS = "none"
+
+# OP-TEE
+TEE_TEST_SUPPORT = "optee"
+TEE_ARCH= "${KERNEL_ARCH}"
+TRUSTEDOS_SIZE = "0xA00000"
+TRUSTEDOS_SHMEM_SIZE = "0x100000"
+# tee common
+TEE_INSTALL_MODE = "Release"
+
+#default setting, will be overite by project conf.
+TEE_SUPPORT = "optee"
+TRUSTEDOS_ENTRYPOINT = "${@bb.utils.contains('TEE_SUPPORT', 'none', '', '0x4e9a0000', d)}"
+TRUSTEDOS_LOADADDRESS = "${@bb.utils.contains('TEE_SUPPORT', 'none', '', '0x4e9a0000', d)}"
+
+# HSM BL
+HSM_BOOTDEV_TYPE = "nand"
+
+# HSM OS
+HSM_OS_SUPPORT = "yes"
+
+# Kernel
+KERNEL_ARCH = "arm64"
+PREFERRED_PROVIDER_virtual/kernel = "linux-mtk-extension"
+PREFERRED_VERSION_linux-mtk-extension ?= "4.19%"
+KERNEL_IMAGETYPE = "fitImage"
+KBUILD_DEFCONFIG = "auto2735evb_defconfig"
+DTB_LOADADDRESS = "0x431AA000"
+KERNEL_COMPRESS = "lz4"
+KERNEL_DEVICETREE = "mediatek/auto2735evb.dtb"
+DTBO_VERSION ?= "4.19"
+
+# LOADER ENTRYPOINT, LOADADDRESS
+UBOOT_ENTRYPOINT = "0x40080000"
+UBOOT_LOADADDRESS = "0x40080000"
+
+# Image FSW
+#IMAGE_FSTYPES ?= "ubi"
+IMAGE_FSTYPES ?= "squashfs"
+IMAGE_ROOTFS_ALIGNMENT = "4"
+EXTRA_IMAGEDEPENDS += "spmfw"
+EXTRA_IMAGEDEPENDS += "fbtool flashtool platform-tools scatter"
+EXTRA_IMAGEDEPENDS += "mcupm medmcu sspm dpm"
+SERIAL_CONSOLES = "921600;ttyGS1"
+
+
+#HSM 
+HSM_SRC = "${TOPDIR}/../src/bsp/hsm/src/"
+HSM_SRC_EXIST = "${@ os.path.exists('${HSM_SRC}')}"
+EXTRA_IMAGEDEPENDS += "${@'hsm' if ${HSM_SRC_EXIST} == True else 'hsm-image'}"
+
+
+#BL2
+LIB32_LK_SRC = "${TOPDIR}/../src/bsp/dramk_2735/"
+LIB32_LK_EXIST = "${@ os.path.exists('${LIB32_LK_SRC}')}"
+EXTRA_IMAGEDEPENDS += "${@'lib32-lk' if ${LIB32_LK_EXIST} == True else 'lib32-lk-image'}"
+
+
+#BL33
+BL33_LK_SRC = "${TOPDIR}/../src/bsp/lk/kernel/"
+BL33_LK_EXIST = "${@ os.path.exists('${BL33_LK_SRC}')}"
+EXTRA_IMAGEDEPENDS += "${@'bl33' if ${BL33_LK_EXIST} == True else 'bl33-image'}"
+
+
+
+#Trustzone
+TZ_WORK_SRC = "${TOPDIR}/../src/bsp/trustzone/"
+TZ_WORK_EXIST = "${@ os.path.exists('${TZ_WORK_SRC}')}"
+EXTRA_IMAGEDEPENDS += "${@'trustzone' if ${TZ_WORK_EXIST} == True else 'trustzone-image'}"
+
+
+
+#UBI/UBIFS ARGS
+MKUBIFS_ARGS = "-m 4096 -e 253952 -c 1400 -F"
+UBINIZE_ARGS = "-m 4096 -p 256KiB -O 4096"
+MKUBIFS_MCF_ARGS="-m 4096 -e 253952 -c 100 -F"
+
+MKUBIFS_CONFIG_ARGS = "-m 4096 -e 253952 -c 22 -F"
+MKUBIFS_NVRAM_CONFIG_ARGS = "-m 4096 -e 253952 -c 100 -F"
+
+# DRAM type
+MTK_DRAM_TYPE = "LP4X"
+MEMORY_SIZE = "1024"
+
+# PMIC chip type
+MTK_PMIC_CHIP_TYPE = "MT6330"
+MTK_SUB_PMIC_CHIP_TYPE = "MT6315"
+
+# USB 3.1/PCIe
+MTK_USB_OR_PCIE = "USB"
+
+# Scatter File
+SCATTER_PROJECT = "auto2735-ivt-mcp_nand"
+
+# Modem
+MODEM_PROJECT = "MT2735_V02.MP1_MR3_NLWG_T2_20220924"
+MODEM_INT = "${TOPDIR}/../prebuilt/modem/mt2735_internal"
+MODEM_CUSTOM = "${TOPDIR}/../prebuilt/modem/mt2735"
+MODEM_INT_EXIST = "${@ os.path.exists('${MODEM_INT}')}"
+MODEM_CUSTOM_EXIST = "${@ os.path.exists('${MODEM_CUSTOM}')}"
+MODEM_DIR = "${@'${MODEM_INT}/${MODEM_PROJECT}' if ${MODEM_INT_EXIST} == True else '${MODEM_CUSTOM}/${MODEM_PROJECT}'}"
+EXTRA_IMAGEDEPENDS += "${@'modem' if ${MODEM_INT_EXIST} == True or ${MODEM_CUSTOM_EXIST} == True else ''}"
+# MIPC
+MIPC_MODEM_PROJECT = "mt2735_ivt_nlwg_wide_temp"
+MIPC_INT = "${TOPDIR}/../src/telephonyware/3.0/mipc_internal"
+MIPC_REL = "${TOPDIR}/../src/telephonyware/3.0/mipc"
+MIPC_INT_EXIST = "${@ os.path.exists('${MIPC_INT}')}"
+MIPC_DIR = "${@'${MIPC_INT}/${MIPC_MODEM_PROJECT}' if ${MIPC_INT_EXIST} == True else '${MIPC_REL}/${MIPC_MODEM_PROJECT}_custom'}"
+
+# Telephony/Modem Feature Options
+# [S] ss / dsss / dsds; [N] dsda / tsts / qsqs
+MTK_MULTI_SIM_SUPPORT = "dsds"
+# yes / no
+RAT_CONFIG_C2K_SUPPORT = "no"
+
+# NATA info
+AUTO_DIR ?= "${TOPDIR}/../src/devtools/nata_property"
+AUTOTEST_ENABLE ?= "${@int(os.path.isdir('${AUTO_DIR}') == True)}"
+
+# SMT
+MTK_SMT_BUILD = "no"
+
+# SGMII   <who add? -- 20220912> 
+PHY_SGMII_INTERFACE = "yes"
+
+AEE_SUPPORT = "yes"
+
+# For AEE LK Config
+MTK_KEDUMP_MINI_SUPPORT ??= "${AEE_SUPPORT}"
+MTK_MRDUMP_SUPPORT ??= "${AEE_SUPPORT}"
+MTK_BOOT_REASON_SUPPORT ??= "${AEE_SUPPORT}"
+MTK_CFG_LAST_EMI_BW_DUMP ??= "${AEE_SUPPORT}"
+# For AEE Native Service Config
+MTK_AEE_SUPPORT ??= "${AEE_SUPPORT}"
+LOG_STORE_ENABLE ??= "${@bb.utils.contains('AEE_SUPPORT', 'yes', '1', '0', d)}"
+
+#GNSS
+MTK_GNSS_CHIP_TYPE = "MT6635"
+
+# exFAT
+EXFAT_SUPPORT = "no"
+
+NATA_SERIAL_NUMBER = "MT-CDB836DCFC331A86"
+
+# SGMII
+SGMII_SNPS_INTERFACE = "no"
+SGMII_NETSYS_INTERFACE = "yes"
+
+#TCXO support
+TCXO_SUPPORT = "no"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main-user.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main-user.conf
new file mode 100644
index 0000000..663a083
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main-user.conf
@@ -0,0 +1,19 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+
+# lynq
+YK_SRC = "${TOPDIR}/../src/lynq"
+# Project
+MTK_PROJECT = "mt2735evb-ivt-main-user"
+BUILD_TYPE = "user"
+AEE_SUPPORT = "no"
+
+# AB update
+AB_OTA_PARTITIONS += "vbmeta"
+
+MEMORY_SIZE = "1024"
+NAND_CHIP_NAME = "MT29F8G08ADBFA"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main.conf
new file mode 100755
index 0000000..3c54c03
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-main.conf
@@ -0,0 +1,21 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# lynq
+YK_SRC = "${TOPDIR}/../src/lynq"
+# Project
+MTK_PROJECT = "mt2735evb-ivt-main"
+
+EXFAT_SUPPORT = "yes"
+
+# AB update
+AB_OTA_PARTITIONS += "vbmeta oemapp oemapp2"
+
+
+MEMORY_SIZE = "1024"
+NAND_CHIP_NAME = "MT29F8G08ADBFA"
+
+TEE_SUPPORT_SRC = "yes"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-smt.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-smt.conf
new file mode 100644
index 0000000..4eea009
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-smt.conf
@@ -0,0 +1,10 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-smt"
+
+MTK_SMT_BUILD = "yes"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp1.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp1.conf
new file mode 100644
index 0000000..71d7bc3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp1.conf
@@ -0,0 +1,31 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-vp1"
+
+# RGMII
+PHY_RGMII_INTERFACE = "yes"
+
+# SGMII
+PHY_SGMII_INTERFACE = "no"
+
+# CPU Core
+CORE_NUM = "2"
+
+# Secure Boot
+SECURE_BOOT_ENABLE = "yes"
+SECURE_BOOT_TYPE = "avb"
+
+# IMAGE Fstype
+IMAGE_FSTYPES = "squashfs"
+
+# A/B update
+AB_OTA_PARTITIONS += "vbmeta"
+
+# SGMII
+SGMII_SNPS_INTERFACE = "no"
+SGMII_NETSYS_INTERFACE = "no"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2-user.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2-user.conf
new file mode 100644
index 0000000..c25c531
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2-user.conf
@@ -0,0 +1,51 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-vp2-user"
+BUILD_TYPE = "user"
+AEE_SUPPORT = "no"
+
+# HSM BL
+HSM_BOOTDEV_TYPE = "emmc"
+
+# LK
+LK_PROJECT = "auto2735-evb-ivt-emmc"
+BOOTDEV_TYPE = "emmc"
+TARGET_CFLAGS_remove = "-DMTK_BOOTDEV_TYPE=1"
+TARGET_CFLAGS += "-DMTK_BOOTDEV_TYPE=2"
+
+# BL33
+BL33_PROJECT = "auto2735-evb-ivt-emmc-bl33"
+
+# Image FS
+IMAGE_FSTYPES = "ext4"
+
+# Scatter File
+SCATTER_PROJECT = "auto2735-ivt-emmc"
+
+NAND_CHIP_NAME = "MT29F8G08ABBCAH4"
+
+# Kernel
+KERNEL_DEVICETREE = "mediatek/auto2735evb-ivt-emmc.dtb"
+
+# Modem
+MODEM_PROJECT = "mt2735_ivt_nlwg_wide_temp_custom"
+MODEM_DIR = "${MODEM_CUSTOM}/${MODEM_PROJECT}"
+
+# MIPC
+MIPC_DIR = "${MIPC_REL}/${MODEM_PROJECT}"
+
+# Secure Boot
+SECURE_BOOT_ENABLE = "yes"
+SECURE_BOOT_TYPE = "avb"
+BOARD_AVB_ENABLE = "true"
+
+NATA_SERIAL_NUMBER = "MT-A479690DD302E82A"
+
+# SGMII
+SGMII_SNPS_INTERFACE = "yes"
+SGMII_NETSYS_INTERFACE = "yes"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2.conf
new file mode 100644
index 0000000..dd460f5
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp2.conf
@@ -0,0 +1,49 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-vp2"
+
+# HSM BL
+HSM_BOOTDEV_TYPE = "emmc"
+
+# LK
+LK_PROJECT = "auto2735-evb-ivt-emmc"
+BOOTDEV_TYPE = "emmc"
+TARGET_CFLAGS_remove = "-DMTK_BOOTDEV_TYPE=1"
+TARGET_CFLAGS += "-DMTK_BOOTDEV_TYPE=2"
+
+# BL33
+BL33_PROJECT = "auto2735-evb-ivt-emmc-bl33"
+
+# Image FS
+IMAGE_FSTYPES = "ext4"
+
+# Scatter File
+SCATTER_PROJECT = "auto2735-ivt-emmc"
+
+NAND_CHIP_NAME = "MT29F8G08ABBCAH4"
+
+# Kernel
+KERNEL_DEVICETREE = "mediatek/auto2735evb-ivt-emmc.dtb"
+
+# Modem
+MODEM_PROJECT = "mt2735_ivt_nlwg"
+
+# Secure Boot
+SECURE_BOOT_ENABLE = "yes"
+SECURE_BOOT_TYPE = "avb"
+BOARD_AVB_ENABLE = "true"
+
+# RPMB for OP-TEE
+TEE_SUPPORT_RPMB = "yes"
+#LK_PROG_RPMB_KEY = "yes"
+
+NATA_SERIAL_NUMBER = "MT-A479690DD302E82A"
+
+# SGMII
+SGMII_SNPS_INTERFACE = "yes"
+SGMII_NETSYS_INTERFACE = "yes"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp3.conf b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp3.conf
new file mode 100644
index 0000000..7a18550
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/conf/machine/auto2735evb-ivt-vp3.conf
@@ -0,0 +1,25 @@
+#@TYPE: Machine
+#@NAME: MT2735
+#@DESCRIPTION: Machine configuration for mt2735 64bit
+
+require conf/machine/auto2735evb-ivt-base.conf
+
+# Project
+MTK_PROJECT = "mt2735evb-ivt-vp3"
+
+EXFAT_SUPPORT = "yes"
+
+# AB update
+AB_OTA_UPDATER = "no"
+
+# NAND type
+NAND_CHIP_NAME = "NM4888KMPAXAI"
+
+# Scatter File
+SCATTER_PROJECT = "auto2735-ivt-mcp_nand2"
+
+# UBI config 
+MKUBIFS_ARGS = "-m 2048 -e 126976 -c 1400 -F"
+UBINIZE_ARGS = "-m 2048 -p 128KiB -O 2048"
+MKUBIFS_CONFIG_ARGS = "-m 2048 -e 126976 -c 22 -F"
+MKUBIFS_NVRAM_CONFIG_ARGS = "-m 2048 -e 126976 -c 100 -F"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33-image_1.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33-image_1.0.bb
new file mode 100644
index 0000000..aff6dfb
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33-image_1.0.bb
@@ -0,0 +1,67 @@
+SUMMARY = "BL33-IMAGE"
+inherit deploy bl33-fitimage hsm-sign-env
+
+LICENSE = "MIT"
+BL33_OUT = "${WORKDIR}/out"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+SRC_URI = "file://dev_info file://pbp file://key file://lk_dts file://dummy_img file://fit-lk"
+SRC_URI += " file://LICENSE "
+
+#S = "${WORKDIR}"
+DEPENDS += "u-boot-mkimage-native bc-native dtc-native"
+
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/bl33"
+BL33_BINARY = "lk.bin"
+BL33_DEPLOY_BINARY = "bl33.bin"
+BL33_IMAGE = "bl33.img"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "libgcc"
+PBP_DIR = "${WORKDIR}/pbp"
+KEY_DIR = "${WORKDIR}/key"
+DTS_DIR = "${WORKDIR}/lk_dts"
+DUMMY_IMG_DIR="${WORKDIR}/dummy_img"
+
+IC_NAME="$(echo ${TARGET_PLATFORM}|tr '[a-z]' '[A-Z]')"
+DEV_INFO_HDR_TOOL = "${TOPDIR}/../src/bsp/scatter/scripts/dev-info-hdr-tool.py"
+
+do_configure () {
+	:
+}
+
+do_genkey () {
+	mkdir -p ${BL33_OUT}/include
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+		mkdir -p ${WORKDIR}/mykeys
+		dtc -p 0x3ff ${DTS_DIR}/lk.dts -O dtb -o ${DTS_DIR}/lk.dtb
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+		${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -F -k ${WORKDIR}/mykeys -K ${DTS_DIR}/lk.dtb -r ${DUMMY_IMG_DIR}/fitImage
+		OFF_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep off_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		SIZE_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep size_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		KEYNODE_LEN="`echo "obase=16;ibase=16;${OFF_DT_STRINGS} + ${SIZE_DT_STRINGS}" | bc`"
+		python ${WORKDIR}/dev_info/dtb-transfer-array.py ${DTS_DIR}/lk.dtb ${DTS_DIR}/blob.h ${KEYNODE_LEN}
+		cp ${DTS_DIR}/blob.h ${BL33_OUT}/include/blob.h
+		rm -rf ${WORKDIR}/mykeys
+	else
+		cp ${DTS_DIR}/tmp_blob.txt ${BL33_OUT}/include/blob.h
+	fi
+}
+
+do_compile[nostamp] = "1"
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${BL33_OUT}/build-${BL33_PROJECT}/${BL33_BINARY} ${DEPLOYDIR}/${BL33_DEPLOY_BINARY}
+	install ${WORKDIR}/${BL33_IMAGE} ${DEPLOYDIR}/${BL33_IMAGE}
+}
+
+addtask deploy before do_build after do_compile
+do_compile() {
+	echo "no source with images"
+	install -d ${BL33_OUT}/build-${BL33_PROJECT}
+	install -m 755 ${WORKONSRC}/${BL33_BINARY}  ${BL33_OUT}/build-${BL33_PROJECT}/${BL33_BINARY}
+}
+
+
+addtask genkey before do_compile after do_configure
+addtask deploy before do_build after do_compile
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bb
new file mode 100644
index 0000000..0d2a833
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bb
@@ -0,0 +1,125 @@
+inherit deploy srcprebuilt externalsrc bl33-fitimage hsm-sign-env
+
+LICENSE = "MIT"
+MTK_SRC = "${TOPDIR}/../src/bsp/lk"
+BL33_OUT = "${WORKDIR}/out"
+LIC_FILES_CHKSUM = "file://${MTK_SRC}/LICENSE;md5=25394d472e4c06f4d61140e88861fb5b"
+SRC_URI = "file://dev_info file://pbp file://key file://lk_dts file://fit-lk"
+#S = "${WORKDIR}"
+DEPENDS += "u-boot-mkimage-native bc-native dtc-native"
+
+TOOLCHAIN_PREFIX = "${TARGET_PREFIX}"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+BL33_BINARY = "lk.bin"
+BL33_DEPLOY_BINARY = "bl33.bin"
+BL33_IMAGE = "bl33.img"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "libgcc"
+PBP_DIR = "${WORKDIR}/pbp"
+KEY_DIR = "${WORKDIR}/key"
+DTS_DIR = "${WORKDIR}/lk_dts"
+
+IC_NAME="$(echo ${TARGET_PLATFORM}|tr '[a-z]' '[A-Z]')"
+DEV_INFO_HDR_TOOL = "${TOPDIR}/../src/bsp/scatter/scripts/dev-info-hdr-tool.py"
+
+do_configure () {
+	:
+}
+
+do_genkey () {
+	mkdir -p ${BL33_OUT}/include
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+		mkdir -p ${WORKDIR}/mykeys
+		dtc -p 0x3ff ${DTS_DIR}/lk.dts -O dtb -o ${DTS_DIR}/lk.dtb
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+
+		echo -n -e \\xde\\xed\\xbe\\xef > ${DTS_DIR}/dummy.bin
+		${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -k ${WORKDIR}/mykeys -K ${DTS_DIR}/lk.dtb -r -f ${DTS_DIR}/dummy.its ${DTS_DIR}/dummyfit.img
+		OFF_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep off_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		SIZE_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep size_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		KEYNODE_LEN="`echo "obase=16;ibase=16;${OFF_DT_STRINGS} + ${SIZE_DT_STRINGS}" | bc`"
+		python ${WORKDIR}/dev_info/dtb-transfer-array.py ${DTS_DIR}/lk.dtb ${DTS_DIR}/blob.h ${KEYNODE_LEN}
+		cp ${DTS_DIR}/blob.h ${BL33_OUT}/include/blob.h
+		rm -rf ${WORKDIR}/mykeys
+		rm -f ${DTS_DIR}/dummy.bin
+		rm -f ${DTS_DIR}/dummyfit.img
+	else
+		cp ${DTS_DIR}/tmp_blob.txt ${BL33_OUT}/include/blob.h
+	fi
+}
+
+do_compile () {
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${BL33_OUT} \
+		           LIBGCC="" \
+		           CFLAGS="" \
+		           DEBUG=${LOG_STORE_ENABLE} \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MTK_KEDUMP_MINI_SUPPORT=${MTK_KEDUMP_MINI_SUPPORT} \
+		           MTK_MRDUMP_SUPPORT=${MTK_MRDUMP_SUPPORT} \
+		           MTK_BOOT_REASON_SUPPORT=${MTK_BOOT_REASON_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           ${BL33_PROJECT}
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${BL33_OUT} \
+		           LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+		           CFLAGS="" \
+		           DEBUG=${LOG_STORE_ENABLE} \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MTK_KEDUMP_MINI_SUPPORT=${MTK_KEDUMP_MINI_SUPPORT} \
+		           MTK_MRDUMP_SUPPORT=${MTK_MRDUMP_SUPPORT} \
+		           MTK_BOOT_REASON_SUPPORT=${MTK_BOOT_REASON_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           ${BL33_PROJECT}
+	fi
+	# add filesize check
+	start=$(grep -w _start -n ${BL33_OUT}/build-${BL33_PROJECT}/lk.elf.sym.sorted | \
+			sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	end=$(grep -w _end -n ${BL33_OUT}/build-${BL33_PROJECT}/lk.elf.sym.sorted | \
+		  sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	fs=`echo "obase=16;ibase=16; $end - $start" | bc`
+	maxsize=${BL33_MAX_SIZE}
+	if [ ${BL33_MAX_SIZE} != "" ] && [[ 0x$fs -gt $maxsize ]]; then
+		  bberror "Little kernel image size overflow, please have a check."
+	fi
+}
+
+do_buildclean () {
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+			   NOECHO="" \
+			   BUILDROOT=${BL33_OUT} \
+			   LIBGCC="" \
+			   CFLAGS="" \
+			   DEBUG=${LOG_STORE_ENABLE} \
+			   ${BL33_PROJECT} clean
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+			   NOECHO="" \
+			   BUILDROOT=${BL33_OUT} \
+			   LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+			   CFLAGS="" \
+			   DEBUG=${LOG_STORE_ENABLE} \
+			   ${BL33_PROJECT} clean
+	fi
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${BL33_OUT}/build-${BL33_PROJECT}/${BL33_BINARY} ${DEPLOYDIR}/${BL33_DEPLOY_BINARY}
+	install ${WORKDIR}/${BL33_IMAGE} ${DEPLOYDIR}/${BL33_IMAGE}
+}
+
+addtask genkey before do_compile after do_configure
+addtask deploy before do_build after do_compile
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bbappend
new file mode 100644
index 0000000..895d979
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/bl33_1.0.bbappend
@@ -0,0 +1,59 @@
+do_compile[nostamp] = "1"
+
+do_compile () {
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${BL33_OUT} \
+		           LIBGCC="" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MD_VERIFY=${MD_VERIFY} \
+		           HSM_OS_SUPPORT=${HSM_OS_SUPPORT} \
+		           MTK_KEDUMP_MINI_SUPPORT=${MTK_KEDUMP_MINI_SUPPORT} \
+		           MTK_MRDUMP_SUPPORT=${MTK_MRDUMP_SUPPORT} \
+		           MTK_BOOT_REASON_SUPPORT=${MTK_BOOT_REASON_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           MTK_PMIC_CHIP_TYPE=${MTK_PMIC_CHIP_TYPE} \
+		           MTK_SUB_PMIC_CHIP_TYPE=${MTK_SUB_PMIC_CHIP_TYPE} \
+		           BUILD_LOAD_TYPE=${BUILD_TYPE} \
+		           SINGLE_BIN_MODEM_SUPPORT=${SINGLE_BIN_MODEM_SUPPORT} \
+		           BOOTDEV_TYPE=${BOOTDEV_TYPE} \
+		           ${BL33_PROJECT}
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${BL33_OUT} \
+		           LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MD_VERIFY=${MD_VERIFY} \
+		           HSM_OS_SUPPORT=${HSM_OS_SUPPORT} \
+		           MTK_KEDUMP_MINI_SUPPORT=${MTK_KEDUMP_MINI_SUPPORT} \
+		           MTK_MRDUMP_SUPPORT=${MTK_MRDUMP_SUPPORT} \
+		           MTK_BOOT_REASON_SUPPORT=${MTK_BOOT_REASON_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           MTK_PMIC_CHIP_TYPE=${MTK_PMIC_CHIP_TYPE} \
+		           MTK_SUB_PMIC_CHIP_TYPE=${MTK_SUB_PMIC_CHIP_TYPE} \
+		           BUILD_LOAD_TYPE=${BUILD_TYPE} \
+		           SINGLE_BIN_MODEM_SUPPORT=${SINGLE_BIN_MODEM_SUPPORT} \
+		           BOOTDEV_TYPE=${BOOTDEV_TYPE} \
+		           ${BL33_PROJECT}
+	fi
+	# add filesize check
+	start=$(grep -w _start -n ${BL33_OUT}/build-${BL33_PROJECT}/lk.elf.sym.sorted | \
+			sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	end=$(grep -w _end -n ${BL33_OUT}/build-${BL33_PROJECT}/lk.elf.sym.sorted | \
+		  sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	fs=`echo "obase=16;ibase=16; $end - $start" | bc`
+	maxsize=${BL33_MAX_SIZE}
+	if [ ${BL33_MAX_SIZE} != "" ] && [[ 0x$fs -gt $maxsize ]]; then
+		  bberror "Little kernel image size overflow, please have a check."
+	fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/LICENSE
new file mode 100644
index 0000000..1f38e30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("LYNQ") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to LYNQ Inc. and/or its licensors. Without
+the prior written permission of LYNQ inc. and/or its licensors, any
+reproduction, modification, use or disclosure of LYNQ Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("LYNQ SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dev_info/dtb-transfer-array.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dev_info/dtb-transfer-array.py
new file mode 100644
index 0000000..c6b3583
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dev_info/dtb-transfer-array.py
@@ -0,0 +1,41 @@
+import os
+import sys
+
+def read_dtb(filename, raw_data):
+	fin = open(filename, 'rb')
+	fin.seek(0, 0)
+	while True:
+		t_byte = fin.read(1)
+		if len(t_byte) == 0:
+			break
+		else :
+			raw_data.append("0x%.2X" % ord(t_byte))
+
+def write_blob_head_file(filename, raw_data, length):
+	fout = open(filename, 'w+')
+	fout.write('#define CHECK_RSA 1 \n')
+	fout.write('#define CHECK_HASH 1 \n')
+	fout.write('const unsigned char blob[] __attribute__((aligned(4))) = \n')
+	fout.write('{\n ')
+
+	i = 0
+	for data in raw_data:
+		i += 1
+		if i != length:
+			fout.write(data + ', ')
+		else:
+			fout.write(data)
+		if i % 16 == 0:
+			fout.write('\n ')
+		if i == length:
+		       break;
+	fout.write('\n};')
+	fout.close()
+
+if __name__ == "__main__":
+	raw_data = []
+	in_path  = str(sys.argv[1]);
+	out_path = str(sys.argv[2]);
+	length   = int(sys.argv[3],16);
+	read_dtb(in_path, raw_data)
+	write_blob_head_file(out_path, raw_data, length)
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dummy_img/fitImage b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dummy_img/fitImage
new file mode 100644
index 0000000..036ed1b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/dummy_img/fitImage
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/fit-lk/extract_region b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/fit-lk/extract_region
new file mode 100755
index 0000000..261ba30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/fit-lk/extract_region
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/lk_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/lk_key.ini
new file mode 100755
index 0000000..d6d089a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/lk_key.ini
@@ -0,0 +1,4 @@
+[KEY]
+sw_ver = "1"
+rootkey = "root_prvk.pem"
+ac_key = "0x112233445566778899aabbccddeeff"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/root_prvk.pem
new file mode 100644
index 0000000..fd987a3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/key/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0mlxI+3vrVlX8wH23CeTPDIH3c4DhEQNIGQltziYX7DOAHyf
+t/5s9TXAOmqIY0cyrQsjw837aiN3QGXONeQorP4+G5wlzWESJeJyAGlZ11hSijVp
+QQFwCT+++k4L8SEoMIgJUMNVd9pESqCYf08nhJXc/qgn++YiG8tMvHz9IA/Ef4OK
+XNj/+1+XyrtYRgYpfOwsoCgbe01NEpV3vM61fW0g3EtCQXW7MOD5VIWMkvTt+ob4
+qTF5/HpRlIJ5nth/8ZktkCx51Lu6yhQ1fw3KKPZ7A3ZmBtxSJ8I1xe1v/yWN+eD9
+Z9l7ZTkFVe8Avej6NnudkH1f6uTNmEETXOXHWwIDAQABAoIBAAdKjhgfo6GPKgQK
+umIwoOKCHVGrVOXdcdMAhWoO9QDD4K+Vofc/QslQfoPHs0g1bGUgsLGVTrQD3JsH
+rBij+mDcQoy0YX73cSiM60RmYi2bKukNJsOQ6C/53IVR9Qn7Cyh7Xk9FJY4Mqzcm
+z4IB3S2z/793VkNdWys5ZURW1HKq6R7s5Z937wlinPdJhwi7kI148NFnHFO793+z
+MGRC4n45CP13dHG3jktc46UYksP3sQ4CFcjFhKS6BPKDsyjmbCx1HUYjjcaLTy2d
+CJhYDlEvvkjU6CmQfe+cFpKYXnW5zZTwwx1uUDFiWOgSZupaieWZtyPCX7hqQ4ea
+Q6u7RxkCgYEA6+WjIwTB+D3PKP1x82RY2BMpWQRxHuVJs7T0H4zA+IicfJYc/+Sh
+0Esqzfj9ak/sEuNR1fIj4XCKODEVL3/n+qjBz8lbsNDjUrjG8jv3TiGkeaOeOyFR
+8jv0cvedzFk+1lQElFwSHrWAOfeoZRMHOoxK1MNkELjo2wFa67o6rxcCgYEA5FfR
+PJRyu2OmCVwqzycMbSOz6gB/5O5bnI9DxZf0oMNE1n5ElsZWynEFE5L33E+bvB/8
+AdC4cPPL1pg46KiDDkJ/BQhw+mC4wwvBHwjZFlKdQMYtgGb9ErFL4WPnllXy+ETD
+8U9Az1zOvj6thy3RYA7JGyZus4t9ecM5M+xItF0CgYBm+u7G4NLUzhbbrBjMyifG
+3EaWp8vCUxJjs0FHbKjpVqoJ8XZjd6n0Rnw/Qs1OVemXLUmSfoyPZBPTCApZnBrn
+YDiLvzmZ7PbwK94d7XO+1gz5VSZEZf1iJC5I6jQm+2blJfSB19fJNC7wH1+SEEZ9
+lrUsQMg0TKTKxsKsWbY4rQKBgEjP//aTV6qNcgqWC0iXKQ08T0iU9DNqFmhr/q5p
+cCY7Xh4PkYuKn25ab8X4HXVxJTXt9QwXJFlQRHWfgLYf1fqcFajjMjOE2CXJ/8EH
+r0HBAkf/ac8CCD0HsCylENoNejbUpq6yGPaGn55mmir630MEM/imXrJ+DnrfV8RI
+2j45AoGBAN/fhfcjGu5ix88+T9sEmV1lfoHyETQIZD4r5c9NufMXPcztE33XTqjI
+DpBfOCVQ8ZNuHuScQdQC55K8XT7wR9sQRhNvRua1K0IsfcL73ghCJin9i0yxMEzp
+s00NbHgvb2kfhxCC8eyoiCmpRk9A9xg2V22hx7Hkcwv+A62e9tN4
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/lk.dts b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/lk.dts
new file mode 100644
index 0000000..7b1b06f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/lk.dts
@@ -0,0 +1,12 @@
+/dts-v1/;
+/ {
+	model = "Keys";
+	compatible = "mediatek,auto2701evb2-ivi";
+	signature {
+		key-dev {
+			required = "conf";
+			algo = "sha256,rsa2048";
+			key-name-hint = "dev";
+		};
+	};
+};
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/tmp_blob.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/tmp_blob.txt
new file mode 100644
index 0000000..744dd90
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/lk_dts/tmp_blob.txt
@@ -0,0 +1,7 @@
+#define CHECK_RSA 0
+#define CHECK_HASH 0
+
+const unsigned char blob[] __attribute__((aligned(4))) =
+{
+0
+};
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/hsm.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/hsm.py
new file mode 100755
index 0000000..be8d484
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/hsm.py
@@ -0,0 +1,78 @@
+import filecmp
+import os
+
+g_key_table = None
+
+class hsm_param:
+	def __init__(self):
+		#you can add parameter required by your HSM here
+		self.m_ref_key_path = ""
+		self.m_key_id = 0
+		self.m_attr1 = 0
+		self.m_attr2 = 0
+		self.m_padding_dict = {"raw": 0, "pss": 1}
+		self.m_padding = 0 #default: raw
+
+def create_key_table():
+	global g_key_table
+	if None == g_key_table:
+		#create key table
+		#here is reference design, please customize
+		#this part according to your HSM spec.
+		script_folder, script_name = os.path.split(os.path.realpath(__file__))
+		key_folder = os.path.join(script_folder, "keys")
+		key_folder = os.path.join(key_folder, "hsm")
+		g_key_table = list()
+		#key1 parameter
+		key1_param = hsm_param()
+		key1_param.m_ref_key_path = os.path.join(key_folder, 'pubk1.pem')
+		key1_param.m_key_id = 0
+		key1_param.m_attr1 = 1
+		key1_param.m_attr2 = 1
+		g_key_table.append(key1_param)
+		#key2 parameter
+		key2_param = hsm_param()
+		key2_param.m_ref_key_path = os.path.join(key_folder, 'pubk2.pem')
+		key2_param.m_key_id = 1
+		key2_param.m_attr1 = 2
+		key2_param.m_attr2 = 2
+		g_key_table.append(key2_param)
+	return
+
+def query_key_table(key):
+	global g_key_table
+	create_key_table()
+	for key_table_entry in g_key_table:
+		if filecmp.cmp(key, key_table_entry.m_ref_key_path):
+			print "key index: " + hex(key_table_entry.m_key_id)
+			return key_table_entry
+	print "no valid key entry found in table"
+	return None
+
+def hsm_rsa_sign(data, key, padding, sig):
+	hsm_param_obj =	None
+
+	#note that key is pubk actually, use it as index for
+	#HSM parameters such as key selection
+	hsm_param_obj = query_key_table(key)
+	if None == hsm_param_obj:
+		return -1
+	hsm_param_obj.m_padding = hsm_param_obj.m_padding_dict[padding]
+
+	print "========================"
+	print "HSM parameter:"
+	print "    m_key_id  = " + hex(hsm_param_obj.m_key_id)
+	print "    m_padding = " + hex(hsm_param_obj.m_padding)
+	print "    m_attr1   = " + hex(hsm_param_obj.m_attr1)
+	print "    m_attr2   = " + hex(hsm_param_obj.m_attr2)
+	print "========================"
+
+	#place hsm request here -- start
+	#create dummy sig for now
+	sig_file = open(sig, 'wb')
+	for i in range(0, 256):
+		sig_file.write(chr(0))
+	sig_file.close()
+	#place hsm request here -- end
+	return 0
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/sctrlcert/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/sctrlcert/root_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/sctrlcert/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/da_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/da_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/da_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/root_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/sla_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/sla_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/keys/toolauth/sla_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/asn1_gen.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/asn1_gen.pyc
new file mode 100644
index 0000000..554f44d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/asn1_gen.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/cert.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/cert.pyc
new file mode 100644
index 0000000..e9a251c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/cert.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/dainfo.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/dainfo.pyc
new file mode 100644
index 0000000..77a358f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/dainfo.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/gfh.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/gfh.pyc
new file mode 100644
index 0000000..3931c7d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/gfh.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/hsm_hook.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/hsm_hook.pyc
new file mode 100644
index 0000000..2e3d7bc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/lib/hsm_hook.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/pbp.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/pbp.py
new file mode 100755
index 0000000..6420a8f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/pbp.py
@@ -0,0 +1,272 @@
+import sys
+import os
+import struct
+import subprocess
+import shutil
+script_folder, script_name = os.path.split(os.path.realpath(__file__))
+sys.path.append(os.path.join(script_folder, "lib"))
+import gfh
+import cert
+
+def get_file_sizeb(file_path):
+	if not os.path.isfile(file_path):
+		return 0
+	file_handle = open(file_path, "rb")
+	file_handle.seek(0, 2)
+	file_size = file_handle.tell()
+	file_handle.close()
+	return file_size
+
+def concatb(file1_path, file2_path):
+	file1_size = get_file_sizeb(file1_path)
+	file2_size = get_file_sizeb(file2_path)
+	file1 = open(file1_path, "ab+")
+	file2 = open(file2_path, "rb")
+	file1.write(file2.read(file2_size))
+	file2.close()
+	file1.close()
+
+class bootloader:
+	def __init__(self, out_path, in_bootloader_file_path, out_bootloader_file_path):
+		self.m_gfh = gfh.image_gfh()
+		self.m_out_path = out_path
+		if not os.path.exists(self.m_out_path):
+			os.makedirs(self.m_out_path)
+		self.m_in_bootloader_file_path = in_bootloader_file_path
+		self.m_out_bootloader_file_path = out_bootloader_file_path
+		self.m_bootloader_is_signed = False
+		self.m_bootloader_content_offset = 0
+		#initialize content size to bootloader file size
+		self.m_bootloader_content_length = get_file_sizeb(self.m_in_bootloader_file_path)
+		self.m_bootloader_sig_size = 0
+		#generate file path for bootloader without gfh and signature
+		bootloader_path = in_bootloader_file_path.split('.')
+		self.m_bootloader_no_gfh_file_path = bootloader_path[0] + "_plain.bin"
+		self.m_sig_ver = 0
+		self.m_sw_ver = 0
+		self.m_root_prvk_path = ""
+		self.m_img_prvk_path = ""
+		self.m_ac_key = 0
+		self.m_sig_handler = None
+	def is_signed(self):
+		if self.m_in_bootloader_file_path:
+			bootloader_file = open(self.m_in_bootloader_file_path, "rb")
+			gfh_hdr_obj = gfh.gfh_header()
+			gfh_hdr_size = gfh_hdr_obj.get_size()
+			gfh_hdr_buf = bootloader_file.read(gfh_hdr_size)
+			self.m_bootloader_is_signed = gfh_hdr_obj.is_gfh(gfh_hdr_buf)
+			bootloader_file.close()
+		return self.m_bootloader_is_signed
+	def parse(self):
+		print "===parse bootloader==="
+		#image will be decomposed if it's signed
+		if self.is_signed():
+			gfh_total_size = self.m_gfh.parse(self.m_in_bootloader_file_path)
+			self.m_bootloader_content_offset = gfh_total_size
+			self.m_bootloader_content_length -= gfh_total_size
+			self.m_bootloader_content_length -= self.m_gfh.get_sig_size()
+			self.m_bootloader_sig_size = self.m_gfh.get_sig_size()
+			in_file = open(self.m_in_bootloader_file_path, "rb")
+			out_file = open(self.m_bootloader_no_gfh_file_path, "wb")
+			in_file.seek(self.m_bootloader_content_offset)
+			out_file.write(in_file.read(self.m_bootloader_content_length))
+			out_file.close()
+			in_file.close()
+		else:
+			shutil.copyfile(self.m_in_bootloader_file_path, self.m_bootloader_no_gfh_file_path)
+		print "bootloader content size = " + hex(self.m_bootloader_content_length)
+	def create_gfh(self, gfh_config):
+		self.parse()
+		if gfh_config:
+			if self.is_signed():
+				del self.m_gfh.gfhs[:]
+			self.m_gfh.load_ini(gfh_config)
+		elif not self.is_signed():
+			print "GFH_CONFIG.ini does not exist!!"
+			return -1
+		#self.m_gfh.dump()
+		return 0
+	def sign(self, key_ini_path, key_cert_path, content_config_file_path):
+		self.m_gfh.finalize(self.m_bootloader_content_length, key_ini_path)
+		#create tbs_bootloader.bin
+		tbs_bootloader_file_path = os.path.join(self.m_out_path, "tbs_preloader.bin")
+		tbs_bootloader_file = open(tbs_bootloader_file_path, "wb")
+		tbs_bootloader_file.write(self.m_gfh.pack())
+		bootloader_no_gfh_file = open(self.m_bootloader_no_gfh_file_path, "rb")
+		tbs_bootloader_file.write(bootloader_no_gfh_file.read(self.m_bootloader_content_length))
+		bootloader_no_gfh_file.close()
+		tbs_bootloader_file.close()
+		print "===sign==="
+		if self.m_gfh.get_sig_type() == "CERT_CHAIN":
+			self.m_sig_handler = cert.cert_chain_v2()
+			#create key cert if key cert does not exist
+			if key_cert_path == "":
+				key_cert_path = os.path.join(self.m_out_path, "key_cert.bin")
+			if not os.path.isfile(key_cert_path):
+				key_cert_folder_name, key_cert_file_name = os.path.split(os.path.abspath(key_cert_path))
+				self.m_sig_handler.create_key_cert(key_ini_path, self.m_out_path, key_cert_file_name)
+				key_cert_path = os.path.join(self.m_out_path, key_cert_file_name)
+			else:
+				self.m_sig_handler.set_key_cert(key_cert_path)
+			#create content cert
+			content_cert_name = "content_cert.bin"
+			self.m_sig_handler.create_content_cert(content_config_file_path, tbs_bootloader_file_path, self.m_out_path, content_cert_name)
+			#create final cert chain
+			sig_name = "preloader.sig"
+			sig_file_path = os.path.join(self.m_out_path, sig_name)
+			self.m_sig_handler.output(self.m_out_path, sig_name)
+			#output final cert chain size
+			sig_size_name = "sig_size.txt"
+			sig_size_file_path = os.path.join(self.m_out_path, sig_size_name)
+			sig_size_file = open(sig_size_file_path, 'w')
+			sig_size_file.write(hex(get_file_sizeb(sig_file_path)))
+			sig_size_file.close()
+			#create final preloader image
+			if os.path.isfile(self.m_out_bootloader_file_path):
+				os.remove(self.m_out_bootloader_file_path)
+			concatb(self.m_out_bootloader_file_path, tbs_bootloader_file_path)
+			concatb(self.m_out_bootloader_file_path, sig_file_path)
+			#clean up
+			os.remove(os.path.join(self.m_out_path, content_cert_name))
+		elif self.m_gfh.get_sig_type() == "SINGLE_AND_PHASH":
+			self.m_sig_handler = cert.sig_single_and_phash(self.m_gfh.get_pad_type())
+			self.m_sig_handler.set_out_path(self.m_out_path)
+			self.m_sig_handler.create(key_ini_path, tbs_bootloader_file_path)
+			#signature generation
+			self.m_sig_handler.sign()
+			sig_name = "preloader.sig"
+			sig_file_path = os.path.join(self.m_out_path, sig_name)
+			self.m_sig_handler.output(self.m_out_path, sig_name)
+			#output signature size
+			sig_size_name = "sig_size.txt"
+			sig_size_file_path = os.path.join(self.m_out_path, sig_size_name)
+			sig_size_file = open(sig_size_file_path, 'w')
+			sig_size_file.write(hex(get_file_sizeb(sig_file_path)))
+			sig_size_file.close()
+			#create final preloader image
+			if os.path.isfile(self.m_out_bootloader_file_path):
+				os.remove(self.m_out_bootloader_file_path)
+			concatb(self.m_out_bootloader_file_path, tbs_bootloader_file_path)
+			concatb(self.m_out_bootloader_file_path, sig_file_path)
+		else:
+			print "unknown signature type"
+		#clean up
+		os.remove(self.m_bootloader_no_gfh_file_path)
+		os.remove(tbs_bootloader_file_path)
+		os.remove(sig_file_path)
+		return
+
+def main():
+	#parameter parsing
+	idx = 1
+	key_ini_path = ""
+	key_path = ""
+	gfh_config_ini_path = ""
+	content_config_ini_path = ""
+	key_cert_path = ""
+	in_bootloader_path = ""
+	function = "sign"
+	function_out_path = ""
+	while idx < len(sys.argv):
+		if sys.argv[idx][0] == '-':
+			if sys.argv[idx][1] == 'i':
+				print "key ini: " + sys.argv[idx + 1]
+				key_ini_path = sys.argv[idx + 1]
+				idx += 2
+			if sys.argv[idx][1] == 'j':
+				print "key(pem): " + sys.argv[idx + 1]
+				key_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'g':
+				print "gfh config: " + sys.argv[idx + 1]
+				gfh_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'c':
+				print "content config: " + sys.argv[idx + 1]
+				content_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'k':
+				print "key cert: " + sys.argv[idx + 1]
+				key_cert_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1:] == 'func':
+				print "function: " + sys.argv[idx + 1]
+				function = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'o':
+				print "function output: " + sys.argv[idx + 1]
+				function_out_path = sys.argv[idx + 1]
+				idx += 2
+			else:
+				print "unknown input"
+				idx += 2
+		else:
+			in_bootloader_path = sys.argv[idx]
+			print "bootloader: " + in_bootloader_path
+			idx += 1
+
+	if (function == "sign") and (not in_bootloader_path):
+		print "bootloader path is not given!"
+		return -1
+	if (not function_out_path):
+		print "function out path is not given!"
+		return -1
+	if function == "sign":
+		if (key_ini_path == "") and (key_cert_path == ""):
+			print "key path is not given!"
+			return -1
+	else:
+		if (key_path == "" and key_ini_path == ""):
+			print "key path is not given!"
+			return -1
+
+	out_path = os.path.dirname(os.path.abspath(function_out_path))
+	if not os.path.exists(out_path):
+		os.makedirs(out_path)
+
+	if function == "sign":
+		bootloader_obj = bootloader(out_path, in_bootloader_path, function_out_path)
+		bootloader_obj.create_gfh(gfh_config_ini_path)
+		bootloader_obj.sign(key_ini_path, key_cert_path, content_config_ini_path)
+		return 0
+	elif function == "keybin_pss":
+		key = cert.ct_key("pss")
+		key.create(key_path)
+		key_bin = key.pack()
+		out_file = open(function_out_path, "wb")
+		out_file.write(key_bin)
+		out_file.close()
+		return 0
+	elif function == "keybin_legacy":
+		key = cert.ct_key("legacy")
+		key.create(key_path)
+		key_bin = key.pack()
+		out_file = open(function_out_path, "wb")
+		out_file.write(key_bin)
+		out_file.close()
+		return 0
+	elif function == "keyhash_pss":
+		key = cert.ct_key("pss")
+		key.create(key_path)
+		key_bin = key.pack()
+		tmp_key_bin_path = os.path.join(out_path, "tmp_keybin.bin")
+		out_file = open(tmp_key_bin_path, "wb")
+		out_file.write(key_bin)
+		out_file.close()
+		cert.hash_gen(tmp_key_bin_path, function_out_path)
+		os.remove(tmp_key_bin_path)
+		return 0
+	elif function == "keyhash_legacy":
+		key = cert.ct_key("legacy")
+		key.create(key_path)
+		key_bin = key.pack()
+		tmp_key_bin_path = os.path.join(out_path, "tmp_keybin.bin")
+		out_file = open(tmp_key_bin_path, "wb")
+		out_file.write(key_bin)
+		out_file.close()
+		cert.hash_gen(tmp_key_bin_path, function_out_path)
+		os.remove(tmp_key_bin_path)
+		return 0
+
+if __name__ == '__main__':
+	main()
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin
new file mode 100644
index 0000000..3f5aea7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert.py
new file mode 100755
index 0000000..214703f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert.py
@@ -0,0 +1,170 @@
+import sys
+import os
+import struct
+script_folder, script_name = os.path.split(os.path.realpath(__file__))
+sys.path.append(os.path.join(script_folder, "lib"))
+import gfh
+import cert
+
+def get_file_sizeb(file_path):
+	if not os.path.isfile(file_path):
+		return 0
+	file_handle = open(file_path, "rb")
+	file_handle.seek(0, 2)	
+	file_size = file_handle.tell()
+	file_handle.close()
+	return file_size
+
+def concatb(file1_path, file2_path):
+	file1_size = get_file_sizeb(file1_path)
+	file2_size = get_file_sizeb(file2_path)
+	file1 = open(file1_path, "ab+")
+	file2 = open(file2_path, "rb")
+	file1.write(file2.read(file2_size))
+	file2.close()
+	file1.close()
+
+class sctrl_cert:
+	def __init__(self, out_path, sctrl_cert_path):
+		self.m_out_path = out_path
+		if not os.path.exists(self.m_out_path):
+			os.makedirs(self.m_out_path)
+		self.m_sctrl_cert_path = sctrl_cert_path
+		self.m_gfh = gfh.image_gfh()
+		self.m_key_path = ""
+		self.m_out_path = out_path
+		self.m_sig_handler = None
+	def create_gfh(self, gfh_config):
+		self.m_gfh.load_ini(gfh_config)
+		self.m_gfh.dump()
+		return
+	def sign(self, key_ini_path, key_cert_path, primary_dbg_config_ini_path, primary_dbg_path, secondary_config_file_path):
+		#tool auth contains only gfh and signature, no extra content
+		self.m_gfh.finalize(0, key_ini_path)
+		#create tbs_sctrl_cert.bin
+		tbs_sctrl_cert_file_path = os.path.join(self.m_out_path, "tbs_sctrl_cert.bin")
+		tbs_sctrl_cert_file = open(tbs_sctrl_cert_file_path, "wb")
+		tbs_sctrl_cert_file.write(self.m_gfh.pack())
+		tbs_sctrl_cert_file.close()
+		print "===sctrl_cert sign==="
+		if self.m_gfh.get_sig_type() == "CERT_CHAIN":
+			self.m_sig_handler = cert.cert_chain_v5()
+			#create key cert
+			if key_cert_path == "":
+				key_cert_path = os.path.join(self.m_out_path, "key_cert.bin")
+			if os.path.isfile(key_ini_path):
+				key_cert_folder_name, key_cert_file_name = os.path.split(os.path.abspath(key_cert_path))
+				self.m_sig_handler.create_key_cert(key_ini_path, self.m_out_path, key_cert_file_name)
+				key_cert_path = os.path.join(self.m_out_path, key_cert_file_name)
+			else:
+				self.m_sig_handler.set_key_cert(key_cert_path)
+			#create primary debug cert
+			if primary_dbg_path == "":
+				primary_dbg_path = "primary_dbg_cert.bin"
+			if os.path.isfile(primary_dbg_config_ini_path):
+				primary_dbg_cert_folder_name, primary_dbg_cert_file_name = os.path.split(os.path.abspath(primary_dbg_path))
+				self.m_sig_handler.create_primary_dbg_cert(primary_dbg_config_ini_path, tbs_sctrl_cert_file_path, self.m_out_path, primary_dbg_cert_file_name)
+				primary_dbg_cert_path = os.path.join(self.m_out_path, primary_dbg_cert_file_name)
+			else:
+				self.m_sig_handler.set_primary_dbg_cert(primary_dbg_path)
+			#create secondary debug cert
+			secondary_dbg_cert_file_name = "secondary_dbg_cert.bin"
+			secondary_dbg_cert_file_path = os.path.join(self.m_out_path, secondary_dbg_cert_file_name)
+			self.m_sig_handler.create_secondary_dbg_cert(secondary_config_file_path, self.m_out_path, secondary_dbg_cert_file_name)
+			#create final cert chain
+			sig_name = "sctrl_cert.sig"
+			sig_file_path = os.path.join(self.m_out_path, sig_name)
+			self.m_sig_handler.output(self.m_out_path, sig_name)
+			#create final sctrl cert
+			if os.path.isfile(self.m_sctrl_cert_path):
+				os.remove(self.m_sctrl_cert_path)
+			concatb(self.m_sctrl_cert_path, tbs_sctrl_cert_file_path)
+			concatb(self.m_sctrl_cert_path, sig_file_path)
+			os.remove(secondary_dbg_cert_file_path)
+		elif self.m_gfh.get_sig_type() == "SINGLE":
+			self.m_sig_handler = cert.sig_single(self.m_gfh.get_pad_type())
+			self.m_sig_handler.set_out_path(self.m_out_path)
+			self.m_sig_handler.create(key_ini_path, tbs_sctrl_cert_file_path)
+			self.m_sig_handler.sign()
+			sig_name = "sctrl_cert.sig"
+			sig_file_path = os.path.join(self.m_out_path, sig_name)
+			self.m_sig_handler.output(self.m_out_path, sig_name)
+			#create final toolauth file
+			if os.path.isfile(self.m_sctrl_cert_path):
+				os.remove(self.m_sctrl_cert_path)
+			concatb(self.m_sctrl_cert_path, tbs_sctrl_cert_file_path)
+			concatb(self.m_sctrl_cert_path, sig_file_path)
+		else:
+			print "unknown signature type"
+
+		#clean up
+		os.remove(tbs_sctrl_cert_file_path)
+		os.remove(sig_file_path)
+		return
+
+def main():
+	#parameter parsing
+	idx = 1
+	key_ini_path = ""
+	key_cert_path = ""
+	gfh_config_ini_path = ""
+	primary_dbg_path = ""
+	primary_dbg_config_ini_path = ""
+	secondary_dbg_config_ini_path = ""
+	sctrl_cert_path = ""
+
+	while idx < len(sys.argv):
+		if sys.argv[idx][0] == '-':
+			if sys.argv[idx][1] == 'i':
+				print "key: " + sys.argv[idx + 1]
+				key_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'g':
+				print "gfh config: " + sys.argv[idx + 1]
+				gfh_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'p':
+				print "primary dbg cert: " + sys.argv[idx + 1]
+				primary_dbg_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'q':
+				print "primary dbg cert config: " + sys.argv[idx + 1]
+				primary_dbg_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 's':
+				print "secondary dbg cert config: " + sys.argv[idx + 1]
+				secondary_dbg_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'k':
+				print "key cert: " + sys.argv[idx + 1]
+				key_cert_path = sys.argv[idx + 1]
+				idx += 2
+			else:
+				print "unknown input"
+				idx += 2
+		else:
+			sctrl_cert_path = sys.argv[idx]
+			print "sctrl_cert_path: " + sctrl_cert_path
+			idx += 1
+
+	if not key_cert_path and not key_ini_path:
+		print "key path is not given!"
+		return -1
+	if not gfh_config_ini_path:
+		print "sctrl_cert_config_path is not given!"
+		return -1
+	if not sctrl_cert_path:
+		print "sctrl_cert is not given!"
+		return -1
+
+	out_path = os.path.dirname(os.path.abspath(sctrl_cert_path))
+
+        sctrl_cert_obj = sctrl_cert(out_path, sctrl_cert_path)
+	sctrl_cert_obj.create_gfh(gfh_config_ini_path)
+	sctrl_cert_obj.sign(key_ini_path, key_cert_path, primary_dbg_config_ini_path, primary_dbg_path, secondary_dbg_config_ini_path)
+
+	return 0
+
+if __name__ == '__main__':
+	main()
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_gfh_config.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_gfh_config.ini
new file mode 100644
index 0000000..3e002cb
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_gfh_config.ini
@@ -0,0 +1,14 @@
+[GFH_FILE_INFO]
+file_type = "4"
+start_addr = "0x00201000"
+flash_dev  = "emmc"
+sig_type = "SINGLE"
+pad_type = "legacy"
+[GFH_SCTRL_CERT]
+version = "1"
+me_id = "9398c055df4d402b8be0ac030d609210"
+daa_dis = "1"
+sbc_dis = "1"
+jtag_enable = "1"
+secure_world_debug_enable = "1"
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_key.ini
new file mode 100644
index 0000000..2aac06f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/sctrlcert/scc_key.ini
@@ -0,0 +1,3 @@
+[KEY]
+sw_ver = "1"
+rootkey = "keys/sctrlcert/root_prvk.pem"
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth.py
new file mode 100755
index 0000000..72188c2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth.py
@@ -0,0 +1,110 @@
+import sys
+import os
+import struct
+script_folder, script_name = os.path.split(os.path.realpath(__file__))
+sys.path.append(os.path.join(script_folder, "lib"))
+import gfh 
+import cert
+
+def get_file_sizeb(file_path):
+	if not os.path.isfile(file_path):
+		return 0
+	file_handle = open(file_path, "rb")
+	file_handle.seek(0, 2)
+	file_size = file_handle.tell()
+	file_handle.close()
+	return file_size
+
+def concatb(file1_path, file2_path):
+	file1_size = get_file_sizeb(file1_path)
+	file2_size = get_file_sizeb(file2_path)
+	file1 = open(file1_path, "ab+")
+	file2 = open(file2_path, "rb")
+	file1.write(file2.read(file2_size))
+	file2.close()
+	file1.close()
+
+class tool_auth:
+	def __init__(self, out_path, tool_auth_path):
+		self.m_out_path = out_path
+		if not os.path.exists(self.m_out_path):
+			os.makedirs(self.m_out_path)
+		self.m_tool_auth_path = tool_auth_path
+		self.m_gfh = gfh.image_gfh()
+		self.m_sig_handler = None
+	def create_gfh(self, gfh_config):
+		self.m_gfh.load_ini(gfh_config)
+		return
+	def sign(self, key_ini_path):
+		#tool auth contains only gfh and signature, no extra content
+		self.m_gfh.finalize(0, key_ini_path)
+		#write tbs_tool_auth
+		tbs_toolauth_file_path = os.path.join(self.m_out_path, "tbs_toolauth.bin")
+		tbs_tool_auth_file = open(tbs_toolauth_file_path, "wb")
+		tbs_tool_auth_file.write(self.m_gfh.pack())
+		tbs_tool_auth_file.close()
+		print "===tool_auth signing==="
+		if self.m_gfh.get_sig_type() == "SINGLE":
+			self.m_sig_handler = cert.sig_single(self.m_gfh.get_pad_type())
+			self.m_sig_handler.set_out_path(self.m_out_path)
+			self.m_sig_handler.create(key_ini_path, tbs_toolauth_file_path)
+			self.m_sig_handler.sign()
+			sig_name = "toolauth.sig"
+			sig_file_path = os.path.join(self.m_out_path, sig_name)
+			self.m_sig_handler.output(self.m_out_path, sig_name)
+			#create final toolauth file
+			if os.path.isfile(self.m_tool_auth_path):
+				os.remove(self.m_tool_auth_path)
+			concatb(self.m_tool_auth_path, tbs_toolauth_file_path)
+			concatb(self.m_tool_auth_path, sig_file_path)
+		else:
+			print "unknown signature type"
+		#clean up
+		os.remove(tbs_toolauth_file_path)
+		os.remove(sig_file_path)
+		return
+
+def main():
+	#parameter parsing
+	idx = 1
+	key_ini_path = ""
+	gfh_config_ini_path = ""
+	while idx < len(sys.argv):
+		if sys.argv[idx][0] == '-':
+			if sys.argv[idx][1] == 'i':
+				print "key: " + sys.argv[idx + 1]
+				key_ini_path = sys.argv[idx + 1]
+				idx += 2
+			elif sys.argv[idx][1] == 'g':
+				print "gfh: " + sys.argv[idx + 1]
+				gfh_config_ini_path = sys.argv[idx + 1]
+				idx += 2
+			else:
+				print "unknown input"
+				idx += 2
+		else:
+			tool_auth_path = sys.argv[idx]
+			print "tool_auth_path: " + tool_auth_path
+			idx += 1
+
+	if not key_ini_path:
+		print "key path is not given!"
+		return -1
+	if not gfh_config_ini_path:
+		print "gfh config path is not given!"
+		return -1
+	if not tool_auth_path:
+		print "tool_auth path is not given!"
+		return -1
+
+	out_path = os.path.dirname(os.path.abspath(tool_auth_path))
+
+	tool_auth_obj = tool_auth(out_path, tool_auth_path)
+	tool_auth_obj.create_gfh(gfh_config_ini_path)
+	tool_auth_obj.sign(key_ini_path)
+
+	return
+
+if __name__ == '__main__':
+	main()
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/bbchips.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/bbchips.ini
new file mode 100644
index 0000000..2a75c3d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/bbchips.ini
@@ -0,0 +1,11 @@
+[MT8521p]
+hw_code = 0x8521
+hw_sub_code = 0x0
+hw_ver = 0xca00
+sw_ver = 0x0
+load_region0_sigtype = epp
+load_region0_key = keys/resignda/epp_prvk.pem
+load_region1_sigtype = da
+load_region1_key = keys/resignda/da_prvk.pem
+load_region2_sigtype = da
+load_region2_key = keys/resignda/da_prvk.pem
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_gfh_config.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_gfh_config.ini
new file mode 100644
index 0000000..087063c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_gfh_config.ini
@@ -0,0 +1,13 @@
+[GFH_FILE_INFO]
+file_type = "5"
+start_addr = "0x00201000"
+flash_dev  = "emmc"
+sig_type = "SINGLE"
+pad_type = "legacy"
+[GFH_TOOL_AUTH]
+version = "1"
+da_path = "prebuilt/toolauth/MTK_AllInOne_DA.bin"
+bbchip = "MT8521p"
+bbchip_ini_path = "toolauth/bbchips.ini"
+sla_public_key = "keys/toolauth/sla_prvk.pem"
+daa_public_key = "keys/toolauth/da_prvk.pem"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_key.ini
new file mode 100644
index 0000000..e760e20
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/bl33/files/pbp/toolauth/toolauth_key.ini
@@ -0,0 +1,3 @@
+[KEY]
+sw_ver = "1"
+rootkey = "keys/toolauth/root_prvk.pem"
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/dpm/dpm.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/dpm/dpm.bb
new file mode 100644
index 0000000..0f6b698
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/dpm/dpm.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "DPM Image Files"

+LICENSE = "MediaTekProprietary"

+

+inherit deploy

+

+do_compile[nostamp] = "1"

+DPM_PREBUILT = "${TOPDIR}/../prebuilt/firmware/dpmfw/${TARGET_PLATFORM}"

+DPM_OUT = "${WORKDIR}/out"

+LIC_FILES_CHKSUM = "file://${DPM_PREBUILT}/LICENSE;md5=910d5154becac7a0abc85347a65cf9aa"

+DPM_BINARY = "dpm.img"

+

+do_compile () {

+	mkdir -p ${DPM_OUT}

+	cp ${DPM_PREBUILT}/${DPM_BINARY} ${DPM_OUT}/${DPM_BINARY}

+}

+

+do_deploy () {

+	install -d ${DEPLOYDIR}

+	install ${DPM_OUT}/${DPM_BINARY} ${DEPLOYDIR}/${DPM_BINARY}

+}

+

+addtask deploy before do_build after do_compile

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/LICENSE
new file mode 100644
index 0000000..1f38e30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("LYNQ") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to LYNQ Inc. and/or its licensors. Without
+the prior written permission of LYNQ inc. and/or its licensors, any
+reproduction, modification, use or disclosure of LYNQ Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("LYNQ SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.json b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.json
new file mode 100644
index 0000000..081dd58
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.json
@@ -0,0 +1,223 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection 
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* ap bl2 */
+			"img_file": "lk.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* HSM bootloader */
+			"cmd": "LOAD",
+			"img_file": "lk.bin",
+			"addr": "0x90201000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 2,
+			"addr": "0x90201000"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+	
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.jsonback b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.jsonback
new file mode 100644
index 0000000..081dd58
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/ap_bl2.jsonback
@@ -0,0 +1,223 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection 
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* ap bl2 */
+			"img_file": "lk.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* HSM bootloader */
+			"cmd": "LOAD",
+			"img_file": "lk.bin",
+			"addr": "0x90201000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 2,
+			"addr": "0x90201000"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+	
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dev_info/dtb-transfer-array.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dev_info/dtb-transfer-array.py
new file mode 100644
index 0000000..c6b3583
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dev_info/dtb-transfer-array.py
@@ -0,0 +1,41 @@
+import os
+import sys
+
+def read_dtb(filename, raw_data):
+	fin = open(filename, 'rb')
+	fin.seek(0, 0)
+	while True:
+		t_byte = fin.read(1)
+		if len(t_byte) == 0:
+			break
+		else :
+			raw_data.append("0x%.2X" % ord(t_byte))
+
+def write_blob_head_file(filename, raw_data, length):
+	fout = open(filename, 'w+')
+	fout.write('#define CHECK_RSA 1 \n')
+	fout.write('#define CHECK_HASH 1 \n')
+	fout.write('const unsigned char blob[] __attribute__((aligned(4))) = \n')
+	fout.write('{\n ')
+
+	i = 0
+	for data in raw_data:
+		i += 1
+		if i != length:
+			fout.write(data + ', ')
+		else:
+			fout.write(data)
+		if i % 16 == 0:
+			fout.write('\n ')
+		if i == length:
+		       break;
+	fout.write('\n};')
+	fout.close()
+
+if __name__ == "__main__":
+	raw_data = []
+	in_path  = str(sys.argv[1]);
+	out_path = str(sys.argv[2]);
+	length   = int(sys.argv[3],16);
+	read_dtb(in_path, raw_data)
+	write_blob_head_file(out_path, raw_data, length)
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dummy_img/fitImage b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dummy_img/fitImage
new file mode 100644
index 0000000..036ed1b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/dummy_img/fitImage
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/fit-lk/extract_region b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/fit-lk/extract_region
new file mode 100755
index 0000000..261ba30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/fit-lk/extract_region
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/lk_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/lk_key.ini
new file mode 100755
index 0000000..d6d089a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/lk_key.ini
@@ -0,0 +1,4 @@
+[KEY]
+sw_ver = "1"
+rootkey = "root_prvk.pem"
+ac_key = "0x112233445566778899aabbccddeeff"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/root_prvk.pem
new file mode 100644
index 0000000..fd987a3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/key/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0mlxI+3vrVlX8wH23CeTPDIH3c4DhEQNIGQltziYX7DOAHyf
+t/5s9TXAOmqIY0cyrQsjw837aiN3QGXONeQorP4+G5wlzWESJeJyAGlZ11hSijVp
+QQFwCT+++k4L8SEoMIgJUMNVd9pESqCYf08nhJXc/qgn++YiG8tMvHz9IA/Ef4OK
+XNj/+1+XyrtYRgYpfOwsoCgbe01NEpV3vM61fW0g3EtCQXW7MOD5VIWMkvTt+ob4
+qTF5/HpRlIJ5nth/8ZktkCx51Lu6yhQ1fw3KKPZ7A3ZmBtxSJ8I1xe1v/yWN+eD9
+Z9l7ZTkFVe8Avej6NnudkH1f6uTNmEETXOXHWwIDAQABAoIBAAdKjhgfo6GPKgQK
+umIwoOKCHVGrVOXdcdMAhWoO9QDD4K+Vofc/QslQfoPHs0g1bGUgsLGVTrQD3JsH
+rBij+mDcQoy0YX73cSiM60RmYi2bKukNJsOQ6C/53IVR9Qn7Cyh7Xk9FJY4Mqzcm
+z4IB3S2z/793VkNdWys5ZURW1HKq6R7s5Z937wlinPdJhwi7kI148NFnHFO793+z
+MGRC4n45CP13dHG3jktc46UYksP3sQ4CFcjFhKS6BPKDsyjmbCx1HUYjjcaLTy2d
+CJhYDlEvvkjU6CmQfe+cFpKYXnW5zZTwwx1uUDFiWOgSZupaieWZtyPCX7hqQ4ea
+Q6u7RxkCgYEA6+WjIwTB+D3PKP1x82RY2BMpWQRxHuVJs7T0H4zA+IicfJYc/+Sh
+0Esqzfj9ak/sEuNR1fIj4XCKODEVL3/n+qjBz8lbsNDjUrjG8jv3TiGkeaOeOyFR
+8jv0cvedzFk+1lQElFwSHrWAOfeoZRMHOoxK1MNkELjo2wFa67o6rxcCgYEA5FfR
+PJRyu2OmCVwqzycMbSOz6gB/5O5bnI9DxZf0oMNE1n5ElsZWynEFE5L33E+bvB/8
+AdC4cPPL1pg46KiDDkJ/BQhw+mC4wwvBHwjZFlKdQMYtgGb9ErFL4WPnllXy+ETD
+8U9Az1zOvj6thy3RYA7JGyZus4t9ecM5M+xItF0CgYBm+u7G4NLUzhbbrBjMyifG
+3EaWp8vCUxJjs0FHbKjpVqoJ8XZjd6n0Rnw/Qs1OVemXLUmSfoyPZBPTCApZnBrn
+YDiLvzmZ7PbwK94d7XO+1gz5VSZEZf1iJC5I6jQm+2blJfSB19fJNC7wH1+SEEZ9
+lrUsQMg0TKTKxsKsWbY4rQKBgEjP//aTV6qNcgqWC0iXKQ08T0iU9DNqFmhr/q5p
+cCY7Xh4PkYuKn25ab8X4HXVxJTXt9QwXJFlQRHWfgLYf1fqcFajjMjOE2CXJ/8EH
+r0HBAkf/ac8CCD0HsCylENoNejbUpq6yGPaGn55mmir630MEM/imXrJ+DnrfV8RI
+2j45AoGBAN/fhfcjGu5ix88+T9sEmV1lfoHyETQIZD4r5c9NufMXPcztE33XTqjI
+DpBfOCVQ8ZNuHuScQdQC55K8XT7wR9sQRhNvRua1K0IsfcL73ghCJin9i0yxMEzp
+s00NbHgvb2kfhxCC8eyoiCmpRk9A9xg2V22hx7Hkcwv+A62e9tN4
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/lk.dts b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/lk.dts
new file mode 100644
index 0000000..7b1b06f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/lk.dts
@@ -0,0 +1,12 @@
+/dts-v1/;
+/ {
+	model = "Keys";
+	compatible = "mediatek,auto2701evb2-ivi";
+	signature {
+		key-dev {
+			required = "conf";
+			algo = "sha256,rsa2048";
+			key-name-hint = "dev";
+		};
+	};
+};
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/tmp_blob.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/tmp_blob.txt
new file mode 100644
index 0000000..23a0ee1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/lk_dts/tmp_blob.txt
@@ -0,0 +1,7 @@
+#define CHECK_RSA 0

+#define CHECK_HASH 0

+

+const unsigned char blob[] __attribute__((aligned(4))) =

+{

+0

+};
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/hsm.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/hsm.py
new file mode 100755
index 0000000..afad840
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/hsm.py
@@ -0,0 +1,89 @@
+"""
+This module is used to delegate signature generation to HSM(Hardware Security Module)
+If public key is given for signing instead of private key, we'll know that
+we're trying to delegate signature to HSM. Then we look up key table created
+here to find HSM parameters. Here public key is used only as id for HSM
+parameters and won't act as a public key.
+"""
+import filecmp
+import os
+import lib.cert
+
+class HsmParam(object):
+    """
+    Parameter for HSM
+    """
+    def __init__(self):
+        # you can add parameter required by your HSM here
+        self.m_prvk = None
+
+def create_key_table():
+    """
+    create key table for public key to private key mapping
+    """
+    prvk_list = []
+    pubk_list = []
+    key_database_path = os.path.join(os.path.dirname(__file__), 'hsm_test_keys')
+    keys = os.listdir(key_database_path)
+    key_table = {}
+
+    for key in keys:
+        key_path = os.path.join(key_database_path, key)
+        if lib.cert.is_prvk(key_path):
+            prvk_list.append(key_path)
+        elif lib.cert.is_pubk(key_path):
+            pubk_list.append(key_path)
+
+    for pubk in pubk_list:
+        for prvk in prvk_list:
+            tmp_pubk = os.path.join(os.path.dirname(__file__), 'tmp_pubk.pem')
+            lib.cert.prvk_to_pubk(prvk, tmp_pubk)
+            if filecmp.cmp(pubk, tmp_pubk, False) is True:
+                key_table[pubk] = os.path.join(key_database_path, prvk)
+                os.remove(tmp_pubk)
+                break
+            os.remove(tmp_pubk)
+
+    return key_table
+
+def query_key_table(key_table, key):
+    """
+    get private key from public key.
+    In your implementation, you should convert input public
+    key to parameter passed to HSM, so HSM knows how to sign
+    message. Here as an example, we search public keys in a folder
+    as public key data base, and use corresponding private key
+    to sign message.
+    """
+    for pubk in key_table.keys():
+        if filecmp.cmp(key, pubk, False) is True:
+            return key_table[pubk]
+
+    return None
+
+
+def hsm_rsa_sign(data, key, padding, sig):
+    """
+    sign data with HSM
+    """
+    # note that key is pubk actually, use it as index for
+    # HSM parameters such as key selection
+    hsm_param_obj = HsmParam()
+    key_table = create_key_table()
+    hsm_param_obj.m_prvk = query_key_table(key_table, key)
+    if hsm_param_obj.m_prvk is None:
+        print 'not valid HSM parameter'
+        return -1
+
+    print "========================"
+    print "HSM parameter:"
+    print "    m_prvk  = " + hsm_param_obj.m_prvk
+    print "========================"
+
+    # place hsm request here -- start
+    # we re-direct it to signing with private key to mimic HSM
+    # data is not hashed here, you can hash data here to reduce
+    # network usage
+    lib.cert.sig_gen(data, hsm_param_obj.m_prvk, padding, sig)
+    # place hsm request here -- end
+    return 0
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/sctrlcert/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/sctrlcert/root_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/sctrlcert/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/da_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/da_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/da_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/root_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/root_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/root_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/sla_prvk.pem b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/sla_prvk.pem
new file mode 100644
index 0000000..715ecca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/keys/toolauth/sla_prvk.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0WQDRmxTDvm7U8HoqWphpOMy4X3A9Vu0bSB6wwW66TVOqsLL
+MHezN0DSdQNrgi2yaCAN4X2j23JmsnaGuJcLhXNwUPCE+NV2kE50zWxTsx8LsM1g
+aGv2fGDaDsIPVj7qcVzr2/dtHFwQ6YKrKVXYM95VPJza/X6iOIwCgjz+fdmsg/oq
+jrBoWr2rVqkt8aeAXorAvRDA89yxdwqea7w0GMX4Ski3yyMWssj2SXLzkbEWpYyT
+lanOnnQ1aaNnCG13cdOf7I67uj3StRl4Wnap9YnTbWN6+IRUP9ZbrHW+gjwMUKoW
+1YGHuXIjYlxUxmtaXk266re+iaTjQKLiQbCbLwIDAQABAoIBAAmXZTcCm0NiWRxb
+E4c/Ij3lUl1V31Ld4oPlKvpn9snb8UCNL7WGpiTvyTQm9fO+mB+A6GHd2XWh5eZi
+24T1FkgEo65xdgXX8Vhm357RSXw4/dYZckMWPvIvlY17gixXMXID6aHn0Y2tAfFQ
+VPrNvduSYaEnJjjaZh/k+fBxTs8A5lQcxDWvsf11on00sXrUAOlHS6hQ2vziZnmc
+r/MqBY/3Hkwtqsr4unCenKTch1hKf/6KqaChYO0GnDlwt9rjmH3tcb0LyCQ1aYe9
+dDY9RmgscZE8PtvbKpEfcB8jruP43ZgYC1oTj9WtdHQ2gtLS0bs9knhnECSPMW3Y
+ORF46oECgYEA8qz+H+tuqxCKAA1p6EXmegpEcqhkwapviqgMZMQAejfW//bf8LYd
+9CsyTtWER1uxJ+PjvhW/K0NYXn+tbWzrsW1UK/AaYwvaB9+JsjU07aZh9kmADZJi
+3KkPsKp4Unqlno59XkLm3XE9REoHursnIkiuzHZnqh/+50ck+GJGQQ8CgYEA3OMr
+xNfLkuTs5NyBDBCYSOf0s2wfLgpfu4eaUYuYMGoAAL4trvrLtW5tcW63ObMy51V5
+EJJAH3vk/EK9EgevMYGwbiVB7pkb11tcnLoxelorTAbpDCzSorbW71mruX11496w
+GBJw4yQcIUxET5GxU14qTEK4wLQQ7AZQIKVtw+ECgYEAv/YJuzQfwZ9+mhYCPaL1
+cnomtM/xi6SHQRY3X4oPmp4LK0Sc1ispPJji3atWTKACXbyNzTIkm1NVVsMGa7Wq
+JxqFZ5AxP0IDwRCZOmeOK6LegNSZP6MZItV0vNnL/epYkjjCgMrJFkfaH+ezf4lF
+pn/6DXBoBhHzL/1+CCCs1A8CgYBPk1+fSIbEYsidInszF39lNHtJcDhDY+VdL9r+
+aaXoOyfJHLpkgWGF+URgSxyjItXB1V8KA0YqkX3LC1gF+NK6qRggdjesd2g6S2Wv
+6LwOchGLECpBApzXlbsU+18MMhCYiQ8zfOFCUy33KPyrFbemaxQd6SOZ+MTn4tZX
+DIHgwQKBgFLvSmrc8eLKRDDDxdvZYiu8JMm/DS4TdbK3P2u67hhxd3Y4whdQboF5
+zHbkkTBIuKoFbbQj3bB91KmCIcxNkT66Xe3qmoAfDrUMp7cxBLcnpoDpJIXTlKnG
+bHThVsqvJvuwQByr2oUGUJd8eerqzUCAgx/mi+/9aTe+ztB/KmBF
+-----END RSA PRIVATE KEY-----
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/__init__.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/__init__.pyc
new file mode 100644
index 0000000..efe7800
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/__init__.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/asn1_gen.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/asn1_gen.pyc
new file mode 100755
index 0000000..9a44921
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/asn1_gen.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/cert.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/cert.pyc
new file mode 100644
index 0000000..d7941ef
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/cert.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/dainfo.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/dainfo.pyc
new file mode 100644
index 0000000..292f62e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/dainfo.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/gfh.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/gfh.pyc
new file mode 100644
index 0000000..a653ad6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/gfh.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/hsm_hook.pyc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/hsm_hook.pyc
new file mode 100644
index 0000000..93a084f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/lib/hsm_hook.pyc
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/pbp.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/pbp.py
new file mode 100755
index 0000000..6ca7326
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/pbp.py
@@ -0,0 +1,367 @@
+"""
+pbp is a tool that signs/re-signs bootloader and generate data for root public key authentication.
+"""
+import os
+import shutil
+import argparse
+from lib import gfh
+from lib import cert
+
+
+def get_file_sizeb(file_path):
+    """
+    Get size of binary file
+    """
+    if not os.path.isfile(file_path):
+        return 0
+    file_handle = open(file_path, "rb")
+    file_handle.seek(0, 2)
+    file_size = file_handle.tell()
+    file_handle.close()
+    return file_size
+
+
+def concatb(file1_path, file2_path):
+    """
+    Concatenate binary files
+    """
+    file2_size = get_file_sizeb(file2_path)
+    file1 = open(file1_path, "ab+")
+    file2 = open(file2_path, "rb")
+    file1.write(file2.read(file2_size))
+    file2.close()
+    file1.close()
+
+
+class Bl(object):
+    """
+    Bl, which stands for preloader in Mediatek solution.
+    Mediatek preloader is loaded/verified by BootROM and its format is determined by BootROM
+    and is different from other images due to several reasons.
+    It has basic format as follows:
+    =======================
+    GFH
+    =======================
+    Preloader_NO_GFH.bin
+    =======================
+    Sig
+    =======================
+    Where Preloader_NO_GFH.bin is converted from preloader.elf.
+    """
+    def __init__(self, out_path, in_bootloader_file_path, out_bootloader_file_path):
+        self.m_gfh = gfh.ImageGFH()
+        self.m_out_path = out_path
+        if not os.path.exists(self.m_out_path):
+            os.makedirs(self.m_out_path)
+        self.m_in_bl_file_path = in_bootloader_file_path
+        self.m_out_bl_file_path = out_bootloader_file_path
+        self.m_bl_is_signed = False
+        self.m_bl_content_offset = 0
+        # initialize content size to bl file size
+        self.m_bl_content_length = get_file_sizeb(self.m_in_bl_file_path)
+        self.m_bl_sig_size = 0
+        # generate file path for bl without gfh and signature
+        bl_path = os.path.splitext(in_bootloader_file_path)
+        self.m_bl_no_gfh_file_path = bl_path[0] + "_plain.bin"
+        self.m_sig_ver = 0
+        self.m_sw_ver = 0
+        self.m_root_prvk_path = ""
+        self.m_img_prvk_path = ""
+        self.m_ac_key = 0
+        self.m_sig_handler = None
+
+    def is_signed(self):
+        """
+        GFH and signature are added after bootloader image has been processed by pbp.
+        We use this fact to determine whether bootloader image is signed.
+        """
+        if self.m_in_bl_file_path:
+            bl_file = open(self.m_in_bl_file_path, "rb")
+            gfh_hdr_obj = gfh.GFHHeader()
+            gfh_hdr_size = gfh_hdr_obj.get_size()
+            gfh_hdr_buf = bl_file.read(gfh_hdr_size)
+            self.m_bl_is_signed = gfh_hdr_obj.is_gfh(gfh_hdr_buf)
+            bl_file.close()
+        return self.m_bl_is_signed
+
+    def parse(self):
+        """
+        If image is signed, we remove GFH and signature. Removed GFH is parsed and
+        stored. Stored GFH will be used later if GFH ini file is not given.
+        """
+        print "===parse bootloader==="
+        # image will be decomposed if it's signed
+        if self.is_signed():
+            gfh_total_size = self.m_gfh.parse(self.m_in_bl_file_path)
+            self.m_bl_content_offset = gfh_total_size
+            self.m_bl_content_length -= gfh_total_size
+            self.m_bl_content_length -= self.m_gfh.get_sig_size()
+            self.m_bl_sig_size = self.m_gfh.get_sig_size()
+            in_file = open(self.m_in_bl_file_path, "rb")
+            out_file = open(self.m_bl_no_gfh_file_path, "wb")
+            in_file.seek(self.m_bl_content_offset)
+            out_file.write(in_file.read(self.m_bl_content_length))
+            out_file.close()
+            in_file.close()
+        else:
+            shutil.copyfile(self.m_in_bl_file_path, self.m_bl_no_gfh_file_path)
+        print "bootloader content size = " + hex(self.m_bl_content_length)
+
+    def create_gfh(self, gfh_config):
+        """
+        GFH creation. GFH may be created from parsed/stored GFH config or from GFH config file
+        provided by user.
+        """
+        self.parse()
+        if gfh_config:
+            if self.is_signed():
+                del self.m_gfh.gfhs[:]
+            self.m_gfh.load_ini(gfh_config)
+        elif not self.is_signed():
+            print "GFH_CONFIG.ini does not exist!!"
+            return -1
+        # self.m_gfh.dump()
+        return 0
+
+    def sign(self, key_ini_path, key_cert_path, content_config_file_path):
+        """
+        Sign bootloader according to its signature type, which is stored in GFH.
+        """
+        self.m_gfh.finalize(self.m_bl_content_length, key_ini_path)
+        # create tbs_bootloader.bin
+        tbs_bl_file_path = os.path.join(self.m_out_path, "tbs_preloader.bin")
+        tbs_bl_file = open(tbs_bl_file_path, "wb")
+        tbs_bl_file.write(self.m_gfh.pack())
+        bl_no_gfh_file = open(self.m_bl_no_gfh_file_path, "rb")
+        tbs_bl_file.write(bl_no_gfh_file.read(self.m_bl_content_length))
+        bl_no_gfh_file.close()
+        tbs_bl_file.close()
+        print "===sign==="
+        if self.m_gfh.get_sig_type() == "CERT_CHAIN":
+            self.m_sig_handler = cert.CertChainV2()
+            # create key cert if key cert does not exist
+            if key_cert_path == "":
+                key_cert_path = os.path.join(self.m_out_path, "key_cert.bin")
+            if not os.path.isfile(key_cert_path):
+                key_cert_file_name = os.path.basename(os.path.abspath(key_cert_path))
+                self.m_sig_handler.create_key_cert(key_ini_path,
+                                                   self.m_out_path,
+                                                   key_cert_file_name)
+                key_cert_path = os.path.join(self.m_out_path, key_cert_file_name)
+            else:
+                self.m_sig_handler.set_key_cert(key_cert_path)
+            # create content cert
+            content_cert_name = "content_cert.bin"
+            self.m_sig_handler.create_content_cert(content_config_file_path,
+                                                   tbs_bl_file_path,
+                                                   self.m_out_path,
+                                                   content_cert_name)
+            # create final cert chain
+            sig_name = "preloader.sig"
+            sig_file_path = os.path.join(self.m_out_path, sig_name)
+            self.m_sig_handler.output(self.m_out_path, sig_name)
+            # output final cert chain size
+            sig_size_name = "sig_size.txt"
+            sig_size_file_path = os.path.join(self.m_out_path, sig_size_name)
+            sig_size_file = open(sig_size_file_path, 'w')
+            sig_size_file.write(hex(get_file_sizeb(sig_file_path)))
+            sig_size_file.close()
+            # create final preloader image
+            if os.path.isfile(self.m_out_bl_file_path):
+                os.remove(self.m_out_bl_file_path)
+            concatb(self.m_out_bl_file_path, tbs_bl_file_path)
+            concatb(self.m_out_bl_file_path, sig_file_path)
+            # clean up
+            os.remove(os.path.join(self.m_out_path, content_cert_name))
+        elif self.m_gfh.get_sig_type() == "SINGLE_AND_PHASH":
+            self.m_sig_handler = cert.SigSingleAndPhash(self.m_gfh.get_pad_type())
+            self.m_sig_handler.set_out_path(self.m_out_path)
+            self.m_sig_handler.create(key_ini_path, tbs_bl_file_path)
+            # signature generation
+            self.m_sig_handler.sign()
+            sig_name = "preloader.sig"
+            sig_file_path = os.path.join(self.m_out_path, sig_name)
+            self.m_sig_handler.output(self.m_out_path, sig_name)
+            # output signature size
+            sig_size_name = "sig_size.txt"
+            sig_size_file_path = os.path.join(self.m_out_path, sig_size_name)
+            sig_size_file = open(sig_size_file_path, 'w')
+            sig_size_file.write(hex(get_file_sizeb(sig_file_path)))
+            sig_size_file.close()
+            # create final preloader image
+            if os.path.isfile(self.m_out_bl_file_path):
+                os.remove(self.m_out_bl_file_path)
+            concatb(self.m_out_bl_file_path, tbs_bl_file_path)
+            concatb(self.m_out_bl_file_path, sig_file_path)
+        else:
+            print "unknown signature type"
+        # clean up
+        os.remove(self.m_bl_no_gfh_file_path)
+        os.remove(tbs_bl_file_path)
+        os.remove(sig_file_path)
+        return
+
+class PbpArgs(object):
+    """
+    PbpArgs is used to pass parameter to pbp.
+    This structure is both used when user executes this python script directly or imports
+    this module and use exported method.
+    """
+    def __init__(self):
+        self.op = None
+        self.padding = None
+        self.key_ini_path = None
+        self.key_path = None
+        self.gfh_cfg_ini_path = None
+        self.cnt_cfg_ini_path = None
+        self.key_cert_path = None
+        self.input_bl_path = None
+        self.tmp_output_path = None
+        self.output_path = None
+    def reset(self):
+        self.__init__()
+    def dump(self):
+        """
+        dump parameters.
+        """
+        f = lambda arg: 'Not Set' if arg is None else arg
+        print "op = " + f(self.op)
+        print "padding = " + f(self.padding)
+        print "key_ini_path = " + f(self.key_ini_path)
+        print "key_path = " + f(self.key_path)
+        print "gfh_cfg_ini_path = " + f(self.gfh_cfg_ini_path)
+        print "cnt_cfg_ini_path = " + f(self.cnt_cfg_ini_path)
+        print "key_cert_path = " + f(self.key_cert_path)
+        print "input_bl_path = " + f(self.input_bl_path)
+        print "tmp_output_path = " + f(self.tmp_output_path)
+        print "output_path = " + f(self.output_path)
+
+def _op_sign(args):
+    """
+    Sign/re-sign operation
+    """
+    bl_obj = Bl(args.tmp_output_path, args.input_bl_path, args.output_path)
+    bl_obj.create_gfh(args.gfh_cfg_ini_path)
+    bl_obj.sign(args.key_ini_path, args.key_cert_path, args.cnt_cfg_ini_path)
+    return 0
+
+def _op_keybin(args):
+    """
+    Generate root key data structure for root public key authentication.
+    """
+    key = cert.CtKey(args.padding)
+    key.create(args.key_path)
+    key_bin = key.pack()
+    out_file = open(args.output_path, "wb")
+    out_file.write(key_bin)
+    out_file.close()
+    return 0
+
+def _op_keybin_pss(args):
+    """
+    Root key data structures are different for different padding. Here we handles pss padding.
+    """
+    args.padding = 'pss'
+    return _op_keybin(args)
+
+def _op_keybin_legacy(args):
+    """
+    Root key data structures are different for different padding. Here we handles legacy padding.
+    """
+    args.padding = 'legacy'
+    return _op_keybin(args)
+
+def _op_keyhash(args):
+    """
+    Generate hash of root key data structure, which is dependent on padding used.
+    """
+    key = cert.CtKey(args.padding)
+    key.create(args.key_path)
+    key_bin = key.pack()
+    tmp_key_bin_path = os.path.join(args.tmp_output_path, "tmp_keybin.bin")
+    out_file = open(tmp_key_bin_path, "wb")
+    out_file.write(key_bin)
+    out_file.close()
+    cert.hash_gen(tmp_key_bin_path, args.output_path)
+    os.remove(tmp_key_bin_path)
+    return 0
+
+def _op_keyhash_pss(args):
+    """
+    Root key data struture hash for pss padding.
+    """
+    args.padding = 'pss'
+    return _op_keyhash(args)
+
+def _op_keyhash_legacy(args):
+    """
+    Root key data struture hash for legacy padding.
+    """
+    args.padding = 'legacy'
+    return _op_keyhash(args)
+
+def pbp_op(args):
+    """
+    Handles and dispatches all operations supported by pbp.
+    """
+    supported_ops = {
+        'sign': _op_sign,
+        'keybin_pss': _op_keybin_pss,
+        'keybin_legacy': _op_keybin_legacy,
+        'keyhash_pss': _op_keyhash_pss,
+        'keyhash_legacy': _op_keyhash_legacy
+    }
+
+    if args.output_path is None:
+        print "output path is not given!"
+        return -1
+
+    if args.op is None:
+        print "op is not given!"
+        return -1
+
+    if args.op == 'sign':
+        if not args.input_bl_path:
+            print "bootloader path is not given!"
+            return -1
+        if (args.key_ini_path is None) and (args.key_cert_path is None):
+            print "key path is not given!"
+            return -1
+    else:
+        if (args.key_ini_path is None) and (args.key_path is None):
+            print "key path is not given!"
+            return -1
+
+    args.tmp_output_path = os.path.dirname(os.path.abspath(args.output_path))
+    if not os.path.exists(args.tmp_output_path):
+        os.makedirs(args.tmp_output_path)
+
+    op_f = supported_ops.get(args.op)
+    return op_f(args)
+
+
+def main():
+    """
+    Main function for pbp, which is used when pbp.py is executed directly.
+    Note that we changed input bootloader parameter to -in_bl $BL_PATH.
+    Please remember to add -in_bl if you're migrating from previous version.
+    """
+    parser = argparse.ArgumentParser(description='pbp tool for preloader gfh \
+creation/replacement and signing/re-signing')
+    parser.add_argument('-i', dest='key_ini_path', help='key configuartion path')
+    parser.add_argument('-j', dest='key_path', help='key path (with pem format)')
+    parser.add_argument('-g', dest='gfh_cfg_ini_path', help='gfh(generaic file header) \
+configuration path')
+    parser.add_argument('-c', dest='cnt_cfg_ini_path', help='content certificate \
+configuration path')
+    parser.add_argument('-k', dest='key_cert_path', help='key certificate path')
+    parser.add_argument('-func', dest='op', help='operation to be performed', required=True)
+    parser.add_argument('-o', dest='output_path', help='output file path')
+    parser.add_argument('input_bl_path', nargs='?', help='input file path')
+
+    pbp_args = parser.parse_args()
+    return pbp_op(pbp_args)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin
new file mode 100644
index 0000000..3f5aea7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/prebuilt/toolauth/MTK_AllInOne_DA.bin
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert.py
new file mode 100755
index 0000000..e8cfff4
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert.py
@@ -0,0 +1,202 @@
+"""
+This module is for debug control certificate generation
+"""
+import os
+import sys
+from lib import gfh
+from lib import cert
+
+
+def get_file_sizeb(file_path):
+    """
+    get binary file size
+    """
+    if not os.path.isfile(file_path):
+        return 0
+    file_handle = open(file_path, "rb")
+    file_handle.seek(0, 2)
+    file_size = file_handle.tell()
+    file_handle.close()
+    return file_size
+
+
+def concatb(file1_path, file2_path):
+    """
+    concatenate two binary files
+    """
+    file2_size = get_file_sizeb(file2_path)
+    file1 = open(file1_path, "ab+")
+    file2 = open(file2_path, "rb")
+    file1.write(file2.read(file2_size))
+    file2.close()
+    file1.close()
+
+
+class SctrlCert(object):
+    """
+    class for debug control certificate
+    """
+    def __init__(self, out_path, sctrl_cert_path):
+        self.m_out_path = out_path
+        if not os.path.exists(self.m_out_path):
+            os.makedirs(self.m_out_path)
+        self.m_sctrl_cert_path = sctrl_cert_path
+        self.m_gfh = gfh.ImageGFH()
+        self.m_key_path = ""
+        self.m_out_path = out_path
+        self.m_sig_handler = None
+
+    def create_gfh(self, gfh_config):
+        """
+        create GFH(generic file header) for debug control certificate
+        """
+        self.m_gfh.load_ini(gfh_config)
+        self.m_gfh.dump()
+        return
+
+    def sign(self, key_ini_path, key_cert_path, primary_dbg_config_ini_path, primary_dbg_path,
+             secondary_config_file_path):
+        """
+        generate signature for debug control certificate
+        """
+        # tool auth contains only gfh and signature, no extra content
+        self.m_gfh.finalize(0, key_ini_path)
+        # create tbs_sctrl_cert.bin
+        tbs_sctrl_cert_file_path = os.path.join(self.m_out_path, "tbs_sctrl_cert.bin")
+        tbs_sctrl_cert_file = open(tbs_sctrl_cert_file_path, "wb")
+        tbs_sctrl_cert_file.write(self.m_gfh.pack())
+        tbs_sctrl_cert_file.close()
+        print "===sctrl_cert sign==="
+        if self.m_gfh.get_sig_type() == "CERT_CHAIN":
+            self.m_sig_handler = cert.CertChainV5()
+            # create key cert
+            if key_cert_path == "":
+                key_cert_path = os.path.join(self.m_out_path, "key_cert.bin")
+            if os.path.isfile(key_ini_path):
+                key_cert_file_name = os.path.basename(os.path.abspath(key_cert_path))
+                self.m_sig_handler.create_key_cert(key_ini_path,
+                                                   self.m_out_path,
+                                                   key_cert_file_name)
+                key_cert_path = os.path.join(self.m_out_path, key_cert_file_name)
+            else:
+                self.m_sig_handler.set_key_cert(key_cert_path)
+            # create primary debug cert
+            if primary_dbg_path == "":
+                primary_dbg_path = "primary_dbg_cert.bin"
+            if os.path.isfile(primary_dbg_config_ini_path):
+                primary_dbg_cert_file_name = os.path.basename(os.path.abspath(primary_dbg_path))
+                self.m_sig_handler.create_primary_dbg_cert(primary_dbg_config_ini_path,
+                                                           tbs_sctrl_cert_file_path,
+                                                           self.m_out_path,
+                                                           primary_dbg_cert_file_name)
+            else:
+                self.m_sig_handler.set_primary_dbg_cert(primary_dbg_path)
+            # create secondary debug cert
+            secondary_dbg_cert_file_name = "secondary_dbg_cert.bin"
+            secondary_dbg_cert_file_path = os.path.join(self.m_out_path,
+                                                        secondary_dbg_cert_file_name)
+            self.m_sig_handler.create_secondary_dbg_cert(secondary_config_file_path,
+                                                         self.m_out_path,
+                                                         secondary_dbg_cert_file_name)
+            # create final cert chain
+            sig_name = "sctrl_cert.sig"
+            sig_file_path = os.path.join(self.m_out_path, sig_name)
+            self.m_sig_handler.output(self.m_out_path, sig_name)
+            # create final sctrl cert
+            if os.path.isfile(self.m_sctrl_cert_path):
+                os.remove(self.m_sctrl_cert_path)
+            concatb(self.m_sctrl_cert_path, tbs_sctrl_cert_file_path)
+            concatb(self.m_sctrl_cert_path, sig_file_path)
+            os.remove(secondary_dbg_cert_file_path)
+        elif self.m_gfh.get_sig_type() == "SINGLE":
+            self.m_sig_handler = cert.SigSingle(self.m_gfh.get_pad_type())
+            self.m_sig_handler.set_out_path(self.m_out_path)
+            self.m_sig_handler.create(key_ini_path, tbs_sctrl_cert_file_path)
+            self.m_sig_handler.sign()
+            sig_name = "sctrl_cert.sig"
+            sig_file_path = os.path.join(self.m_out_path, sig_name)
+            self.m_sig_handler.output(self.m_out_path, sig_name)
+            # create final toolauth file
+            if os.path.isfile(self.m_sctrl_cert_path):
+                os.remove(self.m_sctrl_cert_path)
+            concatb(self.m_sctrl_cert_path, tbs_sctrl_cert_file_path)
+            concatb(self.m_sctrl_cert_path, sig_file_path)
+        else:
+            print "unknown signature type"
+
+        # clean up
+        os.remove(tbs_sctrl_cert_file_path)
+        os.remove(sig_file_path)
+        return
+
+
+def main():
+    """
+    entry point if this module is executed from cmdline.
+    """
+    # parameter parsing
+    idx = 1
+    key_ini_path = ""
+    key_cert_path = ""
+    gfh_config_ini_path = ""
+    primary_dbg_path = ""
+    primary_dbg_config_ini_path = ""
+    secondary_dbg_config_ini_path = ""
+    sctrl_cert_path = ""
+
+    while idx < len(sys.argv):
+        if sys.argv[idx][0] == '-':
+            if sys.argv[idx][1] == 'i':
+                print "key: " + sys.argv[idx + 1]
+                key_ini_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 'g':
+                print "gfh config: " + sys.argv[idx + 1]
+                gfh_config_ini_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 'p':
+                print "primary dbg cert: " + sys.argv[idx + 1]
+                primary_dbg_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 'q':
+                print "primary dbg cert config: " + sys.argv[idx + 1]
+                primary_dbg_config_ini_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 's':
+                print "secondary dbg cert config: " + sys.argv[idx + 1]
+                secondary_dbg_config_ini_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 'k':
+                print "key cert: " + sys.argv[idx + 1]
+                key_cert_path = sys.argv[idx + 1]
+                idx += 2
+            else:
+                print "unknown input"
+                idx += 2
+        else:
+            sctrl_cert_path = sys.argv[idx]
+            print "sctrl_cert_path: " + sctrl_cert_path
+            idx += 1
+
+    if not key_cert_path and not key_ini_path:
+        print "key path is not given!"
+        return -1
+    if not gfh_config_ini_path:
+        print "sctrl_cert_config_path is not given!"
+        return -1
+    if not sctrl_cert_path:
+        print "sctrl_cert is not given!"
+        return -1
+
+    out_path = os.path.dirname(os.path.abspath(sctrl_cert_path))
+
+    sctrl_cert_obj = SctrlCert(out_path, sctrl_cert_path)
+    sctrl_cert_obj.create_gfh(gfh_config_ini_path)
+    sctrl_cert_obj.sign(key_ini_path, key_cert_path, primary_dbg_config_ini_path, primary_dbg_path,
+                        secondary_dbg_config_ini_path)
+
+    return 0
+
+
+if __name__ == '__main__':
+    main()
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_gfh_config.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_gfh_config.ini
new file mode 100644
index 0000000..394d1bd
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_gfh_config.ini
@@ -0,0 +1,43 @@
+[CHIP]
+version = "mt8167"
+[GFH_FILE_INFO]
+version = "1"
+file_type = "4"
+start_addr = "0x00201000"
+flash_dev  = "emmc"
+sig_type = "SINGLE"
+pad_type = "pss"
+max_size = "0x00040000"
+sig_ver = "1"
+attr = "0"
+[GFH_SCTRL_CERT]
+version = "1"
+cust_name = "MTK"
+me_id = "9398c055df4d402b8be0ac030d609210"
+sla_dis = "1"
+daa_dis = "1"
+sbc_dis = "1"
+jtag_enable = "1"
+secure_world_debug_enable = "1"
+
+[CHIP]
+version = "mt8518"
+[GFH_FILE_INFO]
+version = "1"
+file_type = "4"
+start_addr = "0x00201000"
+flash_dev  = "nand"
+sig_type = "SINGLE"
+pad_type = "pss"
+max_size = "0x00040000"
+sig_ver = "1"
+attr = "0"
+[GFH_SCTRL_CERT]
+version = "1"
+cust_name = "MTK"
+me_id = "9398c055df4d402b8be0ac030d609210"
+sla_dis = "1"
+daa_dis = "1"
+sbc_dis = "1"
+jtag_enable = "1"
+secure_world_debug_enable = "1"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_key.ini
new file mode 100644
index 0000000..2aac06f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/sctrlcert/scc_key.ini
@@ -0,0 +1,3 @@
+[KEY]
+sw_ver = "1"
+rootkey = "keys/sctrlcert/root_prvk.pem"
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth.py
new file mode 100755
index 0000000..5319605
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth.py
@@ -0,0 +1,135 @@
+"""
+This module generates tool auth, which combines public certificate and other functions
+such as DA binding.
+"""
+import os
+import sys
+from lib import gfh
+from lib import cert
+
+
+def get_file_sizeb(file_path):
+    """
+    get binary file size
+    """
+    if not os.path.isfile(file_path):
+        return 0
+    file_handle = open(file_path, "rb")
+    file_handle.seek(0, 2)
+    file_size = file_handle.tell()
+    file_handle.close()
+    return file_size
+
+
+def concatb(file1_path, file2_path):
+    """
+    concatenate two binary files
+    """
+    file2_size = get_file_sizeb(file2_path)
+    file1 = open(file1_path, "ab+")
+    file2 = open(file2_path, "rb")
+    file1.write(file2.read(file2_size))
+    file2.close()
+    file1.close()
+
+
+class ToolAuth(object):
+    """
+    class for tool auth, which is a public key certificate for DAA/SLA.
+    """
+    def __init__(self, out_path, tool_auth_path):
+        self.m_out_path = out_path
+        if not os.path.exists(self.m_out_path):
+            os.makedirs(self.m_out_path)
+        self.m_tool_auth_path = tool_auth_path
+        self.m_gfh = gfh.ImageGFH()
+        self.m_sig_handler = None
+
+    def create_gfh(self, gfh_config):
+        """
+        create GFH(generic file header) for tool auth.
+        """
+        self.m_gfh.load_ini(gfh_config)
+        return
+
+    def sign(self, key_ini_path):
+        """
+        generate signature for tool auth.
+        """
+        # tool auth contains only gfh and signature, no extra content
+        self.m_gfh.finalize(0, key_ini_path)
+        # write tbs_tool_auth
+        tbs_toolauth_file_path = os.path.join(self.m_out_path,
+                                              "tbs_toolauth.bin")
+        tbs_tool_auth_file = open(tbs_toolauth_file_path, "wb")
+        tbs_tool_auth_file.write(self.m_gfh.pack())
+        tbs_tool_auth_file.close()
+        print "===tool_auth signing==="
+        if self.m_gfh.get_sig_type() == "SINGLE":
+            self.m_sig_handler = cert.SigSingle(self.m_gfh.get_pad_type())
+            self.m_sig_handler.set_out_path(self.m_out_path)
+            self.m_sig_handler.create(key_ini_path, tbs_toolauth_file_path)
+            self.m_sig_handler.sign()
+            sig_name = "toolauth.sig"
+            sig_file_path = os.path.join(self.m_out_path, sig_name)
+            self.m_sig_handler.output(self.m_out_path, sig_name)
+            # create final toolauth file
+            if os.path.isfile(self.m_tool_auth_path):
+                os.remove(self.m_tool_auth_path)
+            concatb(self.m_tool_auth_path, tbs_toolauth_file_path)
+            concatb(self.m_tool_auth_path, sig_file_path)
+        else:
+            print "unknown signature type"
+        # clean up
+        os.remove(tbs_toolauth_file_path)
+        os.remove(sig_file_path)
+        return
+
+
+def main():
+    """
+    entry point if this module is executed from cmdline.
+    """
+    # parameter parsing
+    idx = 1
+    key_ini_path = ""
+    gfh_config_ini_path = ""
+    while idx < len(sys.argv):
+        if sys.argv[idx][0] == '-':
+            if sys.argv[idx][1] == 'i':
+                print "key: " + sys.argv[idx + 1]
+                key_ini_path = sys.argv[idx + 1]
+                idx += 2
+            elif sys.argv[idx][1] == 'g':
+                print "gfh: " + sys.argv[idx + 1]
+                gfh_config_ini_path = sys.argv[idx + 1]
+                idx += 2
+            else:
+                print "unknown input"
+                idx += 2
+        else:
+            tool_auth_path = sys.argv[idx]
+            print "tool_auth_path: " + tool_auth_path
+            idx += 1
+
+    if not key_ini_path:
+        print "key path is not given!"
+        return -1
+    if not gfh_config_ini_path:
+        print "gfh config path is not given!"
+        return -1
+    if not tool_auth_path:
+        print "tool_auth path is not given!"
+        return -1
+
+    out_path = os.path.dirname(os.path.abspath(tool_auth_path))
+
+    tool_auth_obj = ToolAuth(out_path, tool_auth_path)
+    tool_auth_obj.create_gfh(gfh_config_ini_path)
+    tool_auth_obj.sign(key_ini_path)
+
+    return 0
+
+
+if __name__ == '__main__':
+    main()
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/bbchips.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/bbchips.ini
new file mode 100644
index 0000000..9cba1be
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/bbchips.ini
@@ -0,0 +1,25 @@
+[MT8521p]

+hw_code = 0x8521

+hw_sub_code = 0x0

+hw_ver = 0xca00

+sw_ver = 0x0

+load_region0_sigtype = epp

+load_region0_key = keys/resignda/epp_prvk.pem

+load_region1_sigtype = da

+load_region1_key = keys/resignda/da_prvk.pem

+load_region2_sigtype = da

+load_region2_key = keys/resignda/da_prvk.pem

+[MT8518]

+hw_code = 0x8518

+hw_sub_code = 0x8a00

+hw_ver = 0xcb00

+sw_ver = 0x0

+load_region0_sigtype = epp

+load_region0_sigpad = pss

+load_region0_key = keys/resignda/epp_prvk.pem

+load_region1_sigtype = da

+load_region1_sigpad = pss

+load_region1_key = keys/resignda/da_prvk.pem

+load_region2_sigtype = da

+load_region2_sigpad = pss

+load_region2_key = keys/resignda/da_prvk.pem

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_gfh_config.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_gfh_config.ini
new file mode 100644
index 0000000..6948f1b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_gfh_config.ini
@@ -0,0 +1,19 @@
+[CHIP]

+version = "mt8518"

+[GFH_FILE_INFO]

+version = "1"

+file_type = "5"

+start_addr = "0x00201000"

+flash_dev  = "nand"

+sig_type = "SINGLE"

+pad_type = "pss"

+max_size = "0x00040000"

+[GFH_TOOL_AUTH]

+version = "1"

+cust_name = "MTK"

+attr = "0x0"

+sla_public_key = "keys/toolauth/sla_prvk.pem"

+sla_pad_type = "pss"

+daa_public_key = "keys/toolauth/da_prvk.pem"

+daa_pad_type = "pss"

+ar_version_v2 = "0"

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_key.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_key.ini
new file mode 100644
index 0000000..e760e20
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/files/pbp/toolauth/toolauth_key.ini
@@ -0,0 +1,3 @@
+[KEY]
+sw_ver = "1"
+rootkey = "keys/toolauth/root_prvk.pem"
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bb
new file mode 100644
index 0000000..3b92df6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bb
@@ -0,0 +1,76 @@
+SUMMARY = "BL2-IMAGE"
+inherit deploy lk-image hsm-sign-env
+LICENSE = "MIT"
+LK_OUT = "${WORKDIR}/out"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+
+DEPENDS += "u-boot-mkimage-native bc-native dtc-native"
+
+SRC_URI = "file://gfh file://dev_info file://pbp file://key file://lk_dts file://dummy_img file://fit-lk"
+SRC_URI += " file://LICENSE "
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/bl2"
+
+LK_BINARY = "lk.bin"
+LK_IMAGE = "bl2.img"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "libgcc"
+GFH_DIR = "${WORKDIR}/gfh"
+PBP_DIR = "${WORKDIR}/pbp"
+KEY_DIR = "${WORKDIR}/key"
+DTS_DIR = "${WORKDIR}/lk_dts"
+DUMMY_IMG_DIR="${WORKDIR}/dummy_img"
+FIT_IMG_TOOL ?= "uboot-mkimage"
+
+IC_NAME="$(echo ${TARGET_PLATFORM}|tr '[a-z]' '[A-Z]')"
+DEV_INFO_HDR_TOOL = "${TOPDIR}/../src/bsp/scatter/scripts/dev-info-hdr-tool.py"
+
+
+do_configure () {
+	:
+}
+do_genkey () {
+	mkdir -p ${LK_OUT}/include
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+		mkdir -p ${WORKDIR}/mykeys
+		dtc -p 0x3ff ${DTS_DIR}/lk.dts -O dtb -o ${DTS_DIR}/lk.dtb
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+		${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -F -k ${WORKDIR}/mykeys -K ${DTS_DIR}/lk.dtb -r ${DUMMY_IMG_DIR}/fitImage
+		OFF_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep off_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		SIZE_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep size_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		KEYNODE_LEN="`echo "obase=16;ibase=16;${OFF_DT_STRINGS} + ${SIZE_DT_STRINGS}" | bc`"
+		python ${WORKDIR}/dev_info/dtb-transfer-array.py ${DTS_DIR}/lk.dtb ${DTS_DIR}/blob.h ${KEYNODE_LEN}
+		cp ${DTS_DIR}/blob.h ${LK_OUT}/include/blob.h
+		cp ${DTS_DIR}/lk.dtb ${TOPDIR}/lk.dtb
+		rm -rf ${WORKDIR}/mykeys
+	else
+		cp ${DTS_DIR}/tmp_blob.txt ${LK_OUT}/include/blob.h
+	fi
+}
+
+do_compile[nostamp] = "1"
+do_deploy () {
+	install -d ${DEPLOYDIR}
+
+	install ${LK_OUT}/build-${LK_PROJECT}/${LK_BINARY} ${DEPLOYDIR}/${LK_BINARY}
+	install ${WORKDIR}/${LK_IMAGE} ${DEPLOYDIR}/${LK_IMAGE}
+}
+
+addtask deploy before do_build after do_compile
+do_compile() {
+	echo "no source with images"
+	install -d ${LK_OUT}/build-${LK_PROJECT}
+	install -m 755 ${WORKONSRC}/${LK_BINARY}  ${LK_OUT}/build-${LK_PROJECT}/${LK_BINARY}
+}
+do_genheader () {
+	if [ "${FIT_LK_IMAGE}" = "yes" ]; then
+		gen_lk_fit_header
+	else
+		gen_lk_gfh_header
+	fi
+}
+
+
+addtask genkey before do_compile after do_configure
+addtask genheader before do_deploy after do_compile
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bbappend
new file mode 100644
index 0000000..1391108
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lib32-lk-image_1.0.0.bbappend
@@ -0,0 +1,11 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI_remove = "file://gfh"
+SRC_URI += "file://ap_bl2.json"
+
+DEPENDS += "packer-native"
+
+
+do_genheader () {
+	${WORKDIR}/recipe-sysroot-native${bindir}/python-native/python2 ${WORKDIR}/recipe-sysroot-native${datadir}/packer/mipack.py -d ${LK_OUT}/build-${LK_PROJECT} -o ${WORKDIR}/${LK_IMAGE} ${WORKDIR}/ap_bl2.json
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_1.0.0.bb
new file mode 100644
index 0000000..0674e76
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_1.0.0.bb
@@ -0,0 +1,44 @@
+inherit deploy srcprebuilt externalsrc
+
+LICENSE = "MediaTekProprietary"
+MTK_SRC = "${TOPDIR}/../src/bsp/lk"
+LK_OUT = "${WORKDIR}/out"
+LIC_FILES_CHKSUM = "file://${MTK_SRC}/LICENSE;md5=5a1abdab641eec675725c843f43f03af"
+TOOLCHAIN_PREFIX = "${TARGET_PREFIX}"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+LK_BINARY = "lk.bin"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "libgcc"
+
+python __anonymous () {
+    defaulttune = d.getVar('DEFAULTTUNE', True)
+    if defaulttune == 'cortexa7hf-neon-vfpv4':
+        d.setVar("LIBGCC", '${TOPDIR}/../prebuilt/bsp/lk/${LK_PROJECT}/libgcc.a')
+    else:
+        d.setVar("LIBGCC", '$(${CC} -print-libgcc-file-name)')
+}
+
+do_configure () {
+	:
+}
+
+do_compile () {
+	oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+                   NOECHO="" \
+                   BOOTLOADER_OUT=${LK_OUT} \
+                   FULL_PROJECT=${FULL_PROJECT} \
+                   USE_ITS_BOOTIMG=yes \
+                   LIBGCC=${LIBGCC} \
+                   LK_PROJECT=${LK_PROJECT} \
+                   LK_BINARY=${LK_BINARY} \
+                   ${LK_PROJECT}
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${LK_OUT}/build-${LK_PROJECT}/${LK_BINARY} ${DEPLOYDIR}/${LK_BINARY}
+
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bb
new file mode 100644
index 0000000..b2dbb08
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bb
@@ -0,0 +1,134 @@
+inherit deploy srcprebuilt externalsrc lk-image hsm-sign-env
+
+LICENSE = "MIT"
+MTK_SRC = "${TOPDIR}/../src/bsp/lk"
+LK_OUT = "${WORKDIR}/out"
+LIC_FILES_CHKSUM = "file://${MTK_SRC}/LICENSE;md5=25394d472e4c06f4d61140e88861fb5b"
+SRC_URI = "file://gfh file://dev_info file://pbp file://key file://lk_dts file://fit-lk"
+#S = "${WORKDIR}"
+DEPENDS += "u-boot-mkimage-native bc-native dtc-native"
+
+TOOLCHAIN_PREFIX = "${TARGET_PREFIX}"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+LK_BINARY = "lk.bin"
+LK_IMAGE = "bl2.img"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "libgcc"
+GFH_DIR = "${WORKDIR}/gfh"
+PBP_DIR = "${WORKDIR}/pbp"
+KEY_DIR = "${WORKDIR}/key"
+DTS_DIR = "${WORKDIR}/lk_dts"
+FIT_IMG_TOOL ?= "uboot-mkimage"
+
+IC_NAME="$(echo ${TARGET_PLATFORM}|tr '[a-z]' '[A-Z]')"
+DEV_INFO_HDR_TOOL = "${TOPDIR}/../src/bsp/scatter/scripts/dev-info-hdr-tool.py"
+
+
+do_configure () {
+	:
+}
+
+do_genkey () {
+	mkdir -p ${LK_OUT}/include
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ]; then
+		mkdir -p ${WORKDIR}/mykeys
+		dtc -p 0x3ff ${DTS_DIR}/lk.dts -O dtb -o ${DTS_DIR}/lk.dtb
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.crt ${WORKDIR}/mykeys/dev.crt
+		cp ${MTK_KEY_DIR}/${VERIFIED_KEY}.pem ${WORKDIR}/mykeys/dev.key
+
+		echo -n -e \\xde\\xed\\xbe\\xef > ${DTS_DIR}/dummy.bin
+		${HSM_ENV} HSM_KEY_NAME=${VERIFIED_KEY} uboot-mkimage -D "-I dts -O dtb -p 1024" -k ${WORKDIR}/mykeys -K ${DTS_DIR}/lk.dtb -r -f ${DTS_DIR}/dummy.its ${DTS_DIR}/dummyfit.img
+		OFF_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep off_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		SIZE_DT_STRINGS="`fdtdump ${DTS_DIR}/lk.dtb | grep size_dt_strings | sed "s,^\/\/.*:\s*0x,,"`"
+		KEYNODE_LEN="`echo "obase=16;ibase=16;${OFF_DT_STRINGS} + ${SIZE_DT_STRINGS}" | bc`"
+		python ${WORKDIR}/dev_info/dtb-transfer-array.py ${DTS_DIR}/lk.dtb ${DTS_DIR}/blob.h ${KEYNODE_LEN}
+		cp ${DTS_DIR}/blob.h ${LK_OUT}/include/blob.h
+		cp ${DTS_DIR}/lk.dtb ${TOPDIR}/lk.dtb
+		rm -rf ${WORKDIR}/mykeys
+		rm -f ${DTS_DIR}/dummy.bin
+		rm -f ${DTS_DIR}/fummyfit.img
+	else
+		cp ${DTS_DIR}/tmp_blob.txt ${LK_OUT}/include/blob.h
+	fi
+}
+
+do_compile () {
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${LK_OUT} \
+		           LIBGCC="" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           MTK_CLK32K_EXT_REMOVAL_SUPPORT=${MTK_CLK32K_EXT_REMOVAL_SUPPORT} \
+		           ${LK_PROJECT}
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${LK_OUT} \
+		           LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           MTK_CLK32K_EXT_REMOVAL_SUPPORT=${MTK_CLK32K_EXT_REMOVAL_SUPPORT} \
+		           ${LK_PROJECT}
+	fi
+	# add filesize check
+	start=$(grep -w _start -n ${LK_OUT}/build-${LK_PROJECT}/lk.elf.sym.sorted | \
+			sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	end=$(grep -w _end -n ${LK_OUT}/build-${LK_PROJECT}/lk.elf.sym.sorted | \
+		  sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	fs=`echo "obase=10;ibase=16; $end - $start" | bc`
+	maxsize=$(printf '%d' ${LK_MAX_SIZE})
+
+	if [ ${LK_MAX_SIZE} != "" ] && [ $fs -gt $maxsize ]; then
+		  bberror "Little kernel image size overflow, please have a check. $fs > $maxsize"
+	fi
+}
+
+do_buildclean () {
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+			   NOECHO="" \
+			   BUILDROOT=${LK_OUT} \
+			   LIBGCC="" \
+			   CFLAGS="" \
+			   DEBUG=0 \
+			   ${LK_PROJECT} clean
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+			   NOECHO="" \
+			   BUILDROOT=${LK_OUT} \
+			   LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+			   CFLAGS="" \
+			   DEBUG=0 \
+			   ${LK_PROJECT} clean
+	fi
+}
+
+do_genheader () {
+	if [ "${FIT_LK_IMAGE}" = "yes" ]; then
+		gen_lk_fit_header
+	else
+		gen_lk_gfh_header
+	fi
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${LK_OUT}/build-${LK_PROJECT}/${LK_BINARY} ${DEPLOYDIR}/${LK_BINARY}
+	install ${WORKDIR}/${LK_IMAGE} ${DEPLOYDIR}/${LK_IMAGE}
+}
+
+addtask genkey before do_compile after do_configure
+addtask genheader before do_deploy after do_compile
+addtask deploy before do_build after do_compile
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bbappend
new file mode 100644
index 0000000..a080436
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/lk/lk_2.0.0.bbappend
@@ -0,0 +1,78 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI_remove = "file://gfh"
+SRC_URI += "file://ap_bl2.json"
+
+DEPENDS += "packer-native"
+
+do_compile () {
+	if [ "${MT2735_LITE_CONFIG}" = "yes" ]; then
+		# Set CCB buffer size to 0 on lite project
+		CCCI_FILE="${EXTERNALSRC}/platform/mt2735/drivers/md/ccci_lk_load_img_plat.c"
+		sed -i 's/define CCCI_SMEM_SIZE_CCB_DHL/define CCCI_SMEM_SIZE_CCB_DHL (0) \/\//g' ${CCCI_FILE}
+		sed -i 's/define CCCI_SMEM_SIZE_RAW_DHL/define CCCI_SMEM_SIZE_RAW_DHL (0) \/\//g' ${CCCI_FILE}
+
+		RAM_FILE="${EXTERNALSRC}/platform/mt2735/include/platform/ram_console_def.h"
+		sed -i 's/define RAM_CONSOLE_DRAM_SIZE/define RAM_CONSOLE_DRAM_SIZE (0) \/\//g' ${RAM_FILE}
+		sed -i 's/define MINIRDUMP_MEM_SIZE/define MINIRDUMP_MEM_SIZE (0) \/\//g' ${RAM_FILE}
+		sed -i 's/define LOG_STORE_MEM_SIZE/define LOG_STORE_MEM_SIZE (0) \/\//g' ${RAM_FILE}
+	fi
+
+	if [ "${DEFAULTTUNE}" = "aarch64" ]; then
+		oe_runmake ARCH_arm64_TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${LK_OUT} \
+		           LIBGCC="" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MD_VERIFY_ENABLE=${MD_VERIFY_ENABLE} \
+		           HSM_OS_SUPPORT=${HSM_OS_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           CLK32K_EXT_REMOVAL=${CLK32K_EXT_REMOVAL} \
+		           MTK_PMIC_CHIP_TYPE=${MTK_PMIC_CHIP_TYPE} \
+		           MTK_SUB_PMIC_CHIP_TYPE=${MTK_SUB_PMIC_CHIP_TYPE} \
+		           BUILD_LOAD_TYPE=${BUILD_TYPE} \
+		           LK_PROG_RPMB_KEY=${LK_PROG_RPMB_KEY} \
+		           MTK_CFG_LAST_EMI_BW_DUMP=${MTK_CFG_LAST_EMI_BW_DUMP} \
+		           ENABLE_TCXO=${TCXO_SUPPORT} \
+		           ${LK_PROJECT}
+	else
+		oe_runmake TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX} \
+		           NOECHO="" \
+		           BUILDROOT=${LK_OUT} \
+		           LIBGCC="$(${CC} --sysroot ${STAGING_DIR_HOST} -print-libgcc-file-name)" \
+		           CFLAGS="" \
+		           DEBUG=0 \
+		           SECURE_BOOT_ENABLE=${SECURE_BOOT_ENABLE} \
+		           SECURE_BOOT_TYPE=${SECURE_BOOT_TYPE} \
+		           MD_VERIFY_ENABLE=${MD_VERIFY_ENABLE} \
+		           HSM_OS_SUPPORT=${HSM_OS_SUPPORT} \
+		           AVB_ENABLE_ANTIROLLBACK=${AVB_ENABLE_ANTIROLLBACK} \
+		           AB_OTA_UPDATER=${AB_OTA_UPDATER} \
+		           CLK32K_EXT_REMOVAL=${CLK32K_EXT_REMOVAL} \
+		           MTK_PMIC_CHIP_TYPE=${MTK_PMIC_CHIP_TYPE} \
+		           MTK_SUB_PMIC_CHIP_TYPE=${MTK_SUB_PMIC_CHIP_TYPE} \
+		           BUILD_LOAD_TYPE=${BUILD_TYPE} \
+		           LK_PROG_RPMB_KEY=${LK_PROG_RPMB_KEY} \
+		           MTK_CFG_LAST_EMI_BW_DUMP=${MTK_CFG_LAST_EMI_BW_DUMP} \
+		           ENABLE_TCXO=${TCXO_SUPPORT} \
+		           ${LK_PROJECT}
+	fi
+	# filesize check
+	end=$(grep -w _end -n ${LK_OUT}/build-${LK_PROJECT}/lk.elf.sym.sorted | \
+		sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	end_of_ram=$(grep -w _end_of_ram -n ${LK_OUT}/build-${LK_PROJECT}/lk.elf.sym.sorted | \
+		sed -E  's/(.*):([0-9a-fA-F]+)(.*)/\2/' | tr '[:lower:]' '[:upper:]')
+	fs=`echo "obase=10;ibase=16; $end_of_ram - $end" | bc`
+
+	if [ $fs -lt 0 ]; then
+		bberror "Little kernel image size overflow, please have a check."
+	fi
+}
+
+do_genheader () {
+	${WORKDIR}/recipe-sysroot-native${bindir}/python-native/python2 ${WORKDIR}/recipe-sysroot-native${datadir}/packer/mipack.py -d ${LK_OUT}/build-${LK_PROJECT} -o ${WORKDIR}/${LK_IMAGE} ${WORKDIR}/ap_bl2.json
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/mcupm/mcupm.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/mcupm/mcupm.bb
new file mode 100644
index 0000000..5b5fac3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/mcupm/mcupm.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "MCUPM Image Files"
+LICENSE = "MediaTekProprietary"
+
+inherit deploy
+
+do_compile[nostamp] = "1"
+MCUPM_PREBUILT = "${TOPDIR}/../prebuilt/firmware/mcupm/${TARGET_PLATFORM}"
+MCUPM_OUT = "${WORKDIR}/out"
+MCUPM_BINARY = "mcupm.img"
+
+do_compile () {
+	mkdir -p ${MCUPM_OUT}
+	cp ${MCUPM_PREBUILT}/${MCUPM_BINARY} ${MCUPM_OUT}/${MCUPM_BINARY}
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${MCUPM_OUT}/${MCUPM_BINARY} ${DEPLOYDIR}/${MCUPM_BINARY}
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/medmcu/medmcu.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/medmcu/medmcu.bb
new file mode 100755
index 0000000..a912507
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/medmcu/medmcu.bb
@@ -0,0 +1,44 @@
+inherit deploy medmcu-fitimage
+inherit staging-copyfile
+
+SUMMARY = "MEDMCU Firmware"
+DESCRIPTION = "MEDMCU Firmware"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${MEDMCU_PREBUILT}/LICENSE;md5=33021e5683364ac70382851bdf2e4dbd"
+MEDMCU_PREBUILT = "${TOPDIR}/../prebuilt/firmware/medmcu/${TARGET_PLATFORM}"
+MEDMCU_OUT = "${WORKDIR}/out"
+MEDMCU_IMAGETYPE = "fitImage"
+DEPENDS += "u-boot-mkimage-native"
+
+MEDMCU_PREBUILT_BINARY = "medmcu.img"
+MEDMCU_BINARY = "medmcu.img"
+MEDMCU_COMPRESS = "none"
+do_compile[nostamp] = "1"
+
+python __anonymous () {
+    secure_boot_enable = d.getVar('SECURE_BOOT_ENABLE', True)
+    if secure_boot_enable == 'yes':
+        d.setVar("MEDMCU_BINARY_SELECT", '${MEDMCU_BINARY}')
+    else:
+        d.setVar("MEDMCU_BINARY_SELECT", '${MEDMCU_BINARY}')
+}
+
+do_compile () {
+	if [ -s ${MEDMCU_OUT}/${MEDMCU_BINARY} ]; then
+    rm ${MEDMCU_OUT}/${MEDMCU_BINARY}
+    fi
+	
+	if [ -s ${TOPDIR}/../build/tmp/deploy/image/auto2735evb-ivt-main/medmcu.img ]; then
+    rm ${TOPDIR}/../build/tmp/deploy/image/auto2735evb-ivt-main/medmcu.img
+    fi
+
+	mkdir -p ${MEDMCU_OUT}
+	cp ${MEDMCU_PREBUILT}/${MEDMCU_BINARY} ${MEDMCU_OUT}/${MEDMCU_BINARY}
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${MEDMCU_OUT}/${MEDMCU_BINARY} ${DEPLOYDIR}/${MEDMCU_BINARY}
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/preloader/preloader.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/preloader/preloader.bb
new file mode 100644
index 0000000..e1e387a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/preloader/preloader.bb
@@ -0,0 +1,46 @@
+inherit deploy externalsrc
+
+LICENSE = "MediaTekProprietary"
+MTK_SRC = "${TOPDIR}/../src/bsp/preloader"
+LIC_FILES_CHKSUM = "file://${MTK_SRC}/README;md5=661d538ca8a7b4b17d03d6e90e384ffa"
+PRELOADER_OUT = "${WORKDIR}/out"
+CROSS_COMPILE = "${TARGET_PREFIX}"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+PRELOADER_BINARY = "preloader_${PRELOADER_PROJECT}.bin"
+PRELOADER_IMAGE = "preloader.img"
+PRELOADER_NOR_IMAGE = "preloader_nor.img"
+
+do_compile () {
+        oe_runmake MTK_PROJECT=${PRELOADER_PROJECT} \
+                   PRELOADER_OUT=${PRELOADER_OUT} \
+                   CROSS_COMPILE=${CROSS_COMPILE} \
+                   PRELOADER_BINARY=${PRELOADER_BINARY} \
+                   PRELOADER_PROJECT=${PRELOADER_PROJECT}
+        python ${MTK_SRC}/tools/gen-preloader-img.py \
+               ${PRELOADER_OUT}/bin/${PRELOADER_BINARY} \
+               ${PRELOADER_OUT}/bin/${PRELOADER_IMAGE}
+        python ${MTK_SRC}/tools/gen-sf-preloader-img.py \
+               ${PRELOADER_OUT}/bin/${PRELOADER_BINARY} \
+               ${PRELOADER_OUT}/bin/${PRELOADER_NOR_IMAGE}
+}
+
+
+do_buildclean () {
+        oe_runmake MTK_PROJECT=${PRELOADER_PROJECT} \
+                   PRELOADER_OUT=${PRELOADER_OUT} \
+                   CROSS_COMPILE=${CROSS_COMPILE} \
+                   PRELOADER_BINARY=${PRELOADER_BINARY} \
+                   PRELOADER_PROJECT=${PRELOADER_PROJECT} clean
+}
+
+do_deploy () {
+        install -d ${DEPLOYDIR}
+        install ${PRELOADER_OUT}/bin/${PRELOADER_BINARY} ${DEPLOYDIR}/${PRELOADER_BINARY}
+        ln -nfs ${PRELOADER_BINARY} ${DEPLOYDIR}/preloader.bin
+        install ${PRELOADER_OUT}/bin/${PRELOADER_IMAGE} ${DEPLOYDIR}/${PRELOADER_IMAGE}
+        install ${PRELOADER_OUT}/bin/${PRELOADER_NOR_IMAGE} ${DEPLOYDIR}/${PRELOADER_NOR_IMAGE}
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/gen-partitions.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/gen-partitions.ini
new file mode 100644
index 0000000..b40e7b0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/gen-partitions.ini
@@ -0,0 +1,2 @@
+partition_emmc.xml	scatter_emmc.json	MBR_EMMC
+partition_emmc_boot0.xml	scatter_emmc.json	MBR_EMMC_BOOT0
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc.xml b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc.xml
new file mode 100644
index 0000000..96ea49d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<partition lba="30785535">
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1024" end="2047" name="bl2"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="2048" end="3583" name="bl33"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="3584" end="5631" name="spm_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="5632" end="7679" name="spm_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="7680" end="8703" name="dtbo"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="8704" end="74239" name="nvdata"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="74240" end="74751" name="hsm_bl"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="74752" end="75263" name="hsm_os"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="75264" end="79359" name="boot_para"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="79360" end="95743" name="protect_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="95744" end="112127" name="protect_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="112128" end="125951" name="proinfo"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="125952" end="191487" name="boot_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="191488" end="257023" name="boot_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="257024" end="707583" name="system_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="707584" end="1158143" name="system_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1158144" end="1321983" name="md1img_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1321984" end="1485823" name="md1img_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1485824" end="1506303" name="md1dsp_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1506304" end="1526783" name="md1dsp_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1526784" end="1543167" name="mcf1_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1543168" end="1559551" name="mcf1_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1559552" end="1575935" name="mcf2_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1575936" end="1592319" name="mcf2_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1592320" end="1594367" name="misc"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1594368" end="1596927" name="tee_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1596928" end="1599487" name="tee_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1599488" end="1665023" name="nvram"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1665024" end="1730559" name="nvcfg"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1730560" end="1732607" name="mcupm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1732608" end="1734655" name="sspm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1734656" end="1736703" name="dpm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1736704" end="1738751" name="medmcu"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1738752" end="1740799" name="medmcu_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1740800" end="1742847" name="pi_img_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1742848" end="1744895" name="pi_img_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1744896" end="1785855" name="expdb"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1785856" end="29734015" name="log"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="29734016" end="29799551" name="userdata"/>
+</partition>
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc_boot0.xml b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc_boot0.xml
new file mode 100644
index 0000000..f4d13e9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-emmc/partition_emmc_boot0.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<partition lba="8192">
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="34" end="545" attributes="4" name="hsm_bl" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="546" end="1057" name="dummyboot0" />
+</partition>
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/gen-partitions.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/gen-partitions.ini
new file mode 100644
index 0000000..b9ea408
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/gen-partitions.ini
@@ -0,0 +1 @@
+partition_nand.xml     scatter_emmc.json       MBR_NAND
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/partition_nand.xml b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/partition_nand.xml
new file mode 100755
index 0000000..d0c878d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand/partition_nand.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<partition lba="261632" lbs="4096">
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="128" end="255" name="bl2" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="256" end="447" name="bl33" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="448" end="703" name="spm_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="704" end="959" name="spm_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="960" end="1087" name="dtbo" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1088" end="9279" name="nvdata" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="9280" end="9343" attributes="4" name="hsm_bl" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="9344" end="9407" name="hsm_os" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="9408" end="9919" name="boot_para" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="9920" end="11967" name="protect_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="11968" end="14015" name="protect_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="14016" end="15743" name="proinfo" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="15744" end="23935" name="boot_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="23936" end="32127" name="boot_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="32128" end="62847" name="system_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="62848" end="93567" name="system_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="93568" end="114047" name="md1img_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="114048" end="134527" name="md1img_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="134528" end="137087" name="md1dsp_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="137088" end="139647" name="md1dsp_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="139648" end="141695" name="mcf1_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="141696" end="143743" name="mcf1_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="143744" end="145791" name="mcf2_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="145792" end="147839" name="mcf2_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="147840" end="148095" name="misc" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="148096" end="148415" name="tee_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="148416" end="148735" name="tee_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="148736" end="156927" name="nvram" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="156928" end="165119" name="oemdata" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="165120" end="165375" name="mcupm" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="165376" end="165631" name="sspm" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="165632" end="165887" name="dpm" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="165888" end="166143" name="medmcu" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="166144" end="166399" name="medmcu_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="166400" end="166655" name="pi_img_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="166656" end="166911" name="pi_img_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="166912" end="167039" name="vbmeta_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="167040" end="167167" name="vbmeta_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="167168" end="175359" name="userdata" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="175360" end="180479" name="expdb" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="180480" end="183999" name="delta" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="184000" end="204479" name="oemapp2_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="204480" end="224959" name="oemapp2_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="224960" end="242879" name="oemapp_a" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="242880" end="260799" name="oemapp_b" />
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="260800" end="261375" name="secdata" />
+</partition>
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/gen-partitions.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/gen-partitions.ini
new file mode 100644
index 0000000..b9ea408
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/gen-partitions.ini
@@ -0,0 +1 @@
+partition_nand.xml     scatter_emmc.json       MBR_NAND
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/partition_nand.xml b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/partition_nand.xml
new file mode 100644
index 0000000..b4d695d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/files/auto2735-ivt-mcp_nand2/partition_nand.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<partition lba="523776" lbs="2048">
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="128" end="383" name="bl2"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="384" end="767" name="bl33"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="768" end="1279" name="spm_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1280" end="1791" name="spm_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="1792" end="2047" name="dtbo"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="2048" end="18431" name="nvdata"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="18432" end="18559" attributes="4" name="hsm_bl"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="18560" end="18687" name="hsm_os"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="18688" end="19711" name="boot_para"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="19712" end="23807" name="protect_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="23808" end="27903" name="protect_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="27904" end="31359" name="proinfo"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="31360" end="47743" name="boot_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="47744" end="64127" name="boot_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="64128" end="125567" name="system_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="125568" end="187007" name="system_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="187008" end="227967" name="md1img_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="227968" end="268927" name="md1img_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="268928" end="274047" name="md1dsp_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="274048" end="279167" name="md1dsp_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="279168" end="283263" name="mcf1_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="283264" end="287359" name="mcf1_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="287360" end="291455" name="mcf2_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="291456" end="295551" name="mcf2_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="295552" end="296063" name="misc"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="296064" end="296703" name="tee_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="296704" end="297343" name="tee_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="297344" end="313727" name="nvram"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="313728" end="330111" name="nvcfg"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="330112" end="330623" name="mcupm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="330624" end="331135" name="sspm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="331136" end="331647" name="dpm"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="331648" end="332159" name="medmcu"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="332160" end="332671" name="medmcu_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="332672" end="333183" name="pi_img_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="333184" end="333695" name="pi_img_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="333696" end="333951" name="vbmeta_a"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="333952" end="334207" name="vbmeta_b"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="334208" end="350591" name="userdata"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="350592" end="360831" name="expdb"/>
+	<entry type="{0FC63DAF-8483-4772-8E79-3D69D8477DE4}" start="360832" end="522751" name="log"/>
+</partition>
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bb
new file mode 100644
index 0000000..e0f5761
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bb
@@ -0,0 +1,26 @@
+inherit deploy srcprebuilt externalsrc
+
+DESCRIPTION = "Scatter File for FlashTool"
+LICENSE = "MediaTekProprietary"
+MTK_SRC = "${TOPDIR}/../src/bsp/scatter"
+SCATTER_SCRIPTS_DIR = "${MTK_SRC}/scripts"
+LIC_FILES_CHKSUM = "file://${MTK_SRC}/README;md5=ee4e5f73850b12ab5da2fa41dc560729"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+SCATTER_OUT = "${WORKDIR}/out"
+NAND_HEADER_VERSION ?= "1.0"
+HEADER_LK_MERGE ?= "no"
+
+do_compile () {
+        ${SCATTER_SCRIPTS_DIR}/gen-partitions.sh ${WORKDIR}/${SCATTER_PROJECT} \
+        ${SCATTER_OUT} ${BOOTDEV_TYPE} ${SCATTER_SCRIPTS_DIR} ${NAND_CHIP_NAME} \
+        ${NAND_HEADER_VERSION} ${HEADER_LK_MERGE}
+}
+
+do_deploy () {
+        install -d ${DEPLOYDIR}
+        install ${SCATTER_OUT}/* -t ${DEPLOYDIR}
+        install ${WORKDIR}/${SCATTER_PROJECT}/*.xml -t ${DEPLOYDIR}
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bbappend
new file mode 100644
index 0000000..330d585
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/scatter/scatter.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI_append = " file://${SCATTER_PROJECT}"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw-fit/spmfw-fit.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw-fit/spmfw-fit.bb
new file mode 100644
index 0000000..c678031
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw-fit/spmfw-fit.bb
@@ -0,0 +1,62 @@
+inherit deploy spmfw-fitimage

+inherit staging-copyfile

+

+SUMMARY = "SPM Firmware"

+DESCRIPTION = "SPM Firmware"

+LICENSE = "MediaTekProprietary"

+LIC_FILES_CHKSUM = "file://${SPMFW_PREBUILT}/LICENSE;md5=31605e32b2213851d3687355e1ef06f9"

+SPMFW_PREBUILT = "${TOPDIR}/../prebuilt/firmware/spmfw/${TARGET_PLATFORM}"

+SPMFW_OUT = "${WORKDIR}/out"

+SPMFW_IMAGETYPE = "fitImage"

+DEPENDS += "u-boot-mkimage-native"

+

+SPMFW_PREBUILT_BINARY = "spmfw.img"

+SPMFW_BINARY = "spmfw.img"

+SPMFW_RAW_BINARY = "spmfw_raw.img"

+SPMFW_SIGNED_BINARY = "spmfw_signed.img"

+SPMFW_COMPRESS = "none"

+do_compile[nostamp] = "1"

+

+# LOADER ENTRYPOINT, LOADADDRESS

+SPMFW_ENTRYPOINT = "0x44600000"

+SPMFW_LOADADDRESS = "0x44600000"

+

+run_lz4_compression() {

+	dec_size=0

+	fsize=$(stat -c "%s" "${SPMFW_OUT}/${1}")

+	dec_size=$(expr $dec_size + $fsize)

+	lz4 -l -c1 ${SPMFW_OUT}/${1} > ${SPMFW_OUT}/${1}.lz4

+	mv -f ${SPMFW_OUT}/${1}.lz4 ${SPMFW_OUT}/${1}

+	printf "%08x\n" $dec_size |

+	sed 's/\(..\)/\1 /g' | {

+		read ch0 ch1 ch2 ch3;

+		for ch in $ch3 $ch2 $ch1 $ch0; do

+			printf `printf '%s%03o' '\\' 0x$ch` >> ${SPMFW_OUT}/${1};

+		done;

+	}

+}

+

+python __anonymous () {

+	secure_boot_enable = d.getVar('SECURE_BOOT_ENABLE', True)

+	if secure_boot_enable == 'yes':

+		d.setVar("SPMFW_BINARY_SELECT", '${SPMFW_SIGNED_BINARY}')

+	else:

+		d.setVar("SPMFW_BINARY_SELECT", '${SPMFW_RAW_BINARY}')

+}

+

+do_compile () {

+	mkdir -p ${SPMFW_OUT}

+	cp ${SPMFW_PREBUILT}/${SPMFW_PREBUILT_BINARY} ${SPMFW_OUT}/${SPMFW_BINARY_SELECT}

+

+	# compression method LZ4 support

+	if [ "${SPMFW_COMPRESS}" = "lz4" ]; then

+		run_lz4_compression ${SPMFW_BINARY_SELECT}

+	fi

+}

+

+do_deploy () {

+	install -d ${DEPLOYDIR}

+	install ${SPMFW_OUT}/${SPMFW_BINARY} ${DEPLOYDIR}/${SPMFW_BINARY}

+}

+

+addtask deploy before do_build after do_install
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bb
new file mode 100644
index 0000000..b23d674
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bb
@@ -0,0 +1,55 @@
+inherit deploy spmfw-fitimage

+inherit staging-copyfile

+

+SUMMARY = "SPM Firmware"

+DESCRIPTION = "SPM Firmware"

+LICENSE = "MediaTekProprietary"

+LIC_FILES_CHKSUM = "file://${SPMFW_PREBUILT}/LICENSE;md5=31605e32b2213851d3687355e1ef06f9"

+SPMFW_PREBUILT = "${TOPDIR}/../prebuilt/firmware/spmfw/${TARGET_PLATFORM}"

+SPMFW_OUT = "${WORKDIR}/out"

+

+SPMFW_PREBUILT_BINARY = "spm_firmware.bin"

+SPMFW_BINARY = "spmfw.img"

+SPMFW_RAW_BINARY = "spmfw_raw.img"

+SPMFW_SIGNED_BINARY = "spmfw_signed.img"

+do_compile[nostamp] = "1"

+

+run_lz4_compression() {

+	dec_size=0

+	fsize=$(stat -c "%s" "${SPMFW_OUT}/${1}")

+	dec_size=$(expr $dec_size + $fsize)

+	lz4 -l -c1 ${SPMFW_OUT}/${1} > ${SPMFW_OUT}/${1}.lz4

+	mv -f ${SPMFW_OUT}/${1}.lz4 ${SPMFW_OUT}/${1}

+	printf "%08x\n" $dec_size |

+	sed 's/\(..\)/\1 /g' | {

+		read ch0 ch1 ch2 ch3;

+		for ch in $ch3 $ch2 $ch1 $ch0; do

+			printf `printf '%s%03o' '\\' 0x$ch` >> ${SPMFW_OUT}/${1};

+		done;

+	}

+}

+

+python __anonymous () {

+	secure_boot_enable = d.getVar('SECURE_BOOT_ENABLE', True)

+	if secure_boot_enable == 'yes':

+		d.setVar("SPMFW_BINARY_SELECT", '${SPMFW_SIGNED_BINARY}')

+	else:

+		d.setVar("SPMFW_BINARY_SELECT", '${SPMFW_RAW_BINARY}')

+}

+

+do_compile () {

+	mkdir -p ${SPMFW_OUT}

+	cp ${SPMFW_PREBUILT}/${SPMFW_PREBUILT_BINARY} ${SPMFW_OUT}/${SPMFW_BINARY_SELECT}

+

+	# compression method LZ4 support

+	if [ "${SPMFW_COMPRESS}" = "lz4" ]; then

+		run_lz4_compression ${SPMFW_BINARY_SELECT}

+	fi

+}

+

+do_deploy () {

+	install -d ${DEPLOYDIR}

+	install ${SPMFW_OUT}/${SPMFW_BINARY} ${DEPLOYDIR}/${SPMFW_BINARY}

+}

+

+addtask deploy before do_build after do_install

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bbappend
new file mode 100644
index 0000000..e3a4bc0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/spmfw/spmfw.bbappend
@@ -0,0 +1,10 @@
+SPMFW_INFO = "verName"
+SPMFW_VERSION = "spmfw_version.txt"
+
+LIC_FILES_CHKSUM = "file://${SPMFW_PREBUILT}/LICENSE;md5=338cb8492482cddf20da7a75beafd191"
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${SPMFW_OUT}/${SPMFW_BINARY} ${DEPLOYDIR}/${SPMFW_BINARY}
+	install ${SPMFW_PREBUILT}/${SPMFW_INFO} ${DEPLOYDIR}/${SPMFW_VERSION}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/sspm/sspm.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/sspm/sspm.bb
new file mode 100644
index 0000000..14f39a2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/sspm/sspm.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "SSPM Image Files"
+LICENSE = "MediaTekProprietary"
+
+inherit deploy
+
+do_compile[nostamp] = "1"
+SSPM_PREBUILT = "${TOPDIR}/../prebuilt/firmware/sspm/${TARGET_PLATFORM}"
+SSPM_OUT = "${WORKDIR}/out"
+SSPM_BINARY = "sspm.img"
+
+do_compile () {
+	mkdir -p ${SSPM_OUT}
+	cp ${SSPM_PREBUILT}/${SSPM_BINARY} ${SSPM_OUT}/${SSPM_BINARY}
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${SSPM_OUT}/${SSPM_BINARY} ${DEPLOYDIR}/${SSPM_BINARY}
+}
+
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf-image_1.6.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf-image_1.6.bb
new file mode 100644
index 0000000..65af33a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf-image_1.6.bb
@@ -0,0 +1,41 @@
+inherit externalsrc
+inherit deploy trustzone-image-build
+
+DESCRIPTION = "ARM trusted firmware IMAGE"
+
+LICENSE = "MIT"
+ 
+ATF_VER = '1.6'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+ 
+ 
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TBASE_VER ?= "none"
+BL33_ARCH ?= "${KERNEL_ARCH}"
+
+ 
+
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[noexec] = "1"
+SRC_URI += " file://LICENSE "
+
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/trustzone/atf"
+SRC_URI +="file://${WORKONSRC}/atf-out.tar.gz"
+
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.0.bb
new file mode 100644
index 0000000..cb1be3b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.0.bb
@@ -0,0 +1,40 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.0'
+CHIP_TYPE = ''
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.md;md5=829bdeb34c1d9044f393d5a16c068371"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'PLAT=${MTK_MACH_TYPE}'	\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'BUILD_BASE=${ATF_OUT}'"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+	oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.2.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.2.bb
new file mode 100644
index 0000000..36b1c5f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.2.bb
@@ -0,0 +1,47 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.2'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.md;md5=829bdeb34c1d9044f393d5a16c068371"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TBASE_VER ?= "none"
+UBOOT_ARCH ?= "arm64"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'KERNEL_ARCH=${KERNEL_ARCH}'	\
+		'ATF_UBOOT_ARCH=${UBOOT_ARCH}' \
+		'PLAT=${MTK_MACH_TYPE}'		\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'BUILD_BASE=${ATF_OUT}'		\
+		'TBASE_VER=${@oe.utils.conditional('TEE_SUPPORT', 'tbase', '${TBASE_VER}', '', d)}' \
+		"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+	oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.21.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.21.bb
new file mode 100644
index 0000000..b3edda9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.21.bb
@@ -0,0 +1,41 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.2'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.md;md5=829bdeb34c1d9044f393d5a16c068371"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'KERNEL_ARCH=${KERNEL_ARCH}' \
+		'PLAT=${MTK_MACH_TYPE}'	\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'BUILD_BASE=${ATF_OUT}'"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+        oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.3.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.3.bb
new file mode 100644
index 0000000..3992f3d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.3.bb
@@ -0,0 +1,45 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.3'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.md;md5=829bdeb34c1d9044f393d5a16c068371"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TOOLCHAIN = "gcc"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'KERNEL_ARCH=${KERNEL_ARCH}' \
+		'KERNEL_VERSION = ${PREFERRED_VERSION_linux-mtk-extension}' \
+		'PLAT=${TZ_PLATFORM}'	\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'BUILD_BASE=${ATF_OUT}' \
+		'V=1' \
+		${ATF_FEATURE_OPTIONS}"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+        oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.4.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.4.bb
new file mode 100644
index 0000000..8a86b7d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.4.bb
@@ -0,0 +1,44 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.4'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.rst;md5=e927e02bca647e14efd87e9e914b2443"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'MTK_BL33_PROJECT=${BL33_PROJECT}' \
+		'KERNEL_ARCH=${KERNEL_ARCH}' \
+		'PLAT=${MTK_MACH_TYPE}'	\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'DEBUG=${@bb.utils.contains("ATF_INSTALL_MODE", "debug", "1", "0", d)}'	\
+		'BUILD_BASE=${ATF_OUT}'"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+	oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bb
new file mode 100644
index 0000000..581685e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bb
@@ -0,0 +1,49 @@
+inherit externalsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "ARM trusted firmware"
+LICENSE = "BSD-3-Clause & MediaTekProprietary"
+# code src may be change in trustzone-build.bb to adapt license
+MTK_SRC = "${TOPDIR}/../src/bsp/trustzone/atf"
+ATF_VER = '1.6'
+CHIP_TYPE = ''
+LIC_FILES_CHKSUM = "file://${B}/v${ATF_VER}/${CHIP_TYPE}/license.rst;md5=e927e02bca647e14efd87e9e914b2443"
+EXTERNALSRC = "${MTK_SRC}"
+EXTERNALSRC_BUILD = "${MTK_SRC}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ATF_OUT = "${WORKDIR}/out"
+ATF_OUT_BINARY = "${ATF_OUT}/${ATF_INSTALL_MODE}/bl31.bin"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+TBASE_VER ?= "none"
+BL33_ARCH ?= "${KERNEL_ARCH}"
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'MTK_BL33_PROJECT=${BL33_PROJECT}' \
+		'MTK_BL33_ARCH=${BL33_ARCH}' \
+		'KERNEL_ARCH=${KERNEL_ARCH}'	\
+		'PLAT=${MTK_MACH_TYPE}'		\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'SECURE_OS_ARCH=${TEE_ARCH}' \
+		'DEBUG=${@bb.utils.contains("ATF_INSTALL_MODE", "debug", "1", "0", d)}'	\
+		'BUILD_BASE=${ATF_OUT}'		\
+		${@oe.utils.conditional('TEE_SUPPORT', 'tbase', 'TBASE_VER=${TBASE_VER}', '', d)}"
+
+CFLAGS[unexport] = "1"
+LDFLAGS[unexport] = "1"
+AS[unexport] = "1"
+LD[unexport] = "1"
+do_compile[nostamp] = "1"
+
+do_compile () {
+	oe_runmake -C ${B}/v${ATF_VER}/${CHIP_TYPE} -f ${B}/v${ATF_VER}/${CHIP_TYPE}/Makefile
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_RAW_BINARY}
+	install ${ATF_OUT_BINARY} ${DEPLOYDIR}/${ATF_SIGNED_BINARY}
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bbappend
new file mode 100644
index 0000000..8f41d1a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/atf_1.6.bbappend
@@ -0,0 +1,15 @@
+
+EXTRA_OEMAKE = "'CROSS_COMPILE=${TARGET_PREFIX}'	\
+		'KERNEL_ARCH=${KERNEL_ARCH}'	\
+		'PLAT=${MTK_MACH_TYPE}'		\
+		'MACH_TYPE=${MTK_MACH_TYPE}'	\
+		'SECURE_OS=${TEE_SUPPORT}'	\
+		'DEBUG=${@bb.utils.contains("ATF_INSTALL_MODE", "debug", "1", "0", d)}'  \
+		'BUILD_BASE=${ATF_OUT}'		\
+		'MTK_DRAM_TYPE=${MTK_DRAM_TYPE}'		\
+		'MTK_PMIC_CHIP_TYPE=${MTK_PMIC_CHIP_TYPE}'		\
+		'MTK_SUB_PMIC_CHIP_TYPE=${MTK_SUB_PMIC_CHIP_TYPE}'		\
+		'MTK_USB_OR_PCIE=${MTK_USB_OR_PCIE}'		\
+		'TBASE_VER=${@oe.utils.conditional('TEE_SUPPORT', 'tbase', '${TBASE_VER}', '', d)}' \
+		"
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/files/LICENSE
new file mode 100644
index 0000000..1f38e30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("LYNQ") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to LYNQ Inc. and/or its licensors. Without
+the prior written permission of LYNQ inc. and/or its licensors, any
+reproduction, modification, use or disclosure of LYNQ Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("LYNQ SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-client_3.2.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-client_3.2.0.bb
new file mode 100644
index 0000000..2699644
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-client_3.2.0.bb
@@ -0,0 +1,54 @@
+inherit workonsrc
+inherit trustzone-build
+inherit systemd
+
+DESCRIPTION = "OPTEE CLIENT"
+LICENSE = "BSD-2-Clause & MediaTekProprietary"
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+OVERRIDES_append = ":${PLATFORM_TYPE}"
+
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/optee/3.2.0/source/optee_client"
+WORKONSRC_mt2xxx = "${TZ_SRC}/optee/optee_client/mt2xxx/3.2.0"
+WORKONSRC_BUILD = "${TZ_SRC}/optee/3.2.0/source/optee_client"
+WORKONSRC_BUILD_mt2xxx = "${TZ_SRC}/optee/optee_client/mt2xxx/3.2.0"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=69663ab153298557a59c67a60a743e5b"
+
+EXTRA_OEMAKE_append = "O=${WORKDIR}/out"
+
+SYSTEMD_PACKAGS = "${PN}"
+SYSTEMD_SERVICE_${PN} = "tee-supplicant.service"
+
+FILES_${PN}_append_mt8xxx =  " ${D}${systemd_unitdir}/system/tee-supplicant.service"
+FILES_${PN}_append_mt2xxx = " ${systemd_unitdir}/system/tee-supplicant.service"
+
+do_install() {
+    oe_runmake install
+
+    install -D -p -m0755 ${WORKDIR}/out/export/bin/tee-supplicant ${D}${bindir}/tee-supplicant
+
+    install -D -p -m0644 ${WORKDIR}/out/export/lib/libteec.so.1.0 ${D}${libdir}/libteec.so.1.0
+    ln -sf libteec.so.1.0 ${D}${libdir}/libteec.so
+    ln -sf libteec.so.1.0 ${D}${libdir}/libteec.so.1
+
+    cp -a ${WORKDIR}/out/export/include ${D}/usr/
+
+    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+        cp -a ${S}/tee-supplicant.service ${WORKDIR}
+        sed -i -e s:/etc:${sysconfdir}:g \
+            -e s:/usr/bin:${bindir}:g \
+            ${WORKDIR}/tee-supplicant.service
+
+        install -d ${D}${systemd_unitdir}/system
+        install -D -p -m0644 ${WORKDIR}/tee-supplicant.service ${D}${systemd_unitdir}/system/tee-supplicant.service
+    fi
+
+    if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
+        install -d ${D}${sysconfdir}/init.d
+        install -m 0755 ${S}/tee-supplicant.init ${D}${sysconfdir}/init.d/tee-supplicant.init
+        update-rc.d -r ${D} tee-supplicant.init start 4 S .
+    fi
+}
+
+# Install Sysvinit Scripts #
+DEPENDS_append = " update-rc.d-native"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_%.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_%.bbappend
new file mode 100644
index 0000000..c928ed7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_%.bbappend
@@ -0,0 +1 @@
+inherit optee-build
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_3.2.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_3.2.0.bb
new file mode 100644
index 0000000..6d93cc3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-example_3.2.0.bb
@@ -0,0 +1,44 @@
+inherit workonsrc
+inherit trustzone-build
+
+DESCRIPTION = "OPTEE example"
+LICENSE = "BSD-2-Clause & MediaTekProprietary"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/optee/source/mt2xxx/optee_examples"
+WORKONSRC_BUILD = "${TZ_SRC}/optee/source/mt2xxx/optee_examples"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
+
+DEPENDS = "optee-client optee-os"
+
+OPTEE_CLIENT_EXPORT = "${STAGING_DIR_HOST}${prefix}"
+TEEC_EXPORT         = "${STAGING_DIR_HOST}${prefix}"
+TA_DEV_KIT_DIR      = "${STAGING_INCDIR}/optee/export-user_ta"
+
+OPTEE_ARCH = "${TEE_ARCH}"
+TEE_TOOLCHAIN ?= "${HOST_PREFIX}"
+
+EXTRA_OEMAKE = " TA_DEV_KIT_DIR=${TA_DEV_KIT_DIR} \
+                 OPTEE_CLIENT_EXPORT=${OPTEE_CLIENT_EXPORT} \
+                 TEEC_EXPORT=${TEEC_EXPORT} \
+                 HOST_CROSS_COMPILE=${TEE_TOOLCHAIN} \
+                 CROSS_COMPILE_TA=${TEE_TOOLCHAIN} \
+                 V=1 \
+                 OUTPUT_DIR=${WORKDIR}/out \
+               "
+
+do_compile() {
+    # Top level makefile doesn't seem to handle parallel make gracefully
+    oe_runmake all
+}
+
+do_install () {
+    install -d ${D}${bindir}/
+    install -D -p -m0755 ${WORKDIR}/out/ca/optee_example_* ${D}${bindir}/
+
+    # install path should match the value set in optee-client/tee-supplicant
+    # default TEEC_LOAD_PATH is /lib
+    mkdir -p ${D}${nonarch_base_libdir}/optee_armtz/
+    install -D -p -m0444 ${WORKDIR}/out/ta/*.ta ${D}${nonarch_base_libdir}/optee_armtz/
+}
+
+FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bb
new file mode 100644
index 0000000..9f82491
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bb
@@ -0,0 +1,59 @@
+inherit workonsrc
+inherit deploy trustzone-image-build
+DEPENDS = "python-pycrypto-native"
+
+inherit pythonnative
+
+DESCRIPTION = "OPTEE OS IMAGE"
+LICENSE = "MIT"
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+OVERRIDES += ":${PLATFORM_TYPE}"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+OPTEEMACHINE = "mediatek"
+OPTEEOUTPUTMACHINE = "mediatek"
+
+OPTEE_ARCH = "${TEE_ARCH}"
+TEE_TOOLCHAIN ?= "${TARGET_PREFIX}"
+DEPENDS += "virtual/${TARGET_PREFIX}gcc"
+TEE_OS_RAM_SIZE = "0x1d0000"
+
+do_compile[noexec] = "1"
+SRC_URI += " file://LICENSE "
+
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/trustzone/optee-os"
+SRC_URI +="file://${WORKONSRC}/optee-out.tar.gz"
+
+
+
+
+
+do_install() {
+    #install core on boot directory
+    install -d ${D}${nonarch_base_libdir}/firmware/
+
+    install -m 644 ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/core/*.bin ${D}${nonarch_base_libdir}/firmware/
+    #install TA devkit
+    install -d ${D}/usr/include/optee/export-user_ta/
+
+    for f in  ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}/* ; do
+        cp -aR  $f  ${D}/usr/include/optee/export-user_ta/
+    done
+}
+
+do_deploy() {
+    install -d ${DEPLOYDIR}/optee
+    for f in ${D}${nonarch_base_libdir}/firmware/*; do
+        install -m 644 $f ${DEPLOYDIR}/optee/
+    done
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY}
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_RAW_BINARY}
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_SIGNED_BINARY}
+}
+
+addtask deploy before do_build after do_install
+
+FILES_${PN} = "${nonarch_base_libdir}/firmware/"
+FILES_${PN}-dev = "/usr/include/optee"
+
+INSANE_SKIP_${PN}-dev = "staticdev"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bbappend
new file mode 100644
index 0000000..fb9bfb7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os-image_3.2.0.bbappend
@@ -0,0 +1,13 @@
+inherit optee-build
+
+EXTRA_OEMAKE_append = "'PLATFORM_FLAVOR=mt2735'	\
+                'CROSS_COMPILE=${TEE_TOOLCHAIN}' \
+                'ta-targets=ta_arm64' \
+                'SUPPORT_RPMB=${TEE_SUPPORT_RPMB}' \
+            "
+
+do_install_prepend() {
+    if [ ! -d ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}/ ]; then
+        ln -s ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_arm64 ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}
+    fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bb
new file mode 100644
index 0000000..d9dc459
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bb
@@ -0,0 +1,80 @@
+inherit workonsrc
+inherit deploy trustzone-build
+DEPENDS = "python-pycrypto-native"
+
+inherit pythonnative
+
+DESCRIPTION = "OPTEE OS"
+LICENSE = "BSD-2-Clause"
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+OVERRIDES += ":${PLATFORM_TYPE}"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/optee/3.2.0/optee_os"
+WORKONSRC_mt2xxx = "${TZ_SRC}/optee/optee_os/mt2xxx/3.2.0"
+WORKONSRC_BUILD = "${TZ_SRC}/optee/3.2.0/optee_os"
+WORKONSRC_BUILD_mt2xxx = "${TZ_SRC}/optee/optee_os/mt2xxx/3.2.0"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=69663ab153298557a59c67a60a743e5b"
+OPTEEMACHINE = "mediatek"
+OPTEEOUTPUTMACHINE = "mediatek"
+
+OPTEE_ARCH = "${TEE_ARCH}"
+TEE_TOOLCHAIN ?= "${TARGET_PREFIX}"
+DEPENDS += "virtual/${TARGET_PREFIX}gcc"
+TEE_OS_RAM_SIZE = "0x1d0000"
+
+do_compile[nostamp] = "1"
+
+EXTRA_OEMAKE = "PLATFORM=${OPTEEMACHINE} \
+                CFG_ARM64_core=y \
+                CROSS_COMPILE64=${TEE_TOOLCHAIN} \
+                NOWERROR=1 \
+                ta-targets=ta_${OPTEE_ARCH} \
+                LDFLAGS= \
+                LIBGCC_LOCATE_CFLAGS=--sysroot=${STAGING_DIR_HOST} \
+                CFLAGS='${CFLAGS} --sysroot=${STAGING_DIR_HOST}' \
+                O=${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE} \
+               "
+
+EXTRA_OEMAKE_append="PLATFORM_FLAVOR=${TZ_PLATFORM} \
+                     CFG_TZDRAM_START=${TRUSTEDOS_ENTRYPOINT} \
+                     CFG_TZDRAM_SIZE=${TRUSTEDOS_SIZE} \
+                     CFG_SHMEM_START=${TRUSTEDOS_ENTRYPOINT}+CFG_TZDRAM_SIZE \
+                     CFG_SHMEM_SIZE=${TRUSTEDOS_SHMEM_SIZE} \
+                     MTK_PROJECT=${MTK_PROJECT} \
+                    "
+
+EXTRA_OEMAKE_append_mt8xxx = " CFG_TEE_RAM_VA_SIZE=${TEE_OS_RAM_SIZE}"
+
+do_compile () {
+    oe_runmake all
+}
+
+do_install() {
+    #install core on boot directory
+    install -d ${D}${nonarch_base_libdir}/firmware/
+
+    install -m 644 ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/core/*.bin ${D}${nonarch_base_libdir}/firmware/
+    #install TA devkit
+    install -d ${D}/usr/include/optee/export-user_ta/
+
+    for f in  ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}/* ; do
+        cp -aR  $f  ${D}/usr/include/optee/export-user_ta/
+    done
+}
+
+do_deploy() {
+    install -d ${DEPLOYDIR}/optee
+    for f in ${D}${nonarch_base_libdir}/firmware/*; do
+        install -m 644 $f ${DEPLOYDIR}/optee/
+    done
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY}
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_RAW_BINARY}
+    install ${DEPLOYDIR}/optee/tee-pager.bin ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_SIGNED_BINARY}
+}
+
+addtask deploy before do_build after do_install
+
+FILES_${PN} = "${nonarch_base_libdir}/firmware/"
+FILES_${PN}-dev = "/usr/include/optee"
+
+INSANE_SKIP_${PN}-dev = "staticdev"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bbappend
new file mode 100644
index 0000000..fb9bfb7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-os_3.2.0.bbappend
@@ -0,0 +1,13 @@
+inherit optee-build
+
+EXTRA_OEMAKE_append = "'PLATFORM_FLAVOR=mt2735'	\
+                'CROSS_COMPILE=${TEE_TOOLCHAIN}' \
+                'ta-targets=ta_arm64' \
+                'SUPPORT_RPMB=${TEE_SUPPORT_RPMB}' \
+            "
+
+do_install_prepend() {
+    if [ ! -d ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}/ ]; then
+        ln -s ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_arm64 ${WORKDIR}/out/${OPTEE_ARCH}-plat-${OPTEEOUTPUTMACHINE}/export-ta_${OPTEE_ARCH}
+    fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bb
new file mode 100644
index 0000000..c1db561
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bb
@@ -0,0 +1,58 @@
+inherit workonsrc
+inherit trustzone-build
+inherit optee-build
+DEPENDS = "python3-pycrypto-native"
+
+#inherit pythonnative
+
+SUMMARY = "OP-TEE services"
+LICENSE = "BSD-2-Clause & MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
+
+DEPENDS += "optee-client"
+
+DEPENDS += "${@bb.utils.contains('MULTILIBS', 'multilib:lib64', 'lib64-optee-os', 'optee-os' ,d)}"
+
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+OVERRIDES_append = ":${PLATFORM_TYPE}"
+
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/optee/3.2.0/source/optee_services"
+WORKONSRC_mt2xxx = "${TZ_SRC}/optee/source/mt2xxx/optee_services"
+
+OPTEE_CLIENT_EXPORT = "${STAGING_DIR_HOST}${prefix}"
+TEEC_EXPORT = "${STAGING_DIR_HOST}${prefix}"
+TA_DEV_KIT_DIR_mt2xxx = "${STAGING_INCDIR}/optee/export-user_ta"
+
+INSANE_SKIP_${PN} = "installed-vs-shipped"
+SOLIBS = ".so"
+FILES_SOLIBSDEV = ""
+FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+
+OPTEE_ARCH = "${TEE_ARCH}"
+DEPENDS += "virtual/${TARGET_PREFIX}gcc"
+
+EXTRA_OEMAKE = " TA_DEV_KIT_DIR=${TA_DEV_KIT_DIR} \
+                 OPTEE_CLIENT_EXPORT=${OPTEE_CLIENT_EXPORT} \
+                 TEEC_EXPORT=${TEEC_EXPORT} \
+                 HOST_CROSS_COMPILE=${TARGET_PREFIX} \
+                 TA_CROSS_COMPILE=${TEE_TOOLCHAIN} \
+                 V=1 \
+               "
+
+do_compile() {
+    export LD_LIBRARY_PATH=${OPTEE_LIB64}:${LD_LIBRARY_PATH}
+    export PATH=${OPTEE_BULID_SA}:${PATH}
+    oe_runmake
+}
+
+do_install () {
+    install -d ${D}${libdir}
+    install -d ${D}${bindir}
+    install -d ${D}${includedir}
+    install -d ${S}/out/ta
+    oe_runmake install LIBDIR="${D}${libdir}" BINDIR="${D}${bindir}" INCDIR="${D}${includedir}" TADIR="${S}out/ta"
+
+    mkdir -p ${D}${nonarch_base_libdir}/optee_armtz
+    install -D -p -m0444 ${S}/out/ta/* ${D}${nonarch_base_libdir}/optee_armtz
+}
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bbappend
new file mode 100644
index 0000000..1db7fe6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-services.bbappend
@@ -0,0 +1,2 @@
+LIC_FILES_CHKSUM_remove = "file://${S}/LICENSE;md5=cd95ab417e23b94f381dafc453d70c30"
+LIC_FILES_CHKSUM_append = "file://${S}/LICENSE;md5=cb3d385c0d64a57fad9b9e0e9029f607"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_%.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_%.bbappend
new file mode 100644
index 0000000..0b8ddb0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_%.bbappend
@@ -0,0 +1,3 @@
+DEPENDS_append=" optee-services "
+
+EXTRA_OEMAKE_append="CFG_PKCS11_TA=y"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_3.2.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_3.2.0.bb
new file mode 100644
index 0000000..89d3f96
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/optee-test_3.2.0.bb
@@ -0,0 +1,63 @@
+inherit workonsrc
+inherit deploy
+inherit optee-build
+DEPENDS = "python-pycrypto-native"
+
+inherit pythonnative
+
+DESCRIPTION = "OPTEE TESTSUITE"
+LICENSE = "BSD-2-Clause & GPL-2.0"
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+OVERRIDES_append = ":${PLATFORM_TYPE}"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/optee/3.2.0/source/optee_test"
+WORKONSRC_mt2xxx = "${TZ_SRC}/optee/optee_test/mt2xxx"
+WORKONSRC_BUILD = "${TZ_SRC}/optee/3.2.0/source/optee_test"
+WORKONSRC_BUILD_mt2xxx = "${TZ_SRC}/optee/optee_test/mt2xxx"
+LIC_FILES_CHKSUM = "file://${S}/LICENSE.md;md5=daa2bcccc666345ab8940aab1315a4fa"
+DEPENDS += "optee-client openssl"
+DEPENDS_append_mt2xxx = " optee-os "
+DEPENDS_append_mt8xxx = " lib64-optee-os "
+OPTEE_CLIENT_EXPORT = "${STAGING_DIR_HOST}${prefix}"
+OPTEE_OPENSSL_EXPORT = "${STAGING_INCDIR}"
+TEEC_EXPORT         = "${STAGING_DIR_HOST}${prefix}"
+TA_DEV_KIT_DIR_mt2xxx = "${STAGING_INCDIR}/optee/export-user_ta"
+
+OPTEE_ARCH = "${TEE_ARCH}"
+TEE_TOOLCHAIN_mt2xxx = "${TARGET_PREFIX}"
+DEPENDS += "virtual/${TARGET_PREFIX}gcc"
+
+EXTRA_OEMAKE = " TA_DEV_KIT_DIR=${TA_DEV_KIT_DIR} \
+                 OPTEE_CLIENT_EXPORT=${OPTEE_CLIENT_EXPORT} \
+                 OPTEE_OPENSSL_EXPORT=${OPTEE_OPENSSL_EXPORT} \
+                 TEEC_EXPORT=${TEEC_EXPORT} \
+                 CROSS_COMPILE_HOST=${TARGET_PREFIX} \
+                 CROSS_COMPILE_TA=${TEE_TOOLCHAIN} \
+                 V=1 \
+                 O=${WORKDIR}/out \
+                 COMPILE_NS_USER=32 \
+               "
+
+do_compile() {
+    # Top level makefile doesn't seem to handle parallel make gracefully
+if ${@bb.utils.contains('PLATFORM_TYPE','mt2xxx','false','true',d)}; then
+	export LD_LIBRARY_PATH=${OPTEE_LIB64}:${LD_LIBRARY_PATH}
+	export PATH=${OPTEE_BULID_SA}:${PATH}
+fi
+    oe_runmake xtest
+    oe_runmake ta
+}
+
+do_install () {
+    install -D -p -m0755 ${WORKDIR}/out/xtest/xtest ${D}${bindir}/xtest
+
+    # install path should match the value set in optee-client/tee-supplicant
+    # default TEEC_LOAD_PATH is /lib
+    mkdir -p ${D}${nonarch_base_libdir}/optee_armtz/
+    install -D -p -m0444 ${WORKDIR}/out/ta/*/*.ta ${D}${nonarch_base_libdir}/optee_armtz/
+}
+
+FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+
+# Imports machine specific configs from staging to build
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/tee-mtee.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/tee-mtee.bb
new file mode 100644
index 0000000..ba62693
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/tee-mtee.bb
@@ -0,0 +1,64 @@
+inherit workonsrc
+inherit deploy trustzone-build
+
+DESCRIPTION = "MTEE Image"
+LICENSE = "MediaTekProprietary"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+TZ_PREBUILT = "${TOPDIR}/../prebuilt/bsp/trustzone"
+WORKONSRC = "${TZ_SRC}/mtee/build"
+WORKONSRC_BUILD = "${TZ_SRC}/mtee/build"
+LIC_FILES_CHKSUM = "file://${TZ_PREBUILT}/mtee/build/yocto_build/README;md5=5a126b0ba82af703f1c30cf8d0bb4e13"
+TZ_OUT = "${WORKDIR}/out"
+TZ_BINARY_OUT = "${TZ_OUT}/bin"
+TZ_RAW_OUT = "${TZ_OUT}/archive"
+TZ_BINARY = "tz.img"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+do_compile[nostamp] = "1"
+
+do_compile () {
+if [ "${TEE_ARCH}" = "" ]; then
+	TEE_ARCH=${KERNEL_ARCH}
+fi
+if [ -e ${TZ_SRC}/mtee/build/yocto_build/makefile ] && [ -d ${TZ_SRC}/mtee/source/${TZ_PLATFORM} ]; then
+	python 	${TZ_SRC}/mtee/build/yocto_build/android_makefile_parser.py \
+		${TZ_SRC}/mtee \
+		${TZ_PLATFORM} \
+		${TZ_PROJECT} \
+		${TEE_ARCH} \
+		${TZ_SRC}/mtee/trustzone.mk \
+		${TZ_PREBUILT}/${TZ_PROJECT}/prebuilts
+
+		TZ_SRC=${TZ_SRC} \
+		TZ_OUT=${TZ_OUT} \
+		TZ_VERSION=${TRUSTZONE_VERSION} \
+		ARCH=${TEE_ARCH} \
+		MTK_PLATFORM=${TZ_PLATFORM} \
+		MTK_PROJECT=${TZ_PROJECT} \
+		CROSS_COMPILE=${TARGET_PREFIX} \
+		make -C ${TZ_SRC}/mtee -f ${TZ_SRC}/mtee/build/yocto_build/makefile
+fi
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	if [ -e ${TZ_SRC}/mtee/build/yocto_build/makefile ] && [ -d ${TZ_SRC}/mtee/source/${TZ_PLATFORM} ]; then
+		install ${TZ_RAW_OUT}/${TZ_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY}
+		install ${TZ_BINARY_OUT}/${TZ_SIGNED_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY}
+		install ${TZ_RAW_OUT}/${TZ_BINARY} ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_RAW_BINARY}
+		install ${TZ_BINARY_OUT}/${TZ_SIGNED_BINARY} ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_SIGNED_BINARY}
+	else
+		if [ "${TRUSTZONE_HEADER}" = "fit" ]; then
+			echo "fit image case"
+			echo ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_RAW_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY}
+			install ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_RAW_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY}
+			install ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_SIGNED_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY}
+			install ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_RAW_BINARY} ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_RAW_BINARY}
+			install ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_SIGNED_BINARY} ${TZ_ASSEMBLE_OUT}/${TRUSTEDOS_SIGNED_BINARY}
+		else
+			echo "no fit image case"
+			install ${TZ_PREBUILT}/${TZ_PROJECT}/${TZ_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_BINARY}
+		fi
+	fi
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader-image.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader-image.bb
new file mode 100644
index 0000000..ee1303d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader-image.bb
@@ -0,0 +1,30 @@
+inherit deploy trustzone-image-build
+
+DESCRIPTION = "TEELOADER Image"
+LICENSE = "MIT"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+
+TZ_PREBUILT = "${TOPDIR}/../prebuilt/bsp/trustzone"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+TL_OUT = "${WORKDIR}/out"
+TL_RAW_OUT = "${TL_OUT}/archive_tl"
+TZ_ORIG_KEY = "${MTK_KEY_DIR}/${MTEE_KEY}.pem"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+do_compile[noexec] = "1"
+SRC_URI += " file://LICENSE "
+
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/trustzone/teeloader"
+SRC_URI +="file://${WORKONSRC}/teeloader-out.tar.gz"
+TL_SRC = "${WORKONSRC}"
+
+
+do_deploy () {
+if [ -d ${TL_SRC} ]; then
+	install -d ${DEPLOYDIR}
+	install ${TL_RAW_OUT}/bin/teeloader.bin ${DEPLOYDIR}/teeloader.bin
+fi
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader.bb
new file mode 100644
index 0000000..39eae85
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/teeloader.bb
@@ -0,0 +1,64 @@
+inherit deploy trustzone-build
+
+DESCRIPTION = "TEELOADER Image"
+LICENSE = "MediaTekProprietary"
+TZ_SRC = "${TOPDIR}/../src/bsp/trustzone"
+TL_SRC = "${TOPDIR}/../src/bsp/trustzone/teeloader"
+TZ_PREBUILT = "${TOPDIR}/../prebuilt/bsp/trustzone"
+LIC_FILES_CHKSUM = "file://${TL_SRC}/README;md5=5a126b0ba82af703f1c30cf8d0bb4e13"
+TL_OUT = "${WORKDIR}/out"
+TL_RAW_OUT = "${TL_OUT}/archive_tl"
+TZ_ORIG_KEY = "${MTK_KEY_DIR}/${MTEE_KEY}.pem"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}/trustzone"
+do_compile[nostamp] = "1"
+
+do_compile () {
+if [ ${SECURE_BOOT_ENABLE} = "yes" ]; then
+	if [ -d ${TL_SRC} ]; then
+		if [ ${FORCE_DISABLE_TEE_ENCRYPTION} = "yes" ]; then
+			TL_VERIFY_ENABLE="0x0"
+		else
+			TL_VERIFY_ENABLE="0x1"
+		fi
+		if [ -e ${TZ_ORIG_KEY} ] && [ ${FORCE_DISABLE_TEE_ENCRYPTION} != "yes" ]; then
+			cp -rf ${TZ_ORIG_KEY} ${TL_SRC}/${TZ_PLATFORM}/include/mtee_key.pem
+			python ${TL_SRC}/${TZ_PLATFORM}/cus_tzimg_dec_key.py
+			python ${TL_SRC}/${TZ_PLATFORM}/cus_tzimg_enc_key.py ${TZ_PLATFORM}
+			rm -rf ${TL_SRC}/${TZ_PLATFORM}/include/mtee_key.pem
+		fi
+	else
+		TL_VERIFY_ENABLE="0x0"
+		TL_ALIGN_SIZE="0x0"
+	fi
+else
+	TL_VERIFY_ENABLE="0x0"
+fi
+
+if [ ${TEE_SUPPORT} = "none" ]; then
+	TRUSTEDOS_EP=0x0
+else
+	TRUSTEDOS_EP=${TRUSTEDOS_ENTRYPOINT}
+fi
+
+if [ -d ${TL_SRC} ]; then
+	TL_RAW_OUT=${TL_RAW_OUT} \
+	BASE_ADDR=${TEE_LOADADDRESS} \
+	TL_ALIGN_SIZE=${TL_ALIGN_SIZE} \
+	CROSS_COMPILE=${TARGET_PREFIX} \
+	TL_VERIFY_ENABLE=${TL_VERIFY_ENABLE} \
+	TRUSTEDOS_ENTRYPOINT=${TRUSTEDOS_EP} \
+	TZ_PROJECT=${TZ_PROJECT} \
+	make -C ${TL_SRC}/${TZ_PLATFORM} -f ${TL_SRC}/${TZ_PLATFORM}/Makefile
+fi
+}
+
+do_deploy () {
+if [ -d ${TL_SRC} ]; then
+	install -d ${DEPLOYDIR}
+	install ${TL_RAW_OUT}/bin/teeloader.bin ${DEPLOYDIR}/teeloader.bin
+fi
+}
+
+addtask populate_lic before do_install after do_compile
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone-image.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone-image.bb
new file mode 100644
index 0000000..a0f40aa
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone-image.bb
@@ -0,0 +1,86 @@
+inherit deploy trustzone-image-build trustzone-fitimage
+inherit staging-copyfile
+DESCRIPTION = "TrustZone Image"
+LICENSE = "MediaTekProprietary"
+TL_SRC = "${TOPDIR}/../prebuilt/firmware/trustzone"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "u-boot-mkimage-native dtc-native lz4-native"
+
+TZ_OUT = "${WORKDIR}/out"
+SRC_URI += " file://LICENSE "
+#please make sure all output file under ${TZ_ASSEMBLE_OUT}
+#TEELOADER: teeloader.bin
+#ATF: ${ATF_RAW_BINARY} ${ATF_SIGNED_BINARY}
+#TEE: ${TZ_RAW_BINARY}  ${TZ_SIGNED_BINARY}
+#final layout:
+#raw tz.img		(not has extra tee verification):
+#[teeloader.bin][${ATF_RAW_BINARY}][[${TZ_RAW_BINARY}](if has tee)]
+#signed tz.img	(has extra tee verification handled in tee loader):
+#[teeloader.bin][${ATF_SIGNED_BINARY}][[${TZ_SIGNED_BINARY}](if has tee)]
+#
+#trustzone.bb only assemble the final tz.img with the files under ${TZ_ASSEMBLE_OUT}
+#
+
+run_lz4_compression() {
+	dec_size=0
+	fsize=$(stat -c "%s" "${TZ_ASSEMBLE_OUT}/${1}")
+	dec_size=$(expr $dec_size + $fsize)
+	lz4 -l -c1 ${TZ_ASSEMBLE_OUT}/${1} > ${TZ_ASSEMBLE_OUT}/${1}.lz4
+	mv -f ${TZ_ASSEMBLE_OUT}/${1}.lz4 ${TZ_ASSEMBLE_OUT}/${1}
+	printf "%08x\n" $dec_size |
+		sed 's/\(..\)/\1 /g' | {
+		    read ch0 ch1 ch2 ch3;
+		    for ch in $ch3 $ch2 $ch1 $ch0; do
+			printf `printf '%s%03o' '\\' 0x$ch` >> ${TZ_ASSEMBLE_OUT}/${1};
+		    done;
+		}
+}
+
+do_compile () {
+if ${@bb.utils.contains('TRUSTZONE_HEADER','fit','true','false',d)}; then
+	# integrate tz image
+	if [ -d ${TL_SRC} ]; then
+		cp ${TZ_ASSEMBLE_OUT}/teeloader.bin ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+	fi
+	if [ "${ATF_SUPPORT}" = "yes" ]; then
+		cat ${TZ_ASSEMBLE_OUT}/${ATF_BINARY_SELECT} >> ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+	fi
+	if [ "${TEE_SUPPORT}" != "none" ]; then
+		if [ -z "${TRUSTEDOS_ENTRYPOINT}" ] && [ -z "${TRUSTEDOS_LOADADDRESS}" ] ; then
+			cat ${TZ_ASSEMBLE_OUT}/${TZ_BINARY_SELECT} >>  ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+		fi
+	fi
+
+	# compression method LZ4 support
+	if [ "${TRUSTZONE_COMPRESS}" = "lz4" ]; then
+	    run_lz4_compression ${TZ_TMP_BINARY}
+
+		if [ "${TEE_SUPPORT}" != "none" ]; then
+			if [ -n "${TRUSTEDOS_ENTRYPOINT}" ] && [ -n "${TRUSTEDOS_LOADADDRESS}" ]; then
+				run_lz4_compression ${TRUSTEDOS_BINARY_SELECT}
+			fi
+		fi
+	fi
+
+	# raw and signed tz image flow
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${FORCE_DISABLE_TEE_ENCRYPTION}" != "yes" ]; then
+				mv ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_TMP_SIGNED_BINARY}
+	else
+				mv ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_TMP_RAW_BINARY}
+	fi
+fi
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${TZ_ASSEMBLE_OUT}/${TZ_BINARY} ${DEPLOYDIR}/${TZ_BINARY}
+	if [ -e ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY} ]; then
+		install ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY} ${DEPLOYDIR}/${TZ_RAW_BINARY}
+	fi
+	if [ -e ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY} ]; then
+		install ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY} ${DEPLOYDIR}/${TZ_SIGNED_BINARY}
+	fi
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone.bb
new file mode 100755
index 0000000..732a695
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-bsp/trustzone/trustzone.bb
@@ -0,0 +1,86 @@
+inherit deploy trustzone-src-build trustzone-fitimage
+inherit staging-copyfile
+DESCRIPTION = "TrustZone Src"
+LICENSE = "MediaTekProprietary"
+TL_SRC = "${TOPDIR}/../prebuilt/firmware/trustzone"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "u-boot-mkimage-native dtc-native lz4-native"
+
+TZ_OUT = "${WORKDIR}/out"
+SRC_URI += " file://LICENSE "
+#please make sure all output file under ${TZ_ASSEMBLE_OUT}
+#TEELOADER: teeloader.bin
+#ATF: ${ATF_RAW_BINARY} ${ATF_SIGNED_BINARY}
+#TEE: ${TZ_RAW_BINARY}  ${TZ_SIGNED_BINARY}
+#final layout:
+#raw tz.img		(not has extra tee verification):
+#[teeloader.bin][${ATF_RAW_BINARY}][[${TZ_RAW_BINARY}](if has tee)]
+#signed tz.img	(has extra tee verification handled in tee loader):
+#[teeloader.bin][${ATF_SIGNED_BINARY}][[${TZ_SIGNED_BINARY}](if has tee)]
+#
+#trustzone.bb only assemble the final tz.img with the files under ${TZ_ASSEMBLE_OUT}
+#
+
+run_lz4_compression() {
+	dec_size=0
+	fsize=$(stat -c "%s" "${TZ_ASSEMBLE_OUT}/${1}")
+	dec_size=$(expr $dec_size + $fsize)
+	lz4 -l -c1 ${TZ_ASSEMBLE_OUT}/${1} > ${TZ_ASSEMBLE_OUT}/${1}.lz4
+	mv -f ${TZ_ASSEMBLE_OUT}/${1}.lz4 ${TZ_ASSEMBLE_OUT}/${1}
+	printf "%08x\n" $dec_size |
+		sed 's/\(..\)/\1 /g' | {
+		    read ch0 ch1 ch2 ch3;
+		    for ch in $ch3 $ch2 $ch1 $ch0; do
+			printf `printf '%s%03o' '\\' 0x$ch` >> ${TZ_ASSEMBLE_OUT}/${1};
+		    done;
+		}
+}
+
+do_compile () {
+if ${@bb.utils.contains('TRUSTZONE_HEADER','fit','true','false',d)}; then
+	# integrate tz image
+	if [ -d ${TL_SRC} ]; then
+		cp ${TZ_ASSEMBLE_OUT}/teeloader.bin ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+	fi
+	if [ "${ATF_SUPPORT}" = "yes" ]; then
+		cat ${TZ_ASSEMBLE_OUT}/${ATF_BINARY_SELECT} >> ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+	fi
+	if [ "${TEE_SUPPORT}" != "none" ]; then
+		if [ -z "${TRUSTEDOS_ENTRYPOINT}" ] && [ -z "${TRUSTEDOS_LOADADDRESS}" ] ; then
+			cat ${TZ_ASSEMBLE_OUT}/${TZ_BINARY_SELECT} >>  ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY}
+		fi
+	fi
+
+	# compression method LZ4 support
+	if [ "${TRUSTZONE_COMPRESS}" = "lz4" ]; then
+	    run_lz4_compression ${TZ_TMP_BINARY}
+
+		if [ "${TEE_SUPPORT}" != "none" ]; then
+			if [ -n "${TRUSTEDOS_ENTRYPOINT}" ] && [ -n "${TRUSTEDOS_LOADADDRESS}" ]; then
+				run_lz4_compression ${TRUSTEDOS_BINARY_SELECT}
+			fi
+		fi
+	fi
+
+	# raw and signed tz image flow
+	if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${FORCE_DISABLE_TEE_ENCRYPTION}" != "yes" ]; then
+				mv ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_TMP_SIGNED_BINARY}
+	else
+				mv ${TZ_ASSEMBLE_OUT}/${TZ_TMP_BINARY} ${TZ_ASSEMBLE_OUT}/${TZ_TMP_RAW_BINARY}
+	fi
+fi
+}
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install ${TZ_ASSEMBLE_OUT}/${TZ_BINARY} ${DEPLOYDIR}/${TZ_BINARY}
+	if [ -e ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY} ]; then
+		install ${TZ_ASSEMBLE_OUT}/${TZ_RAW_BINARY} ${DEPLOYDIR}/${TZ_RAW_BINARY}
+	fi
+	if [ -e ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY} ]; then
+		install ${TZ_ASSEMBLE_OUT}/${TZ_SIGNED_BINARY} ${DEPLOYDIR}/${TZ_SIGNED_BINARY}
+	fi
+}
+
+addtask deploy before do_build after do_install
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab
new file mode 100644
index 0000000..40a85f3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab
@@ -0,0 +1,32 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+/dev/root                       /                   auto       defaults              1  1
+proc                            /proc               proc       defaults              0  0
+devpts                          /dev/pts            devpts     mode=0620,gid=5       0  0
+tmpfs                           /run                tmpfs      mode=0755,nodev,nosuid,strictatime 0  0
+tmpfs                           /var/volatile       tmpfs      defaults              0  0
+/dev/disk/by-partlabel/misc     /misc               tmpfs      defaults              0  0
+
+/dev/disk/by-partlabel/userdata /STATE              auto       defaults              1  2
+/STATE/usr/lib/tmpfiles.d       /usr/lib/tmpfiles.d     none       bind    0  0
+/STATE/etc/firmware             /etc/firmware           none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/syslog               /etc/syslog             none       bind    0  0
+/STATE/home                     /home                   none       bind    0  0
+/STATE/mnt                      /mnt                    none       bind    0  0
+/STATE/srv                      /srv                    none       noauto,x-systemd.automount,bind    0  0
+/STATE/usr/local                /usr/local              none       bind    0  0
+/STATE/system/etc/firmware      /system/etc/firmware    none       noauto,x-systemd.automount,bind    0  0
+/STATE/custom/etc/firmware      /custom/etc/firmware    none       bind    0  0
+/STATE/var/lib                  /var/lib                none       bind    0  0
+/STATE/data                     /data                   none       bind    0  0
+/STATE/system/etc/tele          /system/etc/tele        none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/adr           /system/etc/adr         none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/agps          /system/etc/agps        none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/security      /system/etc/security    none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/adr                  /etc/adr                none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/gnss                 /etc/gnss               none       noauto,x-systemd.automount,bind    0  0
+/STATE/usr/share/gps            /usr/share/gps          none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/config               /etc/config             none       noauto,x-systemd.automount,bind    0  0
+
+/dev/disk/by-partlabel/proinfo  /mnt/sncfg          auto       defaults              1  2
+/dev/disk/by-partlabel/nvram    /mnt/vendor/nvram   auto       defaults              1  2
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab-nand b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab-nand
new file mode 100644
index 0000000..e8be057
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/fstab-nand
@@ -0,0 +1,34 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+/dev/root            /                    auto       defaults              1  1
+proc                 /proc                proc       defaults              0  0
+devpts               /dev/pts             devpts     mode=0620,gid=5       0  0
+tmpfs                /run                 tmpfs      mode=0755,nodev,nosuid,strictatime 0  0
+tmpfs                /var/volatile        tmpfs      defaults              0  0
+
+/dev/disk/by-partlabel/misc      /misc    tmpfs      defaults,noauto       0  0
+
+ubi1_0               /STATE               ubifs      nosuid,nodev          1  2
+/STATE/usr/lib/tmpfiles.d   /usr/lib/tmpfiles.d     none       bind    0  0
+/STATE/etc/firmware         /etc/firmware           none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/syslog           /etc/syslog             none       bind    0  0
+/STATE/home                 /home                   none       bind    0  0
+/STATE/mnt                  /mnt                    none       bind    0  0
+/STATE/srv                  /srv                    none       noauto,x-systemd.automount,bind    0  0
+/STATE/usr/local            /usr/local              none       bind    0  0
+/STATE/system/etc/firmware  /system/etc/firmware    none       noauto,x-systemd.automount,bind    0  0
+/STATE/custom/etc/firmware  /custom/etc/firmware    none       bind    0  0
+/STATE/var/lib              /var/lib                none       bind    0  0
+/STATE/data                 /data                   none       bind    0  0
+/STATE/system/etc/tele      /system/etc/tele        none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/adr       /system/etc/adr         none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/agps      /system/etc/agps        none       noauto,x-systemd.automount,bind    0  0
+/STATE/system/etc/security  /system/etc/security    none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/adr              /etc/adr                none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/gnss             /etc/gnss               none       noauto,x-systemd.automount,bind    0  0
+/STATE/usr/share/gps        /usr/share/gps          none       noauto,x-systemd.automount,bind    0  0
+/STATE/etc/thermal          /etc/thermal            none       bind    0  0
+/STATE/etc/config           /etc/config             none       noauto,x-systemd.automount,bind    0  0
+
+ubi5_0               /mnt/sncfg           ubifs      nosuid,nodev          1  2
+ubi7_0               /mnt/vendor/nvram    ubifs      nosuid,nodev          1  2
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/partition-emmc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/partition-emmc
new file mode 100644
index 0000000..23d1e73
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files/partition-emmc
@@ -0,0 +1,8 @@
+label: gpt
+label-id: 11690613-BF70-43CD-AA2A-09934475794D
+device: /dev/mmcblk0
+unit: sectors
+first-lba: 34
+last-lba: 61071326
+
+/dev/mmcblk0p1 : start=        2048, size=    61069279, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=F29C0368-3739-8F4A-89E6-F0333C791C3B
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files_%.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files_%.bbappend
new file mode 100644
index 0000000..60031dd
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/base-files/base-files_%.bbappend
@@ -0,0 +1,19 @@
+
+FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
+
+SRC_URI += " \
+	file://fstab-nand \
+	file://fstab \
+	file://partition-emmc \
+"
+
+IMAGE_FSTYPES_NO_WHITESPACE="$(echo "${BOOTDEV_TYPE}" | tr -d '[:space:]')"
+
+do_install_append()  {
+    if test "${IMAGE_FSTYPES_NO_WHITESPACE}" = "nand"; then
+        install -m 0644 fstab-nand ${D}${sysconfdir}/fstab
+        install -m 0644 partition-emmc ${D}${sysconfdir}/partition-emmc
+    else
+        install -m 0644 fstab ${D}${sysconfdir}/fstab
+    fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/images/mtk-image-2735.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/images/mtk-image-2735.bb
new file mode 100755
index 0000000..8b7f263
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/images/mtk-image-2735.bb
@@ -0,0 +1,172 @@
+#IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"
+
+IMAGE_LINGUAS = " "
+
+LICENSE = "MIT"
+
+IMAGE_ROOTFS_SIZE ?= "1024"
+
+STATE_DIR_CONTENT = "${IMAGE_ROOTFS}/home ${IMAGE_ROOTFS}/usr/lib/tmpfiles.d ${IMAGE_ROOTFS}/etc/firmware ${IMAGE_ROOTFS}/etc/syslog ${IMAGE_ROOTFS}/mnt ${IMAGE_ROOTFS}/srv   ${IMAGE_ROOTFS}/usr/local ${IMAGE_ROOTFS}/system/etc/firmware ${IMAGE_ROOTFS}/custom/etc/firmware ${IMAGE_ROOTFS}/var/lib ${IMAGE_ROOTFS}/data ${IMAGE_ROOTFS}/system/etc/tele ${IMAGE_ROOTFS}/system/etc/adr ${IMAGE_ROOTFS}/system/etc/agps ${IMAGE_ROOTFS}/system/etc/security ${IMAGE_ROOTFS}/etc/adr ${IMAGE_ROOTFS}/etc/gnss ${IMAGE_ROOTFS}/usr/share/gps ${IMAGE_ROOTFS}/etc/thermal ${IMAGE_ROOTFS}/etc/config"
+
+STATE_DIR_IMAGE_SIZE ?= "14336"
+VENDOR_PROP_FILE = "${IMAGE_ROOTFS}/vendor/build.prop"
+DEPENDS = "lynq-rootfs"
+inherit core-image-tiny
+#inherit create-link
+#inherit create-nfsb
+#inherit depends-systemd
+inherit mkstatepart
+inherit mkuserdataimg
+inherit mksncfg
+#you.chen@2022-07-11 for change partition begin
+DEPENDS += "init-oem"
+inherit mkoemdataimg
+inherit mkoemappimg
+inherit mkoemapp2img
+#you.chen@2022-07-11 for change partition end
+inherit create-sparse-image
+inherit staging-copyfile
+inherit avb_sign_image
+inherit make_ota_full-package
+inherit mknvram
+inherit mkmcf
+
+EXTRA_IMAGECMD_ext4 := "-i 4096 -b 4096"
+
+do_rootfs[depends] += "mtk-core-image-tiny:do_image_complete"
+IMAGE_FEATURES_append = " \
+    ${@bb.utils.contains("SECURE_BOOT_ENABLE", "yes", "read-only-rootfs", "", d)} \
+"
+
+# BAD_RECOMMENDATIONS = "udev-hwdb shared-mime-info kbd kbd-consolefonts kbd-keymaps"
+
+CORE_IMAGE_EXTRA_INSTALL += " \
+"
+IMAGE_INSTALL_append = " \
+	${@bb.utils.contains("TEE_SUPPORT_SRC", "yes", "optee-client", "", d)} \
+	${@bb.utils.contains("TEE_SUPPORT_SRC", "yes", "optee-test", "", d)} \
+	${@bb.utils.contains("TEE_SUPPORT_SRC", "yes", "optee-example", "", d)} \
+	${@bb.utils.contains("TEE_SUPPORT_SRC", "yes", "optee-services", "", d)} \
+	${@bb.utils.contains("TEE_SUPPORT_SRC", "yes", "security-storage-demo", "", d)} \
+    ${@bb.utils.contains("RNDIS_ENABLE", "yes", "lynq-rndis-service", "", d)} \
+	hello-world\
+	shadow\
+	procps \
+	dtbo \
+	network-demo \
+	call-demo \
+	sms-demo \
+        sim-demo \
+        data-demo \
+        util-linux \
+        lynq-fota-demo \
+        lynq-thermal-demo \
+	wakelock-demo \
+	rtp-demo \
+	media-demo \
+    autosuspend-client-demo \
+	e-call-demo \
+	lynq-cv2x-demo \
+         wifi6-demo \
+         setalarm   \
+"
+
+do_populate_sdk_prepend() {
+    d.appendVar("PACKAGE_EXCLUDE", "lib32-libcxx")
+    bb.note("building sdk, PACKAGE_EXCLUDE = %s" % d.getVar("PACKAGE_EXCLUDE"))
+}
+
+do_modem_align_4kb() {
+    if [ -f "${DEPLOY_DIR}/images/${MACHINE}/md1img.img" ]; then
+        python ${DEPLOY_DIR_IMAGE}/align_4kb.py ${DEPLOY_DIR_IMAGE}/md1img.img
+    fi
+    if [ -f "${DEPLOY_DIR}/images/${MACHINE}/md1dsp.img" ]; then
+        python ${DEPLOY_DIR_IMAGE}/align_4kb.py ${DEPLOY_DIR_IMAGE}/md1dsp.img
+    fi
+}
+
+do_squashfs_gen_image(){
+        if ${@bb.utils.contains('IMAGE_FSTYPES','squashfs','true','false',d)}; then
+                simg2img ${DEPLOY_DIR_IMAGE}/system.img ${DEPLOY_DIR_IMAGE}/system_unsparse.img
+                echo \[squashfs\] > ubinize.cfg
+                echo mode=ubi >> ubinize.cfg
+                echo image=${DEPLOY_DIR_IMAGE}/system_unsparse.img >> ubinize.cfg
+                echo vol_id=0 >> ubinize.cfg
+                echo vol_type=static >> ubinize.cfg
+                echo vol_name=rootfs >> ubinize.cfg
+                ubinize -o ${DEPLOY_DIR_IMAGE}/system.ubi ${UBINIZE_ARGS} ubinize.cfg
+                img2simg ${DEPLOY_DIR_IMAGE}/system.ubi ${DEPLOY_DIR_IMAGE}/system.img
+                mv ubinize.cfg ${DEPLOY_DIR_IMAGE}/
+        fi
+}
+addtask squashfs_gen_image after do_avb_sign_img before do_build
+addtask make_otafull_package after do_squashfs_gen_image before do_build
+
+gen_feature_property() {
+       if [ ! -d "${IMAGE_ROOTFS}/vendor" ]; then
+               mkdir ${IMAGE_ROOTFS}/vendor
+       fi
+
+       echo "" >> ${VENDOR_PROP_FILE}
+       echo "###### FO <=> property mapping start ######" >> ${VENDOR_PROP_FILE}
+
+       echo "ro.build.type=${BUILD_TYPE}" >> ${VENDOR_PROP_FILE}
+
+       echo "ro.hardware=${TARGET_PLATFORM}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.board=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.device=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.model=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.name=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.vendor.device=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.vendor.model=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+       echo "ro.product.vendor.name=${MTK_PROJECT}" >> ${VENDOR_PROP_FILE}
+
+       echo "###### FO <=> property mapping end ######" >> ${VENDOR_PROP_FILE}
+       echo "" >> ${VENDOR_PROP_FILE}
+       cp -af ${VENDOR_PROP_FILE} ${DEPLOY_DIR_IMAGE}/
+
+       mkdir ${IMAGE_ROOTFS}/sdcard
+       echo "${NATA_SERIAL_NUMBER}" >> ${IMAGE_ROOTFS}/sdcard/nata_serial.txt
+}
+#ROOTFS_POSTPROCESS_COMMAND += " gen_feature_property;"
+mk_lynq_base_part_rootfs_pre() {
+   # install -d ${IMAGE_ROOTFS}/protect_f
+   #echo "${TOPDIR}"
+   . ${TOPDIR}/rootbase.sh
+   #echo "${ROOTFS_BASE}"   
+   cp -af ${ROOTFS_BASE}/* ${IMAGE_ROOTFS}/
+   #you.chen@2022-07-11 for change partition begin
+   install -d ${IMAGE_ROOTFS}/oemdata
+   install -d ${IMAGE_ROOTFS}/oemapp
+   install -d ${IMAGE_ROOTFS}/oemapp2
+   #you.chen@2022-07-11 for change partition end
+   echo "copy ok----\n"
+}
+
+ROOTFS_PREPROCESS_COMMAND += "mk_lynq_base_part_rootfs_pre;"
+
+#you.chen@2022-07-25 for change partition begin
+mk_oem_init_part_rootfs_post() {
+    cp ${STAGING_DIR_HOST}/${datadir}/init/* ${IMAGE_ROOTFS}/${datadir}/init/
+}
+
+ROOTFS_POSTPROCESS_COMMAND += "mk_oem_init_part_rootfs_post;"
+#you.chen@2022-07-25 for change partition end
+
+addtask modem_align_4kb after do_image_complete before do_build
+
+#dongyu@2022.8.22 add uart root user set password to login start
+ROOTFS_POSTPROCESS_COMMAND += "change_root_psw;"
+change_root_psw() {
+   cp ${IMAGE_ROOTFS}/etc/shadow ${IMAGE_ROOTFS}/etc/shadow_bk;
+   mv ${IMAGE_ROOTFS}/etc/shadow ${IMAGE_ROOTFS}/etc/config/shadow;
+   ln -s /etc/config/shadow ${IMAGE_ROOTFS}/etc/shadow;
+}
+#dongyu@2022.8.22 add uart root user set password to login end
+
+#dongyu@2022.9.13 Add Cancel the password login for the main version of uart start
+do_no_autologin() {
+        sed -i 's/sbin\/agetty --autologin root/sbin\/agetty/g' ${IMAGE_ROOTFS}/${systemd_unitdir}/system/serial-getty@.service
+}
+ROOTFS_POSTPROCESS_COMMAND += "do_no_autologin;"
+#dongyu@2022.9.13 Add Cancel the password login for the main version of uart end
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/agps.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/agps.service
new file mode 100644
index 0000000..3282d45
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/agps.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=AGPS Daemon
+After=udev.service
+
+[Service]
+ExecStartPre=/bin/grep NORMAL /proc/boot_mode
+ExecStart=/usr/bin/mtk_agpsd
+Restart=always
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_fsd.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_fsd.service
new file mode 100644
index 0000000..b4296ba
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_fsd.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=CCCI FSD Daemon
+DefaultDependencies=no
+Requires=init_mount.service
+After=init_mount.service
+
+[Service]
+Type=simple
+StandardOutput=kmsg+console
+ExecStart=/usr/bin/ccci_fsd 0
+Restart=on-failure
+RestartSec=1s
+
+[Install]
+WantedBy=sysinit.target
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_mdinit.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_mdinit.service
new file mode 100644
index 0000000..6829cce
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/ccci_mdinit.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=CCCI MDINIT Daemon
+DefaultDependencies=no
+Wants=ccci_fsd.service
+After=init_mount.service
+
+[Service]
+Type=simple
+RemainAfterExit=yes
+StandardOutput=kmsg+console
+ExecStart=/usr/bin/ccci_mdinit
+Restart=on-failure
+RestartSec=1s
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/emdlogger1.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/emdlogger1.service
new file mode 100644
index 0000000..23d8a76
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/emdlogger1.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=emdlogger1 Daemon
+Requires=init_usb.service ccci_fsd.service ccci_mdinit.service
+After=init_usb.service ccci_fsd.service ccci_mdinit.service
+
+[Service]
+Type=simple
+StandardOutput=kmsg+console
+ExecStart=/usr/bin/emdlogger1
+Restart=always
+RestartSec=1s
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci
new file mode 100644
index 0000000..e3bf761
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci
@@ -0,0 +1,11 @@
+#!/bin/busybox sh
+
+#if [ -z "$(cat /proc/boot_mode | grep META)" ] ; then
+	echo "=== Initial: ATCI Service ===" > /dev/kmsg
+
+	/usr/bin/atci_service &
+
+	echo "=== Initial: ATCI Daemon ===" > /dev/kmsg
+
+	/usr/bin/atcid &
+#fi
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci.service
new file mode 100644
index 0000000..a577d48
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_atci.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=ATCI Service
+Requires=init_mount.service
+After=init_mount.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/init_atci
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mmc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mmc
new file mode 100755
index 0000000..39f1e3b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mmc
@@ -0,0 +1,129 @@
+#!/bin/sh
+
+file_emmc_device="/dev/mmcblk0"
+file_emmc_partition="/dev/mmcblk0p1"
+# file_check_result="/var/log/emmc_check.txt"
+# file_log="/var/log/emmc_init.log"
+# file_mount_point="/media/mmc1"
+file_check_result="/tmp/emmc_check.txt"
+file_log="/tmp/emmc_init.log"
+file_mount_point="/media"
+
+emmc_result_no_emmc="emmc_no_device"
+emmc_result_success="emmc_success"
+emmc_result_no_partition="emmc_no_partition"
+emmc_result_mount_fail="emmc_mount_fail"
+
+find_format=0
+find_mount_point=0
+
+mountCheck() {
+	i=1
+	find_format=0
+	find_mount_point=0
+	echo "$1 read $file_emmc_partition property start" >> $file_log
+	ext4=`df -T $file_emmc_partition`
+	for element in $ext4
+	do
+		echo "line$i:$element" >> $file_log
+		if [ $element == "ext4" ] ; then
+			echo "find format: ext4" >> $file_log
+			find_format=1
+		elif [ $element == "${file_mount_point}" ] ; then
+			echo "find mount point: ${file_mount_point}" >> $file_log
+			find_mount_point=1
+		fi
+		i=`expr $i + 1`
+	done
+	echo "$1 read $file_emmc_partition property end" >> $file_log
+}
+
+time=$(date "+%Y-%m-%d %H:%M:%S")
+echo "emmc power on checkstart($time)" > $file_log
+
+#检查是否有emmc设备,如果没有
+if [ ! -e $file_emmc_device ] ; then
+	echo "no emmc device detected"  >> $file_log
+	echo "$emmc_result_no_emmc" > $file_check_result
+else #如果有
+	echo "found $file_emmc_device" >> $file_log
+
+#检查有没有分区设备,如果没有则进行分区
+	if [ ! -e $file_emmc_partition ] ; then
+			echo "make emmc partition start" >> $file_log
+			echo -e "n\np\n1\n\n\nw\n" | fdisk /dev/mmcblk0
+			echo "make emmc partition end" >> $file_log
+			sleep 1s
+	fi
+
+#再次尝试,如果还是找不到分区设备,则认为emmc有问题
+	if [ ! -e $file_emmc_partition ] ; then
+		echo "can not make partition:$file_emmc_device" >> $file_log
+		echo "$emmc_result_no_partition" > $file_check_result
+	else
+		echo "found $file_emmc_partition" >> $file_log
+
+	#检查是否已经mount,因为可能被系统自动调用fstab而mount上
+		mountCheck kkk
+		echo "kkk find mount_point:$find_mount_point, find_format:$find_format" >> $file_log
+		
+	#如果已经mount上,并且格式为ext4,则成功,否则认为有问题
+		if [ $find_mount_point -eq 1 -a $find_format -eq 1 ] ; then
+			echo "$file_emmc_partition has alreay mount" >> $file_log
+			echo "$emmc_result_success" > $file_check_result
+		else
+		#先卸载挂载点
+			echo "umount $file_mount_point" >> $file_log
+			umount $file_mount_point
+		#先尝试是否可以mount上, 如果已经格式化,只要执行挂载就可以,尽量不格式化emmc
+			echo "find $file_emmc_partition, and mount to $file_mount_point" >> $file_log
+			mount -t ext4 $file_emmc_partition $file_mount_point
+		#检查是否可以挂载上
+			mountCheck bbb
+			echo "bbb find mount_point:$find_mount_point, find_format:$find_format" >> $file_log
+		#如果挂载上,并且是ext4格式,则成功
+			if [ $find_mount_point -eq 1 -a $find_format -eq 1 ] ; then
+				echo "$file_emmc_partition mount success" >> $file_log
+				echo "$emmc_result_success" > $file_check_result
+			#如果挂载上,却不是ext4格式,则格式化为ext4
+			elif [ $find_mount_point -eq 1 -a $find_format -eq 0 ] ; then
+				#先卸载
+				echo "$file_emmc_partition mounted, but it's not ext4 format" >> $file_log
+				echo "umount $file_mount_point" >> $file_log
+				umount $file_mount_point
+				#格式化emmc为ext4格式
+				echo "fomat $file_emmc_partition to ext4" >> $file_log
+				echo "mkfs.ext4 $file_mount_point" >> $file_log
+				mkfs.ext4 $file_emmc_partition >> $file_log 2>&1
+			#如果挂载不上,也格式化为ext4
+			else
+				#格式化emmc为ext4格式
+				echo "$file_emmc_partition can not mount" >> $file_log
+				echo "fomat $file_emmc_partition to ext4" >> $file_log
+				echo "mkfs.ext4 $file_mount_point" >> $file_log
+				mkfs.ext4 $file_emmc_partition >> $file_log 2>&1
+			fi
+			
+			#重新挂载
+			if [ $find_mount_point -eq 0 -o $find_format -eq 0 ] ; then
+				echo "try mount $file_emmc_partition after proper process" >> $file_log
+				mount -t auto $file_emmc_partition $file_mount_point
+				sleep 1s
+				#检查是否可以挂载上
+				mountCheck zzz
+				echo "zzz find mount_point:$find_mount_point, find_format:$find_format" >> $file_log
+
+				if [ $find_mount_point -eq 1 -a $find_format -eq 1 ] ; then
+					echo "$file_emmc_partition mount success" >> $file_log
+					echo "$emmc_result_success" > $file_check_result
+				else
+					echo "$file_emmc_partition mount failed" >> $file_log
+					echo "$emmc_result_mount_fail" > $file_check_result
+				fi
+			fi
+		fi
+	fi
+fi
+
+#exit 0
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount
new file mode 100644
index 0000000..059f8fe
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount
@@ -0,0 +1,120 @@
+#!/bin/busybox sh
+
+echo "=== Initial: MOUNT Start ===" > /dev/kmsg
+
+BLK_PATH=/dev/disk/by-partlabel
+NVDATA_PATH=/mnt/vendor/nvdata
+PROTECT1_PATH=/mnt/vendor/protect_f
+PROTECT2_PATH=/mnt/vendor/protect_s
+
+mnt_folder(){
+	BLK_NAME=$1
+	MNT_FOLDER=$2
+
+	echo "=== Initial: mount $MNT_FOLDER to $BLK_NAME ===" > /dev/kmsg
+	# first mount
+	if [ -f "/dev/disk/by-partlabel/$BLK_NAME" ]; then
+		mntdone=`mount -t ext4 $BLK_PATH/$BLK_NAME $MNT_FOLDER 2>&1`
+		echo "mount: mount by partlabel"
+	elif [ $BLK_NAME == "nvdata" ]; then
+		mntdone=`mount -t ext4 /dev/mmcblk0p6 $MNT_FOLDER 2>&1`
+		echo "mount: mount nvdata /dev/mmcblk0p6"
+	elif [ $BLK_NAME == "protect_a" ]; then
+		mntdone=`mount -t ext4 /dev/mmcblk0p10 $MNT_FOLDER 2>&1`
+		echo "mount: mount protect_a /dev/mmcblk0p10"
+	elif [ $BLK_NAME == "protect_b" ]; then
+		mntdone=`mount -t ext4 /dev/mmcblk0p11 $MNT_FOLDER 2>&1`
+		echo "mount: mount protect_b /dev/mmcblk0p11"
+	elif [ $BLK_NAME == "log" ]; then
+		mntdone=`mount -t ext4 /dev/mmcblk0p38 $MNT_FOLDER 2>&1`
+		echo "mount: mount log /dev/mmcblk0p38"
+	fi
+
+	# check need to format or not
+	if [ ! "$mntdone" == "" ]; then
+		echo "=== Initial: new, need format ===" > /dev/kmsg
+		if [ -f "/dev/disk/by-partlabel/$BLK_NAME" ]; then
+			# format
+			mkfs -t ext4 $BLK_PATH/$BLK_NAME
+			# remount
+			mount -t ext4 $BLK_PATH/$BLK_NAME $MNT_FOLDER
+			echo "mount: format mount by partlabel"
+		elif  [ $BLK_NAME == "nvdata" ]; then
+			mkfs -t ext4 /dev/mmcblk0p6
+			mntdone=`mount -t ext4 /dev/mmcblk0p6 $MNT_FOLDER 2>&1`
+			echo "mount: format mount nvdata /dev/mmcblk0p6"
+		elif [ $BLK_NAME == "protect_a" ]; then
+			mkfs -t ext4 /dev/mmcblk0p10
+			mntdone=`mount -t ext4 /dev/mmcblk0p10 $MNT_FOLDER 2>&1`
+			echo "mount: format mount protect_a /dev/mmcblk0p10"
+		elif [ $BLK_NAME == "protect_b" ]; then
+			mkfs -t ext4 /dev/mmcblk0p11
+			mntdone=`mount -t ext4 /dev/mmcblk0p11 $MNT_FOLDER 2>&1`
+			echo "mount: format mount protect_b /dev/mmcblk0p11"
+		elif [ $BLK_NAME == "log" ]; then
+			mkfs -t ext4 /dev/mmcblk0p38
+			mntdone=`mount -t ext4 /dev/mmcblk0p38 $MNT_FOLDER 2>&1`
+			echo "mount: format mount log /dev/mmcblk0p38"
+		fi
+	fi
+}
+mnt_bind_folder(){
+	DST_FOLDER=$1
+	SRC_FOLDER=$2
+
+	#echo "=== Initial: mount bind $DST_FOLDER to $SRC_FOLDER ===" > /dev/kmsg
+	mntdone=`mount -o bind $DST_FOLDER $SRC_FOLDER 2>&1`
+
+	if [ ! "$mntdone" == "" ]; then
+		#echo "=== Initial: new, need create state folder and copy ===" > /dev/kmsg
+		mkdir -p $DST_FOLDER
+
+		if test "$(ls -A "$SRC_FOLDER")"; then
+			cp -a $SRC_FOLDER/* $DST_FOLDER
+		else
+			echo The directory $SRC_FOLDER is empty '(or non-existent)'
+		fi
+
+		mount -o bind $DST_FOLDER $SRC_FOLDER
+	fi
+}
+mnt_bind_file(){
+	DST_FILE=$1
+	SRC_FILE=$2
+
+	#echo "=== Initial: mount bind $DST_FILE to $SRC_FILE ===" > /dev/kmsg
+	mntdone=`mount -o bind $DST_FILE $SRC_FILE 2>&1`
+
+	if [ ! "$mntdone" == "" ]; then
+		#echo "=== Initial: new, need copy ===" > /dev/kmsg
+		cp -a $SRC_FILE $DST_FILE
+		sync
+		mount -o bind $DST_FOLDER $SRC_FOLDER
+	fi
+}
+
+# mount nvram and link it
+mnt_folder nvdata $NVDATA_PATH
+mkdir -p /data/nvram
+[ ! -f  "/mnt/vendor/nvram/raw" ] && /bin/dd if=/dev/zero of=/mnt/vendor/nvram/raw bs=1024 count=16384
+mnt_folder protect_a $PROTECT1_PATH
+mnt_folder protect_b $PROTECT2_PATH
+
+mnt_folder log /log
+mnt_bind_folder /log    /var/log
+
+# link /var/log --> /data/local for MET
+#if [ ! -e /data/local ] ; then
+#	ln -sf /var/log /data/local
+#fi
+
+mkdir -p /run/media
+# link /var/log --> /run/media/mmcblk1p1 for AP/MD/Networking logging storage
+ln -sf /var/log /run/media/mmcblk1p1
+
+if [ ! -e /mnt/sdcard ] ; then
+	ln -sf /var/log /mnt/sdcard
+fi
+
+
+echo "=== Initial: MOUNT Configuration End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service
new file mode 100644
index 0000000..dc0e1fe
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Start MOUNT settings
+DefaultDependencies=no
+After=local-fs.target
+Before=sysinit.target systemd-tmpfiles-setup.service busybox-syslog.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/init_mount
+
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand
new file mode 100755
index 0000000..7c6aebc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand
@@ -0,0 +1,244 @@
+#!/bin/busybox sh
+
+echo "=== Initial: MOUNT Start ===" > /dev/kmsg
+
+BLK_PATH=/dev/disk/by-partlabel
+NVDATA_PATH=/mnt/vendor/nvdata
+PROTECT1_PATH=/mnt/vendor/protect_f
+PROTECT2_PATH=/mnt/vendor/protect_s
+
+#you.chen@2022-07-11 add for load oemapp begin
+ROOT_MTD=`cat /proc/cmdline | tr " " "\n" | grep -v "," | grep -e "^ubi.mtd=" | awk -F "=" '{print $2}'`
+if [ ! "$ROOT_MTD" == "" ]; then
+	AVB_SLOT_FLAG=`grep "mtd$ROOT_MTD" /proc/mtd | sed 's/.*\("system_.*"\)/\1/g' | awk -F '"' '{print $2}' | awk -F "system_" '{print $2}'`
+fi
+#you.chen@2022-07-11 add for load oemapp end
+
+mnt_folder(){
+	BLK_NAME=$1
+	MNT_FOLDER=$2
+
+	echo "=== Initial: new, need format ===" > /dev/kmsg
+	if [ -f "/dev/disk/by-partlabel/$BLK_NAME" ]; then
+		mntdone=`mount -t ubifs $BLK_PATH/$BLK_NAME $MNT_FOLDER 2>&1`
+		echo "mount: mount by partlabel"
+	elif [ $BLK_NAME == "nvdata" ]; then
+		mntdone=`mount -t ubifs /dev/ubi2_0 $MNT_FOLDER 2>&1`
+		echo "mount: mount nvdata"
+	elif [ $BLK_NAME == "protect_a" ]; then
+		mntdone=`mount -t ubifs /dev/ubi3_0 $MNT_FOLDER 2>&1`
+		echo "mount: mount protect_a"
+	elif [ $BLK_NAME == "protect_b" ]; then
+		mntdone=`mount -t ubifs /dev/ubi4_0 $MNT_FOLDER 2>&1`
+		echo "mount: mount protect_b"
+	#you.chen@2022-07-11 add for load oemapp begin
+	elif [ $BLK_NAME == "log" ]; then
+		#mntdone=`mount -t ubifs /dev/ubi6_0 $MNT_FOLDER 2>&1`
+		echo "mount: mount log"
+	elif [ $BLK_NAME == "oemdata" ]; then
+		ubi_num=`ubiattach /dev/ubi_ctrl -m 28 -d 10 -b 1`
+		mntdone=`mount -t ubifs /dev/ubi10_0 $MNT_FOLDER 2>&1`
+		echo "mount: mount oemdata"
+	elif [ $BLK_NAME == "oemapp_a" ]; then
+		mntdone=`mount -t squashfs /dev/mtdblock43 $MNT_FOLDER 2>&1`
+		echo "mount: mount oemapp"
+	elif [ $BLK_NAME == "oemapp_b" ]; then
+		mntdone=`mount -t squashfs /dev/mtdblock44 $MNT_FOLDER 2>&1`
+		echo "mount: mount oemapp"
+	elif [ $BLK_NAME == "oemapp2_a" ]; then
+		mntdone=`mount -t squashfs /dev/mtdblock41 $MNT_FOLDER 2>&1`
+		echo "mount: mount oemapp2"
+	elif [ $BLK_NAME == "oemapp2_b" ]; then
+		mntdone=`mount -t squashfs /dev/mtdblock42 $MNT_FOLDER 2>&1`
+		echo "mount: mount oemapp2"
+	#you.chen@2022-07-11 add for load oemapp end
+	fi
+
+	if [ ! "$mntdone" == "" ]; then
+		if  [ $BLK_NAME == "nvdata" ]; then
+			ubidetach -m 5
+			ubiformat /dev/mtd5
+			ubiattach /dev/ubi_ctrl -m 5 -b 1
+			ubimkvol /dev/ubi2 -m -N nvdata
+			mount -t ubifs /dev/ubi2_0 $MNT_FOLDER
+			echo "mount: format mount nvdata"
+		elif [ $BLK_NAME == "protect_a" ]; then
+			ubidetach -m 9
+			ubiformat /dev/mtd9
+			ubiattach /dev/ubi_ctrl -m 9 -b 1
+			ubimkvol /dev/ubi3 -m -N protect_a
+			mount -t ubifs /dev/ubi3_0 $MNT_FOLDER
+			echo "mount: format mount protect_a"
+		elif [ $BLK_NAME == "protect_b" ]; then
+			ubidetach -m 10
+			ubiformat /dev/mtd10
+			ubiattach /dev/ubi_ctrl -m 10 -b 1
+			ubimkvol /dev/ubi4 -m -N protect_b
+			mount -t ubifs /dev/ubi4_0 $MNT_FOLDER
+			echo "mount: format mount protect_b"
+		#you.chen@2022-07-11 add for load oemapp begin
+		elif [ $BLK_NAME == "oemdata" ]; then
+			ubidetach -m 28
+			echo -e "y\n" | ubiformat /dev/mtd28
+			ubiattach /dev/ubi_ctrl -m 28 -d 10 -b 1
+			ubimkvol /dev/ubi10 -m -N oemdata
+			mount -t ubifs /dev/ubi10_0 $MNT_FOLDER 2>&1
+			echo "mount: format mount oemdata"
+		#you.chen@2022-07-11 add for load oemapp end
+		fi
+	fi
+}
+
+mnt_bind_folder(){
+	DST_FOLDER=$1
+	SRC_FOLDER=$2
+	#echo "=== Initial: mount bind $DST_FOLDER to $SRC_FOLDER ===" > /dev/kmsg
+	mntdone=`mount -o bind $DST_FOLDER $SRC_FOLDER 2>&1`
+	if [ ! "$mntdone" == "" ]; then
+		#echo "=== Initial: new, need create state folder and copy ===" > /dev/kmsg
+		mkdir -p $DST_FOLDER
+
+		if test "$(ls -A "$SRC_FOLDER")"; then
+			cp -a $SRC_FOLDER/* $DST_FOLDER
+		else
+			echo The directory $SRC_FOLDER is empty '(or non-existent)'
+		fi
+
+		mount -o bind $DST_FOLDER $SRC_FOLDER
+	fi
+}
+
+mnt_bind_file(){
+	DST_FILE=$1
+	SRC_FILE=$2
+
+	#echo "=== Initial: mount bind $DST_FILE to $SRC_FILE ===" > /dev/kmsg
+	mntdone=`mount -o bind $DST_FILE $SRC_FILE 2>&1`
+	if [ ! "$mntdone" == "" ]; then
+		#echo "=== Initial: new, need copy ===" > /dev/kmsg
+		cp -a $SRC_FILE $DST_FILE
+		sync
+		mount -o bind $DST_FOLDER $SRC_FOLDER
+	fi
+}
+
+init_log() {
+	#you.chen@2022-07-11 add gsw's emmc init scrips begin
+	if [ -f /usr/share/init/init_mmc ]; then
+		/bin/sh /usr/share/init/init_mmc
+	fi
+	#you.chen@2022-07-11 add gsw's emmc init scrips end
+    #liu.tao@2022-08-04 modify log nand to emmc
+	if [ -e /dev/mmcblk0p1 ]; then
+       	#mkfs -t ext4 /dev/mmcblk0
+       	if [ -e /media ]; then
+        	#mount -t ext4 /dev/mmcblk0p1 /media
+        	mount --bind /media /var/log
+        else
+            #Since you do not have permission to create the file, mount it directly
+            mount -t ext4 /dev/mmcblk0p1 /var/log    
+        fi
+	else
+	    mnt_folder log /log
+		#allink=`ls -al /var | grep 'log ->' 2>&1`
+		if [ ! "$allink" == "" ]; then
+			#echo "=== /var/log is already link, unlink it ===" > /dev/kmsg
+			unlink /var/log
+			mkdir /var/log
+		fi
+		mnt_bind_folder /log /var/log
+	fi
+
+	# link /var/log --> /data/local for MET
+	#if [ ! -e /data/local ] ; then
+	#	ln -sf /var/log /data/local
+	#fi
+}
+init_log &
+
+init_nvram() {
+	mkdir -p /data/vendor
+
+	mnt_folder nvdata $NVDATA_PATH
+	mkdir -p /data/nvram
+
+	[ ! -f  "/mnt/vendor/nvram/raw" ] && /bin/dd if=/dev/zero of=/mnt/vendor/nvram/raw bs=1024 count=16384
+
+	mnt_folder protect_a $PROTECT1_PATH
+	mnt_folder protect_b $PROTECT2_PATH
+}
+init_nvram &
+
+init_log2() {
+	# link /var/log --> /run/media/mmcblk1p1 for legacy AP/MD/Network logging storage
+	mkdir -p /run/media
+	if [ ! -e /run/media/mmcblk1p1 ] ; then
+		ln -sf /var/log /run/media/mmcblk1p1
+	fi
+	# Link /var/log --> /mnt/sdcard for MD logging storage
+	if [ ! -e /mnt/sdcard ] ; then
+		#rm -rf /mnt/sdcard
+		ln -sf /var/log /mnt/sdcard
+	fi
+}
+#init_log2 &
+
+#you.chen@2022-07-11 add for load oemapp begin
+init_oemapp() {
+
+	mnt_folder oemdata /oemdata
+
+	if [ "$AVB_SLOT_FLAG" == "a" ]; then
+		mnt_folder oemapp_a /oemapp
+		mnt_folder oemapp2_a /oemapp2
+	elif [ "$AVB_SLOT_FLAG" == "b" ]; then
+		mnt_folder oemapp_b /oemapp
+		mnt_folder oemapp2_b /oemapp2
+	else
+		echo "unkown ab slot, not mount oemapp"
+	fi
+}
+
+init_oemapp &
+#you.chen@2022-07-11 add for load oemapp end
+
+init_partlabel() {
+	mkdir -p /dev/disk/by-partlabel
+	if [ -d "/dev/disk/by-partlabel" ]; then
+		cd /dev/disk/by-partlabel
+		ln -s ../../mtd6 hsm_bl
+		ln -s ../../mtd7 hsm_os
+		ln -s ../../mtd8 boot_para
+		ln -s ../../mtd9 protect_a
+		ln -s ../../mtd10 protect_b
+		ln -s ../../mtd12 boot_a
+		ln -s ../../mtd13 boot_b
+		ln -s ../../mtd14 system_a
+		ln -s ../../mtd15 system_b
+		ln -s ../../mtd16 md1img_a
+		ln -s ../../mtd17 md1img_b
+		ln -s ../../mtd18 md1dsp_a
+		ln -s ../../mtd19 md1dsp_b
+		ln -s ../../mtd20 mcf1_a
+		ln -s ../../mtd21 mcf1_b
+		ln -s ../../mtd22 mcf2_a
+		ln -s ../../mtd23 mcf2_b
+		ln -s ../../mtd24 misc
+		ln -s ../../mtd25 tee_a
+		ln -s ../../mtd26 tee_b
+		ln -s ../../mtd36 vbmeta_a
+		ln -s ../../mtd37 vbmeta_b
+		ln -s ../../mtd39 expdb
+        	ln -s ../../mtd41 oemapp2_a
+        	ln -s ../../mtd42 oemapp2_b
+        	ln -s ../../mtd43 oemapp_a
+        	ln -s ../../mtd44 oemapp_b
+	fi
+
+	mount -t tmpfs /dev/disk/by-partlabel/misc /misc
+}
+init_partlabel &
+
+wait
+
+echo "=== Initial: MOUNT Configuration End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network
new file mode 100644
index 0000000..4b88390
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network
@@ -0,0 +1,85 @@
+#!/bin/busybox sh
+
+echo "=== Initial: NETWORK Configuration Start ===" > /dev/kmsg
+
+#
+# IPv6 initial default forwarding state, it must be before any NIC modules instered.
+# NM (Network Manager) has to take over once IPv6 enabling is
+# configurable for system or for each NIC in the future.
+#
+echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+echo 0 > /proc/sys/net/ipv6/conf/default/forwarding
+
+# WMID and SBP setting
+#eval `sncfg mget WM_ID SBP_ID`
+#echo -ne \\x$(printf '%x' $WM_ID) > /data/wmid
+#echo -ne \\x$(printf '%x' $SBP_ID) > /data/sbp
+
+
+# Change local routing table priority for IPPT
+ip rule del priority 0 lookup local
+ip rule add priority 3 lookup local
+ip -6 rule del priority 0 lookup local
+ip -6 rule add priority 3 lookup local
+
+
+if [ -n "$(cat /proc/boot_mode | grep NORMAL)" ] ; then # META mode: META_BOOT_SKIP_PRELOADER
+
+        LanIf=br0
+        /sbin/sncfg set LanIf "$LanIf" > /dev/null 2>&1
+
+        ifconfig lo 127.0.0.1 up
+
+        eval `sncfg mget DEV_MAC USBHOST_MAC LAN_IP LAN_MASK LAN_IP6 LAN_PREFIX6`
+
+        # Init network sncfg key
+        WanStatus=down
+        WanIf=lte0
+        /sbin/sncfg set WanStatus "$WanStatus" > /dev/null 2>&1
+        /sbin/sncfg set WanIf "$WanIf" > /dev/null 2>&1
+        /etc/init.d/sysinit6 start
+
+	eval `sncfg mget MODEM_CONTROL_INF`
+	if [ "$MODEM_CONTROL_INF" == "RIL" ] ; then
+		echo "MODEM_CONTROL_INF=RIL"
+	elif [ "$MODEM_CONTROL_INF" == "ATCMD" ] ; then
+		echo "MODEM_CONTROL_INF=ATCMD"
+		/etc/init.d/bach_nnmd start
+	else
+		echo "MODEM_CONTROL_INF=$MODEM_CONTROL_INF"
+	fi
+
+        if [ -n "$DEV_MAC" ] && [ "$DEV_MAC" != "00:00:00:00:00:00" ] ; then
+                LanMac=$DEV_MAC
+        else
+                LanMac="00:0C:E7:0B:01:02"
+        fi
+        if [ -n "$USBHOST_MAC" ] && [ "$USBHOST_MAC" != "00:00:00:00:00:00" ] ; then
+                UsbHostMac=$USBHOST_MAC
+        else
+                UsbHostMac=$(echo "$LanMac" | sed -n 's/00:/02:/p')
+        fi
+
+
+        echo "$LanMac" /sys/module/g_android/parameters/dev_addr
+        echo "$UsbHostMac" /sys/module/g_android/parameters/host_addr
+
+        /sbin/sncfg set LanIp "$LAN_IP" > /dev/null 2>&1
+        /sbin/sncfg set LanMac "$LanMac" > /dev/null 2>&1
+        /sbin/sncfg set UsbHostMac "$UsbHostMac" > /dev/null 2>&1
+
+        #brctl addbr $LanIf
+        #brctl setfd $LanIf 0
+        #ifconfig $LanIf hw ether $LanMac
+        #ifconfig dummy0 hw ether $LanMac
+        #brctl addif $LanIf dummy0
+
+        #ip -6 addr add $LAN_IP6 dev $LanIf
+        #ip -6 addr add fe80::11:22:33:44/64 dev $LanIf
+        #ip -6 route add $LAN_PREFIX6 dev $LanIf
+        #LLAddr=$(ifconfig $LanIf | grep fe80 | awk -F "::"  '{ print $2 }' | awk -F "/"  '{ print $1 }')
+        /sbin/sncfg set LanLinkAddr "$LLAddr" > /dev/null 2>&1
+        #ifconfig $LanIf $LAN_IP netmask $LAN_MASK
+fi
+
+echo "=== Initial: NETWORK Configuration End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network.service
new file mode 100644
index 0000000..fd5175a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_network.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Network Configuration
+Requires=bach_sncfg.service
+After=bach_sncfg.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/init_network
+
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_smp.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_smp.service
new file mode 100644
index 0000000..08f91d8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_smp.service
@@ -0,0 +1,23 @@
+/*@file init_smp.service
+* @brief Refer to MTK to give a reply to add the file to solve the slow loading of ETS port boot.
+* @author dongyu
+* @date 2022-7-15
+* @version V1.0
+* @copyright MobileTek 
+*/
+
+#dongyu@2022.7.15 abb for Slow loading of ETS port start
+[Unit]
+Description=SMP Service
+Requires=init_mount.service
+After=init_mount.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/smp.sh
+
+[Install]
+WantedBy=multi-user.target
+#dongyu@2022.7.15 abb for Slow loading of ETS port start
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_speech b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_speech
new file mode 100644
index 0000000..21534de
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_speech
@@ -0,0 +1,5 @@
+#!/bin/busybox sh

+

+mkdir -p /tmp/ap_speech/

+touch /tmp/ap_speech/speech.config

+/bin/speech_daemon &
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb
new file mode 100644
index 0000000..8c2463e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb
@@ -0,0 +1,99 @@
+#!/bin/busybox sh
+
+if [ "$1" == "pre" ]; then
+    echo "=== Initial: USB Configuration Start ===" > /dev/kmsg
+
+    if [ -e "/dev/usb-ffs" ] ; then
+        echo "=== Bypass Pre Configuration ===" > /dev/kmsg
+    else # first boot
+        mkdir -p /dev/usb-ffs
+        mkdir -p /dev/usb-ffs/adb
+        mount none /sys/kernel/config -t configfs
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/ffs.adb
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/rndis.gs4
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/ncm.f0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/ecm.f0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/eem.f0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/acm.gs0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/acm.gs1
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/acm.gs2
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/acm.gs3
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/via_modem.gs0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/via_ets.gs0
+        mkdir -p /sys/kernel/config/usb_gadget/g1/functions/via_atc.gs0
+        mount adb /dev/usb-ffs/adb -t functionfs -o uid=2000,gid=2000
+    fi
+
+elif [ "$1" == "post" ];then
+
+    echo "=== Initial: USB Configuration post Start ===" > /dev/kmsg
+
+    while [[ ! "$( findmnt -M /etc/config)" ]]; do
+        echo "=== Initial: USB Configuration Wait config dir mounted ===" > /dev/kmsg
+        sleep 2
+    done
+
+    echo 0x0e8d > /sys/kernel/config/usb_gadget/g1/idVendor
+    echo 0x0223 > /sys/kernel/config/usb_gadget/g1/bcdDevice
+    echo 0x0200 > /sys/kernel/config/usb_gadget/g1/bcdUSB
+    mkdir -p /sys/kernel/config/usb_gadget/g1/strings/0x409
+
+    if [ "$(cat /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber)" == "" ]; then
+        if [[ "$(cat /etc/hostname)" == "auto2735evb-ivt-vp1" || "$(cat /etc/hostname)" == "auto2735evb-ivt-vp2" ]]; then
+            echo "MT-96533493F01B518C" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
+        else
+            echo 0123456789ABCDEF > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
+        fi
+    else
+        echo "=== usb serial number exist, keep it ===" > /dev/kmsg
+    fi
+
+    echo MediaTek > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
+    echo auto2735-ivt > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
+
+    mkdir -p /sys/kernel/config/usb_gadget/g1/configs/b.1
+    mkdir -p /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409
+    echo 500 > /sys/kernel/config/usb_gadget/g1/configs/b.1/MaxPower
+
+    if [ -n "$(cat /proc/boot_mode | grep META)" ] ; then # META mode: META_BOOT_SKIP_PRELOADER
+
+        # ADB + CDC-ACM*2 (META mode)
+        #setprop sys.usb.config adb,meta,elt
+        #################### START ####################
+        sleep 1
+        echo meta_elt_adb > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+        echo 0x2040 > /sys/kernel/config/usb_gadget/g1/idProduct
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs3 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+        echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+        #################### END ####################
+        sleep 1
+        echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+
+    else # Normal mode
+
+        # ADB + CDC-ACM*3 (normal mode)
+        #setprop sys.usb.config adb,acm
+        #################### START ####################
+        sleep 1
+        echo gs1gs3_dual_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+        echo 0x202f > /sys/kernel/config/usb_gadget/g1/idProduct
+        echo 1 > /sys/devices/platform/soc/mt_usb/saving
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+        ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs3 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+        #################### END ####################
+        sleep 1
+        echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+    fi
+
+    if [ -e "/proc/bootprof" ] ; then
+        echo usb_active > /proc/bootprof
+    fi
+
+    echo "=== Initial: USB Configuration End ===" > /dev/kmsg
+fi
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb.service
new file mode 100644
index 0000000..f9dad60
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_usb.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=UBS Init
+DefaultDependencies=no
+Requires=init_mount.service
+After=init_mount.service
+
+[Service]
+Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/data/usr/sbin:/data/usr/bin
+Type=simple
+Restart=always
+ExecStartPre=/bin/sh /usr/share/init/init_usb pre
+ExecStart=/usr/bin/adbd
+ExecStartPost=/bin/sh /usr/share/init/init_usb post
+StandardOutput=null
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst
new file mode 100644
index 0000000..bfcc422
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst
@@ -0,0 +1,21 @@
+#!/bin/busybox sh
+
+END="1"
+if [ -n "$(cat /proc/boot_mode | grep META)" ] ; then # META mode: META_BOOT_SKIP_PRELOADER
+	echo "@@@ META Mode start" > /dev/kmsg
+	while [ $END == "1" ]
+	do
+		if [ -n "$(cat /sys/kernel/ccci/boot | grep md1:4)" ]
+		then
+			echo "Wait for MD ready go"
+			/usr/bin/meta_tst &
+			END="0"
+		else
+			sleep 3
+			echo "Wait for MD ready"
+		fi
+	done
+	echo "@@@ META Mode end" > /dev/kmsg
+fi
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst.service
new file mode 100644
index 0000000..ec91601
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=META TST Script
+Requires=init_usb.service ccci_fsd.service ccci_mdinit.service
+After=init_usb.service ccci_fsd.service ccci_mdinit.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/meta_tst
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst_tmp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst_tmp
new file mode 100644
index 0000000..85bfa49
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/meta_tst_tmp
@@ -0,0 +1,11 @@
+#!/bin/busybox sh
+
+echo "@@@ META Mode start" > /dev/kmsg
+
+END=1
+if [ -n "$(cat /proc/boot_mode | grep META)" ] ; then # META mode: META_BOOT_SKIP_PRELOADER
+	sleep 20
+	/usr/bin/meta_tst &
+fi
+
+echo "@@@ META Mode end" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/nvram_daemon.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/nvram_daemon.service
new file mode 100644
index 0000000..d4211e8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/nvram_daemon.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=NVRAM Daemon
+Requires=init_mount.service
+After=init_mount.service
+
+[Service]
+Type=oneshot
+StandardOutput=kmsg+console
+ExecStart=/usr/bin/nvram_daemon
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.rules b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.rules
new file mode 100644
index 0000000..29dc9e4
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.rules
@@ -0,0 +1,3 @@
+#dongyu@2022.7.15 delete for Slow loading of ETS port start
+#SUBSYSTEM=="net", ACTION=="add" RUN+="/usr/share/init/smp.sh"
+#dongyu@2022.7.15 delete for Slow loading of ETS port end
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.sh b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.sh
new file mode 100644
index 0000000..fc7da74
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/smp.sh
@@ -0,0 +1,461 @@
+#!/bin/sh
+
+OPTIMIZED_FOR="$1"
+CPU_LIST=`cat /proc/interrupts | sed -n '1p'`
+NUM_OF_CPU=0; for i in $CPU_LIST; do NUM_OF_CPU=`expr $NUM_OF_CPU + 1`; done;
+DEFAULT_RPS=0
+
+# $1: CPU#
+# $2: irq list for added.
+CPU_AFFINITY_ADD()
+{
+	eval oval=\$CPU${1}_AFFINITY
+	eval CPU${1}_AFFINITY=\"\$CPU${1}_AFFINITY $2\"
+}
+
+# $1: CPU#
+# $2: Interface name for added.
+CPU_RPS_ADD()
+{
+	eval oval=\$CPU${1}_RPS
+	eval CPU${1}_RPS=\"\$CPU${1}_RPS $2\"
+	dbg2 "CPU${1}_RPS=\"\$CPU${1}_RPS $2\""
+}
+
+MT6890_CPE()
+{
+	num_of_wifi=$1
+	storage=$2
+	DEFAULT_RPS=0
+
+	#Physical IRQ# setting
+	eth_tx=426
+	eth_rx=434
+	eth_e0rx0=422
+	eth_e1rx0=424
+	CCIF_AP_DATA=226
+	MMC=131
+	wifi1_irq=438
+	wifi2_irq=439
+	MBOX_ISR=454
+	usb_11201000=128
+	DPMAIF_AP=241
+
+
+	# Please update the CPU binding in each cases.
+	# CPU#_AFFINITY="add binding irq number here"
+	# CPU#_RPS="add binding interface name here"
+	dbg "[MT6890_CPE]"
+	if [ "$num_of_wifi" = "0" ]; then
+		CPU0_AFFINITY="$MMC $usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx"
+		CPU2_AFFINITY="$eth_tx $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$ethif1 $ethif2"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2"
+		CPU3_RPS="$ethif1 $ethif2"
+	elif [ "$num_of_wifi" = "1" ]; then
+		CPU0_AFFINITY="$MMC $usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx"
+		CPU2_AFFINITY="$wifi1_irq $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $eth_tx $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$ethif1 $ethif2"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $wifi1"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2"
+		CPU3_RPS="$wifi1"
+	elif [ "$num_of_wifi" = "2" ]; then
+		CPU0_AFFINITY="$MMC $usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx $wifi1_irq"
+		CPU2_AFFINITY="$wifi2_irq $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $eth_tx $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$ethif1 $ethif2 				$wifi2"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2 $wifi1"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2 				$wifi2"
+		CPU3_RPS="$ethif1 $ethif2 $wifi1"
+	elif [ "$num_of_wifi" = "3" ]; then
+		CPU0_AFFINITY="$MMC $usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx"
+		CPU2_AFFINITY="$wifi1_irq $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $eth_tx $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$ethif1 $ethif2 $wifi1               $wifi1_apcli0"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $wifi1 $wifi2 $wifi3 $wifi1_apcli0 $wifi2_apcli0 $wifi3_apcli0"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $ethif1 $ethif2        $wifi2                      $wifi2_apcli0"
+		CPU3_RPS="$ethif1 $ethif2               $wifi3                             $wifi3_apcli0"
+	else
+		dbg "MT6890_CPE with $NUM_OF_WIFI Wi-Fi bands is not support"
+	fi
+}
+
+
+MT6890_MIFI()
+{
+	num_of_wifi=$1
+	storage=$2
+	DEFAULT_RPS=0
+
+	#Physical IRQ# setting
+	eth_tx=426
+	eth_rx=434
+	eth_e0rx0=422
+	eth_e1rx0=424
+	CCIF_AP_DATA=226
+	MMC=131
+	wifi1_irq=438
+	MBOX_ISR=454
+	usb_11201000=128
+        DPMAIF_AP=241
+
+
+	# Please update the CPU binding in each cases.
+	# CPU#_AFFINITY="add binding irq number here"
+	# CPU#_RPS="add binding interface name here"
+	dbg "[MT6890_MIFI]"
+	if [ "$num_of_wifi" = "0" ]; then
+		CPU0_AFFINITY="$usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx"
+		CPU2_AFFINITY="$MMC $eth_tx $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $MBOX_ISR $eth_e1rx0"
+
+	elif [ "$num_of_wifi" = "1" ]; then
+		CPU0_AFFINITY="$usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$MMC $eth_rx"
+		CPU2_AFFINITY="$wifi1_irq $eth_e0rx0"
+		CPU3_AFFINITY="$CCIF_AP_DATA $MBOX_ISR $eth_tx $eth_e1rx0"
+
+		CPU0_RPS="$wifi1"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $wifi1"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $wifi1"
+		CPU3_RPS="$wifi1"
+	elif [ "$num_of_wifi" = "2" ]; then
+		CPU0_AFFINITY="$usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx $MMC"
+		CPU2_AFFINITY="$wifi1_irq $eth_e0rx0"
+		CPU3_AFFINITY="$eth_tx $CCIF_AP_DATA $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$wifi1"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $wifi2"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $wifi1"
+		CPU3_RPS="$wifi2"
+	elif [ "$num_of_wifi" = "3" ]; then
+		CPU0_AFFINITY="$usb_11201000 $DPMAIF_AP"
+		CPU1_AFFINITY="$eth_rx $MMC"
+		CPU2_AFFINITY="$wifi1_irq $eth_e0rx0"
+		CPU3_AFFINITY="$eth_tx $CCIF_AP_DATA $MBOX_ISR $eth_e1rx0"
+
+		CPU0_RPS="$wifi1               $wifi1_apcli0"
+		CPU1_RPS="ccmni0 ccmni1 rndis0 $wifi1 $wifi2 $wifi3 $wifi1_apcli0 $wifi2_apcli0 $wifi3_apcli0"
+		CPU2_RPS="ccmni0 ccmni1 rndis0 $wifi2                      $wifi2_apcli0"
+		CPU3_RPS="$wifi3                             $wifi3_apcli0"
+	else
+		dbg "MT6890_MIFI with $NUM_OF_WIFI Wi-Fi bands is not support"
+	fi
+}
+
+
+# $1: The prefix of vifs
+# $2: The number of vifs
+gen_vifs_to_rps_if()
+{
+	if [ $# -lt 2 ]; then
+		dbg "gen_vifs_to_rps_if requires 2 parameters"
+		return
+	fi
+
+	vif=$1
+	total=$2
+	#dbg "gen_vifs_to_rps_if $vif $total"
+	i=0
+	while [ "$i" -lt "$total" ]; do
+		eval prefix=\$$vif
+		eval $vif$i=$prefix$i
+
+		RPS_IF_LIST="$RPS_IF_LIST $prefix$i"
+
+		dbg2 "\$$vif$i=$prefix$i"
+
+		i=`expr $i + 1`
+	done
+}
+
+get_eth_if_name()
+{
+	ethif1="eth0"
+	ethif2="eth1"
+	dbg2 "# Ethernet interface list"
+	dbg2 "\$ethif1=$ethif1\n\$ethif2=$ethif2"
+	RPS_IF_LIST="$RPS_IF_LIST $ethif1 $ethif2"
+}
+
+# Try to get Wi-Fi interface name from l1profile
+get_wifi_if_name()
+{
+	l1dat_exist=`l1dat 2>/dev/null`
+	if [ -z "$l1dat_exist" ]; then
+		dbg "Layer 1 profile does not exist."
+		dbg "Please check l1dat "
+
+		wifi1="ra0"
+		wifi1_prefix="ra"
+		wifi1_apcli="apcli"
+		wifi1_wds="wds"
+		wifi1_mesh="mesh"
+		wifi2="rai0"
+		wifi2_prefix="rai"
+		wifi2_apcli="apclii"
+		wifi2_wds="wdsi"
+		wifi2_mesh="meshi"
+		wifi3="rae0"
+		wifi3_prefix="rae"
+		wifi3_apcli="apclie"
+		wifi3_wds="wdse"
+		wifi3_mesh="meshe"
+
+	else
+		#wifi_if1s=`l1dat idx2if 1`
+		#wifi_if2s=`l1dat idx2if 2`
+		#wifi_if3s=`l1dat idx2if 3`
+		wifi_if1s=`l1dat zone2if dev1`
+		wifi_if2s=`l1dat zone2if dev2`
+		wifi_if3s=`l1dat zone2if dev3`
+
+		wifi1=`echo $wifi_if1s | awk '{print $1}'`
+		wifi1_prefix=`echo $wifi_if1s | awk '{print $2}'`
+		wifi1_apcli=`echo $wifi_if1s | awk '{print $3}'`
+		wifi1_wds=`echo $wifi_if1s | awk '{print $4}'`
+		wifi1_mesh=`echo $wifi_if1s | awk '{print $5}'`
+
+		wifi2=`echo $wifi_if2s | awk '{print $1}'`
+		wifi2_prefix=`echo $wifi_if2s | awk '{print $2}'`
+		wifi2_apcli=`echo $wifi_if2s | awk '{print $3}'`
+		wifi2_wds=`echo $wifi_if2s | awk '{print $4}'`
+		wifi2_mesh=`echo $wifi_if2s | awk '{print $5}'`
+
+		wifi3=`echo $wifi_if3s | awk '{print $1}'`
+		wifi3_prefix=`echo $wifi_if3s | awk '{print $2}'`
+		wifi3_apcli=`echo $wifi_if3s | awk '{print $3}'`
+		wifi3_wds=`echo $wifi_if3s | awk '{print $4}'`
+		wifi3_mesh=`echo $wifi_if3s | awk '{print $5}'`
+
+		# idx = 0 : not a DBDC interface
+		# idx = 1 : main(physical) interface of 1st Wi-Fi band
+		# idx > 1 : virtual interface of other Wi-Fi band
+		# idx = "": Wi-Fi interface does not exist in l1profile
+		wifi1_dbdc_idx=`l1dat if2dbdcidx $wifi1`
+		wifi2_dbdc_idx=`l1dat if2dbdcidx $wifi2`
+		wifi3_dbdc_idx=`l1dat if2dbdcidx $wifi3`
+	fi
+
+	dbg2 "# Wi-Fi interface list"
+	dbg2 "\$wifi1=$wifi1"
+	dbg2 "\$wifi2=$wifi2"
+	dbg2 "\$wifi3=$wifi3"
+
+	RPS_IF_LIST="$RPS_IF_LIST $wifi1 $wifi2 $wifi3 ccmni0 ccmni1 rndis0"
+
+	gen_vifs_to_rps_if "wifi1_apcli" 1
+	gen_vifs_to_rps_if "wifi2_apcli" 1
+	gen_vifs_to_rps_if "wifi3_apcli" 1
+	gen_vifs_to_rps_if "wifi1_mesh" 1
+	gen_vifs_to_rps_if "wifi2_mesh" 1
+	gen_vifs_to_rps_if "wifi3_mesh" 1
+	gen_vifs_to_rps_if "wifi1_wds" 4
+	gen_vifs_to_rps_if "wifi2_wds" 4
+	gen_vifs_to_rps_if "wifi3_wds" 4
+
+	scan_wifi_num
+}
+
+scan_wifi_num()
+{
+	NUM_OF_WIFI=0
+	if [ -n $wifi1 -a -d "/sys/class/net/$wifi1" ]; then
+		NUM_OF_WIFI=`expr $NUM_OF_WIFI + 1`
+	fi
+
+	if [ -n $wifi2 -a -d "/sys/class/net/$wifi2" ];then
+		NUM_OF_WIFI=`expr $NUM_OF_WIFI + 1`
+	fi
+
+	if [ -n $wifi3 -a -d "/sys/class/net/$wifi3" ];then
+		NUM_OF_WIFI=`expr $NUM_OF_WIFI + 1`
+	fi
+
+	dbg "# NUM_OF_WIFI=$NUM_OF_WIFI band(s)"
+}
+
+get_wifi_num()
+{
+	echo $NUM_OF_WIFI
+}
+
+# $1: module name
+# return value
+#    1: if the module named $1 is built-in or inserted.
+#    0: if the module exists but has not been inserted.
+#   -1: if the module does not exist.
+module_exist()
+{
+	mpath="/lib/modules/`uname -r`"
+	retval=-1
+
+	mod_in_lib=`find $mpath -name "$1".ko > /dev/null 2>&1`
+	#echo "find $mpath -name "$1".ko" > /dev/console
+	if [ ! -z $mod_in_lib ]; then
+		retval=0
+	fi
+
+	# TODO find out a way in OpenWRT
+	mod_builtin=`grep $1 $mpath/modules.builtin 2>/dev/null`
+	if [ ! -z "$mod_builtin" ]; then
+		retval=1
+	fi
+
+	mod_inserted=`lsmod | grep $1 2>/dev/null`
+	if [ ! -z "$mod_inserted" ]; then
+		retval=1
+	fi
+
+	echo $retval
+}
+
+setup_model()
+{
+	num_of_wifi=$(get_wifi_num)
+
+	if [ "$NUM_OF_CPU" = "4" ]; then
+		if [ -e "/etc/wireless/mediatek/DBDC_card0.dat" ]; then
+			dbg "setup_model:MT6890_MIFI wifi#=$num_of_wifi"
+			MT6890_MIFI $num_of_wifi
+		else
+			dbg "setup_model:MT6890_CPE wifi#=$num_of_wifi"
+			MT6890_CPE $num_of_wifi
+		fi
+	fi
+}
+
+get_virtual_irq()
+{
+	PHY_POS=`expr $NUM_OF_CPU + 3` #physical irq # position in /proc/interrups may vary with the number of CPU up
+	target_phy_irq=$1
+	cat /proc/interrupts | sed 's/:/ /g'| awk '$1 ~ /^[0-9]+$/' | while read line 
+	do
+		set -- $line
+		phy_irq=$(eval "echo \$$PHY_POS")
+		if [ $phy_irq == $target_phy_irq ]; then 
+			echo $1
+			return
+		fi
+	done
+}
+
+
+set_rps_cpu_bitmap()
+{
+	dbg2 "# Scan binding interfaces of each cpu"
+	# suppose the value of interface_var is null or hex
+	num=0
+	while [ "$num" -lt "$NUM_OF_CPU" ];do
+		cpu_bit=$((2 ** $num))
+		eval rps_list=\$CPU${num}_RPS
+		dbg2 "# CPU$num: rps_list=$rps_list"
+		for i in $rps_list; do
+			var=${VAR_PREFIX}_${i//-/_}
+			eval ifval=\$$var
+			dbg2 "[var val before] \$$var=$ifval"
+			if [ -z "$ifval" ]; then
+				eval $var=$cpu_bit
+			else
+				eval $var=`expr $ifval + $cpu_bit`
+			fi
+			eval ifval=\$$var
+			dbg2 "[rps val after]$i=$ifval"
+		done
+		num=`expr $num + 1`
+	done
+}
+
+# $1: The default rps value. If rps of the interface is not setup, set $1 to it
+set_rps_cpus()
+{
+	dbg2 "# Setup rps of the interfaces, $RPS_IF_LIST."
+	for i in $RPS_IF_LIST; do
+		var=${VAR_PREFIX}_${i//-/_}
+		eval cpu_map=\$$var
+		if [ -d /sys/class/net/$i ]; then
+			if [ ! -z $cpu_map ]; then
+				cpu_map=`printf '%x' $cpu_map`
+				dbg "echo $cpu_map > /sys/class/net/$i/queues/rx-0/rps_cpus"
+				echo $cpu_map > /sys/class/net/$i/queues/rx-0/rps_cpus
+			elif [ ! -z $1 ]; then
+				dbg "echo $1 > /sys/class/net/$i/queues/rx-0/rps_cpus"
+				echo $1 > /sys/class/net/$i/queues/rx-0/rps_cpus
+			fi
+		fi
+	done
+}
+
+set_smp_affinity()
+{
+	dbg2 "# Setup affinity of each physical irq."
+	num=0
+	while [ "$num" -lt "$NUM_OF_CPU" ];do
+		eval smp_list=\$CPU${num}_AFFINITY
+		for i in $smp_list; do
+			cpu_bit=$((2 ** $num))
+			virq=$(get_virtual_irq $i)
+			dbg2 "irq p2v $i --> $virq"
+			if [ ! -z $virq ]; then
+				dbg "echo $cpu_bit > /proc/irq/$virq/smp_affinity"
+				echo $cpu_bit > /proc/irq/$virq/smp_affinity
+			fi
+		done
+		num=`expr $num + 1`
+	done
+}
+
+if [ "$1" = "dbg" ]; then
+	DBG=1
+elif [ "$1" = "dbg2" ]; then
+	DBG=2
+else
+	DBG=0
+fi
+
+# Usage: dbg "the output string"
+dbg()
+{
+	if [ "$DBG" -ge "1" ]; then
+		echo -e $1
+	fi
+}
+
+# Usage: dbg2 "the output string"
+dbg2()
+{
+	if [ "$DBG" -ge "2" ]; then
+		echo -e $1
+	fi
+}
+
+#NUM_OF_CPU=2	#7622
+#NUM_OF_CPU=4	#7623
+dbg "# RPS and AFFINITY Setting"
+dbg "# NUM_OF_CPU=$NUM_OF_CPU"
+VAR_PREFIX="autogen"
+#IRQ_LIST=""	# setup by every model
+RPS_IF_LIST=""	# setup by getEthIfName/getWiFiIfName/every model
+sleep 20
+get_eth_if_name
+get_wifi_if_name	# It will add all wifi interfaces into $RPS_IF_LIST
+dbg2 "# default RPS_IF_LIST=$RPS_IF_LIST"
+setup_model
+set_rps_cpu_bitmap
+set_rps_cpus $DEFAULT_RPS
+set_smp_affinity
+
+#end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/speech_daemon.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/speech_daemon.service
new file mode 100644
index 0000000..16073a0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/speech_daemon.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Telephony Speech Daemon
+Requires=ccci_mdinit.service
+
+[Service]
+Type=simple
+StandardOutput=kmsg+console
+RemainAfterExit=yes
+ExecStart=/bin/sh /usr/share/init/init_speech
+Restart=always
+Nice=-11
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/thermal_core.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/thermal_core.service
new file mode 100644
index 0000000..cb6c95e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/thermal_core.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=thermal_core
+
+[Service]
+Type=simple
+RemainAfterExit=yes
+StandardOutput=kmsg+console
+ExecStart=/usr/bin/thermal_core
+Restart=on-failure
+RestartSec=1s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/usb_switch b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/usb_switch
new file mode 100644
index 0000000..cc82d6c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/usb_switch
@@ -0,0 +1,169 @@
+#!/bin/busybox sh
+#
+#	@author Chuanrui Liu
+#	modify: Chengzhi Pei 2020-11-19
+#
+
+echo "=== Initial: USB Switch Start ===" > /dev/kmsg
+
+function funCleanConfig(){
+    echo "clean old configuration"  > /dev/kmsg
+    systemctl stop init_usb
+    killall adbd
+    killall agetty
+    echo none > /sys/kernel/config/usb_gadget/g1/UDC
+    echo 0 > /sys/kernel/config/usb_gadget/g1/bDeviceClass
+    echo 0 > /sys/kernel/config/usb_gadget/g1/bDeviceSubClass
+    echo 0 > /sys/kernel/config/usb_gadget/g1/bDeviceProtocol
+    rm -f /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    rm -f /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    rm -f /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    rm -f /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    rm -f /sys/kernel/config/usb_gadget/g1/configs/b.1/f5
+    sleep 1
+    return 0
+}
+
+if [ ! -z $2 ]; then
+    #echo 0123456789ABCDEF > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
+    echo $2 > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
+fi
+
+echo $1 > /dev/kmsg
+
+if [ $1 = "adb,acm" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo gs1gs3_dual_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x202f > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs3 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "rndis,adb,acm" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo rndis_adb_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2028 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/rndis.gs4 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "ecm,adb,acm" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo rndis_adb_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2028 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ecm.f0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "ncm,adb,acm" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo rndis_adb_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2028 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ncm.f0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "rndis,acm" ]; then
+    funCleanConfig
+    ########################################
+    echo rndis_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x7102 > /sys/kernel/config/usb_gadget/g1/idProduct
+    echo 0x0001 > /sys/kernel/config/usb_gadget/g1/bcdDevice
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/rndis.gs4 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs3 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "meta" ]; then
+    funCleanConfig
+    ########################################
+    echo acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2007 > /sys/kernel/config/usb_gadget/g1/idProduct
+    echo 0x02 > /sys/class/android_usb/android0/bDeviceClass
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "adb,meta" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo adb_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x200e > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "adb,meta,elt" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo meta_elt_adb > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2040 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs1 /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "c2k,adb" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo c2k_adb > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x2034 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/via_modem.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/via_ets.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/via_atc.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f3
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f4
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs3 /sys/kernel/config/usb_gadget/g1/configs/b.1/f5
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+    echo 1 > /sys/class/usb_rawbulk/data/enable
+elif [ $1 = "adb,bt" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo adb_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x200e > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs2 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "ecm,acm" ]; then
+    funCleanConfig
+    ########################################
+    echo ecm_acm > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x7102 > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ecm.f0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/acm.gs0 /sys/kernel/config/usb_gadget/g1/configs/b.1/f2
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "adb" ]; then
+    funCleanConfig
+    ########################################
+    adbd &
+    sleep 1
+    echo adb > /sys/kernel/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration
+    echo 0x201c > /sys/kernel/config/usb_gadget/g1/idProduct
+    ln -sf /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/f1
+    echo 11201000.usb > /sys/kernel/config/usb_gadget/g1/UDC
+elif [ $1 = "none" ]; then
+    funCleanConfig
+else
+    echo "=== Illegal input ===" > /dev/kmsg
+fi
+echo "=== Initial: USB Switch End ===" > /dev/kmsg
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/wifi_network b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/wifi_network
new file mode 100755
index 0000000..01bdeb9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/wifi_network
@@ -0,0 +1 @@
+192.168.15.0/28
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb
new file mode 100755
index 0000000..3758833
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-2735_1.0.0.bb
@@ -0,0 +1,152 @@
+#Basic Configuration
+DESCRIPTION = "Initial settting"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+SRC_URI = "file://LICENSE"
+SRC_URI += "file://init_network"
+SRC_URI += "file://init_mount"
+SRC_URI += "file://init_speech"
+SRC_URI += "file://init_mount_nand"
+SRC_URI += "file://usb_switch"
+SRC_URI += "file://init_network.service"
+SRC_URI += "file://init_mount.service"
+SRC_URI += "file://nvram_daemon.service"
+SRC_URI += "file://ccci_fsd.service"
+SRC_URI += "file://ccci_mdinit.service"
+SRC_URI += "file://speech_daemon.service"
+SRC_URI += "file://meta_tst.service"
+SRC_URI += "file://emdlogger1.service"
+SRC_URI += "file://thermal_core.service"
+SRC_URI += "${@bb.utils.contains('MTK_SMT_BUILD', 'yes', ' file://meta_tst_tmp', ' file://meta_tst', d)}"
+SRC_URI += "${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' file://init_atci', d)}"
+SRC_URI += "${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' file://init_atci.service', d)}"
+SRC_URI += "file://agps.service"
+SRC_URI += "file://init_usb"
+SRC_URI += "file://init_usb.service"
+SRC_URI += "file://smp.sh"
+SRC_URI += "file://smp.rules"
+#you.chen@2022-07-11 add gsw's emmc init scrips begin
+SRC_URI += "file://init_mmc"
+#you.chen@2022-07-11 add gsw's emmc init scrips end 
+#dongyu@2022.7.15 delete for Slow loading of ETS port start
+#DEPENDS+= "udev"
+#dongyu@2022.7.15 delete for Slow loading of ETS port end
+
+#dongyu@2022.7.15 abb for Slow loading of ETS port start
+SRC_URI += "file://init_smp.service"
+#dongyu@2022.7.15 add for Slow loading of ETS port end
+
+S = "${WORKDIR}"
+
+#Skip strip check in QA test
+INSANE_SKIP_${PN} += "already-stripped"
+
+#dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port start
+FILES_${PN} = "${datadir}/init/init_network \
+               ${datadir}/init/init_mount \
+               ${datadir}/init/usb_switch \
+               ${datadir}/init/meta_tst \
+               ${datadir}/init/init_speech \
+               ${datadir}/init/init_usb \
+               /oemdata \
+               /oemapp \
+               /oemapp2 \
+               ${@bb.utils.contains('BOOTDEV_TYPE', 'nand',  ' ${datadir}/init/init_mmc', ' ', d)} \
+               ${datadir}/init/smp.sh \
+               ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${datadir}/init/init_atci', d)}"
+#dongyu@2022.7.15 delete (/etc/udev/rules.d/smp.rules)for Slow loading of ETS port end
+
+inherit systemd
+
+#dongyu@2022.7.15 abb (init_smp.service) for Slow loading of ETS port start
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "init_network.service \
+                         init_mount.service \
+                         nvram_daemon.service \
+                         ccci_fsd.service \
+                         ccci_mdinit.service \
+                         speech_daemon.service \
+                         meta_tst.service \
+                         emdlogger1.service \
+                         thermal_core.service \
+                         agps.service \
+                         init_usb.service \
+			 init_smp.service \
+                         ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', 'init_atci.service', d)}"
+#dongyu@2022.7.15 add (init_smp.service) for Slow loading of ETS port end
+
+#dongyu@2022.7.15 abb (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port start
+FILES_${PN} += "${systemd_unitdir}/system/init_network.service \
+                ${systemd_unitdir}/system/init_mount.service \
+                ${systemd_unitdir}/system/nvram_daemon.service \
+                ${systemd_unitdir}/system/ccci_fsd.service \
+                ${systemd_unitdir}/system/ccci_mdinit.service \
+                ${systemd_unitdir}/system/speech_daemon.service \
+                ${systemd_unitdir}/system/meta_tst.service \
+                ${systemd_unitdir}/system/emdlogger1.service \
+                ${systemd_unitdir}/system/thermal_core.service \
+                ${systemd_unitdir}/system/agps.service \
+                ${systemd_unitdir}/system/init_usb.service \
+		${systemd_unitdir}/system/init_smp.service \
+                ${@bb.utils.contains('BUILD_TYPE', 'user', ' ', ' ${systemd_unitdir}/system/init_atci.service', d)}"
+#dongyu@2022.7.15 add (${systemd_unitdir}/system/init_smp.service) for Slow loading of ETS port end
+
+do_install_append() {
+    #you.chen@2022-07-11 add for add partition begin
+    install -d ${D}oemdata
+    install -d ${D}oemapp
+    install -d ${D}oemapp2
+    #you.chen@2022-07-11 add for add partition end
+    install -d ${D}${datadir}/init
+    install -m 0755 init_network ${D}${datadir}/init/init_network
+    install -m 0755 usb_switch ${D}${datadir}/init/usb_switch
+    install -m 0755 init_speech ${D}${datadir}/init/init_speech
+    install -m 0755 init_usb ${D}${datadir}/init/init_usb
+    install -m 0755 smp.sh ${D}${datadir}/init/smp.sh
+
+#dongyu@2022.7.15 delete for Slow loading of ETS port start
+    #install -d ${D}/etc/udev/rules.d/
+    #install -m 0755 smp.rules ${D}/etc/udev/rules.d/smp.rules
+#dongyu@2022.7.15 delete for Slow loading of ETS port end
+
+    if [ "${MTK_SMT_BUILD}" = "yes" ]; then
+        install -m 0755 meta_tst_tmp ${D}${datadir}/init/meta_tst
+    else
+        install -m 0755 meta_tst ${D}${datadir}/init/meta_tst
+    fi
+
+    if [ "${BOOTDEV_TYPE}" = "nand" ]; then
+        install -m 0755 init_mount_nand ${D}${datadir}/init/init_mount
+        #you.chen@2022-07-11 add gsw's emmc init scrips begin
+    	install -m 0755 init_mmc ${D}${datadir}/init/init_mmc
+        #you.chen@2022-07-11 add gsw's emmc init scrips end
+    else
+        install -m 0755 init_mount ${D}${datadir}/init/init_mount
+    fi
+
+    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+        install -d ${D}${systemd_unitdir}/system/
+        install -m 0644 init_network.service ${D}${systemd_unitdir}/system
+        install -m 0644 init_mount.service ${D}${systemd_unitdir}/system
+        install -m 0644 nvram_daemon.service ${D}${systemd_unitdir}/system
+        install -m 0644 ccci_fsd.service ${D}${systemd_unitdir}/system
+        install -m 0644 ccci_mdinit.service ${D}${systemd_unitdir}/system
+        install -m 0644 speech_daemon.service ${D}${systemd_unitdir}/system
+        install -m 0644 meta_tst.service ${D}${systemd_unitdir}/system
+        install -m 0644 emdlogger1.service ${D}${systemd_unitdir}/system
+        install -m 0644 thermal_core.service ${D}${systemd_unitdir}/system
+        install -m 0644 agps.service ${D}${systemd_unitdir}/system
+        install -m 0644 init_usb.service ${D}${systemd_unitdir}/system
+#dongyu@2022.7.15 abb for Slow loading of ETS port start
+	install -m 0644 init_smp.service ${D}${systemd_unitdir}/system
+#dongyu@2022.7.15 add for Slow loading of ETS port end
+         if [ "${BUILD_TYPE}" = "eng" ]; then
+            install -m 0644 init_atci.service ${D}${systemd_unitdir}/system
+        fi
+    fi
+
+    if [ "${BUILD_TYPE}" = "eng" ]; then
+        install -m 0755 init_atci ${D}${datadir}/init/init_atci
+    fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-oem_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-oem_1.0.0.bb
new file mode 100755
index 0000000..ec32bf8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/init-oem_1.0.0.bb
@@ -0,0 +1,32 @@
+#Basic Configuration
+DESCRIPTION = "Initial settting"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+SRC_URI = "file://LICENSE"
+SRC_URI += "file://init_mount"
+SRC_URI += "file://init_mount_nand"
+SRC_URI += "file://wifi_network"
+SRC_URI += "${@bb.utils.contains('BOOTDEV_TYPE', 'nand',  'file://init_mmc', ' ', d)}"
+
+S = "${WORKDIR}"
+
+#Skip strip check in QA test
+INSANE_SKIP_${PN} += "already-stripped"
+
+FILES_${PN} = "${datadir}/init/init_mount \
+               /etc/config/wifi_network \
+               ${@bb.utils.contains('BOOTDEV_TYPE', 'nand',  ' ${datadir}/init/init_mmc', ' ', d)} \
+               "
+
+do_install_append() {
+    install -d ${D}${datadir}/init
+    install -d ${D}/etc/config
+    install -m 0644 wifi_network ${D}/etc/config/wifi_network 
+    if [ "${BOOTDEV_TYPE}" = "nand" ]; then
+        install -m 0755 init_mount_nand ${D}${datadir}/init/init_mount
+    	install -m 0755 init_mmc ${D}${datadir}/init/init_mmc
+    else
+        install -m 0755 init_mount ${D}${datadir}/init/init_mount
+    fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/meta/target-sdk-provides-dummy.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/meta/target-sdk-provides-dummy.bbappend
new file mode 100644
index 0000000..6234a89
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/meta/target-sdk-provides-dummy.bbappend
@@ -0,0 +1,3 @@
+DUMMYPROVIDES += "\
+    /bin/busybox \
+"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/files/LICENSE
new file mode 100644
index 0000000..def5995
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("LYNQ") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("LYNQ SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/lynq-rootfs_1.1.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/lynq-rootfs_1.1.bb
new file mode 100644
index 0000000..07a716c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/rootfs/lynq-rootfs_1.1.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Lynq RootFS for T800 series"
+DESCRIPTION = "Contains basic root files for services"
+LICENSE = "MIT"
+S = "${WORKDIR}/rootfs"
+#LICENSE = "GPLv2+ & (GPLv2 | GPLv3)"
+# License files went missing in 010, when 011 is released add LICENSES/* back
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=8b0de5cacd563a6727aab4ef51b219d5"
+export ROOTFS_BASE = "${S}"
+
+#DEPENDS = "libusb1 virtual/libiconv udev"
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/rootfs"
+SRC_URI = "file://${WORKONSRC}/lynq_rootfs_1.1.tar.gz \
+           file://LICENSE \
+          "
+SRC_URI[md5sum] = "fd3b6d9bd6b92f7fd2b7c896b5760978 "
+SRC_URI[sha256sum] = "64d46225606fd65a7333889d9bf6b69647b83e6545e06c48990b37626cfcb270"
+do_compile[noexec] = "1"
+
+inherit deploy
+mk_lynq_base_part_rootfs_pre() {
+   # install -d ${IMAGE_ROOTFS}/protect_f
+sdfd
+   export BASE_ROOTFS=${S}
+   #cp -af ${S}/* ${IMAGE_ROOTFS}/
+}
+
+ROOTFS_PREPROCESS_COMMAND += "mk_lynq_base_part_rootfs_pre;"
+
+do_install() {
+    echo "export ROOTFS_BASE=${S}" > ${TOPDIR}/rootbase.sh
+    chmod a+x ${TOPDIR}/rootbase.sh
+}
+#ALTERNATIVE_${PN} = "lsusb"
+#ALTERNATIVE_PRIORITY = "100"
+
+# The binaries are mostly GPLv2+ apart from lsusb.py which is GPLv2 or v3.
+#LICENSE_${PN} = "GPLv2+"
+#LICENSE_${PN}-python = "GPLv2 | GPLv3"
+
+#RRECOMMENDS_${PN} = "udev-hwdb"
+
+#PACKAGE_BEFORE_PN =+ "${PN}-python"
+#FILES_${PN}-python += "${bindir}/lsusb.py"
+#RDEPENDS_${PN}-python = "python3-core"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/autosuspend-client-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/autosuspend-client-demo.bb
new file mode 100755
index 0000000..55298b4
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/autosuspend-client-demo.bb
@@ -0,0 +1,40 @@
+#inherit externalsrc package systemd
+
+DESCRIPTION = "autosuspend-client-demo"
+
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=44d8d2b6296ca24bcd4894bb7155bf27"
+SRC_URI = "file://autosuspend-client-demo.c file://LICENSE \
+"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I. "
+
+DEPENDS = ""
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+SOURCES = "$(wildcard *.c )"
+
+OBJECTS = "$(SOURCES:.c=.o)"
+
+EXECUTABLE = "autosuspend-client-demo"
+S = "${WORKDIR}"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall ${LOCAL_C_INCLUDES} autosuspend-client-demo.c ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+	install -d ${D}${includedir}
+}
+
+
+
+
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/LICENSE
new file mode 100755
index 0000000..1b15bd2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/LICENSE
@@ -0,0 +1,31 @@
+opyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/autosuspend-client-demo.c b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/autosuspend-client-demo.c
new file mode 100755
index 0000000..7057cf8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/autosuspend-client-demo/files/autosuspend-client-demo.c
@@ -0,0 +1,219 @@
+/************************************************************/
+/* This is a autosuspend sample program for  Linux          */
+
+/************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
+#include <dlfcn.h>
+#include <time.h>
+
+#define LOG_TAG "AUTOSUSPEND-CLIENT-DEMO"
+
+#define SERVER_PATH "/tmp/autosuspend.server"
+// #define CLIENT_PATH "/tmp/autosuspend.client"
+// #define DATA "disable"
+
+void *dlHandle_network;
+
+int (*lynq_query_registration_state)(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *errorCode);
+int (*lynq_network_init)(int utoken);
+
+void *dlHandle_autosuspend;
+
+int (*lynq_autosleep_enable)(void);
+int (*lynq_autosleep_disable)(void);
+int (*lynq_wait_wakeup_event)(long *, long *);
+
+void init_autosuspend_func()
+{
+    const char *lynqLibPath_Autosuspend = "/lib64/libautosuspend.so";
+    dlHandle_autosuspend = dlopen(lynqLibPath_Autosuspend, RTLD_NOW);
+    if (dlHandle_autosuspend == NULL) 
+    {
+        printf("dlopen lynqLibPath_Autosuspend failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    lynq_autosleep_enable = (int(*)(void))dlsym(dlHandle_autosuspend, "lynq_autosleep_enable");
+    if (lynq_autosleep_enable == NULL) {
+        printf("libautosleep_enable not defined or exported in %s", lynqLibPath_Autosuspend);
+        exit(EXIT_FAILURE);
+    }
+
+    lynq_autosleep_disable = (int(*)(void))dlsym(dlHandle_autosuspend, "lynq_autosleep_disable");
+    if (lynq_autosleep_disable == NULL) {
+        printf("libautosleep_disable not defined or exported in %s", lynqLibPath_Autosuspend);
+	}
+    lynq_wait_wakeup_event = (int(*)(long *, long * ))dlsym(dlHandle_autosuspend, "lynq_wait_wakeup_event");
+    if (lynq_wait_wakeup_event == NULL) {
+        printf("lynq_wait_wakeup_event not defined or exported in %s", lynqLibPath_Autosuspend);
+        exit(EXIT_FAILURE);
+    }
+
+    dlerror(); // Clear any previous dlerror
+    return;            
+}
+
+void init_network_func()
+{
+    int res;
+    const char *lynqLibPath_Network = "/lib64/liblynq-network.so";
+    dlHandle_network = dlopen(lynqLibPath_Network, RTLD_NOW);
+    if (dlHandle_network == NULL) 
+    {
+        printf("dlopen lynqLibPath_Network failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    lynq_query_registration_state = (int(*)(const char*,int*,int*,char *,char *,int *,int *,int *))dlsym(dlHandle_network, "lynq_query_registration_state");
+    if (lynq_query_registration_state == NULL) {
+        printf("lynq_query_registration_state not defined or exported in %s", lynqLibPath_Network);
+        exit(EXIT_FAILURE);
+    }
+
+    lynq_network_init = (int(*)(int))dlsym(dlHandle_network, "lynq_network_init");
+    if (lynq_network_init == NULL) {
+        printf("lynq_network_init not defined or exported in %s", lynqLibPath_Network);
+        exit(EXIT_FAILURE);
+    }
+
+    printf("start lynq_network_init\n");
+    res = lynq_network_init(2);
+    // sleep(10);
+
+    if(res == 0)
+    {
+        printf("Run lynq_network_init\n");
+    }else{
+        printf("lynq_network_init error\n");
+        exit(EXIT_FAILURE);
+    }       
+
+    dlerror(); // Clear any previous dlerror
+    return;            
+}
+
+int getregState()
+{
+    int regState;
+    int imsRegState;
+    // char *LAC = (char *)malloc(128);
+    // char *CID = (char *)malloc(128);
+    char LAC[128],CID[128];
+    int netType;
+    int radioTechFam;
+    regState = imsRegState = netType = radioTechFam = 0;
+    int errorCode;
+    errorCode = -1;
+  
+    if(lynq_query_registration_state("VOICE",&regState,&imsRegState,LAC,CID,&netType,&radioTechFam,&errorCode) != 0)
+    {
+        printf("lynq_query_registration_state fail. \n");
+        // sleep(1);
+        return -1;
+    }
+    if(regState == 0 || regState == 2 || regState == 3 || regState == 4)
+    {
+        printf("regState: %d is not OK yet, try again. \n",regState);
+        // sleep(1);
+        return -1;
+    }
+    else
+    {
+        printf("regState: %d is OK.\n",regState);
+    }
+    return 0;
+}
+
+int main(int argc,char** argv){
+
+
+    if (argc != 3)
+    {
+        printf("wrong input format.\n");
+        return -1;
+    }
+
+
+
+    if (strcmp(argv[2],"0") == 0)
+    {
+        printf("autosleep : disable.\n");
+        init_autosuspend_func();
+        if(lynq_autosleep_disable() < 0)
+        {
+            printf("lynq_autosleep_disable fail.\n");
+            return -1;
+        }
+        
+    }
+    else if (strcmp(argv[2],"1") == 0)
+    {
+        int count = 0;
+        printf("autosleep : enable.\n");
+        init_autosuspend_func();
+        init_network_func();
+        while(getregState() != 0) //when modem is normal in cell registerd, autosuspend could be enable
+        {
+            printf("regstate is not OK, count = %d\n",count);
+            sleep(5);
+            count++;
+            if(count == 4)
+                return -1;
+        }
+
+        if(lynq_autosleep_enable() < 0)
+        {
+            printf("lynq_autosleep_enable fail.\n");
+            return -1;
+        }
+
+    }
+    else
+    {
+        printf("wrong input format.\n");
+        return -1;
+    }
+	
+    if (strcmp(argv[1],"-q") == 0)
+    {
+        printf("No need to get feedback.\n");
+        return 0;
+    }
+    else if(strcmp(argv[1],"-f") == 0)
+    {
+        printf("start to get feedback.\n");
+    }
+    
+
+    long sleep_start_time = 0;
+	long wakeup_time = 0;
+    while (1)
+    {   
+        
+        
+        if(lynq_wait_wakeup_event(&sleep_start_time,&wakeup_time) == -1)
+        {
+            printf("lynq_wait_wakeup_event fail.\n");
+            sleep(5);
+            continue;
+        }
+
+        printf("@@@@@@@@@@@@@system sleep_start timestamps : %ld ms\n",sleep_start_time);
+        printf("@@@@@@@@@@@@@@@@system wakeup timestamps : %ld ms\n",wakeup_time);
+
+        // sleep(10);
+    }
+    
+
+
+    
+    return 0;
+}
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/call-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/call-demo.bb
new file mode 100755
index 0000000..9f0da40
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/call-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "call demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://call-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "call-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall ${LOCAL_C_INCLUDES} call-demo.cpp ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/call-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/call-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/call-demo.cpp
new file mode 100755
index 0000000..80ede69
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/call-demo/files/call-demo.cpp
@@ -0,0 +1,552 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <dlfcn.h>
+//#include <libcall/lynq_call.h>//引用LYNQ call 头文件
+//#include <liblog/lynq_deflog.h>//引用LYNQ log 头文件
+#undef LOG_TAG
+#define LOG_TAG "CALL_DEMO"
+
+#define MAX_IP_LENGTH 128
+#define MAX_VLAN_INFO_LENGTH 128
+
+
+//static pthread_mutex_t s_urc_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+//static pthread_cond_t s_urc_call_state_change_cond = PTHREAD_COND_INITIALIZER;
+
+typedef enum{
+    AUDIO_MODE_CODEC = 0,     /* Codec */
+    AUDIO_MODE_RTP = 1,      /* RTP */       
+}LYNQ_Audio_Mode;
+
+typedef enum{
+    RTP_CLIENT = 0,     
+    RTP_SERVER =1,
+    RTP_MODE_MAX
+}LYNQ_Rtp_Mode;
+
+void *dlHandle_call;
+void *dlHandle_log;
+
+int (*lynq_init_call)(int);
+int (*lynq_deinit_call)(void);
+int (*lynq_call)(int *handle,char addr[]);
+int (*lynq_call_answer)(void);
+int (*lynq_call_hungup)(int *handle);
+int (*lynq_call_hungup_all)(void);
+int (*lynq_wait_incoming_call)(int *handle);
+int (*lynq_set_auto_answercall)(const int mode);
+int (*lynq_set_DTMF)(const char callnum);
+int (*lynq_get_mute_mic)(int *status);
+int (*lynq_set_mute_mic)(const int enable);
+int (*lynq_get_speech_volume)(int *volume);
+int (*lynq_set_speech_volume)(const int volume);
+int (*lynq_get_current_call_state)(int *handle,int *call_state,int *toa,int *direction,char addr[]);
+
+void set_rtp(int argc, char const *argv[]);
+
+//以下示例默认为所有API 执行都成功的情况下,依次执行后续API。
+int main(int argc, char const *argv[])
+{
+    int ret = 0;
+    int handle = -1;//handle某一通电话的唯一标识,初始化为-1.
+    int status =-1;
+    const char * addr = argv[1];
+    const char *lynqLibPath_Call = "/lib64/liblynq-call.so";
+    const char *lynqLibPath_Log = "/lib64/liblynq-log.so";
+
+    dlHandle_call = dlopen(lynqLibPath_Call, RTLD_NOW);
+    if (dlHandle_call == NULL) 
+    {
+        printf("dlopen dlHandle_call failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    dlHandle_log = dlopen(lynqLibPath_Log, RTLD_NOW);
+    if (dlHandle_log == NULL) 
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    lynq_init_call = (int(*)(int))dlsym(dlHandle_call, "lynq_init_call");
+    if (lynq_init_call == NULL) {
+        printf("lynq_init_call not defined or exported in %s", lynqLibPath_Call);
+        exit(EXIT_FAILURE);
+    }
+    dlerror(); // Clear any previous dlerror
+    printf("--------->[%s,%d] start",__FUNCTION__,__LINE__);
+    ret = lynq_init_call(2022);   //初始化电话业务,调用电话API之前必须初始化电话业务。
+    sleep(1); //等待初始化结束。
+
+    set_rtp(argc,argv);
+
+    printf("Dial a call!!! addr is %s\n", addr);
+    lynq_call = (int(*)(int *handle,char addr[]))dlsym(dlHandle_call,"lynq_call");
+    if(NULL != lynq_call)
+    {
+        ret = lynq_call(&handle,(char *)addr);
+        if(ret == 0)
+        {
+            printf("dial a call success\n");
+        }else{
+            printf("dial call error, ret is %d\n",ret);
+        }
+    }else{
+        printf("call dlsym error\n");
+        exit(EXIT_FAILURE);
+    }
+
+    /**********根据handle 去获取当前这通电话的状态--start**********/
+    lynq_get_current_call_state = (int(*)(int *handle,int *call_state,int *toa,int *direction,char addr[]))dlsym(dlHandle_call,"lynq_get_current_call_state");
+    if(NULL != lynq_get_current_call_state)
+    {
+        int call_state = -1;//电话状态
+        char address[64] ={0};// 电话号码
+        int type_of_addr = -1;//电话号码类型
+        int direction = -1;//电话方向
+        ret = lynq_get_current_call_state(&handle,&call_state, &type_of_addr, &direction,address);
+        if(ret== 0)
+        {
+            printf("call state:%d,toa:%d,dir:%d,addr=%s\n",call_state,type_of_addr,direction,address);
+        }else{
+            printf("query call state error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_get_current_call_state dlsym error");
+        exit(EXIT_FAILURE);
+    }
+    /**********根据handle 去获取当前这通电话的状态--end**********/
+
+    sleep(50);//等待50s,等待电话被接通。
+
+    /**********查询静音状态--start**********/
+    printf("get mute mic!!!\n");
+    lynq_get_mute_mic = (int (*)(int *status))dlsym(dlHandle_call,"lynq_get_mute_mic");
+    if(NULL != lynq_get_mute_mic)
+    {
+        ret = lynq_get_mute_mic(&status);
+        if(ret == 0)
+        {
+            printf("get mute mic success: value is %d!!!\n",status);
+        }else{
+            printf("get mute mic state error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_get_mute_status dlsym error");
+    }
+    /**********查询静音状态--end**********/
+
+    sleep(1);
+
+    /**********设置DTMF--start**********/
+    lynq_set_DTMF = (int (*)(const char callnum))dlsym(dlHandle_call,"lynq_set_DTMF");
+    if(NULL != lynq_set_DTMF)
+    {
+        ret = lynq_set_DTMF('1');
+        if(ret == 0)
+        {
+            printf("set DTMF success!!! value is %c\n",'1');
+        }else{
+            printf("set DTMF error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_set_DTMF dlsym error\n");
+    }
+    /**********设置DTMF--end**********/
+    sleep(10);
+    
+    lynq_set_mute_mic = (int (*)(const int enable))dlsym(dlHandle_call,"lynq_set_mute_mic");
+    if(NULL != lynq_set_mute_mic)
+    {
+        ret = lynq_set_mute_mic(1);
+        if(ret == 0)
+        {
+            printf("set mute mic success!!! value is %d\n",1);
+        }else{
+            printf("set mute mic error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_set_mute_mic dlsym error\n");
+    }
+    
+    sleep(1);
+    
+    printf("get mute mic!!!\n");
+    lynq_get_mute_mic = (int (*)(int *status))dlsym(dlHandle_call,"lynq_get_mute_mic");
+    if(NULL != lynq_get_mute_mic)
+    {
+        ret = lynq_get_mute_mic(&status);
+        if(ret == 0)
+        {
+            printf("get mute mic success !!! value is %d\n",status);
+            
+            if(status!=1)
+            {
+                printf("get mute mic value error, set value is %d, get value is %d!!!\n",1,status);
+            }
+        }else{
+            printf("get mute mic state error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_get_mute_status dlsym error");
+    }
+
+    
+    lynq_set_mute_mic = (int (*)(const int enable))dlsym(dlHandle_call,"lynq_set_mute_mic");
+    if(NULL != lynq_set_mute_mic)
+    {
+        ret = lynq_set_mute_mic(0);
+        if(ret == 0)
+        {
+            printf("set mute mic success !!! value is %d\n",0);
+        }else{
+            printf("set mute mic error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_set_mute_mic dlsym error\n");
+    }
+    
+    sleep(1);
+    
+    printf("get mute mic!!!\n");
+    lynq_get_mute_mic = (int (*)(int *status))dlsym(dlHandle_call,"lynq_get_mute_mic");
+    if(NULL != lynq_get_mute_mic)
+    {
+        ret = lynq_get_mute_mic(&status);
+        if(ret == 0)
+        {
+            printf("get mute mic success !!! value is %d\n",status);
+            
+            if(status!=0)
+            {
+                printf("get mute mic value error, set value is %d, get value is %d!!!\n",0,status);
+            }
+        }else{
+            printf("get mute mic state error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_get_mute_status dlsym error");
+    }
+
+    lynq_set_speech_volume = (int (*)(const int enable))dlsym(dlHandle_call,"lynq_set_speech_volume");
+    if(NULL != lynq_set_speech_volume)
+    {
+        ret = lynq_set_speech_volume(3);
+        if(ret == 0)
+        {
+            printf("set speech volumn success!!! value is %d \n",3);
+        }else{
+            printf("set speech volumn error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_set_speech_volume dlsym error\n");
+    }
+    
+    sleep(1);
+    
+    lynq_get_speech_volume = (int (*)(int *status))dlsym(dlHandle_call,"lynq_get_speech_volume");
+    if(NULL != lynq_set_speech_volume)
+    {
+        ret = lynq_get_speech_volume(&status);
+        if(ret == 0)
+        {
+            printf("get speech volumn success!!! value is %d\n",status);
+            if(status!=3)
+            {
+                printf("get speech volumn error, set value is %d, get value is %d!!!\n",3,status);
+            }
+        }else{
+            printf("get speech volumn error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_get_speech_volume dlsym error\n");
+    }
+    
+    /**********根据handle 挂断这一通电话--start**********/
+    lynq_call_hungup = (int (*)(int *handle))dlsym(dlHandle_call,"lynq_call_hungup");
+    if(NULL != lynq_call_hungup)
+    {
+        ret = lynq_call_hungup(&handle);
+        if(ret == 0)
+        {
+            printf("hungup call success!!!\n");
+        }else{
+            printf("hungup call error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_call_hungup dlsym error\n");
+    }
+    sleep(5);
+    /**********根据handle 挂断这一通电话--end**********/
+
+    /**********注销电话业务--start**********/
+    lynq_deinit_call = (int (*)(void))dlsym(dlHandle_call,"lynq_deinit_call");
+    if(NULL != lynq_deinit_call)
+    {
+        ret = lynq_deinit_call();
+        if(ret == 0)
+        {
+            printf("deinit call success!!!\n");
+        }else{
+            printf("deinit call error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_deinit_call dlsym error\n");
+    }
+    // 注销电话业务后若再调用Call API 均为无效结果。 
+    /**********注销电话业务--end**********/
+
+    sleep(5);
+    
+    return 0;
+}
+
+/*rtp*/
+/*set*/
+int (*lynq_set_voice_audio_mode)(const LYNQ_Audio_Mode audio_mode); 
+int (*lynq_set_remote_rtp_ip)(const char* ip, const int ip_length);
+int (*lynq_set_vlan_info)(const char* vlan_info, const int vlan_info_length);
+int (*lynq_set_rtp_port)(const LYNQ_Rtp_Mode rtp_mode, const int port);
+int (*lynq_set_rtp_param)(const int clock_rate,const int channels,const int latency); //only for client
+/*get*/
+LYNQ_Audio_Mode (*lynq_get_voice_audio_mode)();
+int (*lynq_get_remote_rtp_ip)(char* ip, const int ip_length);
+int (*lynq_get_vlan_info)(char* vlan_info, const int vlan_info_length);
+int (*lynq_get_rtp_port)(const LYNQ_Rtp_Mode rtp_mode, int* port);
+int (*lynq_get_rtp_param)(int* clock_rate,int* channels, int* latency);//only for client
+
+void set_voice_audio_mode(LYNQ_Audio_Mode audio_mode)
+{
+    int get_audio_mode;
+    int ret;
+    printf("lynq_set_voice_audio_mode, mode is %d\n",audio_mode);
+    lynq_set_voice_audio_mode = (int (*)(const LYNQ_Audio_Mode audio_mode))dlsym(dlHandle_call,"lynq_set_voice_audio_mode");
+    if(NULL != lynq_set_voice_audio_mode)
+    {
+        ret = lynq_set_voice_audio_mode(audio_mode);
+        if(ret == 0)
+        {                
+            printf("lynq_set_voice_audio_mode success\n");
+        }else{
+            printf("lynq_set_voice_audio_mode error, ret is %d\n",ret);
+            return;
+        }            
+    }
+    else
+    {
+        printf("lynq_set_voice_audio_mode dlsym error\n");
+        return;
+    }
+
+    printf("lynq_get_voice_audio_mode\n");
+    lynq_get_voice_audio_mode = (LYNQ_Audio_Mode (*)())dlsym(dlHandle_call,"lynq_get_voice_audio_mode");
+    if(NULL != lynq_get_voice_audio_mode)
+    {
+        get_audio_mode = lynq_get_voice_audio_mode();                   
+        printf("lynq_get_voice_audio_mode, mode is %d\n",get_audio_mode);
+    }
+    else
+    {
+        printf("lynq_get_voice_audio_mode dlsym error\n");
+        return;
+    }
+}
+
+void set_rtp(int argc, char const *argv[])
+{
+    int audio_mode =AUDIO_MODE_CODEC;   
+    int ret;
+
+    if(argc>2 && argv[2]!=NULL)
+    {
+        audio_mode=atoi(argv[2]);
+    }    
+    if(audio_mode==AUDIO_MODE_RTP){
+        const char* ip=argv[3];
+        int local_port = atoi(argv[4]);
+        int remote_port = atoi(argv[5]);
+        int clock_rate = atoi(argv[6]);
+        int channels =atoi(argv[7]);
+        int latency =atoi(argv[8]);  
+        const char* vlan_info=argv[9];
+        char get_ip[MAX_IP_LENGTH]={0};
+        int get_local_port;
+        int get_remote_port;
+        int get_clock_rate;
+        int get_channels;
+        int get_latency;   
+        char get_vlan_info[MAX_VLAN_INFO_LENGTH]={0};       
+
+        printf("lynq_set_remote_rtp_ip ip is %s\n",ip);
+        lynq_set_remote_rtp_ip = (int (*)(const char* ip, const int ip_length))dlsym(dlHandle_call,"lynq_set_remote_rtp_ip");
+        if(NULL != lynq_set_remote_rtp_ip)
+        {
+            ret = lynq_set_remote_rtp_ip(ip,strlen(ip)+1);
+            if(ret == 0)
+            {
+                printf("lynq_set_remote_rtp_ip success!!!\n");
+            }else{
+                printf("lynq_set_remote_rtp_ip error, ret is %d\n",ret);
+                return;
+            }
+        }else{
+            printf("lynq_set_remote_rtp_ip dlsym error\n");
+            return;
+        }
+
+        printf("lynq_get_remote_rtp_ip\n");
+        lynq_get_remote_rtp_ip = (int (*)(char* ip, const int ip_length))dlsym(dlHandle_call,"lynq_get_remote_rtp_ip");
+        if(NULL != lynq_get_remote_rtp_ip)
+        {
+            ret = lynq_get_remote_rtp_ip(get_ip,MAX_IP_LENGTH);
+            if(ret == 0)
+            {
+                printf("lynq_get_remote_rtp_ip success, ip is %s\n", get_ip);
+            }else{
+                printf("lynq_get_remote_rtp_ip error, ret is %d\n",ret);
+                return;
+            }
+        }else{
+            printf("lynq_get_remote_rtp_ip dlsym error\n");
+            return;
+        }
+
+        printf("lynq_set_vlan_info vlan info is %s\n",vlan_info);
+        lynq_set_vlan_info = (int (*)(const char* vlan_info, const int vlan_info_length))dlsym(dlHandle_call,"lynq_set_vlan_info");
+        if(NULL != lynq_set_vlan_info)
+        {
+            ret = lynq_set_vlan_info(vlan_info,strlen(vlan_info)+1);
+            if(ret == 0)
+            {
+                printf("lynq_set_vlan_info success!!!\n");
+            }else{
+                printf("lynq_set_vlan_info error, ret is %d\n",ret);
+                return;
+            }
+        }else{
+            printf("lynq_set_vlan_info dlsym error\n");
+            return;
+        }
+
+        printf("lynq_get_vlan_info\n");
+        lynq_get_vlan_info = (int (*)(char* get_vlan_info, const int vlan_info_length))dlsym(dlHandle_call,"lynq_get_vlan_info");
+        if(NULL != lynq_get_vlan_info)
+        {
+            ret = lynq_get_vlan_info(get_vlan_info,MAX_VLAN_INFO_LENGTH);
+            if(ret == 0)
+            {
+                printf("lynq_get_vlan_info success, vlan info is %s\n", get_vlan_info);
+            }else{
+                printf("lynq_get_vlan_info error, ret is %d\n",ret);
+                return;
+            }
+        }else{
+            printf("lynq_get_vlan_info dlsym error\n");
+            return;
+        }
+
+        printf("lynq_set_rtp_port, local port is %d, remote port is %d\n",local_port,remote_port);
+        lynq_set_rtp_port = (int (*)(const LYNQ_Rtp_Mode rtp_mode, const int port))dlsym(dlHandle_call,"lynq_set_rtp_port");
+        if(NULL != lynq_set_rtp_port)
+        {
+            ret = lynq_set_rtp_port(RTP_CLIENT, remote_port);
+            if(ret == 0)
+            {
+                printf("lynq_set_rtp_port RTP_CLIENT success!!!\n");
+            }else{
+                printf("lynq_set_rtp_port RTP_CLIENT error, ret is %d\n",ret);
+                return;
+            }            
+
+            ret = lynq_set_rtp_port(RTP_SERVER, local_port);
+            if(ret == 0)
+            {
+                printf("lynq_set_rtp_port RTP_SERVER success!!!\n");
+            }else{
+                printf("lynq_set_rtp_port RTP_SERVER error, ret is %d\n",ret);
+                return;
+            }            
+        }
+        else
+        {
+            printf("lynq_set_rtp_port dlsym error\n");
+            return;
+        }
+        
+        printf("lynq_get_rtp_port\n");
+        lynq_get_rtp_port = (int (*)(const LYNQ_Rtp_Mode rtp_mode, int* port))dlsym(dlHandle_call,"lynq_get_rtp_port");
+        if(NULL != lynq_get_rtp_port)
+        {
+            ret = lynq_get_rtp_port(RTP_CLIENT, &get_remote_port);
+            if(ret == 0)
+            {
+                printf("lynq_get_rtp_port RTP_CLIENT success, port is %d\n",get_remote_port);
+            }else{
+                printf("lynq_get_rtp_port RTP_CLIENT error, ret is %d\n",ret);
+                return;
+            }            
+
+            ret = lynq_get_rtp_port(RTP_SERVER, &get_local_port);
+            if(ret == 0)
+            {
+                printf("lynq_get_rtp_port RTP_SERVER success, port is %d\n",get_local_port);
+            }else{
+                printf("lynq_get_rtp_port RTP_SERVER error, ret is %d\n",ret);
+                return;
+            }            
+        }
+        else
+        {
+            printf("lynq_get_rtp_port dlsym error\n");
+            return;
+        }
+
+        printf("lynq_set_rtp_param, clock_rate is %d, channels is %d, latency is %d\n",clock_rate,channels,latency);
+        lynq_set_rtp_param = (int (*)(const int clock_rate,const int channels,const int latency))dlsym(dlHandle_call,"lynq_set_rtp_port");
+        if(NULL != lynq_set_rtp_param)
+        {
+            ret = lynq_set_rtp_param(clock_rate, channels, latency);
+            if(ret == 0)
+            {
+                printf("lynq_set_rtp_param success!!!\n");
+            }else{
+                printf("lynq_set_rtp_param error, ret is %d\n",ret);
+                return;
+            }            
+        }
+        else
+        {
+            printf("lynq_set_rtp_param dlsym error\n");
+            return;
+        }
+
+        printf("lynq_get_rtp_param success!!!\n");
+        lynq_get_rtp_param = (int (*)(int* clock_rate, int* channels, int* latency))dlsym(dlHandle_call,"lynq_get_rtp_param");
+        if(NULL != lynq_get_rtp_param)
+        {
+            ret = lynq_get_rtp_param(&get_clock_rate, &get_channels, &get_latency);
+            if(ret == 0)
+            {                
+                printf("lynq_get_rtp_param, clock_rate is %d, channels is %d, latency is %d\n",get_clock_rate,get_channels,get_latency);
+            }else{
+                printf("lynq_get_rtp_param error, ret is %d\n",ret);
+                return;
+            }            
+        }
+        else
+        {
+            printf("lynq_get_rtp_param dlsym error\n");
+            return;
+        }
+        set_voice_audio_mode(AUDIO_MODE_RTP);
+    } 
+    else 
+    {
+        set_voice_audio_mode(AUDIO_MODE_CODEC);
+    }
+
+}
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/data-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/data-demo.bb
new file mode 100755
index 0000000..6f43883
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/data-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "data demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://data-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "data-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall data-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+    install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/data-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/data-demo.cpp
new file mode 100755
index 0000000..e080e31
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/data-demo/files/data-demo.cpp
@@ -0,0 +1,256 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <pthread.h>

+#include <sys/types.h>

+#include <unistd.h>

+

+#undef LOG_TAG

+#define LOG_TAG "DATA_DEMO"

+

+void *dlHandle_data;

+void *dlHandle_log;

+

+#define LYNQ_APN_CHANNEL_MAX 10

+#define LYNQ_PDP_TYPE_MAX_LEN 16

+#define LYNQ_IFACE_NAME_MAX_LEN 50

+#define LYNQ_APN_MAX_LEN 50

+#define LYNQ_APN_TYPE_MAX_LEN 50

+#define LYNQ_PDP_ADDR_MAX_LEN 64

+#define LYNQ_DNS_ADDR_MAX_LEN 64

+#define LYNQ_GETWAYS_ADDR_MAX_LEN 64

+#define LYNQ_POXY_ADDR_MAX_LEN 64

+

+typedef struct {

+    int            status;     /* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no error */

+    int            suggestedRetryTime; /* If status != 0, this fields indicates the suggested retry

+                                           back-off timer value RIL wants to override the one

+                                           pre-configured in FW.

+                                           The unit is miliseconds.

+                                           The value < 0 means no value is suggested.

+                                           The value 0 means retry should be done ASAP.

+                                           The value of INT_MAX(0x7fffffff) means no retry. */

+    int            cid;        /* Context ID, uniquely identifies this call */

+    int            active;     /* 0=inactive, 1=active/physical link down, 2=active/physical link up */

+    char           type[LYNQ_PDP_TYPE_MAX_LEN];       /* One of the PDP_type values in TS 27.007 section 10.1.1.

+                                   For example, "IP", "IPV6", "IPV4V6", or "PPP". If status is

+                                   PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED this is the type supported

+                                   such as "IP" or "IPV6" */

+    char           ifname[LYNQ_IFACE_NAME_MAX_LEN];     /* The network interface name */

+    char           addresses[LYNQ_PDP_ADDR_MAX_LEN];  /* A space-delimited list of addresses with optional "/" prefix length,

+                                   e.g., "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64".

+                                   May not be empty, typically 1 IPv4 or 1 IPv6 or

+                                   one of each. If the prefix length is absent the addresses

+                                   are assumed to be point to point with IPv4 having a prefix

+                                   length of 32 and IPv6 128. */

+    char           dnses[LYNQ_DNS_ADDR_MAX_LEN];      /* A space-delimited list of DNS server addresses,

+                                   e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".

+                                   May be empty. */

+    char           gateways[LYNQ_GETWAYS_ADDR_MAX_LEN];   /* A space-delimited list of default gateway addresses,

+                                   e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".

+                                   May be empty in which case the addresses represent point

+                                   to point connections. */

+    char           pcscf[LYNQ_POXY_ADDR_MAX_LEN];    /* the Proxy Call State Control Function address

+                                 via PCO(Protocol Configuration Option) for IMS client. */

+    int            mtu;        /* MTU received from network

+                                   Value <= 0 means network has either not sent a value or

+                                   sent an invalid value */

+} lynq_data_call_response_v11_t;

+

+int (*lynq_init_data)(int uToken);

+int (*lynq_deinit_data)(void);

+int (*lynq_setup_data_call)(int *);

+int (*lynq_deactive_data_call)(int *);

+int (*lynq_setup_data_call_sp)(int *,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol);

+int (*lynq_get_data_call_list)(int *,lynq_data_call_response_v11_t *dataCallList);

+int (*lynq_wait_data_call_state_change)(int *);

+

+

+void *triggerUrcEvent(void *parg)

+{

+    int ret = -1;

+    int handle = -1;//data call state change handle

+    lynq_data_call_response_v11_t data_call_list;

+    memset(&data_call_list,0,sizeof(data_call_list));

+    printf("wait data call start!!!!");

+    while(1)

+    {

+        lynq_wait_data_call_state_change = (int (*)(int *handle))dlsym(dlHandle_data,"lynq_wait_data_call_state_change");

+        if(NULL != lynq_wait_data_call_state_change)

+        {

+            ret = lynq_wait_data_call_state_change(&handle);//wait data call state change,and get handle.

+            if(ret == 0)

+            {

+                printf("lynq_wait_data_call_state_change success!!!\n");

+            }else{

+                printf("lynq_wait_data_call_state_change error\n");

+            }

+        }else{

+            printf("lynq_wait_data_call_state_change dlsym error\n");

+        }

+        printf("data event handle=%d",handle);

+

+        lynq_get_data_call_list = (int (*)(int *handle,lynq_data_call_response_v11_t *dataCallList))dlsym(dlHandle_data,"lynq_get_data_call_list");

+        if(NULL != lynq_get_data_call_list)

+        {

+            ret = lynq_get_data_call_list(&handle, &data_call_list);//Query data call info list according to handle.

+            if(ret == 0)

+            {

+                printf("lynq_get_data_call_list success!!!\n");

+            }else{

+                printf("lynq_get_data_call_list error\n");

+            }

+        }else{

+            printf("lynq_get_data_call_list dlsym error\n");

+        }

+        if(ret == 0)

+        {

+            printf("cid:%d,iface:%s,IP:%s",data_call_list.cid,data_call_list.ifname,data_call_list.addresses);

+        }

+        memset(&data_call_list,0,sizeof(data_call_list));

+    }

+    return NULL;

+}

+

+//此demo 示例建立两路APN,以中国移动SIM卡为例。默认每一个API 执行都成功,依次往下执行。

+int main(int argc, char *argv[])

+{

+    printf("[LYNQ_DATA_DEMO]--------->[%s,%d] start",__FUNCTION__,__LINE__);

+    int ret = -1;

+    int32_t requestId = 0;

+    int32_t status = 0;

+    char apn[100] = {0};

+    char apnType[50] = {0};

+    char iface[50] = {0};

+    int handle_1 = -1;//第一路APN 句柄

+    int handle_2 = -1;//第二路APN 句柄

+    int handle_3 = 10;

+    char *argv_t[10]={0};

+    argv_t[0] = "cmwap";

+    argv_t[1] = "wap";

+    argv_t[2] = "IPV4V6";

+    argv_t[3] = "IPV4V6";

+    pthread_t tid;

+    pthread_attr_t attr;

+    pthread_attr_init(&attr);

+    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

+

+    const char *lynq_libpath_data = "/lib64/liblynq-data.so";

+    const char *lynq_libpath_log = "/lib64/liblynq-log.so";

+

+

+    dlHandle_data = dlopen(lynq_libpath_data,RTLD_NOW);

+    if(dlHandle_data == NULL)

+    {

+        printf("dlopen dlHandle_data failed: %s", dlerror());

+        exit(EXIT_FAILURE);

+    }

+    dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);

+    if(dlHandle_log == NULL)

+    {

+        printf("dlopen dlHandle_log failed: %s", dlerror());

+        exit(EXIT_FAILURE);

+    }

+

+    lynq_init_data = (int(*)(int))dlsym(dlHandle_data,"lynq_init_data");

+    if(NULL == lynq_init_data)

+    {

+        printf("lynq_init_data not defined or exported in %s\r\n", lynq_libpath_data);

+        exit(EXIT_FAILURE);

+    }

+    

+    ret = lynq_init_data(2022);//初始化数据业务。

+

+    sleep(1);

+    if(ret == 0)

+    {

+        printf("init data call success!!!\n");

+    }

+    else

+    {

+        printf("init data call fail!!!\n");

+        return -1;

+    }

+    ret = pthread_create(&tid,&attr,triggerUrcEvent,NULL);//创建一个线程用来处理data call改变事件。

+

+    sleep(1);//等待线程tid 开始执行。

+

+    lynq_setup_data_call = (int (*)(int *))dlsym(dlHandle_data,"lynq_setup_data_call");

+    if(NULL != lynq_setup_data_call)

+    {

+        ret = lynq_setup_data_call(&handle_1);//默认APN 参数拨号上网。

+        if(ret == 0)

+        {

+            printf("setup data call success!!!\n");

+        }else{

+            printf("setup data call error\n");

+        }

+    }else{

+        printf("lynq_setup_data_call dlsym error\n");

+    }

+    sleep(10); //等待handle_1 建立好

+

+    //带APN 参数进行拨号上网

+    lynq_setup_data_call_sp = (int (*)(int *,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol))dlsym(dlHandle_data,"lynq_setup_data_call_sp");

+    if(NULL != lynq_setup_data_call_sp)

+    {

+        ret = lynq_setup_data_call_sp(&handle_2,argv_t[0],argv_t[1],NULL,NULL,NULL,argv_t[2],argv_t[3]);//sp APN 参数拨号上网。

+        if(ret == 0)

+        {

+            printf("setup data call sp success!!!\n");

+        }else{

+            

+            printf("setup data call sp error\n");

+        }

+    }else{

+        printf("lynq_setup_data_call_sp dlsym error\n");

+    }

+    sleep(10);//等待handle_1 建立好

+    printf("start lynq_deactive_data_call handle_1");

+

+    lynq_deactive_data_call = (int (*)(int *))dlsym(dlHandle_data,"lynq_deactive_data_call");

+    if(NULL != lynq_deactive_data_call)

+    {   

+        ret = lynq_deactive_data_call(&handle_1);//去激活第一路data call

+        if(ret == 0)

+        {

+            printf("deactive data call handle_1 success!!!\n");

+        }else{

+            printf("deactive data call error\n");

+        }

+    }else{

+        printf("lynq_deactive_data_call dlsym error\n");

+    }

+    sleep(5);

+

+    printf("start lynq_deactive_data_call handle_2\n");

+

+

+    ret = lynq_deactive_data_call(&handle_2);//去激活第二路data call

+    if(ret == 0)

+    {

+        printf("deactive data call handle_2 success!!!\n");

+    }else{

+        printf("deactive data call error\n");

+    }

+

+    sleep(5);

+

+    lynq_deinit_data = (int (*)(void))dlsym(dlHandle_data,"lynq_deinit_data");

+    if(NULL != lynq_deinit_data)

+    {

+        ret = lynq_deinit_data();

+        if(ret == 0)

+        {

+            printf("deinit data call success!!!\n");

+        }else{

+            printf("deinit data call error\n");

+        }

+    }else{

+        printf("lynq_deinit_data dlsym error\n");

+    }

+    sleep(5);

+    return 0;

+

+}

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/e-call-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/e-call-demo.bb
new file mode 100755
index 0000000..d4fe766
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/e-call-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "e call demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://e-call-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "e-call-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall ${LOCAL_C_INCLUDES} e-call-demo.cpp ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/e-call-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/e-call-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/e-call-demo.cpp
new file mode 100755
index 0000000..6589f56
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/e-call-demo/files/e-call-demo.cpp
@@ -0,0 +1,239 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+#undef LOG_TAG
+#define LOG_TAG "E_CALL_DEMO"
+
+void *dlHandle_call;
+void *dlHandle_log;
+
+typedef enum{
+    LYNQ_ECALL_SET_NUMBER = 0,     /* Set Number */
+    LYNQ_ECALL_SET_URI = 1,      /* Set Uri */   
+}LYNQ_ECall_Set_Type;
+
+typedef enum{
+    LYNQ_EMER_CAT_MANUAL_ECALL = 0,      /* Manual Emergency eCall */
+    LYNQ_EMER_CAT_AUTO_ECALL = 1,     /*  Automatic Emergency eCall */
+}LYNQ_ECall_Category;
+
+typedef enum{
+    LYNQ_ECALL_TEST = 0,     /* Test eCall */
+    LYNQ_ECALL_EMERGENCY = 1,      /* Emergency eCall */
+    LYNQ_ECALL_RECONFIG = 2,     /*  Reconfiguration eCall */
+    LYNQ_ECALL_VAR_MAX, 
+}LYNQ_ECall_Variant;
+
+typedef enum{
+    LYNQ_ECALL_SENDING_START = 1,
+    LYNQ_ECALL_SENDING_MSD = 2,
+    LYNQ_ECALL_LLACK_RECEIVED = 3,
+    LYNQ_ECALL_ALACK_POSITIVE_RECEIVED = 4,
+    LYNQ_ECALL_ALACK_CLEARDOWN_RECEIVED = 5,
+    LYNQ_ECALL_ACTIVE = 11,
+    LYNQ_ECALL_DISCONNECTED = 12,
+    LYNQ_ECALL_IMS_ACTIVE = 13,
+    LYNQ_ECALL_IMS_DISCONNECTED = 14,
+    LYNQ_ECALL_ABNORMAL_HANGUP=15,
+    LYNQ_ECALL_IMS_MSD_ACK = 20,
+    LYNQ_ECALL_IMS_UPDATE_MSD = 21,
+    LYNQ_ECALL_IMS_IN_BAND_TRANSFER = 22,
+    LYNQ_ECALL_IMS_MSD_NACK = 23,
+    LYNQ_ECALL_IMS_SRVCC = 24,
+    LYNQ_ECALL_ONLY_DEREGISTRATION = 31,
+    LYNQ_ECALL_MAY_DEREGISTER = 32,
+    LYNQ_ECALL_PSAP_CALLBACK_START = 40,
+    LYNQ_ECALL_PSAP_CALLBACK_IMS_UPDATE_MSD = 41,
+    LYNQ_ECALL_UNSPECIFIED = 0xffff,
+}LYNQ_ECall_Indication;
+
+int (*lynq_init_call)(int);
+int (*lynq_deinit_call)(void);
+int (*lynq_call)(int *handle,char addr[]);
+int (*lynq_call_hungup)(int *handle);
+int (*lynq_set_test_num)(LYNQ_ECall_Set_Type type, const char *test_num, int test_num_length);
+int (*lynq_fast_ecall)(int* handle, LYNQ_ECall_Category lynq_ecall_cat, LYNQ_ECall_Variant lynq_ecall_variant,  const char *addr, int addr_length, const unsigned char *msd_data, int msd_length);
+int (*lynq_set_msd)(int* handle, const unsigned char *msd_data, int msd_length);
+int (*lynq_set_ivs)(int enable);
+int (*lynq_ivs_push_msd)();
+int (*lynq_wait_ecall_indication)(int* handle, LYNQ_ECall_Indication *eCall_Indication);
+
+/*
+argc shoudl be 7
+argv[0] is "e-call-demo"
+argv[1] is ecall_set_type, between LYNQ_ECALL_SET_NUMBER and LYNQ_ECALL_SET_URI
+argv[2] is ecall_cat, between LYNQ_ECALL_TEST and LYNQ_ECALL_RECONFIG
+argv[3] is ecall_variant, between LYNQ_EMER_CAT_MANUAL_ECALL and LYNQ_EMER_CAT_AUTO_ECALL
+argv[4] is EMERGENCY call number or Test Call Number or Reconfig Number, depends on ecall_cat
+argv[5] is Msd Data
+argv[6] is new Msd Data*/
+
+int main(int argc, char const *argv[])
+{
+    int ret = 0;
+    int handle = -1; 
+    const char *lynqLibPath_Call = "/lib64/liblynq-call.so";
+    const char *lynqLibPath_Log = "/lib64/liblynq-log.so";
+    int ecall_cat;
+    int ecall_variant;
+    const char *addr;
+    const unsigned char *msd_data;
+    int type;
+    LYNQ_ECall_Indication eCall_Indication;
+
+    if(argc!=7)
+    {
+        printf("the argc %d is not equal 7", argc);
+        exit(EXIT_FAILURE);
+    }
+
+    type=atoi(argv[1]);
+    ecall_cat=atoi(argv[2]);
+    ecall_variant=atoi(argv[3]);
+    addr=argv[4];
+    msd_data =(const unsigned char *) (argv[5]);
+
+    if(ecall_cat < 0 || ecall_cat>1 ||
+       ecall_variant < 0 || ecall_variant >= LYNQ_ECALL_VAR_MAX || type < 0 || type >1)
+    {
+        printf("parameter error");
+        exit(EXIT_FAILURE);
+    }           
+    
+    dlHandle_call = dlopen(lynqLibPath_Call, RTLD_NOW);
+    if (dlHandle_call == NULL) 
+    {
+        printf("dlopen dlHandle_call failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    dlHandle_log = dlopen(lynqLibPath_Log, RTLD_NOW);
+    if (dlHandle_log == NULL) 
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    lynq_init_call = (int(*)(int))dlsym(dlHandle_call, "lynq_init_call");
+    if (lynq_init_call == NULL) {
+        printf("lynq_init_call not defined or exported in %s", lynqLibPath_Call);
+        exit(EXIT_FAILURE);
+    }
+    dlerror(); // Clear any previous dlerror
+    printf("--------->[%s,%d] start",__FUNCTION__,__LINE__);
+    ret = lynq_init_call(2022);   
+    sleep(1); 
+
+    /**********set test number**********/
+    printf("lynq_set_test_numl!!! type is %d, test_num is %s, test_num_length is %d\n",type,addr,strlen(addr)+1);
+    lynq_set_test_num = (int(*)(LYNQ_ECall_Set_Type type, const char *test_num, int test_num_length))dlsym(dlHandle_call,"lynq_set_test_num");
+
+    if(NULL != lynq_set_test_num)
+    {
+        ret = lynq_set_test_num((LYNQ_ECall_Set_Type) type,addr,strlen(addr)+1);
+        if(ret == 0)
+        {
+            printf("set test number success\n");
+        }else{
+            printf("set test number error\n");
+        }
+    }else{
+        printf("lynq_set_test_num call dlsym error\n");
+        exit(EXIT_FAILURE);
+    }   
+
+    /**********dail fast call**********/
+    printf("Dial a fast call!!! Addr is %s, ecall_cat is %d, ecall_variant is %d, msd is %s\n", addr,ecall_cat,ecall_variant,msd_data);
+    lynq_fast_ecall = (int(*)(int* handle, LYNQ_ECall_Category lynq_ecall_cat, LYNQ_ECall_Variant lynq_ecall_variant,  const char *addr, int addr_length, const unsigned char *msd_data, int msd_length))dlsym(dlHandle_call,"lynq_fast_ecall");
+
+    if(NULL != lynq_fast_ecall)
+    {
+        ret = lynq_fast_ecall(&handle, (LYNQ_ECall_Category) ecall_cat, (LYNQ_ECall_Variant) ecall_variant,  "null", 5,msd_data,strlen(argv[5]));
+        if(ret == 0)
+        {
+            printf("dial fast call success, handle is %d\n", handle);
+        }else{
+            printf("dial fast call error\n");
+        }
+    }else{
+        printf("lynq_fast_ecall call dlsym error\n");
+        exit(EXIT_FAILURE);
+    }   
+
+    printf("60s begin\n");
+    sleep(60);
+    printf("60s end\n");
+
+    lynq_wait_ecall_indication = (int(*)(int* handle, LYNQ_ECall_Indication *eCall_Indication))dlsym(dlHandle_call,"lynq_wait_ecall_indication");
+
+    while(1)
+    {
+        lynq_wait_ecall_indication(&handle, &eCall_Indication);
+        printf("recvd ecall indication %d", eCall_Indication);
+        if(eCall_Indication==LYNQ_ECALL_SENDING_START)
+        {
+            /**********set New MSD**********/
+            msd_data=(const unsigned char *) (argv[6]);
+            printf("set new msd !!! msd is %s\n",msd_data);    
+            lynq_set_msd = (int (*)(int* handle, const unsigned char *msd_data, int msd_length))dlsym(dlHandle_call,"lynq_set_msd");
+            if(NULL != lynq_set_msd)
+            {
+                ret = lynq_set_msd(&handle, msd_data,strlen(argv[6]));
+                if(ret == 0)
+                {
+                    printf("set new msd success!!!\n");
+                }else{
+                    printf("set new msd fail");
+                }
+            }else{
+                printf("lynq_set_msd dlsym error");
+            }
+            /**********set MSD --end**********/
+        }
+        else if (eCall_Indication==LYNQ_ECALL_LLACK_RECEIVED) 
+        {
+            printf("recvd LYNQ_ECALL_LLACK_RECEIVED, msd is recved by psap");
+            break;
+        }    
+    }
+    
+    sleep(10);
+
+    lynq_call_hungup = (int (*)(int *handle))dlsym(dlHandle_call,"lynq_call_hungup");
+    if(NULL != lynq_call_hungup)
+    {
+        ret = lynq_call_hungup(&handle);
+        if(ret == 0)
+        {
+            printf("hungup call success!!!\n");
+        }else{
+            printf("hungup call error\n");
+        }
+    }else{
+        printf("lynq_call_hungup dlsym error\n");
+    }
+    sleep(5);
+
+
+    lynq_deinit_call = (int (*)(void))dlsym(dlHandle_call,"lynq_deinit_call");
+    if(NULL != lynq_deinit_call)
+    {
+        ret = lynq_deinit_call();
+        if(ret == 0)
+        {
+            printf("deinit call success!!!\n");
+        }else{
+            printf("deinit call error\n");
+        }
+    }else{
+        printf("lynq_deinit_call dlsym error\n");
+    }   
+
+    sleep(5);
+   
+    return 0;
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world/hello-world.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world/hello-world.cpp
new file mode 100644
index 0000000..0614b7e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world/hello-world.cpp
@@ -0,0 +1,6 @@
+#include <stdio.h>
+ 
+int main(int argc, char *argv[]){
+    printf("Hello world!\n");
+    return 0;
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world_1.0.0.bb
new file mode 100644
index 0000000..08282e8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/hello-world/hello-world_1.0.0.bb
@@ -0,0 +1,26 @@
+# Package summary
+SUMMARY = "Hello World"
+# License, for example MIT
+LICENSE = "MIT"
+# License checksum file is always required
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+ 
+# hello-world.c from local file
+SRC_URI = "file://hello-world.cpp"
+ 
+# Set LDFLAGS options provided by the build system
+TARGET_CC_ARCH += "${LDFLAGS}"
+ 
+# Change source directory to workdirectory where hello-world.cpp is
+S = "${WORKDIR}"
+ 
+# Compile hello-world from sources, no Makefile
+do_compile() {
+    ${CXX} -Wall hello-world.cpp -o hello-world
+}
+ 
+# Install binary to final directory /usr/bin
+do_install() {
+    install -d ${D}${bindir}
+    install -m 0755 ${S}/hello-world ${D}${bindir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom
new file mode 100755
index 0000000..5d425ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom.injected b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom.injected
new file mode 100755
index 0000000..f2f6ddc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/SECTON.packed_bin.rom.injected
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/atk_flasher b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/atk_flasher
new file mode 100755
index 0000000..51e538b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/atk_flasher
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/calib_file.bin b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/calib_file.bin
new file mode 100755
index 0000000..4357784
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/calib_file.bin
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen
new file mode 100755
index 0000000..a1f8f91
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen_5.16.0_armv8 b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen_5.16.0_armv8
new file mode 100755
index 0000000..4ba2db7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cgen_5.16.0_armv8
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x-example b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x-example
new file mode 100755
index 0000000..5e390a6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x-example
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_rrc_config.uper b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_rrc_config.uper
new file mode 100755
index 0000000..6087310
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_rrc_config.uper
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_sw_config.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_sw_config.txt
new file mode 100755
index 0000000..483ae10
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/cv2x_sw_config.txt
@@ -0,0 +1,26 @@
+/* use 0x100 for tx only mode DSP_CONTROL_F_RX_DATA_PROC_DISABLE*/
+/* use 0x200 to disable rssi sorting  DSP_CONTROL_F_RSSI_SORTING_DISABLE*/
+/* use 0x400 to Decode HARQ second frame also if first was decoded successfully DSP_CONTROL_F_HARQ_FORCE_DECODE_SECOND */
+/* use 0x800 to Disable High Doppler feature DSP_CONTROL_F_HIGH_DOPPLER_DISABLE */
+/* use 0x0 to enable rssi sorting (which disables harq)  */
+cv2x_lmac_flags=0x200
+
+/* subset config */
+cv2x_subchannel_bitmap_mcs0=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs1=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs2=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs3=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs4=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs5=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs6=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs7=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs8=0xFFFFFFFF
+cv2x_subchannel_bitmap_mcs9=0x0
+cv2x_subchannel_bitmap_mcs10=0x0
+cv2x_subchannel_bitmap_mcs11=0xFFFFF
+cv2x_subchannel_bitmap_mcs12=0x3FFFF
+cv2x_subchannel_bitmap_mcs13=0xFFFF
+cv2x_subchannel_bitmap_mcs14=0x3FFF
+cv2x_subchannel_bitmap_mcs15=0x1FFF
+cv2x_subchannel_bitmap_mcs16=0xFFF
+cv2x_subchannel_bitmap_mcs17=0x7FF
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/device_logs.csv b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/device_logs.csv
new file mode 100755
index 0000000..0a08ab8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/device_logs.csv
@@ -0,0 +1,3676 @@
+

+file_id,0,wlan_dsp_utils.c

+"value:%d",0,237

+"array_size = %d\n",1,635

+"tempr_arr[0] = %d\n",2,651

+"Unrecognized TLV type %d, skipping.\n",3,825

+"Invalid magic %x",4,974

+"Invalid format (type) %d",5,1020

+"Invalid format (size) %d",6,1028

+"type:%x size:%x",7,1034

+"Invalid format %d",8,1037

+"Unrecognized TLV type %d, skipping.\n",9,1346

+

+file_id,1,atlk_mailbox.c

+"req_status=0x%08x, pending_interrupts=0x%08x irq_mask=0x%08x",0,39

+"Invalid mailbox_id=%d",1,50

+"mailbox_base is NULL",2,66

+"mailbox is NULL",3,71

+"mailbox is NULL",4,96

+"Invalid source mask == 0",5,116

+"Only a single bit is valid as argument: source_mask=%u",6,128

+"Invalid bit: %u",7,135

+"Invalid mailbox == NULL",8,157

+"Invalid source int_handler == NULL",9,162

+"interrupt_source_mask=%u is already registered: interrupt_handlers[bit=%u]=%p",10,175

+"Invalid mailbox == NULL",11,197

+"Called",12,229

+"bit_mask=0x%08x",13,246

+"Interrupt: %u, but no handler",14,256

+"mailbox is NULL",15,277

+"interrupt_mask=0x%08x",16,284

+

+file_id,2,block_pool.c

+"Block pool descriptor is not specified",0,20

+"Block pool memory area is not specified",1,25

+"Block pool memory area is not aligned in a uintptr_t boundary",2,31

+"BLOCK_POOL_ATTRIBUTE_THREAD_SAFE and BLOCK_POOL_ATTRIBUTE_TASKLET_SAFE cannot be used together on the same pool",3,39

+"Block pool descriptor is not specified",4,84

+"Allocated block is not specified",5,89

+"Block pool is not initialized",6,94

+"Block pool descriptor is not specified",7,203

+"Block pool is not initialized",8,208

+

+file_id,3,boot_timer.c

+"All phases marked",0,56

+"mtu_init failed",1,134

+

+file_id,6,cyclic_buffer.c

+"Line number: %u",0,101

+"RO: %u, WO: %u, RS: %u, WS: %u, HS: %u HP: %x",1,102

+"cyclic_buffer_enqueue failed, null pointer",2,204

+"invalid NULL pointer",3,247

+"buffer is was not initialized",4,255

+"invalid NULL pointer",5,273

+"buffer is was not initialized",6,281

+"cyclic_buffer_deinit failed, NULL pointer",7,297

+"cyclic_buffer_init failed, NULL pointer",8,317

+"cyclic_buffer_init failed, input buffer size is to small",9,322

+"cyclic_buffer_enqueue failed, null pointer",10,361

+"total room needed needed %u is bigger than (buffer size - buffer_header) / 2 %u, buffer address 0x%08x",11,389

+"cyclic_buffer_dequeue failed, null pointer 0x%x 0x%x 0x%x",12,518

+"buffer_size is zero or magic number is not as expected",13,528

+"cyclic_buffer_0x%08x: payload_dequeue failed, prefix overrun setting read_offset = write_offset",14,558

+"cyclic_buffer_0x%08x: payload_dequeue failed, payload size is to big: %d, setting read_offset = write_offset",15,571

+

+file_id,9,osal_mux_io.c

+"craton2_soc_revision_get() failed! rc=%d",0,103

+"No access to M3_GPIO bank",1,112

+"Invalid bank %u",2,119

+"Invalid gpio: bank %u gpio %u",3,126

+"Failed to map gpio registers (start=0x%08lx, len=%zu), rc %d",4,140

+"Failed to get virtual address",5,147

+"Invalid modes: mode %u",6,180

+"Failed to unmap gpio registers rc %d",7,192

+

+file_id,12,remote_counters.c

+"remote_counters_ptr is NULL",0,10

+"counters_ptr is NULL",1,15

+"remote_counters_ptr is NULL",2,45

+"counters_ptr is NULL",3,50

+

+file_id,14,spscq.c

+"Failed to wait SPSCQ_sem_element_count",0,127

+

+file_id,17,wait.c

+"timeout is NULL",0,22

+"*timeout is NULL",1,27

+"Timeout is not specified",2,79

+"Invalid wait option type %d",3,101

+

+file_id,18,rt.c

+"Registration of COMMON/RT statistics failed, rc = %u",0,167

+"Creating tpdu pool: num of elements %d, element size %d (includes metadata), total %u",1,171

+"Creating HB pool: num of elements %d, element size %d (includes metadata), total %u",2,185

+"Creating fragments send pool: num of elements %d, element size %d (includes metadata), total %u",3,199

+"Creating fragmentation recv pool: num of elements %d, element size %d (includes metadata), total %u",4,213

+"block_pool_deinit failed, rc = %d",5,250

+"block_pool_deinit failed, rc = %d",6,255

+"block_pool_deinit rt_fragments_send_block_pool_g failed, rc = %d",7,260

+"block_pool_deinit rt_fragmentation_recv_block_pool_g failed, rc = %d",8,265

+"Mandatory arguments not specified",9,300

+"L2 not ready",10,309

+"l2_packet_recv failed: rc = %d",11,321

+"Expected packet index %d, but received %d",12,346

+"Expected fragment index %d, but received %d",13,362

+"Packet too big %d > %d",14,391

+"Packet too big %d > %d",15,393

+"block_pool_alloc failed, rc = %d",16,409

+"Failed to copy fragment data",17,424

+"Packet too big %d > %d",18,436

+"Packet too big %d > %d",19,438

+"RT CRC mismatch: calculated %08X but received %08X",20,468

+"RT version mismatch: expected %d but received %d",21,477

+"secure_hdif_buffer_decrypt_and_authenticate failed rc=%d",22,515

+"Mandatory argument not specified",23,596

+"L2 not ready",24,607

+"secure_hdif_buffer_cbc_encrypt_and_cmac_get Failed %d",25,657

+"Not enough L2 space available for %d bytes",26,709

+"Not enough memory in L2",27,723

+"block_pool_alloc failed, rc = %d",28,745

+"Failed to push data",29,763

+"l2_packet_send() failed - rv=%d",30,781

+"Mandatory arguments not specified",31,866

+"rt_packet_ptr does not have SDU",32,871

+"Invalid pre_len %d",33,879

+"data_size %u exceeds L2 pkt pre_len %u",34,884

+"Mandatory arguments not specified",35,904

+"rt_packet_ptr does not have SDU",36,909

+"data_size %u exceeds l2_pkt data_length len %u",37,917

+"Mandatory arguments not specified",38,943

+"rt_packet_ptr does not have SDU",39,948

+"Invalid post_len %d",40,956

+"data_size %u exceeds l2_pkt pkt post_len %u",41,961

+"Mandatory arguments not specified",42,982

+"Mandatory arguments not specified",43,1001

+"rt_packet_ptr does not have SDU",44,1006

+"data_size %u exceeds l2_pkt pkt len %u",45,1016

+"Mandatory arguments not specified",46,1050

+"rt_packet_ptr does not have SDU",47,1055

+"rt_l2_pkt pointers are out of range",48,1060

+"rt_packet_ptr is NULL",49,1089

+"RT Packet data_start NULL",50,1093

+"rt_packet_ptr is NULL",51,1104

+"RT Packet data_start NULL",52,1108

+"rt_stat_ptr parameter not specified",53,1119

+"available %lu, total_vlocks %lu",54,1146

+

+file_id,19,craton2_soc.c

+"Mandatory function argument is not specified",0,21

+"Get cut revision from shared data has failed; rc = %d",1,28

+"Get erom version from shared data has failed; rc = %d",2,34

+"Unknown SoC revision - rom_version=0x%04x, erom_version=0x%02x, cut_rev=0x%02x",3,77

+"CRATON-2 SoC revision: rom_version=0x%04x, erom_version=0x%02x, cut_rev=0x%02x, soc_rev=0x%02x",4,84

+"Mandatory function argument is not specified",5,97

+"shared_data_erom_version_get() failed! rc=%d",6,104

+"soc_erom_version = 0x%x",7,109

+

+file_id,20,atlk_cca.c

+"Invalid args: cca_gpio = %u",0,26

+"Invalid args: cca_gpio = %u",1,40

+"mux_io_set failed for cca_gpio = %u, mode = %u, rc = %u",2,49

+"lmac_driver_wdm_control_mem_read failed, rc = %u",3,57

+"lmac_driver_wdm_control_mem_write failed, rc = %u",4,68

+

+file_id,21,atlk_pps.c

+"Invalid args: pps_gpio %u",0,21

+"mux_io_set failed for pps_gpio %u, mode %u, rc %u",1,29

+

+file_id,22,rf_loader.c

+"Failed to get sw_config, rc = %u",0,89

+"Calibration file wasn't loaded from Host",1,108

+"Invalid calibration file size, %u > %u",2,114

+"Reading calibration file from Host",3,119

+"Reading calibration file from EEPROM",4,125

+"RF configuration file wasn't loaded from Host",5,145

+"Invalid RF configuration file size, %u > %u",6,151

+"Reading RF configuration file from Host",7,156

+"Reading RF configuration file from EEPROM",8,162

+"Extended calibration file wasn't loaded from Host",9,171

+"Reading extended calibration file from Host",10,177

+"Invalid file_type %u",11,184

+"Bad arg(s)",12,199

+"wlan_dsp_get_auxilary_mem_bin_size() - failed, rc = %u",13,264

+"rf_loader file %u: CRC OK, 0x%08x, size %d",14,275

+"rf_loader file %u: CRC failed, expected 0x%08x, actual 0x%08x, size %d",15,278

+"'buffer_pptr' is null",16,309

+"'*size' is null",17,315

+"eprom_offsets_get() - failed, rc = %u",18,323

+"rf_loader file %u: offset = %u, size = %u",19,335

+"rf_loader file %u: read failed, rc = %u",20,346

+"'size' is NULL or 0",21,387

+"Enter, total size %u",22,432

+"size %u exceeds max %d",23,436

+"Out of memory",24,446

+"size %u",25,455

+"Wrong buffer",26,475

+"chunk_size %u exceeds max %d",27,480

+"chunk_size %u exceeds total size %u",28,485

+"Offset %u exceeds total size %u",29,490

+"Offset + chunk_size %u exceeds total size %u",30,495

+"size %u, offset %u",31,501

+"rf_loader file %u: file not found",32,522

+"one_byte_checksum failed, rc = %u",33,529

+"Invalid Digest",34,534

+"Digest %u match",35,539

+"EEPROM isn't supported",36,553

+"rf_loader file %u: failed to write, invalid format",37,559

+"rf_loader file %u: Failed to write, size doesn't match %d %d",38,569

+"rf_loader file %u: failed to write to eeprom, rc = %u",39,577

+"Calibration size exceeds %d",40,583

+"rf_loader file %u: failed to read (in order to verify), rc = %u",41,590

+"rf_loader file %u: failed verifying",42,596

+"chunk_size %u exceeds max %d",43,626

+"offset %u exceeds total size %d",44,631

+"'data' is null",45,636

+"chunk_size = %u, offset = %u",46,641

+"max_size = %d",47,642

+"rf_loader file %u: failed to read chunk, rc = %u",48,649

+"Failed to map auxiliary memory (start=0x%08lx), rc = %u",49,668

+"Failed to get EEPROM offsets initialization status, rc = %u",50,680

+"Failed to get EEPROM offsets, rc = %u",51,692

+"sw_config_get Failed, rc = %u",52,698

+"Cfg initialized successfully",53,715

+

+file_id,23,ceva_loader.c

+"Qswap",0,22

+"start",1,44

+"raw_binary_image is NULL",2,47

+"raw_binary_size is 0",3,51

+"dst is NULL",4,55

+"dst_mem_size is 0",5,59

+"Switching 128-bit dword endianness: dst=%p",6,78

+"Switching 64-bit dword endianness: dst=%p",7,117

+"WARNING: mem_switch_dwords_qswap() not supported on accordo5",8,121

+

+file_id,24,ceva_loader_dma.c

+"Enter",0,119

+"DMA Transfer complete",1,182

+"DMA Transfer not complete, ch1_blk_ts_val %x tmp %x",2,193

+"DMA Transfer Failed",3,197

+

+file_id,25,ceva_loader_driver.c

+"physmem_map failed, rc = %u",0,122

+"Stored %u bytes from %p into WLAN debug memory (%p)",1,132

+"physmem_unmap failed, rc = %u",2,137

+"Invalid type %u",3,172

+"relocating dsp_buffer_address from: 0x%x, to: 0x%x",4,201

+"Failed to map physical memory for CEVA configuration ",5,226

+"(start=0x%08x, len=%d), rc %d",6,227

+"physmem_unmap failed, rc=%d",7,243

+"Secure load library is not loaded. unable to authenticate image",8,312

+"Secure load library is loaded as Module %d",9,316

+"Image verification with security level= %d",10,348

+"Image verified, addr=0x%x (%u bytes)",11,366

+"Image not verified, proceeding with image (addr=0x%x, size=%d) as security level is zero",12,370

+"Ceva image verification failed\r\n",13,377

+"physmem_map failed, rc = %u",14,409

+"memcpy(%p, %p, %d)\r\n",15,415

+"physmem_unmap failed, rc = %u",16,424

+"Invalid type %d",17,440

+"size %u exceeds max %d",18,451

+"craton2_soc_revision_g_get failed, rc %u",19,460

+"image_address_unmap() failed, rc %d",20,473

+"image_address_map() failed, rc %d",21,489

+"Invalid type %d",22,528

+"type %d not as expected %d",23,534

+"chunk_size %u exceeds max %d",24,540

+"image_buffer_ptr=%x, size %u, offset %u",25,546

+"offset + chunk_size %u exceeds total size %u",26,550

+"Image isn't mapped",27,557

+"Invalid type %d",28,620

+"type %d not as expected %d",29,626

+"Size is zero",30,632

+"File of type %d is empty or does not exist",31,638

+"buffer ptr = %p, buffer size = %u",32,642

+"one_byte_checksum failed, rc = %u",33,646

+"ceva_loader_authenticate() failed, rc %d",34,659

+"ceva_loader(type=%d) authentication OK.",35,663

+"Post authentication: buffer ptr = %p, buffer size = %u",36,669

+"ceva_loader(type=%d) size is greater than 32KB",37,676

+"ceva_loader(type=%u) isn't compressed",38,687

+"ceva_loader(type=%u) is compressed, decompressing...",39,690

+"image_address_unmap() failed, rc %d",40,696

+"image_address_map() failed, rc %d",41,709

+"compressed size (%u) is bigger than image size (%u)",42,730

+"wlan_debug_memory_image_store failed, rc = %u",43,748

+"Not enough space exist for DSP image. start = %p, end = %p, requested size = %u",44,757

+"image moved from %p to %p",45,769

+"image decompress succeeded",46,777

+"%u bytes decompressed from %p to %p",47,778

+"image decompress failed",48,784

+"image size %u not %d aligned",49,793

+"physmem_map failed, rc = %u",50,810

+"copied+swapped %u bytes from %p to %p",51,826

+"copied %u bytes from %p to %p",52,831

+"physmem_unmap failed, rc=%d",53,838

+"Invalid Digest, digest.value=%u, exp_digest=%u",54,846

+"Digest %u match, type %d",55,856

+"ceva_dsp_full_reset",56,859

+"ceva_dsp_full_reset() failed rc %u",57,863

+"physmem_map failed",58,874

+"Failed to get pointer from physmem_ptr_get",59,880

+"dma_rgf_address = %x",60,884

+"physmem_map failed",61,895

+"memcpy(%p, %p, %d)\r\n",62,909

+"ceva_loader_sdma_copy_dtcm_to_ptcm() failed, rc %u",63,915

+"physmem_unmap failed, rc=%d",64,924

+"physmem_unmap failed, rc=%d",65,930

+"ceva_loader_sdma_copy_dtcm_to_ptcm() failed, rc %u",66,941

+"ceva_loader_sdma_copy_dtcm_to_ptcm OK, size=%d",67,944

+"Failed to map physical memory for CEVA configuration ",68,954

+"(start=0x%08x, len=%d), rc %d",69,955

+"physmem_unmap failed, rc=%d",70,969

+"ceva_loader_dtcm_copy_in_chunks failed, rc = %u",71,981

+"Failed to map physical memory for DSP cookie",72,1006

+"(start=0x%08x, len=%d), rc %d",73,1007

+"physmem_unmap failed, rc=%d",74,1023

+"wlan_dsp_parse_version_str failed, rc %u",75,1029

+"Expected DSP SW revision 1, protocol mismatch.",76,1057

+"Expected DSP SW revision 2, protocol mismatch.",77,1066

+"Expected DSP SW revision 3, protocol mismatch.",78,1073

+"Unsuppported SoC revision 0x%X",79,1079

+"DSP version matches baseband V2X hardware revision",80,1084

+"calling ceva_dsp_release_from_reset",81,1087

+"ceva_dsp_release_from_reset() failed rc %u",82,1092

+"calling ceva_dsp_release_from_reset OK",83,1096

+"File type %d doesn't need special ceva dsp handling",84,1099

+"DSP Loaded OK",85,1102

+"image_address_unmap() failed, rc %d",86,1110

+

+file_id,26,ceva_loader_lib.c

+"count (%u) > max_count (%u)",0,40

+"[%u] DSP PC=0x%08x",1,52

+"Failed to map physical memory for CEVA configuration (start=0x%08x, len=%d), rc %u",2,73

+"Failed to get pointer from physmem_ptr_get",3,81

+"physmem_unmap failed, rc=%d",4,98

+"Failed to map physical memory for CEVA configuration (start=0x%08x, len=%d), rc %u",5,120

+"Failed to get pointer from physmem_ptr_get",6,128

+"physmem_unmap failed, rc=%d",7,143

+"Failed to map physical memory for CEVA configuration (start=0x%08x, len=%d), rc %u",8,170

+"Failed to get pointer from physmem_ptr_get",9,178

+"regs_mem unaligned",10,184

+"physmem_unmap failed, rc=%d",11,239

+"m0_reset failed, rc=%d",12,255

+"dsp_reset failed, rc=%d",13,263

+

+file_id,27,generic_memory_block.c

+"Failed to map DSP memory (start=0x%08lx, len=%zu), rc %d",0,36

+"Buffer virtual_address_base is NULL",1,43

+"Mapped DSP memory at unaligned addresss %p",2,48

+"physmem_unmap failed, rc=%d",3,52

+"heap is NULL",4,69

+"heap->name is NULL",5,74

+"heap->size is 0",6,79

+"heap->buffer_ptr_alignment is 0",7,84

+"Memory block already initialized!",8,92

+"Buffer phys_address_base %zu unaligned to mask=%zu",9,97

+"Buffer virtual_address_base is NULL",10,110

+"Buffer virtual_address_base %p unaligned to mask=%zu",11,114

+"generic_memory_block_ioremap() failed, rc=%d",12,125

+"Invalid mode: %d",13,132

+"heap is NULL",14,152

+"Memory block not initialized",15,158

+"Not enough memory left in DSP (needed=%zu, left=%zu)",16,174

+"Memory block not initialized",17,200

+"DSP memory buffers physmem_unmap failed, rc=%d",18,208

+

+file_id,28,process_shared_memory.c

+"process_shared_memory_associate failed, invalid paramter",0,23

+"process_shared_memory_associate failed, allocation index is in use",1,28

+"process_shared_memory_buffer_release failed, invalid paramter",2,54

+"process_shared_memory_buffer_release failed, process id not found",3,66

+"process_shared_memory_buffer_get failed",4,89

+"process_shared_memory_buffer_get failed",5,94

+"process_shared_memory_buffer_get: process id: %d, mem allocated addreass 0x%08x, with size %u[byte]",6,106

+"process_shared_memory_buffer_get failed, No free buffer was found",7,114

+"process_shared_memory_init failed, shared memory is already initialized",8,125

+"kzalloc failed: shared_memory_buffer_ptr_g was not allocated",9,132

+

+file_id,30,aesa100_ccm.c

+"AES driver not initialized",0,72

+"Mandatory function argument is not specified",1,84

+"Invalid argument: header_ptr is not specified but header_size %lu != 0",2,91

+"Invalid argument: header_ptr is specified but header_size = 0",3,98

+"Invalid argument: input is not specified but input size %lu != 0",4,105

+"Invalid argument: output is not specified but input size %lu != 0",5,112

+"Invalid argument: output or input is specified but input size = 0",6,120

+"Authentication tag size %zu < minimum %u",7,133

+"aesa100_key_size returns zero",8,217

+"Failed to lock concurrency sem (rc=%d)",9,224

+

+file_id,31,aesa100_cmac.c

+"AES driver not initialized",0,50

+"Mandatory function argument is not specified",1,61

+"Invalid argument: message is not specified but message size %lu != 0",2,67

+"Invalid argument: message is specified but message size = 0",3,74

+"aesa100_key_size returns zero",4,82

+"Failed to lock concurrency sem (rc=%d)",5,89

+

+file_id,32,aesa100_crypt.c

+"AES driver not initialized",0,74

+"Mandatory function argument is not specified",1,85

+"Initialization vector is not specified",2,95

+"We currently support only ECB and CBC modes",3,103

+"Invalid size %zu (must be positive divisible by the AES block size %u)",4,111

+"aesa100_key_size returned zero",5,120

+"Failed to lock concurrency sem (rc=%d)",6,127

+

+file_id,33,aesa100_driver.c

+"Called",0,58

+"Failed to remove physical memory mapping (rc=%d)",1,66

+"Failed to map I/O physical memory region (start=0x%08x, len=%d), rc %d",2,92

+"physmem_ptr_get failed",3,100

+"Failed to register AES/DRIVER flow counters, rc = %u",4,113

+

+file_id,34,aesa100_gcm.c

+"AES driver not initialized",0,91

+"Mandatory function argument is not specified",1,102

+"Invalid argument: header is not specified but header size %lu != 0",2,108

+"Invalid argument: header is specified but header size = 0",3,115

+"Invalid header size %zu (> maximum %lu)",4,121

+"Invalid argument: input is not specified but input size %lu != 0",5,129

+"Invalid argument: output is not specified but input size %lu != 0",6,136

+"Invalid input size %zu (> maximum %lu)",7,143

+"Invalid argument: input is specified but input size = 0",8,151

+"Authentication tag size %zu < minimum %u",9,163

+"aesa100_key_size returned zero",10,187

+"Failed to lock concurrency sem (rc=%d)",11,194

+

+file_id,35,aesa100_io.c

+"W 0x%08x 0x%08x",0,31

+"W 0x%08x 0x%08x",1,39

+"R 0x%08x 0x%08x",2,64

+"R 0x%08x 0x%08x",3,75

+"R 0x%08x 0x%08x",4,99

+"R 0x%08x 0x%08x",5,111

+"W 0x%08x 0x%08x",6,136

+"W 0x%08x 0x%08x",7,146

+

+file_id,49,dbg_driver_mem.c

+"Failed to write to DSP control memory at address 0x%lx, rc = %u",0,93

+"Failed to read DSP control memory",1,105

+"Failed to write to WLAN DSP memory at address 0x%x, rc = %u",2,119

+"Failed to read from WLAN DSP memory at address 0x%x, rc = %u",3,133

+

+file_id,50,dbg_driver_wlan.c

+"lmac_driver_dbg_init failed, rc = %u",0,18

+"Invalid if_index = %u",1,40

+"Invalid if_index = %u",2,55

+"Invalid if_index = %u",3,71

+"Invalid argument: if_index = %u",4,88

+"Invalid parameter: data_pptr = %p, data_size_ptr = %p",5,104

+"lmac_driver_dbg_dsp_cookie_snapshot_get, rc = %u",6,111

+"Invalid parameter: if_index = %u",7,124

+"Invalid parameter: value_ptr is NULL",8,129

+"Failed to get DSP ring info from WLAN driver",9,136

+"Invalid parameter: if_index = %u",10,153

+"Invalid parameter: value = %d",11,158

+"Failed to get DSP ring info from WLAN driver",12,165

+

+file_id,51,ddm_blob.c

+"Failed to get sw_config_ptr, rc %u",0,83

+"calib file location is invalid, lmac_calib_file_location %d",1,115

+"Failed to get sw_config_ptr, rc %u",2,137

+"RF CONFIG file location is invalid, lmac_rf_config_file_location %d",3,153

+"Invalid BLOB type %d",4,228

+"ddm_state %d not appropriate for blob type %d",5,234

+"Mandatory argument not specified",6,252

+"DDM BLOB Not initialized",7,262

+"rf_loader_read_start failed, rc = %u",8,277

+"Invalid BLOB type %d",9,293

+"Mandatory argument not specified",10,311

+"DDM BLOB Not initialized",11,321

+"rf_loader_read_chunk failed, rc = %u",12,330

+"rf_loader_read_chunk failed, rc = %u",13,346

+"Invalid BLOB type %d",14,360

+"Enter",15,381

+"Mandatory argument not specified",16,383

+"DDM BLOB Not initialized",17,393

+"ddm_ctrl_state_get failed, rc %u",18,400

+"ceva_loader_driver_load_start failed, ceva_file_type %d rc %u",19,417

+"ceva_loader_driver_load_start failed, ceva_file_type %d rc %u",20,427

+"ceva_loader_driver_load_start failed, ceva_file_type %d rc %u",21,437

+"ceva_loader_driver_load_start failed, ceva_file_type %d rc %u",22,447

+"ddm_blob_update_calib_ctrl_params failed, rc %u",23,459

+"rf_loader_write_start failed, rc %u",24,471

+"ddm_blob_update_rf_config_ctrl_params failed, rc %u",25,484

+"rf_loader_write_start failed, rc %u",26,491

+"rf_loader_write_start failed: type %u, rc %u",27,509

+"rf_loader_write_start failed: type %u, rc %u",28,521

+"Invalid BLOB type %d",29,528

+"Mandatory argument not specified",30,548

+"DDM BLOB Not initialized",31,558

+"ddm_ctrl_state_get failed, rc %u",32,565

+"ceva_loader_driver_load_write failed, ceva_file_type %d rc %u",33,588

+"ceva_loader_driver_load_write failed, ceva_file_type %d rc %u",34,603

+"ceva_loader_driver_load_write failed, ceva_file_type %d rc %u",35,620

+"ceva_loader_driver_load_write failed, ceva_file_type %d rc %u",36,635

+"rf_loader_write_chunk failed, rc %u",37,652

+"rf_loader_write_chunk failed, rc %u",38,667

+"Invalid blob type %d",39,674

+"Mandatory argument not specified",40,697

+"DDM BLOB Not initialized",41,706

+"ddm_ctrl_state_get failed, rc %u",42,713

+"ceva_loader_driver_load_finish failed, ceva_file_type %d rc %u",43,731

+"ceva_loader_driver_load_finish failed, ceva_file_type %d rc %u",44,743

+"ceva_loader_driver_load_finish failed, ceva_file_type %d rc %u",45,755

+"ceva_loader_driver_load_finish failed, ceva_file_type %d rc %u",46,767

+"rf_loader_finish failed,rc = %u",47,784

+"rf_loader_finish failed, rc = %u",48,807

+"Invalid BLOB type %d",49,816

+"ddm_ctrl_state_set failed, new state %d, rc %u",50,823

+

+file_id,52,ddm_ctrl.c

+"Enter",0,74

+"Mandatory argument not specified",1,76

+"Already initialized, registrating anyway",2,81

+"Failed to register DDM/DRIVER statistics, rc = %u",3,124

+"rsvc_ddm_init failed: rc %u",4,129

+"ddm_blob_init failed, rc %u",5,135

+"ddm_sw_config_init failed, rc %u",6,141

+"ddm_hb_init failed, rc %u",7,150

+"ddm_gpio_init failed, rc = %u",8,158

+"ddm_ctrl_state_set failed, rc %u",9,172

+"DDM isn't initialized",10,217

+"Transit from %d to %d",11,233

+"Transit to REMOTE_DDM_STATE_INIT_STATE from %d",12,238

+"State leave handler for cur state %d failed, rc %u",13,306

+"State enter handler for new state %d failed, rc %u",14,318

+"ddm_reset_wd called, resetting device...",15,347

+"craton2_soc_revision_get() failed! rc=%d",16,354

+"Failed to map m3-regs, rc = %d",17,437

+"Failed to unmap m3-regs, rc = %d",18,448

+

+file_id,54,ddm_gpio.c

+"base_ptr is NULL",0,32

+"Non exist GPIO bank %d",1,63

+"gpio_config_ptr is NULL",2,87

+"Unknown ddm_gpio_mode_t",3,115

+"abs_pin_no_ptr is NULL",4,142

+"ddm_gpio_bank_offset_to_abs_convert: %d",5,148

+"gpio_get_abs_pin_no: %d",6,154

+"ddm_gpio_abs_pin_no_get: %d",7,183

+"gpio_get_pin_config: %d",8,189

+"ddm_gpio_config_get: %d",9,213

+"ddm_gpio_config_populate: %d",10,221

+"gpio_set_pin_config: %d",11,229

+"gpio_get_abs_pin_no: %d",12,238

+"mode_ptr is NULL",13,261

+"ddm_gpio_config_get: %d",14,273

+"Unknown GPIO config %d",15,297

+"ddm_gpio_config_get: %d",16,326

+"GPIO direction can be set in SW mode only",17,332

+"Unknown GPIO direction %d",18,348

+"gpio_set_pin_config: %d",19,356

+"gpio_get_abs_pin_no: %d",20,364

+"direction_ptr is NULL",21,386

+"ddm_gpio_config_get: %d",22,398

+"GPIO direction valid in SW mode only",23,404

+"Invalid GPIO direction %d",24,420

+"ddm_gpio_config_get: %d",25,449

+"GPIO value can be set in SW mode only",26,455

+"GPIO value can be set in output direction only",27,461

+"gpio_clear_gpio_pin: rv",28,471

+"gpio_set_gpio_pin: rv",29,481

+"Unknown value %d",30,489

+"value_ptr is NULL",31,513

+"ddm_gpio_config_get: %d",32,525

+"GPIO direction valid in SW mode only",33,531

+"gpio_read_gpio_pin: %d",34,538

+"Unknown GPIO value %d",35,554

+

+file_id,55,ddm_hb.c

+"wdt_init failed, rv = %d",0,84

+"wdt_reload failed, rv = %d",1,93

+"ddm_ctrl_state_get failed, rc = %d",2,142

+"ddm_ctrl_state_set failed, new state %d, rc %u",3,156

+"Invalid state %d",4,201

+"remote_ddm_hb_ind_encode failed, state = %d, rc = %u",5,208

+"boot_timer_phase_end failed, rc %d",6,225

+"boot_timer_compute failed, rc %d",7,230

+"Device in INIT mode. Time - %u us",8,233

+"osal_thread_join: %d",9,259

+"osal_thread_create: %d",10,283

+"Failed to set HB statistics",11,290

+"DDM HB not init",12,303

+"DDM HB not init",13,316

+

+file_id,56,ddm_otp.c

+"'otp_reg' is null",0,35

+"Failed  to map CRATON OTP registers (start=0x%08lx, len=%zu), rc %d",1,48

+"'otp_virt_addr' is null",2,57

+"Failed to unmap a7 misc registers rc %d",3,70

+

+file_id,57,ddm_stats.c

+"Failed to get flow counters, rc = %u",0,217

+"Failed to get extended counters, rc = %u",1,237

+

+file_id,58,ddm_sw_config.c

+"Mandatory argument is not specified",0,37

+"DDM module params is not initialized",1,42

+"ddm_ctrl_state_get failed, rc = %d",2,48

+"ddm_state %d not appropriate for config",3,53

+"ddm_debug_clock_enable_set, rc = %d",4,87

+"debug_clock_enable value is ignored. Use hw_config in M3-loader instead",5,92

+

+file_id,60,ecultra_driver.c

+"Error getting cut revision",0,58

+"Called (id %u)",1,179

+"Invalid operation",2,195

+"Called (id %u)",3,214

+"Called (id %u)",4,280

+"Called (id %u)",5,325

+"Called (id %u)",6,394

+"Invalid work type",7,439

+"Enqueued work (type %u, id %u)",8,468

+"Dequeued work (type %u, id %u)",9,493

+"ecultra_tasklet called when not initialized",10,571

+"ecultra_tasklet called with wrong settings",11,581

+"ecultra_tasklet called with no work task",12,587

+"Called (id %u, op %u)",13,592

+"osal_tasklet_lock_save failed, rc=%d",14,602

+"Work descriptor is not specified",15,693

+"Invalid work type %u",16,701

+"Invalid elliptic curve identifier %u",17,710

+"Work callback function is not specified (work %p, id %lu)",18,718

+"Submitting work (type %u, id %u)",19,724

+"osal_tasklet_lock_save failed, rc=%d",20,729

+"osal_tasklet_lock_save failed, rc=%d",21,773

+"Allocated work %p",22,782

+"osal_tasklet_lock_save failed, rc=%d",23,799

+"Freed work %p",24,805

+"ecultra driver need initialization",25,815

+"ecultra_driver_init failed, rc=%d",26,818

+"ERROR: ecultra_dev.complete should zero at this point, but was found to be set",27,848

+"block_pool_deinit failed, rc = %d",28,881

+"physmem_unmap failed, rc = %u",29,893

+"Failed to map I/O physical memory region (start=0x%08x, len=%d), rc %d",30,929

+"Failed to get virtual address of mapped memory",31,937

+"block_pool_init failed, rc %u",32,954

+"Registration of ECC/DRIVER statistics failed, rc = %u",33,986

+"ecultra_verify_start failed rc=%d",34,1064

+"ecultra_load_start failed rc=%d",35,1068

+"ecultra_dev_init restoring mode failed",36,1076

+

+file_id,61,ecultra_op.c

+"ecultra_csr is not set",0,32

+"ecultra_csr is not set",1,111

+"Called (curve %u)",2,115

+"Called (curve %u)",3,137

+"ecultra_csr is not set",4,163

+"Called (curve %u)",5,167

+"Called (curve %u)",6,181

+"ecultra_csr is not set",7,306

+"Called (curve %u)",8,310

+"Called (curve %u)",9,345

+"Called (curve %u)",10,370

+"ecultra_csr is not set",11,407

+"Called (curve %u)",12,411

+"Called (curve %u)",13,434

+"ecultra_csr is not set",14,465

+"Called (curve %u)",15,469

+"Called (curve %u)",16,492

+

+file_id,62,ehsm_driver.c

+"eHSM driver not initialized",0,68

+"Failed to take lock, rc = %d",1,75

+"eHSM driver already locked",2,84

+"eHSM driver already unlocked",3,93

+"Invalid next_state %d",4,100

+"Failed to wait ehsm_driver_control.semaphore",5,156

+"Failed to set EHSM_DRIVER_STATE_UNLOCKED - rc = %d",6,176

+"command 0x%08x",7,190

+"error_code 0x%08x",8,191

+"p1 0x%08x",9,192

+"p2 0x%08x",10,193

+"p3 0x%08x",11,194

+"p4 0x%08x",12,195

+"p5 0x%08x",13,196

+"p6 0x%08x",14,197

+"p7 0x%08x",15,198

+"p8 0x%08x",16,199

+"p9 0x%08x",17,200

+"Failed to set EHSM_DRIVER_STATE_UNLOCKED - %d",18,205

+"craton2_soc_revision_get() failed! rc = %d",19,938

+"craton2_soc_erom_ver_get() failed! rc = %u",20,997

+"caller_source cannot %d",21,1322

+"ehsm_driver_storage_auth_encrypt failed secure HDIF magic key detected",22,1340

+"ehsm_driver_storage_auth_encrypt failed secure HDIF magic key not detected",23,1347

+"Unable to register callbacks",24,2170

+"Failed to register eHSM/DRIVERS statistics, rc = %u",25,2180

+"ehsm_driver_secure_hdif_master_key_magic_number_get failed",26,2199

+

+file_id,63,ehsm_driver_initialize.c

+"Failed to get eHSM SHMEM A7 address, rc %u",0,190

+"Fail to map ehsm eSRAM base address",1,201

+"Failed to get virtual pointer",2,208

+"Unable to unmap esram_physmem_handle_g",3,220

+"physmem_unmap of psb_physmem_handle_g failed, rc = %u",4,250

+"physmem_unmap of mailbox_physmem_handle_g failed, rc = %u",5,257

+"Fail to map ehsm_mailbox",6,289

+"Failed to get physical pointer",7,297

+"Failed to get physical pointer",8,304

+"Fail to map ehsm_psb",9,318

+"Failed to get physical pointer",10,326

+"atlk_mailbox_instance_get() failed, rc = %d",11,333

+"Fail to initialize eHSM to HOST mailbox, rc = %d",12,340

+"atlk_irq_register() failed, rc = %d, enable %u",13,407

+"ehsm_isr_thread_init() failed, rc = %d",14,419

+"nvic_chnl_init() failed! ret=%d",15,445

+"Could not read EROM version, rc = %d",16,497

+"Setting eHSM TRNG source via design HW config in current ROM version is not supported, configuration ignored",17,506

+"Setting eHSM TRNG to PLL configuration although FIPS mode is disabled!",18,516

+"Setting eHSM TRNG source via design HW config in FIPS mode is not supported, configuration ignored",19,523

+"Failed to wait eHSM semaphore - rc = %d",20,552

+"eHSM panicked during init sequence",21,556

+"EHSM_CMD_CSK_GENERATE returned error %d",22,587

+"runtime status read returned error %d",23,628

+"ehsm_driver_csk_generate failed",24,639

+"eHSM CSK was generated successfully",25,642

+"Error %d in runtime CSK status",26,657

+"eHSM panicked prior to init sequence",27,686

+"EHSM_CMD_SYSTEM_INIT Failed error %x EHSM_CMD %x",28,709

+"osal_thread_join failed, rc = %u",29,773

+"physmem_unmap for esram_physmem_handle_g failed, rc = %u",30,784

+"ehsm_driver_mailbox_irq_config failed, rc = %u",31,790

+"Failed to set EHSM_DRIVER_STATE_LOCKED - rc = %d",32,816

+"Fail to initialize eHSM mailbox rc = %d",33,823

+"Fail to Config mailbox interrupt request rc = %d",34,830

+"Fail to initialize eHSM memory region rc = %d",35,837

+"Fail to initialize eHSM driver, rc = %d",36,848

+"Fail to initialize eHSM mailbox rc = %d",37,854

+"Failed to set EHSM_DRIVER_STATE_UNLOCKED - %d",38,861

+

+file_id,65,ivn_driver.c

+"Counters not included for this channel %d",0,242

+"Failed to register IVN/DRIVER statistics, rc = %u",1,281

+"IVN driver is not initialized",2,297

+"'ivn_config' is NULL",3,302

+"'ivn_mailbox_channel_num' is invalid %d",4,307

+"Mbox is already open (%d)",5,312

+"IVN driver is not initialized",6,344

+"IVN driver channel %d is not open",7,350

+"Counters not included for this channel %d",8,355

+"'data' is NULL",9,365

+"'len' is 0",10,371

+"data too big",11,377

+"IVN driver is not initialized",12,417

+"Counters not included for this channel %d",13,422

+"mcu_control_sync_send failed, rc = %d",14,446

+"Expected %zu bytes but received %zu",15,451

+"ivn_driver_statistics_pack failed, rc = %d",16,466

+"remote_counters_to_counters failed, rc = %d",17,501

+"remote_counters_to_counters failed, rc = %d",18,509

+"Invalid argument: ivn_filter_tbl_ptr is NULL",19,533

+"Invalid arguments: Channel %u, filters type %u, filters number %u",20,542

+"mcu_control_sync_send failed, rc %u",21,568

+"Invalid received length %zu",22,574

+"Invalid argument: ivn_filter_tbl_ptr is NULL",23,606

+"Invalid channel %u",24,613

+"mcu_control_sync_send failed, rc %d",25,628

+"Invalid received length %zu, expected at least a return code of length %u",26,635

+"Invalid received length %zu, expected at least return code and filter table control fields of length %u",27,652

+"Number of filters (%u) exceeds maximum allowed (%u)",28,667

+"Invalid received length %zu, expected return code and filter table of length %u",29,676

+"IVN driver is not initialized",30,697

+

+file_id,66,ivn_server.c

+"Failed to register IVN/SERVER statistics, rc = %u",0,45

+"IVN server is not initialized",1,195

+

+file_id,67,cv2x_lmac_dsp_decoder.c

+"Invalid lmac_cv2x_transmission_index_t %d",0,30

+"Invalid cv2x_transmission_index_t %d",1,63

+"Invalid report format %d",2,95

+"Invalid descriptor_magic %x",3,504

+"Invalid descriptor_magic %x",4,534

+

+file_id,68,dsp_al_802_11.c

+"osal_mutex_lock failed, rc = %u",0,100

+"osal_sem_wait failed, rc = %u",1,132

+"H2D command interface status isn't done, status = %u",2,139

+"H2D command failed, opcode = %u, status = %u",3,153

+"Invalid argument: dsp_phymode = %u",4,203

+"Invalid bandwidth %u",5,243

+"Invalid argument: dsp_bandwidth = %u",6,283

+"Invalid argument: dsp_al_phymode = %u",7,319

+"Invalid argument: dsp_al_access_category = %u",8,352

+"Invalid argument: dsp_format = %u",9,382

+"Invalid argument: dsp_al_format = %u",10,412

+"wlan_dsp_load_comp_calib_data failed, dsp_rc = %u",11,460

+"Shared memory size: Total = %u, Used [802.11] = %u",12,536

+"Waiting for DSP to boot...",13,552

+"DSP failed to boot - timeout expired",14,566

+"DSP boot complete.",15,570

+"DSP Version mismatch",16,575

+"Current: (SW_FEATURE %u, SW_INTERFACE %u)\r\n Expected: (SW_FEATURE %d, SW_INTERFACE %d)",17,576

+"generic_memory_block_alloc failed, rc = %d",18,602

+"Aux memory size [Both RF channels]: %u Bytes",19,606

+"Aux memory PHY addr = 0x%x",20,607

+"Aux memory PHY addr RF#0 = 0x%x",21,619

+"Aux memory PHY addr RF#1 = 0x%x",22,620

+"generic_memory_block_alloc failed, rc = %d",23,674

+"Tx total buffer size [IF#%u] (rings+frame+ranging buffers): %u Bytes",24,678

+"tx_instance_index = %u",25,704

+"tx_instance_size = %u",26,705

+"cookie_ring_info_ptr = 0x%x",27,706

+"tx_ring_phy_addr = 0x%x",28,707

+"tx_ring_size = 0x%x",29,708

+"tx_frame_size = %u",30,737

+"tx_frame_buffer_phy_addr = 0x%x",31,738

+"tx_ranging_size = %u",32,770

+"tx_ranging_buffer_phy_addr = 0x%x",33,771

+"generic_memory_block_alloc failed, rc = %d",34,820

+"Rx total buffer size [IF#%u] (ring+frame+ranging buffers+guards): %u Bytes",35,824

+"rx_ring_phy_addr = 0x%x",36,839

+"rx_ring_size = 0x%x",37,840

+"rx_frame_size = %u",38,862

+"rx_frame_buffer_phy_addr = 0x%x",39,863

+"rx_ranging_size = %u",40,897

+"rx_ranging_buffer_phy_addr = 0x%x",41,898

+"Recovery memory wasn't allocated",42,945

+"Recovery memory size: %u Bytes",43,953

+"Recovery memory phy_addr = 0x%x",44,954

+"sw_config_get failed, rc = %u",45,979

+"wlan_dsp_load_auxilary_mem failed, dsp_rc = %u",46,1204

+"flags_bitmap isn't valid [flags_bitmap = 0x%x, valid mask = 0x%x]",47,1263

+"h2d_request_issue failed, rc = %u",48,1345

+"osal_sem_wait failed, rc = %u",49,1430

+"h2d_request_issue failed, rc = %u",50,1452

+"Invalid state",51,1462

+"No such device_id: %u",52,1534

+"h2d_request_issue failed, rc = %u",53,1549

+"No such device_id: %u",54,1583

+"h2d_request_issue failed, rc = %u",55,1598

+"h2d_request_issue failed, rc = %u",56,1621

+"h2d_request_issue failed, rc = %u",57,1651

+"Unknown mode: %u",58,1705

+"h2d_request_issue failed, rc = %u",59,1717

+"h2d_request_issue failed, rc = %u",60,1752

+"h2d_request_issue failed, rc = %u",61,1774

+"h2d_request_issue failed, rc = %u",62,1811

+"h2d_request_issue failed, rc = %u",63,1825

+"h2d_request_issue failed, rc = %u",64,1839

+"h2d_request_issue failed. rc = %u",65,1861

+"Compenstaor download failed on RF #0 reported from DSP",66,1955

+"Compenstaor download failed on RF #1 reported from DSP",67,1987

+"Invalid request type #%u",68,2329

+"h2d_request_issue failed, rc = %u",69,2341

+"h2d_request_issue failed, rc = %u",70,2375

+"MAC address is NULL",71,2406

+"Invalid h2d_scoreboard action: %u",72,2417

+"h2d_request_issue failed, rc = %u",73,2428

+"Scoreboard table is full, status: %u",74,2439

+"Scoreboard to delete not found, status: %u",75,2443

+"Unknown action: %u",76,2476

+"h2d_request_issue failed, rc = %u",77,2488

+"h2d_request_issue failed, rc = %u",78,2516

+"h2d_request_issue failed, rc = %u",79,2540

+"dsp_bandwidth_convert failed, rc = %u",80,2564

+"bandwidth_convert failed, rc = %u",81,2583

+"dsp_phymode_convert failed, rc=%u",82,2770

+"phymode_convert failed, rc = %u",83,2796

+"access_category_convert failed, rc = %u",84,2861

+"Invalid argument - AIFSN should be in the range [1..15]",85,2908

+"Invalid argument - CWMIN should be in the range [0..255] and in the form (2^n-1)",86,2914

+"Invalid argument - CWMAX should be in the range [0..65535] and in the form (2^n-1)",87,2920

+"Invalid argument - TXOP limit should be in the range [0..65535]",88,2926

+"access_category_convert failed, rc = %u",89,2932

+"h2d_request_issue failed, rc = %u",90,2961

+"Invalid argument: mode = %u",91,3074

+"dsp_al_802_11_phy_format_convert failed, rc=%u",92,3130

+"dsp_al_802_11_phy_format_convert failed, rc = %u",93,3144

+"bandwidth_convert failed, rc = %u",94,3150

+"start index = %u, end index = %u, packet len = %u, mcs[0]=%u",95,3161

+"bw[0]=%u format=%u, power[dBm(1/2)]=%u, packet->rates[0].flags=0x%08x",96,3164

+"rtscts_mcs=%u, packet->flags=0x%x",97,3167

+"Invalid ring type",98,3203

+"Invalid instance number (#%u)",99,3231

+"Invalid instance number (#%u)",100,3246

+"Invalid ring type",101,3261

+"Invalid instance number (#%u)",102,3288

+"Invalid ring type",103,3304

+"Invalid instance number (#%u)",104,3331

+"Invalid ring type",105,3347

+"Invalid instance number (#%u)",106,3368

+"Invalid ring type",107,3381

+"Invalid ring type",108,3419

+"Invalid ring type",109,3452

+"Received packet size is invalid (%u > %u)",110,3586

+"dsp_bandwidth_convert failed, rc = %u",111,3610

+"dsp_format_convert failed, rc = %u",112,3616

+"dsp_format_convert failed, rc = %u",113,3780

+"dsp_bandwidth_convert failed, rc = %u",114,3786

+"dsp_al_802_11_phy_format_convert failed, rc = %u",115,3821

+"bandwidth_convert failed, rc = %u",116,3827

+"Control block is NULL",117,4036

+"Null argument pointer",118,4049

+

+file_id,69,dsp_al_cv2x.c

+"dsp_al_interface_tsf_value_get failed, rc = %u",0,46

+"h2dpt_get_time() failed to get TSF value !! \n",1,92

+"Skipping H2DPT measurement. S [MSB] = %u, S [LSB] = %u, E [MSB] = %u, E [LSB] = %u",2,119

+"H2DPT: S [MSB] = %u, S [LSB] = %u, E [MSB] = %u, E [LSB] = %u, Diff = %u",3,128

+"osal_mutex_lock failed, rc = %u",4,170

+"osal_sem_wait failed, rc = %u",5,201

+"H2D command interface status isn't done, status = %u",6,208

+"H2D command failed, opcode = %u, status = %u",7,222

+"dsp_al_interface_tsf_value_get failed, rc = %u",8,268

+"LMAC Invalid time gap between messages: gap=%u, lmac=%u, RR SF=%u, prev SF=%u, cur frame=%u, delta=%u",9,327

+"LMAC too late: lmac=%u, RR SF=%u, lmac SF=%u, cur frame=%u, delta_usec=%llu",10,357

+"LMAC too early (or very late): lmac=%u, RR SF=%u, lmac SF=%u, cur frame=%u, delta_usec=%llu",11,368

+"Invalid DFN number %u",12,376

+"wlan_dsp_load_comp_calib_data failed, dsp_rc = %u",13,424

+"dsp_al_cv2x_carrier_pools_defaults_set params values are invalid, bandwidth = %u, freq = %u",14,455

+"**************** write cookie with freq %d %d",15,481

+"Cookie rx pools update: carrier=%d, pool=%d, s_rb_subch=%d, subch_n=%d, subch_s=%d, bitmap_len=%d.",16,558

+"bitmap 0x%08x 0x%08x 0x%08x 0x%08x, bandwidth=%d, tx_code=%u.",17,566

+"Cookie tx pools update: carrier=%d, pool=%d, s_rb_subch=%d, subch_n=%d, subch_s=%d, bitmap_len=%d.",18,601

+"bitmap 0x%08x 0x%08x 0x%08x 0x%08x, bandwidth=%d, tx_code=%u.",19,609

+"Shared memory size: Total = %u, Used without L1 [CV2X] = %u",20,653

+"Waiting for DSP to boot...",21,670

+"DSP failed to boot - timeout expired",22,684

+"DSP boot complete.",23,688

+"DSP Version mismatch",24,693

+"Current: (SW_FEATURE %u, SW_INTERFACE %u)\r\n Expected: (SW_FEATURE %d, SW_INTERFACE %d)",25,694

+"generic_memory_block_alloc failed, rc = %d",26,719

+"Aux memory size: %u Bytes",27,733

+"aux_memory_phy_addr = 0x%x",28,734

+"generic_memory_block_alloc failed, rc = %d",29,762

+"L1 memory size: %u Bytes",30,785

+"l1_memory_phy_addr = 0x%x",31,786

+"Logging memory size: %u Bytes",32,803

+"logging_memory_phy_addr = 0x%x",33,804

+"logging_memory_virtual_addr = 0x%x",34,805

+"generic_memory_block_alloc failed, rc = %d",35,836

+"Tx total buffer size (rings+frame buffers): %u Bytes",36,840

+"tx_ring_phy_addr = 0x%x",37,853

+"tx_ring_size = 0x%x",38,854

+"tx_frame_size = %u",39,876

+"tx_frame_buffer_phy_addr = 0x%x",40,877

+"generic_memory_block_alloc failed, rc = %d",41,922

+"Rx total buffer size (ring+frame buffers+guards): %u Bytes",42,926

+"rx_ring_size = %u",43,939

+"rx_ring_phy_addr = 0x%x",44,940

+"rx_frame_size = %u",45,962

+"rx_frame_buffer_phy_addr = 0x%x",46,963

+"generic_memory_block_alloc failed, rc = %d",47,1013

+"Measurement total buffer size (ring+frame buffers): %u Bytes",48,1017

+"measurement_ring_size = 0x%x",49,1027

+"measurement_ring_phy_addr = 0x%x",50,1028

+"Recovery memory wasn't allocated",51,1072

+"Recovery memory size: %u Bytes",52,1084

+"Recovery memory phy_addr = 0x%x",53,1085

+"sw_config_get failed, rc = %u",54,1101

+"Skip setting not valid CV2X config values (from host)",55,1120

+"CV2X config values are valid, Setting a valid CV2X config (from host)",56,1124

+"sw_config_get failed, rc = %u",57,1153

+"modules params values: carrier_freq %d adc %d dac %d bandwidth %d",58,1161

+"modules params values are invalid, using default values",59,1174

+"modules params values are valid, using values from module params",60,1190

+"wlan_dsp_load_auxilary_mem failed, dsp_rc = %u",61,1316

+"flags_bitmap isn't valid [flags_bitmap = 0x%x, valid mask = 0x%x]",62,1348

+"osal_sem_wait failed, rc = %u",63,1468

+"h2d_request_issue failed, rc = %u",64,1490

+"Invalid state",65,1500

+"No such device_id: %u",66,1533

+"h2d_request_issue failed, rc = %u",67,1548

+"No such device_id: %u",68,1583

+"h2d_request_issue failed, rc = %u",69,1598

+"**************** dsp_al_cv2x_frequency_set %d %d",70,1615

+"h2d_request_issue failed, rc = %u",71,1623

+"Unknown mode: %u",72,1702

+"h2d_request_issue failed, rc = %u",73,1714

+"h2d_request_issue failed, rc = %u",74,1741

+"h2d_request_issue failed, rc = %u",75,1786

+"h2d_request_issue failed, rc = %u",76,1805

+"Invalid bandwidth case",77,1929

+"Failed to decode diagnostics struct, rc %u",78,2097

+"Packet does not contain a valid CV2X descriptor magic (0x%x)",79,2220

+"No PPS lock, DSP not ready",80,2231

+"Invalid Buffer size (%d + %d) > %d",81,2242

+"Buffer size Larger than Max frame size (%d > %d)",82,2250

+"Failed to decode Tx descriptor, %d",83,2263

+"Added message to ring (idx=%u, %p): magic 0x%x, lock=%u, power=(%u,%u)",84,2333

+"data size=%d, mcs=%u",85,2337

+"pool_index=%d, schs=%u, dfn=%d",86,2338

+"Invalid ring type",87,2390

+"Invalid instance number (#%u)",88,2426

+"Invalid instance number (#%u)",89,2443

+"Invalid instance number (#%u)",90,2478

+"Invalid ring type",91,2493

+"Invalid instance number (#%u)",92,2524

+"Invalid ring type",93,2545

+"Invalid instance number (#%u)",94,2569

+"Invalid ring type",95,2583

+"dsp_al_interface_tsf_value_get failed, rc = %u",96,2611

+"Failed to decode Rx descriptor, %d",97,2662

+"Failed to decode CV2X packet descriptor info, %d",98,2673

+"Received packet size is invalid (%u > %u)",99,2695

+"Failed to decode measurement, %d",100,2735

+"invalid ring type input",101,2760

+"No PPS lock, DSP not ready",102,2886

+"h2d_request_issue failed, rc = %u",103,2905

+"No PPS lock, DSP not ready",104,2923

+"h2d_request_issue failed, rc = %u",105,2938

+"DSP logging size %u is too big ",106,3003

+"h2d_request_issue failed. rc = %u",107,3023

+"Compenstaor download failed on RF #0 reported from DSP",108,3076

+"Compenstaor download failed on RF #1 reported from DSP",109,3108

+"Control block is NULL",110,3563

+"Null argument pointer",111,3576

+

+file_id,70,dsp_al_interface.c

+"Reloading DSP image: DTCM",0,83

+"Reloading DSP image: M0",1,86

+"Compressed image doesn't exist",2,108

+"Compressed image exist, decompressing...",3,112

+"Image decompress failed",4,128

+"Image decompress succeeded. %u bytes decompressed from %p to %p",5,132

+"DTCM decompressed image size %u < %u, bypassing DTCM recovery",6,143

+"ceva_loader_dtcm_copy_in_chunks failed, rc = %u",7,149

+"Copied %u bytes from %p to %p",8,160

+"DSP mailbox physmem_map failed, rc = %u",9,242

+"dsp_mailbox_memory_ptr is NULL",10,249

+"WLAN subsystem physmem_map failed, rc = %u",11,261

+"base_memory_ptr is NULL",12,268

+"craton2_soc_revision_get failed, rc %u",13,278

+"wlan_dsp_parse_version_str failed, rc = %u",14,292

+"DSP binary type: 802.11",15,300

+"DSP binary type: CV2X",16,303

+"Unable to shared_memory_buffer_address_get()",17,309

+"Device-DSP memory block allocation failed",18,324

+"Device-DSP memory block allocation failed",19,335

+"Device-DSP memory block allocation failed, errno=%d",20,347

+"DSP Using AP-SRAM address:0x%x, size=0x%x",21,386

+"DSP Using Allocated memory address:0x%x, size=0x%x",22,398

+"generic_memory_block_init failed, rc = %u",23,404

+"DSP Using Allocated platform memory address:0x%x, size=0x%x",24,419

+"generic_memory_block_init failed, rc = %u",25,424

+"dsp_al_802_11_boot_validation failed, rc = %u",26,448

+"DSP loaded okay",27,451

+"dsp_al_802_11_aux_memory_allocate failed, rc = %u",28,456

+"dsp_al_802_11_tx_rings_memory_allocate failed, rc = %u",29,463

+"dsp_al_802_11_rx_rings_memory_allocate failed, rc = %u",30,470

+"dsp_al_802_11_recovery_memory_allocate failed, rc = %u",31,477

+"dsp_al_802_11_mib_init failed, rc = %u",32,484

+"dsp_al_cv2x_boot_validation failed, rc = %u",33,497

+"DSP loaded okay",34,500

+"dsp_al_cv2x_aux_memory_allocate failed, rc = %u",35,505

+"dsp_al_cv2x_tx_rings_memory_allocate failed, rc = %u",36,512

+"dsp_al_cv2x_rx_rings_memory_allocate failed, rc = %u",37,519

+"dsp_al_cv2x_measurement_ring_memory_allocate failed, rc = %u",38,526

+"dsp_al_cv2x_logging_memory_allocate failed, rc = %u",39,534

+"dsp_al_cv2x_l1_memory_allocate failed, rc = %u",40,543

+"dsp_al_cv2x_recovery_memory_allocate failed, rc = %u",41,550

+"dsp_al_cv2x_defaults_set failed, rc = %u",42,557

+"WLAN subsystem physmem_unmap failed, rc = %u",43,586

+"DSP mailbox physmem_unmap failed, rc = %u",44,592

+"DSP-AL not initialized",45,612

+"WLAN subsystem physmem_unmap failed, rc = %u",46,653

+"DSP mailbox physmem_unmap failed, rc = %u",47,659

+"dsp_al_802_11_assert_info_get failed, rc = %u",48,843

+"dsp_al_cv2x_assert_info_get failed, rc = %u",49,851

+"dsp_al_802_11_diversity_mode_get failed, rc = %u",50,882

+"dsp_al_cv2x_diversity_mode_get failed, rc = %u",51,890

+"dsp_al_802_11_diversity_mode_set failed, rc = %u",52,921

+"dsp_al_cv2x_diversity_mode_set failed, rc = %u",53,929

+"dsp_al_802_11_cookie_snapshot_get failed, rc = %u",54,960

+"dsp_al_cv2x_cookie_snapshot_get failed, rc = %u",55,968

+"dsp_al_802_11_aux_memory_populate failed, rc = %u",56,1010

+"if index #%u isn't supported in CV2X",57,1017

+"dsp_al_cv2x_aux_memory_populate failed, rc = %u",58,1028

+"dsp_al_802_11_compensator_info_request_trigger failed, rc = %u",59,1203

+"dsp_al_cv2x_compensator_info_request_trigger failed, rc = %u",60,1211

+"dsp_al_802_11_compensator_calibration_data_parse failed. rc = %u",61,1246

+"dsp_al_cv2x_compensator_calibration_data_parse failed. rc = %u",62,1257

+"dsp_al_802_11_compensator_keep_alive_get failed. rc = %u",63,1287

+"dsp_al_cv2x_compensator_keep_alive_get failed. rc = %u",64,1295

+"dsp_al_802_11_compensator_calib_valid_get failed. rc = %u",65,1329

+"dsp_al_cv2x_compensator_calib_valid_get failed, rc = %u",66,1337

+"dsp_al_802_11_compensator_temperature_get failed, rc = %u",67,1372

+"dsp_al_cv2x_compensator_temperature_get failed, rc = %u",68,1380

+"dsp_al_802_11_compensator_cable_loss_get failed, rc = %u",69,1417

+"dsp_al_cv2x_compensator_cable_loss_get failed, rc = %u",70,1428

+"dsp_al_802_11_compensator_tssi_value_get failed, rc = %u",71,1463

+"dsp_al_cv2x_compensator_tssi_value_get failed, rc = %u",72,1471

+"dsp_al_802_11_compensator_version_get failed, rc = %u",73,1506

+"dsp_al_cv2x_compensator_version_get failed, rc = %u",74,1514

+"dsp_al_802_11_compensator_stats_get failed, rc = %u",75,1549

+"dsp_al_cv2x_compensator_stats_get failed, rc = %u",76,1557

+"dsp_al_802_11_compensator_last_messages_get failed, rc = %u",77,1592

+"dsp_al_cv2x_compensator_last_messages_get failed, rc = %u",78,1600

+"dsp_al_802_11_compensator_fault_code_get failed, rc = %u",79,1636

+"dsp_al_cv2x_compensator_fault_code_get failed, rc = %u",80,1644

+"dsp_al_802_11_compensator_raw_calibration_data_get failed, rc = %u",81,1684

+"dsp_al_cv2x_compensator_raw_calibration_data_get failed, rc = %u",82,1695

+"dsp_al_802_11_compensator_dsp_state_reset failed, rc = %u",83,1720

+"dsp_al_cv2x_compensator_dsp_state_reset failed, rc = %u",84,1728

+"dsp_al_802_11_pps_source_set failed, rc = %u",85,1755

+"dsp_al_cv2x_pps_source_set failed, rc = %u",86,1763

+"dsp_al_802_11_cca_gpio_set failed, rc = %u",87,1790

+"dsp_al_802_11_phy_flags_set failed, rc = %u",88,1832

+"if index #%u isn't supported in CV2X",89,1839

+"dsp_al_cv2x_phy_flags_set failed, rc = %u",90,1846

+"dsp_al_802_11_phy_flags_get failed, rc = %u",91,1881

+"if index #%u isn't supported in CV2X",92,1888

+"dsp_al_cv2x_phy_flags_get failed, rc = %u",93,1895

+"dsp_al_802_11_phy_status_flags_get failed, rc = %u",94,1930

+"if index #%u isn't supported in CV2X",95,1937

+"dsp_al_cv2x_phy_status_flags_get failed, rc = %u",96,1944

+"dsp_al_802_11_mac_address_set failed, rc = %u",97,1980

+"dsp_al_802_11_mac_address_get failed, rc = %u",98,2020

+"dsp_al_802_11_attach_state_set failed, rc = %u",99,2060

+"if index #%u isn't supported in CV2X",100,2067

+"dsp_al_cv2x_attach_state_set failed, rc = %u",101,2074

+"dsp_al_802_11_dot4_switching_config_get failed, rc = %u",102,2130

+"dsp_al_802_11_dot4_switching_config_set failed, rc = %u",103,2171

+"dsp_al_802_11_memory_read failed, rc = %u",104,2224

+"if index #%u isn't supported in CV2X",105,2231

+"dsp_al_cv2x_memory_read failed, rc = %u",106,2238

+"No such device_id: %u",107,2274

+"dsp_al_802_11_memory_write failed, rc = %u",108,2283

+"if index #%u isn't supported in CV2X",109,2290

+"dsp_al_cv2x_memory_write failed, rc = %u",110,2297

+"dsp_al_802_11_cbr_value_get failed, rc = %u",111,2342

+"dsp_al_802_11_frequency_set failed, rc = %u",112,2382

+"if index #%u isn't supported in CV2X",113,2389

+"dsp_al_cv2x_frequency_set failed, rc = %u",114,2396

+"dsp_al_802_11_frequency_get failed, rc = %u",115,2431

+"if index #%u isn't supported in CV2X",116,2438

+"dsp_al_cv2x_frequency_get failed, rc = %u",117,2445

+"dsp_al_802_11_cookie_frequency_set failed, rc = %u",118,2476

+"if index #%u isn't supported in CV2X",119,2483

+"dsp_al_cv2x_cookie_frequency_set failed, rc = %u",120,2490

+"dsp_al_802_11_rf_test_mode_set failed, rc = %u",121,2533

+"if index #%u isn't supported in CV2X",122,2540

+"dsp_al_cv2x_rf_test_mode_set failed, rc = %u",123,2547

+"dsp_al_802_11_tssi_calibration_mode_start failed, rc = %u",124,2583

+"dsp_al_802_11_tssi_calibration_mode_start failed - DSP type %d is not supported",125,2589

+"dsp_al_802_11_tssi_calibration_mode_stop failed, rc = %u",126,2621

+"dsp_al_802_11_rssi_calibration_run failed, rc = %u",127,2666

+"dsp_al_802_11_dot4_configure failed, rc = %u",128,2714

+"dsp_al_802_11_tsf_value_set failed, rc = %u",129,2755

+"if index #%u isn't supported in CV2X",130,2762

+"dsp_al_cv2x_tsf_value_set failed, rc = %u",131,2769

+"dsp_al_802_11_scoreboard_operation failed, rc = %u",132,2928

+"dsp_al_802_11_dfs_set failed, rc = %u",133,2979

+"dsp_al_802_11_dpd_set failed, rc = %u",134,3020

+"dsp_al_802_11_pps_validity_set failed, rc = %u",135,3065

+"if index #%u isn't supported in CV2X",136,3072

+"dsp_al_cv2x_pps_validity_set failed, rc = %u",137,3079

+"if index #%u isn't supported in CV2X",138,3114

+"dsp_al_cv2x_pps_unsync_force failed, rc = %u",139,3126

+"if index #%u isn't supported in CV2X",140,3161

+"dsp_al_cv2x_pps_hold_over_time_set failed, rc = %u",141,3168

+"if index #%u isn't supported in CV2X",142,3207

+"dsp_al_cv2x_pps_hold_over_time_get failed, rc = %u",143,3214

+"if index #%u isn't supported in CV2X",144,3253

+"dsp_al_cv2x_pps_last_timing_offset_get failed, rc = %u",145,3260

+"dsp_al_802_11_bandwidth_get failed, rc = %u",146,3296

+"if index #%u isn't supported in CV2X",147,3303

+"dsp_al_cv2x_bandwidth_get failed, rc = %u",148,3310

+"dsp_al_802_11_bandwidth_set failed, rc = %u",149,3342

+"dsp_al_802_11_rf_temperature_get failed, rc = %u",150,3382

+"if index #%u isn't supported in CV2X",151,3389

+"dsp_al_cv2x_rf_temperature_get failed, rc = %u",152,3396

+"dsp_al_802_11_mac_address_rx_mask_set failed, rc = %u",153,3436

+"dsp_al_802_11_control_flag_get failed, rc = %u",154,3476

+"if index #%u isn't supported in CV2X",155,3483

+"dsp_al_cv2x_control_flag_get failed, rc = %u",156,3490

+"dsp_al_802_11_control_flag_set failed, rc = %u",157,3521

+"if index #%u isn't supported in CV2X",158,3528

+"dsp_al_cv2x_control_flag_set failed, rc = %u",159,3535

+"dsp_al_802_11_primary_index_get failed, rc = %u",160,3570

+"dsp_al_802_11_primary_index_set failed, rc = %u",161,3606

+"dsp_al_802_11_ctrl_tx_power_set failed, rc = %u",162,3642

+"dsp_al_802_11_phy_mode_get failed, rc = %u",163,3684

+"dsp_al_802_11_phy_mode_set failed, rc = %u",164,3720

+"dsp_al_802_11_csd11p_get failed, rc = %u",165,3760

+"if index #%u isn't supported in CV2X",166,3767

+"dsp_al_cv2x_csd11p_get failed, rc = %u",167,3774

+"Invalid argument: csd11p %d",168,3801

+"dsp_al_802_11_csd11p_set failed, rc = %u",169,3810

+"if index #%u isn't supported in CV2X",170,3817

+"dsp_al_cv2x_csd11p_set failed, rc = %u",171,3824

+"dsp_al_802_11_edca_config_get failed, rc = %u",172,3862

+"dsp_al_802_11_edca_config_set failed, rc = %u",173,3901

+"dsp_al_802_11_lmac_counters_get failed, rc = %u",174,3942

+"dsp_al_802_11_lmac_counters2_get failed, rc = %u",175,3983

+"dsp_al_802_11_phy_counters_get failed, rc = %u",176,4024

+"if index #%u isn't supported in CV2X",177,4031

+"dsp_al_cv2x_phy_counters_get failed, rc = %u",178,4038

+"if index #%u isn't supported in CV2X",179,4079

+"dsp_al_802_11_ring_size_get failed, rc = %u",180,4123

+"if index #%u isn't supported in CV2X",181,4130

+"dsp_al_cv2x_ring_size_get failed, rc = %u",182,4137

+"dsp_al_802_11_is_ring_empty failed, rc = %u",183,4175

+"if index #%u isn't supported in CV2X",184,4182

+"dsp_al_cv2x_is_ring_empty failed, rc = %u",185,4189

+"dsp_al_802_11_ring_start_indexes_get failed, rc = %u",186,4235

+"if index #%u isn't supported in CV2X",187,4242

+"dsp_al_cv2x_ring_start_indexes_get failed, rc = %u",188,4254

+"dsp_al_802_11_ring_end_indexes_get failed, rc = %u",189,4300

+"dsp_al_802_11_start_shadow_ring_index_set failed, rc = %u",190,4347

+"if index #%u isn't supported in CV2X",191,4354

+"dsp_al_cv2x_shadow_ring_index_set failed, rc = %u",192,4365

+"dsp_al_802_11_dsp_end_ring_index_set failed, rc = %u",193,4403

+"dsp_al_802_11_shadow_end_ring_index_set failed, rc = %u",194,4446

+"dsp_al_802_11_pps_counter_get failed, rc = %u",195,4481

+"dsp_al_cv2x_pps_counter_get failed, rc = %u",196,4489

+"if index #%u isn't supported in CV2X",197,4523

+"dsp_al_cv2x_diagnostics_struct_get failed, rc = %u",198,4530

+"if index #%u isn't supported in CV2X",199,4560

+"dsp_al_cv2x_diagnostics_struct_reset failed, rc = %u",200,4567

+"dsp_al_802_11_tsf_lock_status_get failed, rc = %u",201,4601

+"if index #%u isn't supported in CV2X",202,4608

+"dsp_al_cv2x_tsf_lock_status_get failed, rc = %u",203,4615

+"dsp_al_802_11_tx_packet_complete_info_get failed, rc = %u",204,4657

+"if index #%u isn't supported in CV2X",205,4664

+"dsp_al_cv2x_tx_packet_complete_info_get failed, rc = %u",206,4675

+"dsp_al_802_11_rx_packet_dequeue failed, rc = %u",207,4717

+"if index #%u isn't supported in CV2X",208,4724

+"dsp_al_cv2x_rx_packet_dequeue failed, rc = %u",209,4734

+"dsp_al_802_11_dot4_counters_get failed, rc = %u",210,4771

+"dsp_al_802_11_dsp_ring_info_snapshot_get failed, rc = %u",211,4818

+"if index #%u isn't supported in CV2X",212,4825

+"dsp_al_cv2x_dsp_ring_info_snapshot_get failed, rc = %u",213,4832

+"dsp_al_802_11_dsp_ring_descriptor_ptr_get failed, rc = %u",214,4876

+"if index #%u isn't supported in CV2X",215,4883

+"dsp_al_cv2x_dsp_ring_descriptor_ptr_get failed, rc = %u",216,4895

+"dsp_al_802_11_tx_ring_descriptor_flags_set failed, rc = %u",217,4933

+"dsp_al_802_11_tx_ring_descriptor_rate_get failed, rc = %u",218,4982

+"dsp_al_802_11_tx_ring_descriptor_rate_set failed, rc = %u",219,5031

+"dsp_al_802_11_tx_ring_descriptor_rates_shift failed, rc = %u",220,5072

+"dsp_al_802_11_tx_ring_descriptor_ampdu_configuration_set failed, rc = %u",221,5118

+"dsp_al_802_11_tx_ring_descriptor_length_set failed, rc = %u",222,5161

+"dsp_al_802_11_tx_ring_frame_retransmission_flag_set failed, rc = %u",223,5202

+"dsp_al_802_11_tx_ring_elements_swap failed, rc = %u",224,5245

+"if index #%u isn't supported in CV2X",225,5285

+"dsp_al_cv2x_logging_start failed, rc = %u",226,5298

+"if index #%u isn't supported in CV2X",227,5329

+"dsp_al_cv2x_logging_stop failed, rc = %u",228,5337

+"if index #%u isn't supported in CV2X",229,5370

+"dsp_al_cv2x_logging_file_name_get failed, rc = %u",230,5380

+"if index #%u isn't supported in CV2X",231,5412

+"dsp_al_cv2x_logging_bytes_recorded_get failed, rc = %u",232,5421

+"if index #%u isn't supported in CV2X",233,5452

+"dsp_al_cv2x_config_set failed, rc = %u",234,5459

+"dsp_al_cv2x_watchdog_counters_get failed, rc = %u",235,5495

+"ceva_dsp_full_reset failed, rc = %u",236,5548

+"dsp_memory_reload failed, rc = %u",237,5555

+"dsp_memory_reload failed, rc = %u",238,5561

+"dsp_al_802_11_recovery_boot_mode_set failed, rc = %u",239,5569

+"dsp_al_cv2x_recovery_boot_mode_set failed, rc = %u",240,5577

+"ceva_dsp_release_from_reset failed, rc = %u",241,5589

+"dsp_al_802_11_boot_validation failed, rc = %u",242,5598

+"dsp_al_cv2x_boot_validation failed, rc = %u",243,5607

+"dsp_al_802_11_buffers_overrun_check failed, rc = %u",244,5641

+"dsp_al_cv2x_buffers_overrun_check failed, rc = %u",245,5648

+"dsp_al_802_11_versions_get failed, rc = %u",246,5680

+"dsp_al_cv2x_versions_get failed, rc = %u",247,5692

+

+file_id,71,lmac_driver.c

+"Calibration file type isn't supported",0,147

+"RF CONFIG file type isn't supported",1,159

+"DSP physmem_map failed, rc = %u",2,257

+"dsp_memory_dump_ptr is NULL",3,264

+"DSP memory dump failed, rc = %u",4,289

+"***************************DSP ERROR STATUS*********************************",5,354

+"************************************************************",6,364

+"****                 DSP ERROR - ASSERT                  ***",7,365

+"************************************************************",8,366

+"Assert in line %d, function name prefix %c%c%c%c%c",9,367

+"************************************************************",10,389

+"****                  DSP ERROR - HANG                   ***",11,390

+"************************************************************",12,391

+"Hang in MAIN",13,401

+"************************************************************",14,414

+"****                 DSP ERROR - OVERRUN                 ***",15,415

+"************************************************************",16,416

+"Buffer overrun occurred in Rx frame buffer, if_index=%u, ring #%u, element #%u",17,425

+"Buffer overrun occurred in Rx ranging buffer, if_index=%u, ring #%u, element #%u",18,439

+"Buffer overrun occurred in L1 buffer",19,453

+"************************************************************",20,463

+"****           DSP UNDEFINED ERROR DETECTED              ***",21,464

+"************************************************************",22,465

+"sw_config_get failed, rc = %u",23,493

+"dsp_al_interface_recovery_trigger failed, rc = %u",24,552

+"lmac_driver_dsp_attach failed, rc = %u",25,560

+"DSP Recovery succeeded",26,570

+"DSP Recovery failed",27,573

+"Failed to set register in physical address 0x%x, rc = %u",28,632

+"Failed to set PLL4, PLL is not locked",29,644

+"Failed to set register in physical address %x, rc = %d",30,652

+"Failed to set register in physical address %x, rc = %d",31,660

+"Failed to set register in physical address %x, rc = %d",32,667

+"Failed to get register in physical address %x, rc = %d",33,675

+"Failed to set WLAN clock",34,687

+"Invalid argument: dsp_al_device_id_ptr is NULL",35,740

+"Invalid argument: lmac_device_id = %u",36,759

+"Exiting (dev %d)",37,782

+"Called (dev %u)",38,816

+"Invalid interface index = %u",39,819

+"CBR Sampling callback is already registered for if_index %u",40,834

+"tx_dev %d, rx_dev %d,",41,887

+"tx_ring %d, tx_start %u, tx_end %u",42,888

+"rx_start %u, rx_end %u",43,890

+"packet:",44,912

+"Exiting...",45,933

+"Invalid argument: last_rssi is NULL",46,973

+"Invalid argument: if_index = %u",47,978

+"Invalid if_index = %u",48,1056

+"Invalid if_index = %u",49,1077

+"dsp_al_interface_phy_flags_get failed, rc = %u",50,1084

+"Invalid if_index = %u",51,1099

+"dsp_al_interface_phy_status_flags_get failed, rc = %u",52,1106

+"pluton2_rev_id_ptr cannot be NULL",53,1126

+"Buffer too small %u, minimum len %u",54,1132

+"Failed to write to page 0, rc = %u",55,1150

+"Failed to read PLUTON2 RevID, rc = %u",56,1160

+"Invalid revision ID, %u",57,1186

+"osal_thread_config_create failed: rc = %u",58,1216

+"osal_thread_create failed: rc = %u",59,1225

+"osal_thread_join: %d",60,1249

+"Failed to map AFE PLL cfg registers (start=0x%08x, len=%zu), rc %d",61,1279

+"Failed to write value to DSP control memory, rc = %u",62,1293

+"Failed to write value to DSP control memory, rc = %u",63,1299

+"Frequency not supported, supported frequencies are 122.88 and 160 MHz",64,1328

+"Failed to set AFE PLL, PLL is not locked",65,1344

+"Failed to unmap AFE PLL cfg registers, rc %d",66,1375

+"Frequency not supported %d, supported 200 and 333 MHz",67,1421

+"Failed to disable PLL4 or WLAN clock, rc = %u",68,1431

+"Failed to set register in physical address %x, rc = %u",69,1439

+"Failed to enable PLL4 or WLAN clock, rc = %u",70,1447

+"Failed to set register in physical address %x, rc = %u",71,1457

+"Failed to set register in physical address %x, rc = %u",72,1471

+"Failed to set register in physical address %x, rc = %u",73,1483

+"Failed to map resstat A7 register (start=0x%08x, len=%zu), rc %d",74,1513

+"Failed to get register in physical address %x, rc = %d",75,1523

+"XTAL frequency not supported %x ",76,1547

+"IDF value cannot be zero",77,1554

+"Failed to unmap resstat A7 register, rc %d",78,1571

+"Interface %u is already attached",79,1593

+"dsp_al_interface_attach_state_set failed, rc = %u",80,1600

+"osal_tasklet_lock_save failed, rc = %u",81,1630

+"Interface %u detach failed, rc=%d",82,1637

+"Invalid argument: if_index = %u",83,1657

+"Interface #%u is already detached",84,1668

+"lmac_driver_mode_dependent_detach failed, if#%u, rc = %u",85,1675

+"lmac_driver_mode_dependent_attach failed, if#%u, rc = %u",86,1681

+"Failed to get RF configuration info, if_index = %u rc = %u",87,1703

+"Failed to get calibration info, if_index = %u rc = %u",88,1706

+"dsp_al_interface_aux_memory_populate failed, rc = %u",89,1720

+"lmac_driver_phy_flags_set failed, rc = %u",90,1731

+"dsp_al_interface_aux_is_rf_pluton2_get failed, rc = %u",91,1760

+"lmac_driver_phy_status_flags_get failed, rc = %u",92,1775

+"*******************************************************************",93,1781

+"* WARNING: DCOC_I CALIBRATION FAIL      (phy_status_flags=0x%08x) *",94,1782

+"*******************************************************************",95,1784

+"*******************************************************************",96,1791

+"* WARNING: DCOC_Q CALIBRATION FAIL      (phy_status_flags=0x%08x) *",97,1792

+"*******************************************************************",98,1794

+"*******************************************************************",99,1801

+"* WARNING: PHY_STATUS_F_NO_RF_FAIL FAIL (phy_status_flags=0x%08x) *",100,1802

+"*******************************************************************",101,1804

+"*******************************************************************",102,1811

+"* WARNING: PHY_STATUS_F_RF_PLL_UNLOCKED (phy_status_flags=0x%08x) *",103,1812

+"*******************************************************************",104,1814

+"*******************************************************************",105,1821

+"* WARNING: PHY_STATUS_F_CAL_FAIL        (phy_status_flags=0x%08x) *",106,1822

+"*******************************************************************",107,1824

+"********************************************************************",108,1831

+"* WARNING: PHY_STATUS_F_FAST_WRITE_FAIL (phy_status_flags=0x%08x)  *",109,1832

+"********************************************************************",110,1834

+"DCOC_I and DCOC_Q Calibration Succeeded",111,1839

+"device_id_lmac_to_dsp_al_convert failed, rc = %u",112,1856

+"dsp_al_interface_memory_write failed, rc = %u",113,1862

+"device_id_lmac_to_dsp_al_convert failed, rc = %u",114,1880

+"dsp_al_interface_memory_read failed, rc = %u",115,1886

+"dsp_al_interface_type_get failed, rc = %u",116,1901

+"dsp_al_interface_cbr_value_get failed, rc = %u",117,1922

+"Unknown action: %u",118,1944

+"dsp_al_interface_dfs_set failed, rc = %u",119,1951

+"control_block_ptr is NULL",120,1965

+"Invalid interface index = %u",121,2009

+"passthrough Sampling callback is already registered for if_index %u",122,2022

+"Invalid interface index = %u",123,2050

+"Invalid argument: ac_value_ptr is NULL",124,2121

+"Invalid argument: access_category = %u",125,2148

+"Invalid parameter: lmac_format = %u",126,2270

+"Invalid parameter: dsp_al_format = %u",127,2299

+"lmac_driver_format_to_dsp_al_convert failed, rc = %u",128,2313

+"lmac_driver_bandwidth_conversion_lmac_to_802_11 failed, rc = %u",129,2320

+"lmac_driver_format_dsp_al_to_lmac_convert failed, rc = %u",130,2340

+"lmac_driver_bandwidth_conversion_802_11_to_lmac failed, rc = %u",131,2346

+"Invalid argument: if_index = %u",132,2370

+"Interface %d is already attached",133,2380

+"lmac_driver_auxiliary_file_assign failed, rc = %u",134,2388

+"lmac_driver_auxiliary_file_assign failed, rc = %u",135,2397

+"lmac_driver_auxiliary_file_assign failed, rc = %u",136,2405

+"lmac_driver_calibration_status_check failed, rc = %u",137,2431

+"lmac_driver_calibration_status_check failed. rc = %u",138,2441

+"lmac_driver_compensator_calibration_download_trigger failed. rc = %u",139,2450

+"lmac_driver_dsp_detach failed, rc = %u",140,2456

+"Attaching UMAC failed ...retry number %d",141,2466

+"lmac_driver_dsp_detach(if_index=%u) failed, rc = %u",142,2472

+"Invalid argument: if_index = %u",143,2492

+"lmac_driver_if_indexes_get failed, rc = %u",144,2498

+"dsp_al_interface_is_compensator_enabled_get failed. rc = %u. Assume we have no compensator and continue",145,2506

+"lmac_driver_events_service_compensator_status_set failed. rc = %u",146,2519

+"lmac_driver_events_service_compensator_status_set failed. rc = %u",147,2527

+"dsp_al_interface_compensator_info_request_trigger failed, rc = %u. Assume we have no compensator and continue",148,2539

+"Invalid argument: if_index = %u",149,2562

+"Invalid argument: last_rf_gain_ptr is NULL",150,2593

+"Invalid argument: if_index = %u",151,2598

+"Failed to map A7 misc registers (start=0x%08lx, len=%zu), rc = %u",152,2639

+"Failed to unmap A7 misc registers rc = %u",153,2659

+"atk42xx_soc_wlan_pinctrl_rf_pluton2_pins_bind() - Failed, rc = %u",154,2672

+"rf_fast_write_enable failed, rc %d",155,2701

+"dsp_al_interface_aux_pps_source_get failed, rc = %u",156,2724

+"Invalid PPS GPIO source (%u)",157,2742

+"pps_gpio_source_set failed, rc = %u",158,2751

+"dsp_al_interface_pps_source_set failed, rc = %u",159,2759

+"dsp_al_interface_aux_pps_source_get failed, rc = %u",160,2767

+"No CCA configuration found",161,2791

+"dsp_al_interface_cca_gpio_set failed, rc = %u",162,2798

+

+file_id,72,lmac_driver_dbg.c

+"osal_mutex_lock failed, rc = %u",0,74

+"Invalid next state %d, current state %d",1,104

+"logging file path is to long",2,126

+"file_open  err %d",3,149

+"LMAC driver debug logging control block not initialized",4,184

+"lmac_driver_events_service_queue_send failed. rc = %u",5,278

+"LMAC driver DBG not initialized",6,301

+"LMAC driver debug not initialized",7,329

+"LMAC driver debug not initialized",8,387

+"osal_sem_wait failed, rc = %u",9,409

+"Invalid ring type: %d",10,443

+

+file_id,73,lmac_driver_ddm.c

+"Invalid if_index = %u",0,41

+"lmac_driver_mode_dependent_detach failed, if#%u, rc = %u",1,54

+"lmac_driver_auxiliary_file_assign failed, rc = %u",2,61

+"lmac_driver_auxiliary_file_assign failed, rc = %u",3,69

+"lmac_driver_auxiliary_file_assign failed, rc = %u",4,78

+"lmac_driver_calibration_status_check failed. rc = %u",5,111

+"Interface %d UMAC attached.",6,116

+"lmac_driver_mode_dependent_detach failed, if#%u, rc = %u",7,126

+"Invalid parameter: dsp_al_tsf_lock_status = %u",8,152

+"Failed to map temperature registers (start = 0x%08lx, len = %u), rc = %u",9,189

+"Failed to unmap temperature registers, rc  = %u",10,222

+"dsp_al_interface_tsf_lock_status_get failed, rc = %u",11,255

+"dsp_al_interface_tsf_value_set failed, rc = %u",12,275

+"dsp_al_interface_tsf_value_get failed, rc = %u",13,303

+"dsp_al_interface_tsf_lock_status_get failed, rc = %u",14,319

+"tsf_lock_status_dsp_al_to_lmac_convert failed, rc = %u",15,326

+"reload_flags %d",16,348

+"Failed to get sw_config, rc = %u",17,352

+"lmac_calib_file_location orig 0x%x new 0x%x",18,374

+"calibration_reload failed, if_index= %u, rc = %u",19,390

+"lmac_driver_rf_type_set failed, rc = %u",20,398

+"lmac_driver_dsp_pps_cca_gpio_set failed, rc = %u",21,405

+"Unknown PPS validity value: %u",22,436

+"dsp_al_interface_pps_lock_status_set failed, rc = %u",23,449

+"dsp_al_interface_pps_unsync_force failed, rc = %u",24,470

+"dsp_al_interface_pps_hold_over_time_set failed, rc = %u",25,491

+"dsp_al_interface_pps_hold_over_time_get failed, rc = %u",26,512

+"dsp_al_interface_pps_last_timing_offset_get failed, rc = %u",27,533

+"device_temperature_get failed, rc = %u",28,567

+

+file_id,74,lmac_driver_dot4.c

+"DSP - freq: %u, time-slot: %u",0,94

+"Failed to switch DOT4 channel, rc = %d",1,104

+"update channel - requested num: %u, stored num: %u",2,120

+"invalid parameters",3,182

+"scq_enqueue to event queue failed, rc %d",4,194

+"scq_dequeue_ptr_get from event queue failed, rc %d",5,209

+"invalid element received from event queue",6,214

+"Invalid argument: if_index = %u",7,229

+"Invalid argument: switching_config_ptr is NULL",8,234

+"dsp_al_interface_dot4_switching_config_set failed, rc=%u",9,248

+"Invalid argument: if_index = %u",10,263

+"Invalid argument: switching_config_ptr is NULL",11,268

+"dsp_al_interface_dot4_switching_config_get failed, rc = %u",12,275

+"scq_dequeue from event queue failed, rc %d",13,296

+"Invalid param - NULL pointer",14,353

+"timer expired",15,387

+"send_element_to_event_queue failed, rc = %u",16,392

+"failed to read switching capability values from DSP",17,449

+"Invalid event #%d",18,476

+"Invalid param - immediate access > 0",19,516

+"Failed to configure EDCA functions (rc = %d)",20,538

+"Invalid param - channel already configured",21,628

+"Invalid param - channel already configured on second slot",22,636

+"No time sync - can't switch state",23,649

+"Failed to configure EDCA functions (rc = %d)",24,691

+"Invalid param - channel_num not configured",25,712

+"lmac_driver_control_block_get returned NULL, if_index = %u",26,755

+"Invalid param - channel not configured",27,813

+"Invalid param - non immediate mode isn't supported",28,819

+"Failed to configure EDCA functions (rc = %d)",29,848

+"Invalid param - channel_num not configured",30,871

+"Invalid param - channel_num not configured",31,985

+"Invalid param - channel not in immediate mode",32,991

+"Invalid immediate stacked state",33,1058

+"receive_element_ptr_from_event_queue error #%d",34,1180

+"Invalid DOT4 state #%d",35,1261

+"IF #%u - 1609.4 State: INIT",36,1271

+"IF #%u - 1609.4 State: DISABLE",37,1275

+"IF #%u - 1609.4 State: CONTINUOUS",38,1279

+"IF #%u - 1609.4 State: IMMEDIATE",39,1283

+"IF #%u - 1609.4 State: ALTERNATE",40,1287

+"error removing element from event queue",41,1302

+"Invalid argument: if_index = %u",42,1324

+"Invalid argument: channel_id_ptr is NULL",43,1329

+"Invalid argument: if_index = %u",44,1355

+"Invalid argument: time_slot = %u, DOT4 state isn't DISABLE",45,1361

+"Invalid argument: if_index = %u",46,1390

+"Invalid argument: request_ptr is NULL",47,1396

+"Invalid argument: channel number not supported",48,1403

+"Invalid argument: time_slot = %d",49,1410

+"Invalid argument: op_class = %d",50,1419

+"lmac_driver_if_indexes_get failed, rc = %u",51,1427

+"Error, same frequency as adjacent channel",52,1442

+"couldn't allocate data block from pool",53,1452

+"Invalid argument: if_index = %u",54,1479

+"Invalid argument: request_ptr is NULL",55,1485

+"Invalid argument: channel number not supported",56,1492

+"Invalid argument: op_class",57,1501

+"couldn't allocate data block from pool",58,1511

+"Invalid argument: if_index = %u",59,1537

+"Invalid argument: request_ptr is NULL",60,1543

+"couldn't allocate data block from pool",61,1553

+"Invalid argument: if_index = %u",62,1579

+"Invalid argument: switching_config_ptr is NULL",63,1584

+"time sync duration should be >= %d msec",64,1590

+"total duration (%u ms) can't be divider of %lu",65,1596

+"sync tolerance should be >= %d msec / max channel switch time should be >= %d msec",66,1604

+"Invalid state #%d",67,1631

+"Invalid argument: if_index = %u",68,1647

+"Invalid input param - NULL pointer",69,1652

+"response callback is NULL",70,1666

+"event queue init failed, rc %d",71,1687

+"block pool init failed, rc %d",72,1700

+"osal_thread_config_create failed: rc=%d",73,1720

+"osal_thread_create failed: rc=%d",74,1729

+"send_element_to_event_queue failed, rc = %d",75,1755

+"osal_thread_join failed, rc = %d",76,1761

+"block_pool_deinit failed, rc = %d",77,1781

+"scq_deinit failed, rc = %d",78,1792

+"sync loss occurred",79,1817

+"send_element_to_event_queue (idx=%u) failed, rc = %u",80,1828

+"Invalid argument: if_index = %u",81,1866

+"Invalid argument: stats_ptr is NULL",82,1871

+"Invalid argument: time_slot = %u",83,1876

+"dsp_al_interface_dot4_counters_get failed, rc = %u",84,1889

+

+file_id,75,lmac_driver_events_service.c

+"dsp_al_interface_compensator_keep_alive_get failed, rc = %u",0,56

+"scq_dequeue_ptr_get failed. rc = %u",1,77

+"scq_dequeue failed. rc = %u",2,88

+"lmac_driver_if_indexes_get failed, rc = %u. Exiting thread.",3,111

+"events_status_queue_receive failed. rc = %u",4,120

+"compensator_info_request_trigger - retry #%u due to internal dsp_al error",5,139

+"dsp_al_interface_compensator_info_request_trigger failed, rc = %u",6,144

+"compensator_info_request_trigger - retry #%u due CRC error",7,189

+"dsp_al_interface_compensator_info_request_trigger failed, rc = %u",8,194

+"compensator_info_request_trigger - retry #%u due timeout",9,236

+"dsp_al_interface_compensator_info_request_trigger failed, rc = %u",10,242

+"Compensator information download timer expired",11,310

+"send_element_to_event_queue failed, rc = %u",12,315

+"Compensator keep alive timer expired",13,331

+"scq_enqueue failed, rc = %u",14,336

+"lmac_driver_events_service_queue_send failed. rc = %u",15,355

+"dsp_al_interface_compensator_calib_valid_get failed, rc = %u",16,420

+"Invalid compensator internal status [%u]",17,438

+"scq_init failed. rc = %u",18,460

+"osal_thread_config_create failed, rc = %u",19,491

+"osal_thread_create failed, rc = %u",20,501

+"scq_enqueue(DEINIT) failed. rc = %u",21,543

+"osal_thread_join failed. rc = %u",22,549

+"scq_deinit failed. rc = %u",23,557

+"scq_enqueue failed. rc = %u",24,574

+

+file_id,76,lmac_driver_init.c

+"Invalid params: control_block_ptr = %p, config_ptr = %p",0,117

+"dsp_al_interface_type_get failed, rc = %u",1,141

+"dsp_al_interface_frequency_get failed, rc = %u",2,148

+"dsp_al_interface_ring_size_get failed, rc = %u",3,158

+"Memory block pool size isn't enough, required=%u, current=%u",4,168

+"block_pool_alloc failed, rc = %u",5,174

+"lmac_driver_if_indexes_get failed, rc = %u",6,258

+"lmac_driver_control_block_get failed, rc = %u",7,265

+"lmac_driver_ddm_pps_unsync_force failed, rc = %u",8,274

+"lmac_driver_mode_dependent_detach failed, if_index %u, rc = %u",9,284

+"lmac_driver_wdm_cbp_deinit failed, rc = %u",10,302

+"block_pool_deinit failed, rc = %d",11,334

+"lmac_mode_dependent_deinit failed, rc = %u",12,346

+"lmac_loopback_enable=%u",13,361

+"lmac_phy_loopback_enable=%u",14,362

+"lmac_wlan_mailbox_interrupts_enable=%u",15,363

+"lmac_calib_file_location = %u",16,364

+"lmac_rf_config_file_location = %u",17,365

+"physical_interfaces_in_use = %u",18,366

+"craton2_soc_revision_get failed, rc = %u",19,374

+"Invalid parameter: physical_interfaces_in_use = %u",20,379

+"lmac_driver_if_indexes_set failed, rc = %u",21,395

+"dsp_al_interface_cold_init failed, rc = %u",22,402

+"block_pool_init failed, rc = %u",23,418

+"control_block_ptr is NULL, if_index = %u",24,426

+"control_block_init failed (if index = %u), rc = %u",25,433

+"lmac_driver_mode_dependent_init failed, rc = %u",26,440

+"control_block_ptr is NULL, first_if_index = %u",27,448

+"lmac_driver_dsp_error_handling_thread_init failed, rc = %u",28,455

+"lmac_driver_events_service_init failed, rc = %u",29,462

+"lmac_driver_auxiliary_file_assign failed, to set calibration file, rc = %u",30,469

+"lmac_driver_auxiliary_file_assign failed, to set RF configuration file,  rc = %u",31,476

+"lmac_driver_rf_type_set failed, rc = %u",32,483

+"lmac_driver_dsp_pps_cca_gpio_set failed, rc = %u",33,490

+"dsp_al_interface_type_get failed, rc = %u",34,504

+"Invalid DSP type %u",35,518

+"lmac_driver_afe_pll_frequency_set failed, rc = %u",36,526

+

+file_id,79,lmac_driver_tx.c

+"pre_enqueue failed, rc = %u",0,36

+"IF#%u: access category = %u, length = %u, mcs[0]=%u, bw[0]=%u format=%u",1,56

+"packet->rates[0].flags=0x%x, power[dBm(1/8)]=%u, rtscts_mcs=%u",2,59

+"mpdu_spacing=%u (0.25usec units), packet->flags=0x%x",3,62

+"pre_tx_trigger failed, rc = %u",4,77

+"control_block_ptr is NULL",5,101

+"osal_tasklet_lock_save failed, rc = %u",6,112

+"dsp_al_interface_is_ring_empty failed, rc = %u",7,123

+"txc_ring_before failed, rc = %u",8,134

+"dsp_al_interface_ring_start_indexes_get failed, rc = %u",9,144

+"ring instance #%u",10,147

+"shadow_start_index = %u",11,148

+"dsp_start_index = %u",12,149

+"txc_frame_before failed, rc = %u",13,155

+"dsp_al_interface_shadow_start_ring_index_set failed, rc = %u",14,165

+"txc_ring_after failed, rc = %u",15,171

+"dev %u, ring %u, dsp start %d, start %d",16,175

+"Invalid argument: if_index = %u",17,190

+"lmac_driver_control_block_get failed",18,196

+"TSSI %08X",19,203

+

+file_id,80,lmac_driver_tx_v2x.c

+"Called",0,21

+"Mandatory function argument is not specified",1,29

+"Invalid packet (no data)",2,34

+"Invalid argument: if_index = %u",3,39

+"Invalid argument: access_category %d",4,44

+"Invalid argument: Tx slot ID = %d",5,49

+"Interface %d is not attached!",6,59

+"dsp_al_interface_diversity_mode_get failed, rc = %u",7,66

+"osal_tasklet_lock_save failed, rc = %u",8,80

+"IF#%u, Packet slot-id = %u, ac = %u",9,85

+"lmac_driver_packet_enqueue failed, rc = %u",10,91

+"lmac_driver_tx_trigger failed, rc = %u",11,101

+

+file_id,81,lmac_driver_tx_wifi.c

+"DSP is not attached",0,19

+"osal_tasklet_lock_save failed, rc = %u",1,25

+"dsp_al_interface_ring_start_indexes_get failed, rc=%u",2,38

+"dsp_al_interface_ring_end_indexes_get failed, rc=%u",3,48

+"lmac_driver_tx_trigger failed, rc=%u",4,62

+"osal_tasklet_lock_save failed, rc = %u",5,105

+"lmac_driver_packet_enqueue failed, rc=%u",6,113

+"dsp_al_interface_ring_start_indexes_get failed, rc=%u",7,123

+"dsp_al_interface_ring_end_indexes_get failed, rc=%u",8,133

+"lmac_driver_tx_trigger failed, rc=%u",9,141

+

+file_id,82,lmac_driver_wdm.c

+"Invalid argument: min_rssi_ptr NULL",0,79

+"Invalid argument: control_block_ptr is NULL",1,84

+"Invalid argument: max_rssi_ptr is NULL",2,121

+"Invalid argument: control_block_ptr is NULL",3,126

+"Invalid arguments: min_mcs_ptr = %p, max_mcs_ptr = %p",4,164

+"Invalid argument: control_block_ptr is NULL",5,169

+"Invalid argument: evm_fraction_ptr is NULL",6,217

+"Invalid argument: control_block_ptr is NULL",7,222

+"Invalid argument: evm_fraction_ptr is NULL",8,260

+"Invalid argument: control_block_ptr is NULL",9,265

+"Invalid argument: rx_queue_full_cnt_ptr is NULL",10,307

+"lmac_driver_if_indexes_get failed, rc = %u",11,314

+"Invalid argument: control_block_ptr is NULL",12,357

+"Invalid argument: statistics_ptr is NULL",13,362

+"Invalid argument: statistics_ptr is NULL",14,429

+"dsp_al_interface_diversity_mode_get failed, rc = %u",15,436

+"osal_tasklet_lock_save failed, rc = %u",16,453

+"diversity_stats_get failed, rc = %u",17,459

+"osal_tasklet_lock_save failed, rc = %u",18,475

+"Failed to get last RF gain from WLAN driver",19,483

+"Failed to get min RF gain from WLAN driver",20,490

+"Failed to get max RF gain from WLAN driver",21,497

+"Failed to get last RSSI from WLAN driver",22,505

+"Failed to get min RSSI from WLAN driver",23,512

+"Failed to get max RSSI from WLAN driver",24,519

+"Failed to get last RF gain from WLAN driver",25,526

+"Failed to get min and max MCS from WLAN driver",26,535

+"Invalid arguments",27,638

+"Failed to get mac address for interface %u, rc = %u",28,655

+"Failed to set mac address for interface %u, rc = %u",29,669

+"Failed to set Rx mac address mask for interface %u, rc = %u",30,686

+"Invalid argument: if_index = %u",31,703

+"Invalid argument: duty_cycle_msec_ptr is NULL",32,723

+"Invalid argument: if_index = %u",33,728

+"Failed to get frequency for interface %u, rc = %u",34,749

+"Failed to set interface %u frequency in DSP cookie, rc = %u",35,775

+"lmac_driver_if_indexes_get failed, rc = %u",36,787

+"lmac_driver_wdm_diversity_get failed, rc = %u",37,804

+"Error, same frequency as adjacent channel",38,813

+"Failed to get control flag for interface %u, rc = %u",39,867

+"Failed to get control flag for interface %u, rc = %u",40,882

+"Failed to set control flag for interface %u, rc = %u",41,889

+"Failed to reattach for interface %u, rc = %u",42,896

+"Failed to get primary index for interface %u, rc = %u",43,911

+"Failed to set primary index for interface %u, rc = %u",44,924

+"Invalid argument: value %u",45,937

+"Failed to set TX power for interface %u, rc = %u",46,943

+"Failed to reattach for interface %u, rc = %u",47,950

+"Invalid argument: rf_test_mode_config_ptr is NULL",48,975

+"Invalid argument: if_index = %u",49,980

+"Unknown RF test mode %u",50,1034

+"RF already in test mode",51,1043

+"Unknown RF test mode %u",52,1053

+"Invalid argument: if_index = %u",53,1079

+"rf_test_mode_config_ptr is NULL",54,1084

+"Failed to get LMAC counters for interface %u, rc = %u",55,1125

+"Failed to get LMAC additional counters for interface %u, rc = %u",56,1167

+"Failed to get PHY counters for interface %u, rc = %u",57,1222

+"Invalid argument: evm_fraction_ptr is NULL",58,1247

+"Invalid argument: if_index = %u",59,1252

+"Failed to set cookie frequency for interface %u, rc = %u",60,1274

+"Invalid argument: if_index = %u",61,1293

+"dsp_al_interface_bandwidth_get failed, rc = %u",62,1305

+"Invalid argument: if_index = %u",63,1339

+"dsp_al_interface_bandwidth_set failed, rc = %u",64,1370

+"Invalid argument: primary_index is NULL",65,1390

+"Invalid argument: if_index = %u",66,1395

+"Failed to get primary index for interface %u, rc = %u",67,1402

+"Invalid argument: primary_index = %u",68,1417

+"Invalid argument: if_index = %u",69,1422

+"Failed to get primary index for interface %u, rc = %u",70,1428

+"Failed to set primary index",71,1436

+"Failed to get PHY mode for interface %u, rc = %u",72,1456

+"Invalid argument: if_index = %u",73,1472

+"Failed to set PHY mode for interface %u, rc = %u",74,1496

+"Failed to get diversity mode for interface %u, rc = %u",75,1529

+"Invalid argument: if_index = %u",76,1561

+"Invalid diversity mode",77,1568

+"Failed to get diversity mode, rc = %u",78,1574

+"lmac_driver_if_indexes_get failed, rc = %u",79,1592

+"Diversity mode is not supported when only interface #1 is in use",80,1599

+"Failed to set diversity mode for interface %u, rc = %u",81,1621

+"Failed to get csd11p for interface %u, rc = %u",82,1660

+"Failed to set csd11p for interface %u, rc = %u",83,1673

+"lmac_driver_phy_flags_get failed, rc = %u",84,1688

+"lmac_driver_phy_flags_set failed, rc = %u",85,1707

+"Invalid argument: if_index = %u",86,1726

+"lmac_driver_mode_dependent_attach failed, if#%u, mode = %u, rc = %u",87,1735

+"Invalid argument: if_index = %u",88,1749

+"lmac_driver_mode_dependent_detach failed, if#%u, rc = %u",89,1756

+"Invalid argument: if_index = %u",90,1774

+"lmac_driver_mode_dependent_interface_mode_get failed, if#%u, rc = %u",91,1780

+"Invalid parameters: tssi_detector_ptr is NULL",92,1796

+"Invalid parameter: if_index = %u",93,1801

+"lmac_driver_tx_last_tssi_reading_get failed, rc = %u",94,1810

+"dsp_al_interface_compensator_tssi_value_get failed, rc = %u",95,1817

+"Unknown value type: %u",96,1826

+"lmac_driver_events_service_compensator_user_status_get failed, rc = %u",97,1853

+"dsp_al_interface_compensator_version_get failed, rc = %u",98,1862

+"dsp_al_interface_compensator_stats_get failed, rc = %u",99,1894

+"dsp_al_interface_compensator_last_messages_get failed, rc = %u",100,1925

+"dsp_al_interface_compensator_fault_code_get failed, rc = %u",101,1950

+"lmac_driver_events_service_compensator_user_status_get failed, rc = %u",102,1976

+"dsp_al_interface_compensator_raw_calibration_data_get failed, rc = %u",103,1983

+"lmac_driver_if_indexes_get failed, rc = %u",104,2003

+"lmac_driver_events_service_compensator_user_status_get failed, rc = %u",105,2010

+"dsp_al_interface_compensator_dsp_state_reset failed, rc = %u",106,2023

+"lmac_driver_compensator_calibration_download_trigger failed, rc = %u",107,2030

+"lmac_driver_wdm_diversity_get failed, rc = %u",108,2045

+"lmac_driver_wdm_diversity_set failed, rc = %u",109,2053

+"dsp_al_interface_tssi_calibration_mode_start failed, rc = %u",110,2060

+"dsp_al_interface_tssi_calibration_mode_stop failed, rc = %u",111,2075

+"lmac_driver_wdm_diversity_set failed, rc = %u",112,2087

+"Failed to get PLUTON2 revision ID, rc = %u",113,2103

+"lmac_driver_wdm_diversity_get failed, rc = %u",114,2122

+"Failed to get RSSI calibration result for RF antenna %u, rc = %u",115,2138

+"lmac_driver_wdm_diversity_set failed, rc = %u",116,2149

+"Failed to get RSSI calibration result for RF antenna %u, rc = %u",117,2157

+"lmac_driver_wdm_diversity_set failed, rc = %u",118,2164

+"lmac_driver_access_category_convert failed, rc = %u",119,2192

+"Failed to get EDCA config parameters for interface %u, rc = %u",120,2198

+"lmac_driver_access_category_convert failed, rc = %u",121,2224

+"Failed to get EDCA config parameters for interface %u, rc = %u",122,2236

+"Failed to write value to DSP control memory, rc = %u",123,2250

+"Failed to read value from DSP control memory, rc = %u",124,2263

+"Invalid parameter: statistics_ptr is NULL",125,2281

+"Failed to get PHY counters from WLAN driver",126,2293

+"Failed to get LMAC counters from WLAN driver",127,2301

+"Failed to get LMAC additional counters from WLAN driver",128,2309

+"Failed to get Rx EVM and RSSI stats",129,2316

+"Failed to get Rx queue full counter from WLAN driver",130,2323

+"Failed to get DSP error report from WLAN driver",131,2330

+"Invalid ring_instance_number = %u",132,2366

+"Failed to get DSP ring descriptor pointer for interface %u, rc = %u",133,2377

+"lmac_driver_if_indexes_get failed, rc = %u",134,2490

+"lmac_driver_if_indexes_get failed, rc = %u",135,2527

+"dsp_al_interface_diagnostics_struct_get failed, rc = %u",136,2536

+"lmac_driver_if_indexes_get failed, rc = %u",137,2557

+"lmac_driver_if_indexes_get failed, rc = %u",138,2591

+"lmac_driver_time_ahead_usec_set: invalid time_ahead_usec=%u, reseting to 4000",139,2606

+"lmac_driver_if_indexes_get failed, rc = %u",140,2630

+"Unsupported first_if_index = %d",141,2634

+"Unsupported dsp_type = %d. Not a CV2X dsp image!",142,2645

+"lmac_driver_if_indexes_get failed, rc = %u",143,2666

+"lmac_driver_if_indexes_get failed, rc = %u",144,2698

+"lmac_driver_if_indexes_get failed, rc = %u",145,2727

+"lmac_driver_if_indexes_get failed, rc = %u",146,2759

+"lmac_driver_if_indexes_get failed, rc = %u",147,2788

+"lmac_driver_if_indexes_get failed, rc = %u",148,2816

+"lmac_driver_if_indexes_get failed, rc = %u",149,2858

+"dsp_al_interface_diagnostics_struct_reset failed, rc = %u",150,2867

+"cwdm_sw_config_ptr is NULL",151,2883

+"lmac_driver_if_indexes_get failed, rc = %u",152,2894

+"lmac_driver_wdm_cv2x_sw_config_set: Reattach DSP on CWDM config change",153,2907

+"lmac_driver_wdm_cv2x_sw_config_set: Reattach DSP on carrier pools change",154,2914

+"cv2x_sw_config_set failed, rc = %u",155,2922

+"lmac_driver_wdm_cv2x_sw_config_set - Reattach DSP is required for interface %u",156,2931

+"dsp_al_interface_sw_config_set failed, rc = %u",157,2941

+"lmac_driver_if_indexes_get failed, rc = %u",158,2966

+"measurements_threshold_for_sci %d",159,2979

+"lmac_driver_if_indexes_get failed, rc = %u",160,2995

+"Invalid enable_disable_value %d",161,3021

+"lmac_driver_if_indexes_get failed, rc = %u",162,3028

+"Reading RF temperature failed, rc = %u",163,3076

+"lmac_driver_if_indexes_get failed, rc = %u",164,3183

+

+file_id,83,lmac_driver_wdm_cbp.c

+"Filter is to old and was removed, A new filter will be added",0,636

+"cbp_hash_verify_age_of_filter failed with error %d",1,639

+"filter is to old and was removed",2,850

+"cbp_hash_verify_age_of_filter failed with error %d",3,854

+"found filter index=%d, time=%u",4,907

+"Invalid parameter",5,926

+"cbp_hash_garbage_collection return less than 1, unable to allocate a place for filter",6,1096

+"second cbp_hash_insert still return NULL, returning out of memory",7,1103

+"lmac_driver_wdm_cbp_reset Failed",8,1125

+"----calculate_cbp_stats_debug----",9,1209

+"hash index %d filter index %d",10,1227

+"filter next %d",11,1235

+"first_filter_empty_index: %d",12,1248

+"filter next %d",13,1256

+"filters_in_use = %d, filters_available = %d, hash_table_size_in_use = %d, hash_table_size = %d",14,1259

+

+file_id,84,lmac_irq.c

+"lmac_driver_if_indexes_get failed, rc = %u",0,34

+"Failed to register MBOX_D2H_TX_CHANNEL_%u, rc=%d",1,50

+"Failed to register MBOX_D2H_RX_CHANNEL_%u, rc=%d",2,60

+"Failed to register MBOX_D2H_CMD_DONE_%u, rc=%d",3,70

+"Failed to register MBOX_D2H_RUNNING_%u, rc=%d",4,80

+"Failed to register MBOX_D2H_PPS_LOCK_LOST, rc=%d",5,95

+"Failed to register MBOX_D2H_PPS_LOCKED, rc=%d",6,104

+"Failed to register MBOX_D2H_PPS_SYNCED, rc=%d",7,113

+"Failed to register MBOX_D2H_COMP_CALIB_READY. rc = %u",8,122

+"Failed to register MBOX_D2H_TRIGGER_CATCHED, rc = %u",9,132

+"dsp_al_interface_h2d_request_complete_indicate failed, rc = %u",10,198

+"dsp_al_interface_attach_complete_indicate failed, rc = %u",11,214

+"irq_config_ptr is NULL",12,276

+"atlk_mailbox_instance_get() failed, rc=%d",13,283

+"atlk_mailbox_instance_get() failed, rc=%d",14,290

+"Fail to initialize LMAC Mailbox (WLAN to HOST), rc=%d",15,301

+"Fail to initialize LMAC Mailbox (HOST to WLAN), rc=%d",16,308

+"atlk_mailbox_interrupts_enable failed, rc=%u",17,331

+"Interrupt source registration failed, rc=%d",18,338

+"atlk_irq_register() failed, rc=%u",19,350

+"lmac_isr_handler_task_init() failed, rc=%d",20,357

+

+file_id,85,cv2x_mode.c

+"on_dequeue_thread\n",0,34

+"start polling_dequeue_thread old = %u new = %u\n",1,44

+"Cannot create polling_dequeue_thread, err=%d\n",2,71

+"osal_thread_join failed, rc=%d",3,87

+"dsp_al_interface_tx_packet_complete_info_get failed, rc = %u",4,151

+"Got confirmation (0x%x) from DSP: ring index=%d, lmac=%u, irq to DSP=%u (%u)",5,170

+"RR SF=%u, lmac SF=%d, cur frame=%u, ts=%u",6,173

+"ahead=%d\n stats: ok=%u, bd=%u, n=%u",7,177

+"sw_config_get failed, rc = %u",8,333

+"dsp_al_interface_is_ring_empty (Rx) failed, rc = %u",9,345

+"dsp_al_interface_rx_packet_dequeue failed, rc = %u",10,355

+"dsp_al_interface_is_ring_empty (Rx) failed, rc = %u",11,365

+"Buffer received. %lu bytes, EVM=%u/%u, ts=%u (%u)",12,377

+"rssi=[%d.%d,%d.%d]",13,382

+"gn=[%u,%u], mcs=%u",14,384

+"osal_tasklet_lock_save failed, rc = %u",15,407

+"dsp_al_interface_diversity_mode_get failed, rc = %u",16,445

+"last_evm_fraction.denominator == 0",17,473

+"dsp_al_interface_is_ring_empty (Rx) failed, rc = %u",18,493

+"dsp_al_interface_is_ring_empty (measurement) failed, rc = %u",19,504

+"dsp_al_interface_rx_packet_dequeue failed, rc = %u",20,517

+"dsp_al_interface_is_ring_empty (measurement) failed, rc = %u",21,526

+"sent %d measurements(cb=%d), max_cnt=%d, delta from last mesasurement=%dms",22,589

+"dsp_al_interface_is_ring_empty (measurement) failed, rc = %u",23,603

+"mode_ops_ptr is NULL",24,633

+

+file_id,86,default.c

+"mode_ops_ptr is NULL",0,150

+"Using default UMAC Rx callback!",1,160

+"Using default UMAC Tx complete callback!",2,168

+

+file_id,87,mode_dependent.c

+"lmac_driver_if_indexes_get failed, rc = %u",0,70

+"osal_mutex_lock failed, rc = %u",1,85

+"lmac_driver_dsp_detach failed, rc = %u",2,93

+"lmac_driver_if_indexes_get failed, rc = %u",3,117

+"Can't set umac callbacks while DSP is attached",4,171

+"Can't set mode operations while DSP is attached",5,195

+"mode %u is not registered",6,215

+"umac_callbacks_set failed, if#%u, mode = %u",7,225

+"mode_ops_set failed, if#%u, mode = %u",8,232

+"lmac_driver_if_indexes_get failed, rc = %u",9,257

+"Same frequency %u as adjacent interface",10,287

+"interfaces_state_descriptor_init failed, rc = %u",11,309

+"mode_apply failed, rc = %u",12,320

+"interfaces_state_descriptor_deinit failed, rc=%u",13,340

+"Invalid parameters: mode = %u, umac_callbacks_ptr = %p",14,358

+"Invalid parameter: mode = %u",15,379

+"Invalid mode = %u",16,404

+"Invalid argument: if_index = %u",17,409

+"If#%u can't attach in mode %u when CV2X DSP image is loaded",18,420

+"If#%u can't attach in mode %u when 802_11 DSP image is loaded",19,426

+"dsp_al_interface_diversity_mode_get failed, rc = %u",20,433

+"is_interface_frequency_unique failed, rc = %u",21,443

+"osal_mutex_lock failed, rc = %u",22,449

+"If#%u can't attach in dsp only mode since it hasn't been detached in this mode",23,457

+"lmac_driver_dsp_attach failed, if#%u, rc = %u",24,465

+"If#%u is busy, current mode = %u, requested mode = %u",25,484

+"lmac_driver_dsp_detach failed, if#%u, rc = %u",26,502

+"lmac_driver_calibration_load_and_verify failed, if#%u, rc = %u",27,511

+"mode_apply failed, if#%u, rc = %u",28,521

+"pre_warm_init failed, mode = %u, if#%u, rc = %u",29,528

+"lmac_driver_dsp_attach failed, if#%u, rc = %u",30,535

+"post_warm_init failed, mode = %u, if#%u, rc = %u",31,542

+"If#%u attached in mode %u, attached_counter = %u",32,552

+"Failed to set sampling timer duty cycle, rc = %u",33,567

+"Invalid mode = %u",34,591

+"Invalid argument: if_index = %u",35,596

+"dsp_al_interface_diversity_mode_get failed, rc = %u",36,603

+"osal_mutex_lock failed, rc = %u",37,613

+"if#%u is already detached",38,618

+"Can't do full detach during dsp only detach, if#%u",39,624

+"lmac_driver_dsp_detach failed, if#%u, rc = %u",40,640

+"warm_deinit failed, mode = %u, if#%u, rc = %u",41,656

+"If#%u detached from mode %u over service",42,661

+"warm_deinit failed, mode = %u, if#%u, rc = %u",43,673

+"lmac_driver_dsp_detach failed, if_index = %u, rc = %u",44,681

+"if_index %u detached from %u mode",45,685

+"mode_apply failed, rc = %u",46,690

+"mode_ptr is NULL",47,723

+"Invalid argument: if_index = %u",48,728

+"osal_mutex_lock failed, rc = %u",49,736

+"Invalid argument: if_index = %u",50,756

+"Current mode is not DSRC",51,764

+"Force DSRC mode detach, if#%u, attached_counter=%u",52,768

+"lmac_driver_mode_dependent_detach failed, rc=%u",53,772

+

+file_id,88,v2x_mode.c

+"dsp_al_interface_tx_packet_complete_info_get failed, rc = %u",0,69

+"dsp_al_interface_bandwidth_get failed, rc = %u",1,111

+"lmac_driver_bandwidth_conversion_lmac_to_802_11 failed, rc = %u",2,117

+"Packet bandwidth (%u) > MIB bandwidth (%u)",3,122

+"lmac_driver_access_category_convert failed, rc = %u",4,132

+"lmac_driver_rate_to_dsp_al_convert failed, rc = %u",5,160

+"access_category = %u",6,168

+"frame_data_ptr = %p",7,169

+"frame_data_size = %u",8,170

+"ring_descriptor_dpd_val = %u",9,171

+"ring_descriptor_tssi_length = %u",10,172

+"ring_descriptor_flags = 0x%x",11,173

+"ring_descriptor_rtscts_format = %u",12,174

+"ring_descriptor_rtscts_mcs = %u",13,175

+"ring_descriptor_tx_power_ctrl[0] = %u",14,176

+"ring_descriptor_tx_power_ctrl[1] = %u",15,177

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",16,198

+"dsp_al_interface_dsp_end_ring_index_set failed, rc = %u",17,210

+"dsp_al_interface_is_ring_empty failed, rc = %u",18,234

+"dsp_al_interface_rx_packet_dequeue failed, rc = %u",19,243

+"osal_tasklet_lock_save failed, rc = %u",20,275

+"dsp_al_interface_diversity_mode_get failed, rc = %u",21,313

+"last_evm_fraction.denominator == 0",22,341

+"dsp_al_interface_is_ring_empty failed, rc = %u",23,359

+"lmac_driver_wdm_phy_mode_set failed, rc = %u",24,405

+"lmac_driver_phy_flags_set failed, rc = %u",25,412

+"lmac_driver_dot4_init_request() failed, rc=%d",26,427

+"mode_ops_ptr is NULL",27,452

+

+file_id,90,tx_aggr.c

+"dsp_al_interface_tx_ring_descriptor_ampdu_configuration_set failed, rc = %u",0,43

+"dsp_al_interface_tx_ring_descriptor_length_set failed, rc = %u",1,52

+"Triggering only part of the ring: %u frames [%u/%u]",2,233

+"dsp_al_interface_tx_ring_descriptor_ampdu_configuration_set failed, rc = %u",3,294

+"dsp_al_interface_tx_ring_descriptor_ampdu_configuration_set failed, rc = %u",4,319

+"False ACK: sqn=%u < ssqn=%u\n",5,372

+"dsp_al_interface_tx_packet_complete_info_get failed, rc = %u",6,408

+"dsp_al_interface_tx_ring_descriptor_rate_get failed, rc = %u",7,418

+" unaggregate frame_idx=%u, ring_idx=%u",8,505

+"clean_ampdu_stats failed, rc = %u",9,509

+"dsp_al_interface_tx_ring_descriptor_flags_set failed, rc = %u",10,521

+"Called, if_index=%d, ac=%d, aid=%d",11,537

+"osal_tasklet_lock_save failed, rc = %u",12,549

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",13,559

+

+file_id,91,tx_retry.c

+"dsp_al_interface_tx_ring_elements_swap failed, rc = %u",0,75

+"dsp_al_interface_shadow_end_ring_index_set failed, rc = %u",1,350

+"dsp_al_interface_tx_ring_descriptor_rate_get failed, rc = %u",2,401

+"dsp_al_interface_tx_ring_descriptor_rates_shift failed, rc = %u",3,411

+"lmac_driver_rate_dsp_al_to_lmac_convert failed, rc = %u",4,419

+"lmac_driver_rate_to_dsp_al_convert failed, rc = %u",5,426

+"dsp_al_interface_tx_ring_descriptor_rate_set failed, rc = %u",6,436

+"dsp_al_interface_tx_ring_frame_retransmission_flag_set failed, rc = %u",7,451

+"LMAC driver is not ready",8,480

+"osal_tasklet_lock_save failed, rc = %u",9,488

+"dsp_al_interface_ring_start_indexes_get failed, rc = %u",10,504

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",11,514

+"lmac_driver_rate_to_dsp_al_convert failed, rc = %u",12,542

+"dsp_al_interface_tx_ring_descriptor_rate_set failed, rc = %u",13,548

+"dsp_al_interface_tx_ring_descriptor_rate_get failed, rc = %u",14,556

+"dsp_al_interface_tx_ring_descriptor_rate_set failed, rc = %u",15,564

+

+file_id,92,wifi_mode.c

+"dsp_al_interface_tx_packet_complete_info_get failed, rc = %u",0,99

+"Unexpected duration error: fmt=%u, bw=%u, mcs=%u",1,124

+"clean_ampdu_stats failed, rc = %u",2,138

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",3,187

+"dsp_al_interface_ring_start_indexes_get failed, rc = %u",4,197

+"lmac_driver_tx_trigger failed, rc = %u",5,205

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",6,216

+"lmac_driver_access_category_convert failed, rc = %u",7,254

+"lmac_driver_format_to_dsp_al_convert failed, rc = %u",8,272

+"lmac_driver_rate_to_dsp_al_convert failed, rc = %u",9,280

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",10,335

+"dsp_al_interface_dsp_end_ring_index_set failed, rc = %u",11,359

+"dsp_al_interface_is_ring_empty failed, rc = %u",12,384

+"dsp_al_interface_rx_packet_dequeue failed, rc = %u",13,393

+"lmac_driver_bandwidth_conversion_802_11_to_lmac failed, rc = %u",14,414

+"osal_tasklet_lock_save failed, rc = %u",15,432

+"dsp_al_interface_diversity_mode_get failed, rc = %u",16,470

+"last_evm_fraction.denominator == 0",17,498

+"dsp_al_interface_is_ring_empty failed, rc = %u",18,516

+"lmac_driver_control_block_get failed",19,532

+"tx_retry_init failed, rc = %u",20,538

+"mode_ops_ptr is NULL",21,571

+"Called, if_index=%u, ac=%u, aid=%u",22,589

+"LMAC driver is not ready",23,593

+"Invalid access category %u",24,598

+"osal_tasklet_lock_save failed, rc = %u",25,607

+"dsp_al_interface_ring_end_indexes_get failed, rc = %u",26,617

+" drop: ring_idx=%u, frame_idx=%u",27,633

+"dsp_al_interface_shadow_end_ring_index_set failed, rc = %u",28,648

+

+file_id,93,v2x_extended.c

+"tx_params_flags = 0x%08x",0,112

+"format = 0x%02x",1,114

+"rate_flags = 0x%04x",2,116

+"rtscts_mcs = 0x%02x",3,118

+"rtscts_format = 0x%02x",4,120

+"mpdu_spacing_0_25_usec = 0x%02x",5,122

+"sta_ampdu_factor = 0x%02x",6,124

+"override_ring = 0x%02x",7,126

+

+file_id,94,log_driver.c

+"scq_enqueue failed, rc = %u",0,55

+"osal_thread_join failed, rc = %d",1,62

+"scq_dequeue_ptr_get failed, rc = %u",2,122

+"scq_dequeue failed, rc = %u",3,162

+"scq_init failed, rc = %u",4,190

+"osal_thread_config_create failed, rc = %u",5,202

+"osal_thread_create failed, rc = %u",6,211

+"sw_config_get failed, rc = %u",7,221

+"Log driver already de-initiazlied",8,252

+"thread_deinit failed, rc = %u",9,260

+"scq_deinit failed, rc = %u",10,267

+"osal_tasklet_lock_save failed, rc = %u",11,338

+"scq_enqueue failed, rc = %u",12,364

+

+file_id,95,mcu_control.c

+"Invalid next state %u",0,142

+"osal_state_lock failed",1,149

+"Invalid next state %u, current state %u",2,156

+"Invalid next state %u, current state %u",3,164

+"Invalid arguments from mcu_control_rx_cb, len = %zu ",4,204

+"mcu_control_move_to_next_state failed, rc = %d",5,210

+"Received message type is %d, expected %d",6,226

+"Invalid data len = %zu, rc = %d",7,232

+"invalid control_type %d, rc = %d",8,246

+"Handler_func_ptr is NULL, rc = %d",9,256

+"mcu_control_move_to_next_state failed, rc = %d",10,262

+"Invalid send mode, %u",11,275

+"mcu_control_move_to_next_state failed, rc = %d",12,283

+"MCU CONTROL initialized",13,297

+"MCU control not initialized",14,319

+"MCU control not initialized",15,353

+"Invalid control_type = %d",16,359

+"mcu_control_move_to_next_state failed, rc = %d",17,365

+"atlk_m3_mbox_send failed, rc = %d",18,390

+"mcu_control_move_to_next_state failed, rc = %d",19,400

+"MCU control not initialized",20,424

+"'rx_data_ptr' is NULL",21,432

+"'rx_len_ptr' is NULL",22,437

+"Data too big: len %zu, max_len %d",23,443

+"mcu_control_internal_send failed, rc = %d",24,458

+"osal_sem_wait failed, rc = %d",25,466

+"Expected control type %d but received %u",26,479

+"Received data size too big",27,487

+"mcu_control_move_to_next_state failed, rc = %d",28,502

+"MCU control not initialized",29,518

+"Data len too big - tx_len %zu",30,524

+"Invalid control type %d",31,530

+"Missing handler func for control_type %d",32,536

+"mcu_control_internal_send failed, rc = %d",33,545

+"Handler_func_ptr is NULL",34,557

+"Invalid control type %d",35,563

+"Handler for control type %d already exists, handler is overridden",36,569

+

+file_id,96,sha_driver.c

+"OSAL mutex lock failed",0,245

+"Invalid next state %d, current state %d",1,276

+"sha_driver already initialized, state = %u",2,300

+"physmem_map SHA failed, rc = %d",3,317

+"SHA is working without DMA",4,352

+"physmem_map MSCR_70 failed, rc = %d",5,363

+"atk42xx_soc_dma_init failed",6,374

+"Failed to register SHA/DRIVER statistics, rc = %u",7,391

+"SHA device is busy",8,453

+"Requested algorithm is not supported",9,465

+"context_ptr is NULL",10,472

+"Invalid state",11,537

+"Invalid context provided",12,548

+"Not supported algorithm",13,555

+"data_ptr is null",14,562

+"data_ptr is not aligned to 4",15,569

+"data size is too big",16,583

+"data_size is not aligned to 4",17,593

+"DMA sem barrier failed, rc = %d",18,621

+"DMA sem wait failed, rc = %d",19,637

+"Invalid state",20,743

+"Invalid request ID",21,753

+"digest_ptr is null",22,759

+"algorithm is invalid",23,766

+"remaining_size is invalid: %zu",24,774

+"total_size is null",25,782

+"physmem_unmap MSCR #70 failed, rc = %d",26,884

+"physmem_unmap failed, rc = %d",27,896

+

+file_id,97,soc_reg_access.c

+"mcu_control_sync_send failed, rc = %d",0,91

+"Invalid received length %zu\n",1,97

+"mcu_control_sync_send failed, rc = %d",2,159

+"Invalid received length %zu\n",3,165

+

+file_id,98,linuxk_l2_netlink.c

+"msg_len %u exceeds RT_TSDU_SIZE_MAX %u",0,54

+"malloc failed",1,66

+"malloc failed",2,72

+"Failed to enqueue",3,94

+"Not init",4,118

+"queue_release failed, rc = %d",5,125

+"queue_dequeue failed, rc = %d",6,135

+"Registration of COMMON/LL statistic failed, rc = %u",7,161

+"Error creating socket",8,166

+"Created netlink",9,170

+"Could not initialize queue",10,176

+"rt_packet is NULL",11,199

+"Failed to dequeue",12,206

+"L2 not ready",13,230

+"Failed to allocate new skb",14,242

+"Failed to set skb header",15,249

+"netlink_broadcast failed, rv = %d",16,271

+"nlmsg_unicast failed, rv = %d",17,285

+"'stat' is NULL",18,325

+

+file_id,99,linuxk_l2_shared_memory.c

+"stats_register failed, rc = %u",0,83

+"Not init",1,92

+"Mandatory argument is missing",2,119

+"malloc failed",3,126

+"cyclic_buffer_dequeue failed with error, %d  process id 0x%08x\n",4,147

+"cyclic_buffer_enqueue failed with error, %d\n",5,217

+"find_matching_process_shared_memory_index failed with error, %d\n",6,226

+"cyclic_buffer_enqueue failed with error, %d\n",7,241

+"'stat' is NULL",8,272

+

+file_id,100,linuxk_m3_mbox.c

+"'config' is NULL",0,14

+"mailbox_adapter_channel_request for index %d failed, ret %d",1,20

+"Not open",2,32

+"Not init",3,46

+"mailbox_adapter_send failed, no bufffer",4,54

+"mailbox_adapter_send failed, rv = %d",5,59

+

+file_id,101,linuxk_osal.c

+"Mandatory function argument not specified",0,20

+"Invalid argument thread %p, config %p entry %p",1,76

+"kernel thread create failed, rv %d",2,94

+"thread is already running",3,101

+"Invalid argument thread %p",4,113

+"semaphore already locked",5,154

+"wait on semaphore interrupted",6,162

+"wait on semaphore timed out",7,171

+"wait on semaphore interrupted",8,175

+"mutex_lock_interruptible: rv=%d",9,224

+

+file_id,102,linuxk_osal_mux_io.c

+"Invalid mode %u",0,22

+"No access to M3_GPIO bank",1,76

+"Invalid bank %u",2,83

+"Invalid gpio: bank %u gpio %u",3,90

+"Invalid mode %u",4,118

+"atk42xx_soc_mux_io_set failed, linuxk_gpio %u linuxk_mode %u ret %d",5,126

+

+file_id,103,linuxk_physmem.c

+"Invalid flags 0x%x (support is only for I/O memory mapping)",0,17

+"No region name for I/O memory mapping",1,23

+"Memory mapping handle is not specified",2,28

+"Failed to map physical memory region (start 0x%08lx, size %lu)",3,35

+"Mapped physical memory region (start 0x%08lx, size %lu) to virtual memory starting at %p",4,46

+"Memory mapping handle is not specified",5,62

+

+file_id,105,linuxk_shared_data.c

+"shdata_field_size %u",0,74

+"shdata_field_size %u",1,107

+"otp_regs[0..3] %08X %08X %08X %08X",2,109

+"otp_regs[4..7] %08X %08X %08X %08X",3,115

+"shdata_field_size %u",4,152

+"soc_id = %02X",5,154

+"shdata_field_size %u",6,187

+"erom_version = %02X",7,189

+"shdata_field_size %u",8,222

+"board_id = %02X",9,224

+"shdata_field_size %u",10,257

+"board_rev_id = %02X",11,259

+"shdata_field_size %u",12,292

+"board_extensions = %02X",13,294

+"shdata_field_size %u",14,327

+"mmc_boot_dev = %02X",15,329

+"shdata_field_size %u",16,362

+"display_cfg = %02X",17,364

+"shdata_field_size %u",18,397

+"cut_rev = %02X",19,399

+"shdata_field_size %u",20,432

+"flash_dev_id = %02X %02X %02X %02X %02X %02X",21,434

+"shdata_field_size %u",22,473

+"mac_address = %02X %02X %02X %02X %02X %02X",23,475

+"shdata_field_size %u",24,514

+"ehsm_psb_a7_address = %08X",25,516

+"shdata_field_size %u",26,549

+"ehsm_shmem_a7_address = %08X",27,551

+"shdata_field_size %u",28,584

+"rom_full_version = %08X",29,586

+"shdata_field_size %u",30,848

+"checksum = %08X",31,849

+

+file_id,106,qnx_ecc_irq.c

+"Failed to request I/O privileges, rv = %d",0,56

+"ecc isr handler thread creation failed: rc=%d",1,116

+

+file_id,107,qnx_ehsm_irq.c

+"Failed to request I/O privileges, rv = %d",0,80

+"EHSM ISR thread creation failed: rc=%d",1,134

+

+file_id,108,qnx_hexdump.c

+"buf_len mod groupsize has remainder, setting groupsize to 1",0,70

+"Invalid groupsize %d, setting groupsize to 1",1,92

+

+file_id,109,qnx_l2_qmp.c

+"server failed to create a channel",0,61

+"Registration of LL statistic failed, rc = %u",1,85

+"Client %d with PID %u disconnected",2,129

+"unable to send signal to pid %u, errno = %d",3,136

+"l2_client_checkup failed, rc = %d",4,157

+"Failed to receive init message. bytes received %d",5,189

+"l2_clients_checkup failed",6,201

+"Client with UID %u, already exists",7,207

+"server failed to connect to the client channel",8,228

+"Failed to send to client_coid %u",9,242

+"rt_packet_ptr is NULL",10,275

+"L2 not ready",11,280

+"osal_malloc failed",12,286

+"msg_len %zu exceeds RT_TSDU_SIZE_MAX %u",13,304

+"Channel with id %d has been destroyed.",14,327

+"client disconnected from server channel",15,339

+"client channel close failed. errno = %d",16,342

+"pthread_mutex_lock failed, rv = %d",17,348

+"server failed to add a client, rc = %d",18,355

+"pthread_mutex_unlock failed, rv = %d",19,360

+"pulse code: %d",20,366

+"failed to receive message. bytes received %d. errno = %d",21,373

+"rt_packet is NULL",22,405

+"L2 not ready",23,411

+"pthread_mutex_lock failed, rv = %d",24,437

+"l2_client_checkup failed, rc = %d",25,443

+"pthread_mutex_unlock failed, rv = %d",26,448

+"Failed to send to client_coid %u",27,455

+"'stat_ptr' is NULL",28,485

+"client channel %d with UID %d close failed. errno = %d",29,516

+"l2 channel is not initialized",30,528

+"Failed to destroy the channel, errno = %d",31,533

+

+file_id,110,qnx_l2_socket.c

+"server: socket",0,68

+"server: bind",1,81

+"Registration of LL statistic failed, rc = %u",2,99

+"Client PID %u is dead",3,143

+"unable to send signal to pid %u, errno = %d",4,149

+"l2_socket_client_checkup failed, rc = %d",5,170

+"l2_socket_clients_checkup failed",6,192

+"Client with UID %u, already exists",7,198

+"Failed to send to added client",8,222

+"rt_packet is NULL",9,251

+"L2 not ready",10,256

+"osal_malloc failed",11,264

+"pthread_mutex_lock, rv = %d",12,290

+"pthread_mutex_unlock, rv = %d",13,299

+"msg_len %zu exceeds RT_TSDU_SIZE_MAX %u",14,308

+"rt_packet is NULL",15,348

+"L2 not ready",16,354

+"osal_malloc failed",17,362

+"pthread_mutex_lock failed, rv = %d",18,384

+"l2_socket_client_checkup failed, rc = %d",19,390

+"pthread_mutex_unlock failed, rv = %d",20,395

+"Failed to send to client",21,402

+"'stat' is NULL",22,436

+"Not init",23,459

+"Failed to close file descriptor, errno = %d",24,464

+"Failed to unlink file, errno = %d",25,469

+

+file_id,111,qnx_lmac_irq.c

+"Failed to request I/O privileges, rv = %d",0,80

+"lmac isr handler thread creation failed: rc=%d",1,138

+

+file_id,112,qnx_m3_mbox.c

+"sigwaitinfo rv = %d",0,56

+"Invalid channel_id %u",1,63

+"devctl rv = %d ",2,75

+"Not init",3,99

+"Failed to release channel %d, rv = %d",4,110

+"Failed to cancel qnx_m3_mbox_rx_thread, rv = %d",5,117

+"osal_thread_join failed, rc = %u",6,123

+"'config' is NULL",7,136

+"Invalid mbox_id %u",8,141

+"Failed to open M3 mail box, errno = %d",9,149

+"Failed to get channel %d, rv = %d",10,161

+"osal_thread_config_create failed, rc = %u",11,179

+"osal_thread_create failed, rc = %u",12,188

+"Invalid index %d",13,207

+"Mailbox channel %u not initialized",14,212

+"Data too long %zu",15,217

+"devctl: %d",16,231

+

+file_id,113,qnx_osal_mux_io.c

+"Invalid mode %u",0,53

+"Invalid bank %u",1,77

+"Invalid gpio %u",2,84

+"open GPIO device failed: errno %d",3,91

+"devctl failed for IOCTL_GPIO_SET_PIN_CONFIG, GPIO device, gpio_num %u",4,103

+

+file_id,114,qnx_osal_tasklet.c

+"Failed to request I/O privileges, rv = %d",0,82

+"Failed to request I/O privileges, rv = %d",1,178

+"Failed to request I/O privileges, rv = %d",2,213

+"Tasklet %p is already deleted",3,220

+"Tasklet %p is already enqueued",4,226

+

+file_id,115,qnx_osal_timer.c

+"Got timeout for unregistered timer, timerid %d",0,30

+"Can't add more timers",1,58

+

+file_id,116,qnx_shared_data.c

+"shdata_field_size %u",0,63

+"shdata_field_size %u",1,98

+"otp_regs[0..3] %08X %08X %08X %08X",2,100

+"otp_regs[4..7] %08X %08X %08X %08X",3,106

+"shdata_field_size %u",4,143

+"soc_id = %02X",5,145

+"shdata_field_size %u",6,178

+"erom_version = %02X",7,180

+"shdata_field_size %u",8,213

+"board_id = %02X",9,215

+"shdata_field_size %u",10,248

+"board_rev_id = %02X",11,250

+"shdata_field_size %u",12,283

+"board_extensions = %02X",13,285

+"shdata_field_size %u",14,318

+"mmc_boot_dev = %02X",15,320

+"shdata_field_size %u",16,353

+"display_cfg = %02X",17,355

+"shdata_field_size %u",18,388

+"cut_rev = %02X",19,390

+"shdata_field_size %u",20,423

+"flash_dev_id = %02X %02X %02X %02X %02X %02X",21,425

+"shdata_field_size %u",22,464

+"mac_address = %02X %02X %02X %02X %02X %02X",23,466

+"shdata_field_size %u",24,505

+"ehsm_psb_a7_address = %08X",25,507

+"shdata_field_size %u",26,540

+"ehsm_shmem_a7_address = %08X",27,542

+"shdata_field_size %u",28,575

+"rom_full_version = %08X",29,577

+"shdata_field_size %u",30,838

+"checksum = %08X",31,839

+

+file_id,117,qnx_wlan.c

+"open GPIO device failed: errno %d",0,40

+"IOCTL_GPIO_SET_PIN_CONFIG",1,55

+

+file_id,120,atlk_app_info.c

+"atlk_eeprom_app_info_get failed, rc %u",0,36

+

+file_id,122,atlk_design_hw_config.c

+"Filters number %u exceeds maximum allowed\n",0,958

+

+file_id,123,atlk_eeprom.c

+"eprom_write() failed, rc %u\n",0,61

+"atlk_eeprom_open: sw_struct_valid_flag_ptr argument not specified\n",1,73

+"atlk_eeprom_open: Failed to configure the EEPROM module, rc=%u\n",2,93

+"atlk_eeprom_open: Failed to get EEPROM app_info size, rc=%u\n",3,99

+"atlk_eeprom_open: Invalid EEPROM app_info size %u, expected at least %u\n",4,104

+"atlk_eeprom_open: Failed to get EEPROM app_info offset, rc=%u\n",5,111

+"atlk_eeprom_open: Failed to get EEPROM software area offset, rc=%u\n",6,117

+"atlk_eeprom_app_info_set: eprom_write failed, rc %u\n",7,206

+"eprom_close() failed, rc %u\n",8,456

+

+file_id,124,atlk_mem_pool.c

+"atlk_byte_pool_create() failed, byte pool was already initialized\r\n",0,15

+"tx_byte_pool_create() failed, ret=%d\r\n",1,24

+"atlk_byte_malloc_free() mem_ptr is NULL\r\n",2,39

+"tx_byte_release() failed, ret = %d\r\n",3,45

+"tx_byte_allocate() failed, malloc_size = %ld, ret = %d\r\n",4,63

+

+file_id,125,eprom.c

+"sw_config_get failed, rc %d\n",0,92

+"Not implemented\n",1,104

+"i2c_set_port_mode() failed\n",2,116

+"Failed to create communication with I2C-0\n",3,121

+"Failed to reset port\n",4,136

+"eprom_read() - Failed, rc=%d\n",5,154

+"eprom_write() - Failed, rc=%d\n",6,172

+"Failed to zero EEPROM's eeprom_sw_struct fields, eprom_write() rc=%d\n",7,183

+"EEPROM settings: Ver=%d, Magic=0x%08lx\n",8,194

+"eeprom_max_calib_size_get failed, rc %d. Using version 1 calibration max size\n",9,265

+"Failed to set new address size, eeprom module not initialized\n",10,309

+"Failed to set new address size, eeprom is already ready\n",11,314

+"EEPROM init disabled\n",12,319

+"address_size %ld is invalid\n",13,325

+"i2c_address 0x%lx is invalid\n",14,333

+"eprom_offsets_initialize() - Failed, rc=%d\n",15,359

+"EEPROM address_size %d, i2c_address 0x%x\n",16,364

+"eeprom_max_calib_size_get failed, rc %d. Using version 1 calibration max size\n",17,392

+"Failed to write to EEPROM, not ready\n",18,535

+"'buffer' argument is null\n",19,541

+"Trying to write to out-of-bound address (CALIB),",20,549

+"calibration_max_size=%u size=%lu offset=%lu\n",21,550

+"Writing RF configuration data to 1-byte EEPROM isn't supported\n",22,563

+"Trying to write to out-of-bound address (RF CONFIG),",23,569

+"rf_config_max_size=%u size=%lu offset=%lu\n",24,570

+"Trying to write to out-of-bound address (RAW),",25,584

+"eeprom_max_size=%u size=%lu offset=%lu\n",26,585

+"'field' argument is not valid rc = %d\n",27,597

+"EEPROM write: field: %d, add %p ,buffer %p\n",28,602

+"failed to allocated i2c_com\n",29,609

+"i2c_write() - failed, rc = %d\n",30,647

+"failed to free i2c_com\n",31,652

+"Failed to read from EEPROM, not ready\n",32,683

+"'buffer' argument is null\n",33,689

+"Trying to read from out-of-bound address (CALIB),",34,697

+"calibration_max_size=%u size=%lu offset=%lu\n",35,698

+"Reading RF configuration data from 1-byte EEPROM isn't supported\n",36,711

+"Trying to read from out-of-bound address (RF CONFIG),",37,716

+"rf_config_max_size=%u size=%lu offset=%lu\n",38,717

+"Trying to read from out-of-bound address (RAW),",39,731

+"eeprom_max_size=%u size=%lu offset=%lu\n",40,732

+"'field' argument is invalid rc = %d\n",41,744

+"EEPROM read: field: %d, add %p ",42,749

+"failed to allocated i2c_com\n",43,753

+"i2c_read() failed, rc = %d\n",44,765

+"failed to free i2c_com\n",45,782

+"i2c_open_port() failed\n",46,816

+"eprom_address_size_set failed, rc = %u\n",47,823

+"i2c_reset_port() failed\n",48,839

+"i2c_exit() failed\n",49,844

+

+file_id,132,sta_m3_irq.c

+"Called, shouldn't get here.",0,51

+

+file_id,142,threadx_hexdump.c

+"buf_len mod groupsize has remainder, setting groupsize to 1",0,77

+"Invalid groupsize %d, setting groupsize to 1",1,99

+

+file_id,143,threadx_osal_mux_io.c

+"Invalid mode %u",0,23

+"Invalid bank %u",1,67

+"Invalid gpio: bank %u gpio %u",2,74

+"Failed to set gpio pin, rc %u",3,92

+

+file_id,144,threadx_osal_tasklet.c

+"Tasklet %p is already deleted",0,209

+"Tasklet %p is already enqueued",1,214

+

+file_id,145,threadx_osal_thread.c

+"Mandatory function argument not specified",0,43

+"Thread stack not specified",1,48

+"Thread stack size %lu is too small (< %u)",2,54

+"Invalid thread priority %u",3,61

+"Mandatory function argument not specified",4,89

+

+file_id,147,threadx_shared_data.c

+"shdata_val_size %u",0,36

+"otp_regs[0..3] %08X %08X %08X %08X",1,38

+"otp_regs[4..7] %08X %08X %08X %08X",2,44

+"shdata_val_size %u",3,68

+"cut_rev = %02X",4,70

+"shdata_val_size %u",5,97

+"erom_version = 0x%02X",6,99

+

+file_id,148,threadx_sysinfo.c

+"Mandatory function argument not specified",0,42

+

+file_id,149,threadx_trace.c

+"ThreadX lib was not compiled with TraceX flag enabled",0,41

+"Trace buffer is too small",1,45

+"tx_trace_enable failed, rv = %d",2,49

+"ThreadX trace recording start: buffer start 0x%08x, buffer end 0x%08x, buffer size %d[byte]",3,58

+"tx_trace_disable failed, rv = %d",4,73

+"ThreadX trace stopped",5,80

+"threadx_trace_buffer_legth_get failed, TraceX was not initialized",6,88

+"threadx_trace_buffer_get failed, TraceX was not initialized",7,104

+"threadx_trace_buffer_get failed, offset %u is bigger then TraceX buffer size %u",8,111

+"WARNING: trace record is in progress data may be corrupted",9,118

+"threadx_trace_record failed invalid args, state = %d",10,145

+"threadx_trace_record failed",11,157

+

+file_id,151,rsvc_dbg.c

+"rsvc_dbg_wlan_init failed, rc = %u",0,28

+"RT packet is NULL",1,54

+"rsvc_dbg not initialized",2,61

+"secure_hdif_local_security_level_get failed rc = %u",3,78

+"rsvc_packet_security_level_verify failed rc = %u",4,84

+"Unsupported request_type %u",5,142

+"Handling of DIAG request failed, request_type %u rc %u",6,148

+"Invalid object value_type %u",7,170

+"rt_data_pull failed, rc %u",8,179

+"Invalid object value_type %u",9,204

+"rt_data_pull failed, rc %u",10,212

+"rt_data_put failed, rc %u",11,233

+"rt_data_put for uint8 failed, rc %u",12,242

+"rt_data_put for uint16 failed, rc %u",13,249

+"rt_data_put failed, rc %u",14,256

+"rt_data_put for opaque failed, rc %u",15,264

+"Invalid value type %d",16,272

+

+file_id,152,rsvc_dbg_ddm.c

+"ddm_hb_cycle_set failed, rc %u",0,39

+"ddm_hb_cycle_get failed, rc %u",1,46

+"Invalid request type, %u",2,55

+"RT packet is NULL",3,72

+"rsvc_dbg_req_ptr is NULL",4,77

+"rsvc_dbg_decode_obj_32 failed, rc %u",5,83

+"Invalid object_type %u",6,95

+

+file_id,153,rsvc_dbg_gen.c

+"rsvc_dbg_set_rsp failed, rc %u",0,44

+"atlk_mcci_stat_get failed, rc %u",1,51

+"rt_data_put for ll driver stat failed, rc %u",2,58

+"rt_stat_get failed, rc %u",3,65

+"rt_data_put for rt driver stat failed, rc %u",4,72

+"rsvc_stat_get failed, rc %u",5,79

+"rt_data_put for rsvc stat failed, rc %u",6,86

+"v2x_server_stat_get failed, rc %u",7,93

+"rt_data_put for v2x stat failed, rc %u",8,100

+"rsvc_wdm_stat_get failed, rc %u",9,107

+"rt_data_put for wdm stat failed, rc %u",10,113

+"rsvc_ddm_stat_get failed, rc %u",11,120

+"rt_data_put for ddm stat failed, rc %u",12,126

+"rsvc_dbg_set_rsp failed, rc %u",13,136

+"rsvc_dbg_set_rsp failed, rc %u",14,168

+"atlk_mcci_stat_get failed, rc %u",15,174

+"rt_data_put for ll driver stat failed, rc %u",16,190

+"rsvc_dbg_set_rsp failed, rc %u",17,200

+"rsvc_dbg_set_rsp failed, rc %u",18,222

+"l2_internal_statistics_get failed, rc %u",19,228

+"l2 type, not supported",20,254

+"rt_data_put for ll driver stat failed, rc %u",21,263

+"rsvc_dbg_set_rsp failed, rc %u",22,273

+"RT packet is NULL",23,291

+"req_ptr NULL",24,296

+"rsvc_dbg_gen_stat failed, rc %u",25,304

+"rsvc_dbg_gen_stat failed, rc %u",26,311

+"rsvc_dbg_l2_internal_statistics_get failed, rc %u",27,318

+"Invalid object_type %u",28,323

+"rsvc_dbg_set_rsp failed, rc %u",29,327

+"req_ptr is NULL",30,356

+"rt_rsp_ptr is NULL",31,361

+"Invalid request type, %u",32,366

+"threadx_trace_buffer_get() failed, rc %u",33,387

+"Invalid request, request obj type is not defined for blob get, obj_type = %u",34,393

+"rsvc_dbg_set_rsp failed, rc %u",35,409

+"rsvc_dbg_set_rsp failed, rc %u",36,419

+"threadx_trace_buffer_length_get, rc %u",37,448

+"Invalid request, request obj type is not defined for blob get, obj_type = %u",38,454

+"rsvc_dbg_set_rsp failed, rc %u",39,465

+"rt_data_put for failed, rc %u",40,474

+"rsvc_dbg_set_rsp failed, rc %u",41,484

+"rsvc_dbg_set_rsp failed, rc %u",42,510

+"boot_timer_compute failed, rc %u",43,517

+"rt_data_put for dbg system timer measurements failed, rc %u",44,533

+"rsvc_dbg_set_rsp failed, rc %u",45,543

+"Invalid request type, %u",46,564

+"threadx_trace_record_state_set failed, rc %u",47,575

+"RT packet or req_ptr is NULL",48,591

+"rsvc_dbg_gen_boot_timer_measurements failed, rc %u",49,599

+"Invalid object_type %u",50,604

+"rsvc_dbg_set_rsp failed, rc %u",51,609

+"RT packet is NULL",52,624

+"req_ptr NULL",53,629

+"tracex_record_set failed, rc %u",54,637

+"Invalid object_type %u",55,642

+"rsvc_dbg_set_rsp failed, rc %u",56,647

+

+file_id,154,rsvc_dbg_mem.c

+"dbg_driver_dsp_mem_read failed, rc %u",0,42

+"Invalid object size %u",1,61

+"Invalid request type, %u",2,80

+"Invalid object size",3,98

+"Invalid request type, %u",4,117

+"Invalid object size",5,138

+"dbg_driver_control_mem_write failed, rc = %u",6,152

+"physmem_unmap failed, rc = %u",7,183

+"physmem_map failed, rc = %u",8,195

+"dbg_driver_control_mem_read failed, rc = %u",9,205

+"physmem_unmap failed, rc = %u",10,236

+"physmem_map failed, rc = %u",11,248

+"Invalid request type, %u",12,260

+"type %u address %x value %x",13,266

+"Invalid request type, %u",14,290

+"dbg_driver_control_mem_read failed, rc %d",15,306

+"Invalid object size",16,359

+"soc_reg_access_set failed, rc %u",17,373

+"soc_reg_access_get failed, rc %u",18,380

+"Invalid request type, %u",19,390

+"type %u address %x value %x",20,395

+"Unsupported request type, %u",21,425

+"Invalid object size",22,444

+"dbg_driver_dsp_mem_write failed, rc %u",23,457

+"dbg_driver_dsp_mem_read failed, rc %u",24,464

+"address %x value %x",25,469

+"Invalid request type, %u",26,474

+"Req type %u, Address %x device_id %u value %x rc %u",27,478

+"Invalid request type, %u",28,498

+"dsp memory get failed, rc %u",29,505

+"Invalid object size %u",30,537

+"eprom_write failed, rc %u",31,550

+"eprom_read failed, rc %u",32,558

+"Invalid request type, %u",33,567

+"Req type %u, Address %x value %x rc %u",34,572

+"RT packet is NULL",35,583

+"req_ptr NULL",36,588

+"Invalid object_type %u",37,630

+

+file_id,155,rsvc_dbg_wlan.c

+"Invalid request type, %u",0,25

+"dbg_driver_dsp_cookie_snapshot_get failed, rc %u",1,32

+"dsp_cookie_ptr %p",2,42

+"dsp_cookie_ptr size %u",3,43

+"rsvc_dbg_set_rsp failed, rc %u",4,47

+"rsvc_dbg_set_rsp failed, rc %u",5,58

+"Invalid request type, %u",6,79

+"rsvc_dbg_set_rsp failed, rc %u",7,90

+"lmac_driver_if_indexes_get failed, rc = %u",8,96

+"index %u value %u rx %u",9,103

+"dbg_driver_wlan_dsp_tx_ring_info_get failed ,rc %u",10,108

+"rt_data_put for ll driver stat failed, rc %u",11,115

+"dbg_driver_wlan_dsp_rx_ring_info_get failed ,rc %u",12,122

+"rt_data_put for ll driver stat failed, rc %u",13,129

+"rsvc_dbg_set_rsp failed, rc %u",14,140

+"rsvc_dbg_decode_obj_opaque - failed",15,159

+"Invalid request type, %u",16,164

+"dsp_al_interface_cbr_value_get failed, rc %u",17,171

+"rsvc_dbg_set_rsp failed, rc %u",18,187

+"rsvc_dbg_set_rsp failed, rc %u",19,197

+"DBG set WLAN_FILTERS: if_index %u, value 0x%x, rsp_rc %u",20,226

+"DBG get WLAN_FILTERS: if_index %u, rsp_rc %u",21,234

+"Invalid request type, %u",22,241

+"rsvc_dbg_set_rsp failed, rc %u",23,252

+"Invalid request type, %u",24,293

+"rsvc_dbg_set_rsp failed, rc %u",25,304

+"rsvc_dbg_decode_obj_opaque - failed",26,328

+"Invalid object size",27,333

+"craton2_soc_revision_get() failed! rc=%d",28,341

+"Invalid request type, %u",29,373

+"rsvc_dbg_set_rsp failed, rc %u",30,384

+"craton2_soc_revision_get() failed! rc=%d",31,409

+"Invalid request type, %u",32,426

+"rsvc_dbg_set_rsp failed, rc %u",33,437

+"Fail to initialize WLAN driver debug rc = %u",34,452

+"Remote WLAN debug not initialized",35,466

+"RT packet is NULL",36,482

+"req_ptr NULL",37,487

+"Remote WLAN debug not initialized",38,493

+"rsvc_dbg_dsp_cookie_snapshot_get failed, rc %u",39,501

+"rsvc_dbg_wlan_rings_info failed, rc %u",40,511

+"rsvc_dbg_wlan_atk42xx_cbr_get failed, rc %u",41,519

+"rsvc_dbg_wlan_filters failed, rc %u",42,527

+"rsvc_dbg_pll4_frequency failed, rc %u",43,535

+"rsvc_dbg_wlan_dsp_logging_start failed, rc = %u",44,544

+"rsvc_dbg_wlan_dsp_logging_stop failed, rc = %u",45,556

+"Unsupported object_type %u",46,566

+"rsvc_dbg_set_rsp failed, rc %u",47,577

+

+file_id,157,rsvc_ddm.c

+"stats_register failed, rc = %u",0,57

+"RT packet is NULL",1,78

+"rt_data_extend failed, rc = %u",2,86

+"rt_data_extend failed, rc = %u",3,93

+"secure_hdif_local_security_level_get failed rc = %u",4,99

+"dsp_al_interface_versions_get failed rc = %u",5,114

+"shared_data_platform_version_get failed rc = %u",6,121

+"RT packet is NULL",7,149

+"secure_hdif_local_security_level_get failed rc = %u",8,169

+"rsvc_packet_security_level_verify failed rc = %u",9,175

+"rsvc_ddm_blob_handle_req failed, rc %u",10,188

+"rsvc_ddm_sw_config_handle_req failed, rc %u",11,196

+"DDM_REQUEST_TYPE_OBJECT_GET",12,202

+"ddm_object_remote failed, rc %u",13,205

+"DDM_REQUEST_TYPE_OBJECT_SET",14,211

+"ddm_request_type_object_set failed, rc %u",15,214

+"Invalid request_type %u",16,246

+"Handling of DDM request failed, msg_id %u rc %u",17,253

+"osal_sem_wait failed, rc %u",18,280

+"Invalid counter type %d",19,314

+"ddm_stat parameter not specified",20,327

+"RT packet is NULL",21,345

+"rt_data_put failed, rc %u",22,357

+"rt_data_put failed, rc %u",23,364

+"secure_hdif_local_security_level_get failed rc = %u",24,370

+"RT packet is NULL",25,386

+"lmac_driver_ddm_device_temperature_get failed, rc = %u",26,396

+"rt_data_put failed, rc = %u",27,411

+"rt_data_put failed, rc = %u",28,418

+"secure_hdif_local_security_level_get failed rc = %u",29,424

+

+file_id,158,rsvc_ddm_blob.c

+"rt_data_put failed, rc %u",0,55

+"secure_hdif_local_security_level_get failed rc = %u",1,61

+"ddm_blob_start_read, rc %u",2,97

+"rt_data_put failed, rc %u",3,106

+"rt_data_put failed, rc %u",4,114

+"secure_hdif_local_security_level_get failed",5,121

+"rt_data_extend failed, rc %u",6,161

+"rt_data_extend failed, rc %u",7,168

+"ddm_blob_start_read, rc %u",8,175

+"secure_hdif_local_security_level_get failed rc = %u",9,183

+"rt_data_pull failed, rc %u",10,226

+"Invalid rt packet len %u chunk size %u",11,231

+"ddm_blob_chunk_write failed , rc %u",12,239

+"ddm_blob_finish, rc %u",13,274

+"rt_data_put failed, rc %u",14,283

+"secure_hdif_local_security_level_get failed rc = %u",15,289

+"RT packet is NULL",16,313

+"boot_timer_phase_start failed, rc %d",17,328

+"Invalid request_type %u",18,355

+

+file_id,159,rsvc_ddm_cpu_profiler.c

+"cpu profiler: rt_data_extend failed, rc = %u",0,33

+"RT packet is NULL",1,110

+"cpu profiler: rt_data_extend failed, rc = %u",2,118

+"rsvc_ddm_cpu_profiler_handle_req failed, unknown protocol",3,137

+"secure_hdif_local_security_level_get failed rc = %u",4,149

+

+file_id,160,rsvc_ddm_hb.c

+"Failed to allocate SDU for RT packet, rc %u",0,39

+"Failed to add dx_remote_service to RT SDU",1,48

+"Failed to add msg_header to RT SDU, rc %u",2,54

+"secure_hdif_local_security_level_get failed rc = %u",3,60

+"Failed to send indication, rc %u",4,70

+

+file_id,161,rsvc_ddm_object.c

+"version string is longer than buffer, len = %u",0,86

+"craton2_soc_revision_get failed, rc %u",1,125

+"Invalid soc_revision %d",2,149

+"atlk_mcci_mac_address_get failed, rc %d",3,174

+"Invalid size %u",4,198

+"shared_data_app_info_get failed, rc %d",5,204

+"atlk_eeprom_app_info_get failed, rc %u",6,236

+"atlk_eeprom_app_info_set failed, rc %u",7,249

+"Command not supported on SECTON",8,310

+"Failed to allocate SDU for RT packet, rc = %u",9,352

+"Failed to get SDU available size, rc = %u",10,359

+"Failed to add remote_service to RT SDU, rc = %u",11,369

+"Failed to add remote_ddm_ind_header_t to RT SDU, rc = %u",12,376

+"Failed to extend RT SDU before stats fetch, rc = %u",13,383

+"Failed to fetch statistics to RT SDU, rc = %u",14,394

+"Failed to trim RT SDU after stats put, rc = %u",15,405

+"secure_hdif_local_security_level_get failed rc = %u",16,411

+"Failed to send indication, rc = %u",17,423

+"RT packet is NULL",18,452

+"rsvc_common_decode_request failed, rc = %d",19,478

+"Received tsf object",20,483

+"DDM set EEPROM APP_INFO: 1st val %d offset %u, rsp_rc %u",21,504

+"rsvc_common_decode_request: %d",22,521

+"GPIO not supported",23,530

+"rsvc_common_decode_request: %d",24,544

+"GPIO not supported",25,552

+"rsvc_common_decode_request: %d",26,566

+"GPIO not supported",27,575

+"rsvc_common_decode_request failed, rc = %d",28,592

+"eprom write failed, rc = %d",29,614

+"EPROM WRITE not supported",30,618

+"rsvc_common_decode_request failed, rc = %d",31,631

+"rsvc_common_decode_request failed, rc = %d",32,651

+"rsvc_common_decode_request failed, rc = %d",33,666

+"Invalid object type %u",34,698

+"rt_data_put failed, rc %u",35,719

+"secure_hdif_local_security_level_get failed rc = %u",36,725

+"%02X%02X%02X%02X",37,816

+"%02X%02X%02X%02X",38,817

+"%02X%02X%02X%02X",39,818

+"%02X%02X%02X%02X",40,819

+"rsp_rc %u",41,820

+"GPIO not supported",42,876

+"GPIO not supported",43,900

+"GPIO not supported",44,924

+"EPROM READ not supported",45,991

+"Invalid object type %u",46,1127

+"rt_data_put failed, rc %u",47,1143

+"secure_hdif_local_security_level_get failed rc = %u",48,1149

+

+file_id,162,rsvc_ddm_otp_regs.c

+"RT packet is NULL",0,31

+"rt_data_put failed, rc %u",1,44

+"rt_data_put failed, rc %u",2,61

+"secure_hdif_local_security_level_get failed rc = %u",3,67

+

+file_id,163,rsvc_ddm_reset.c

+"RT packet is NULL",0,26

+"rt_data_put failed, rc %u",1,44

+"secure_hdif_local_security_level_get failed rc = %u",2,50

+"rsvc_dev_send_rsp failed, rc %u",3,57

+"Invalid request_type %u",4,73

+

+file_id,164,rsvc_ddm_secure_hdif.c

+"session_keys_blob_ptr is NULL",0,59

+"session_key_get invalid arg",1,64

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",2,76

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",3,87

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",4,98

+"ehsm_server_symmetric_cbc_encrypt failed: rc = %d, ehsm_rc = %d",5,133

+"ehsm_server_symmetric_cmac_generate failed: rc = %d, ehsm_rc = %d",6,158

+"master_keys is NULL",7,189

+"ehsm_server_information_get failed: rc = %d, ehsm_rc = %d",8,196

+"Lifecycle master pairing key creation is disabled %d: ",9,204

+"Lifecycle import plain-text symmetric key is disabled %d: ",10,210

+"ehsm_server_random_generate invalid arg",11,217

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",12,225

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",13,236

+"ehsm_server_symmetric_key_import failed: rc = %d, ehsm_rc = %d",14,259

+"ehsm_server_symmetric_key_import failed: rc = %d, ehsm_rc = %d",15,278

+"ehsm_server_storage_auth_encrypt failed: rc = %d, ehsm_rc = %d",16,306

+"rsvc_ddm_secure_hdif_get_request_handle invalid arg",17,329

+"ehsm_driver_state_check failed: rc = %d, ehsm_rc = %d",18,338

+"rsvc_ddm_secure_hdif_get_request_handle() failed, unknown request_type = %u",19,375

+"set_ptr is NULL",20,399

+"ehsm_driver_state_check failed: rc = %d, ehsm_rc = %d",21,407

+"rsvc_ddm_secure_hdif_set_request_handle() failed, unknown request_type = %u",22,426

+"Failed to allocate SDU for RT packet, rc = %u",23,461

+"Failed to add msg_header to RT SDU, rc = %u",24,480

+"Failed to add remote_time_sync_indication to RT SDU, rc = %u",25,487

+"secure_hdif_local_security_level_get failed rc = %u",26,493

+"Failed to send indication, rc %u",27,502

+

+file_id,165,rsvc_ddm_sw_config.c

+"RT packet is NULL",0,27

+"rt_data_put failed, rc %u",1,56

+"secure_hdif_local_security_level_get failed rc = %u",2,62

+

+file_id,166,rsvc_ddm_tsf.c

+"RT packet is NULL",0,30

+"Invalid parameter: tsf_lock_status = %u",1,54

+"rt_data_put failed, rc %u",2,66

+"rt_data_put failed, rc %u",3,73

+"secure_hdif_local_security_level_get failed rc = %u",4,79

+"Failed to allocate SDU for RT packet, rc = %u",5,99

+"Invalid parameter: ind_time_sync_state = %u",6,133

+"Failed to add msg_header to RT SDU, rc = %u",7,150

+"Failed to add remote_time_sync_indication to RT SDU, rc = %u",8,157

+"secure_hdif_local_security_level_get failed rc = %u",9,163

+"Failed to send indication, rc %u",10,172

+

+file_id,167,ecc_server.c

+"NULL parameter received",0,131

+"Not enough memory for adding a new request",1,161

+"NULL parameter received",2,185

+"request id #%u is not in range",3,190

+"request id #%u is not in progress state",4,198

+"NULL parameter received",5,237

+"request id #%u is not in range",6,242

+"request id #%u is not in progress",7,251

+"ecultra_driver_work_free failed",8,292

+"craton2_soc_revision_get failed, rc = %u",9,322

+"S scalar of signature is zero",10,364

+"NULL parameter received",11,399

+"Unknown request type %d",12,472

+"NULL parameter received",13,504

+"Wrong work type",14,557

+"Called (requst_index %u, work %d, type %u, id %u, rc %u)",15,584

+"ECC is not initialized",16,593

+"request id #%u is not in range",17,599

+"get_data_from_request_info_array_element failed, rc = %d",18,618

+"request_info_array_element_clear failed, rc = %d",19,636

+"ecultra_driver_work_free failed",20,641

+"ECC signal semaphore 'osal_sem_wait', failed rc=%d",21,669

+"ECC response thread has terminated",22,687

+"ECC is not initialized",23,703

+"request_ptr is NULL",24,713

+"ecultra_driver_work_alloc failed, rc=%d",25,723

+"request_info_array_element_populate failed, rc=%d",26,733

+"Failed to submit work, rc=%d",27,753

+"Failed to free request, rc=%d",28,771

+"ecultra_driver_work_free failed, rc=%d",29,778

+"ecc_server_deinit",30,804

+"Failed to close EC-Ultra device (rc=%d)",31,808

+"osal_thread_join failed, rc=%d",32,828

+"ECC is de-initialized",33,840

+"ECC already initialized",34,853

+"osal_thread_config_create failed: rc=%d",35,876

+"osal_thread_create failed, rc=%d",36,887

+"Registration of ECC/SERVICE statistics failed, rc = %u",37,900

+"ECC is initialized",38,903

+"Failed to initialize EC-Ultra (rc=%d)",39,909

+

+file_id,168,rsvc_ecc.c

+"Failed to allocate SDU for RT packet, rc=%u",0,118

+"Failed to add remote_service to RT SDU, rc=%u",1,128

+"Failed to add msg_header to RT SDU, rc=%u",2,145

+"secure_hdif_local_security_level_get failed rc = %u",3,151

+"rsvc_server_send_indication failed, rc = %u",4,159

+"Failed decoding ECC remote, rc=%u",5,201

+"secure_hdif_local_security_level_get failed rc = %u",6,207

+"rsvc_packet_security_level_verify failed rc = %u",7,213

+"Failed decoding ECC request, rc=%u",8,221

+"rt_pkt_ptr is NULL",9,236

+"Failed to handle ecc request, rc=%u",10,251

+"Registration of ECC/RSVC statistics failed, rc = %u",11,273

+

+file_id,169,rsvc_ehsm.c

+"Failed to allocate SDU for RT packet, rc = %d",0,403

+"Failed to add msg_header to RT SDU, rc = %d",1,414

+"Failed to add msg_header to RT SDU, rc = %d",2,427

+"secure_hdif_local_security_level_get failed rc = %u",3,433

+"Failed to send indication, rc = %d",4,444

+"EHSM error code %u",5,530

+"EHSM error code %u",6,547

+"EHSM error code %u",7,567

+"EHSM error code %u",8,590

+"EHSM error code %u",9,614

+"EHSM error code %u",10,641

+"EHSM error code %u",11,671

+"EHSM error code %u",12,703

+"EHSM error code %u",13,729

+"EHSM error code %u",14,753

+"EHSM error code %u",15,776

+"EHSM error code %u",16,800

+"EHSM error code %u",17,821

+"EHSM error code %u",18,840

+"EHSM error code %u",19,858

+"EHSM error code %u",20,879

+"EHSM error code %u",21,902

+"EHSM error code %u",22,925

+"EHSM error code %u",23,951

+"EHSM error code %u",24,976

+"EHSM error code %u",25,999

+"EHSM error code %u",26,1023

+"EHSM error code %u",27,1049

+"EHSM error code %u",28,1075

+"EHSM error code %u",29,1102

+"EHSM error code %u",30,1129

+"EHSM error code %u",31,1155

+"EHSM error code %u",32,1182

+"EHSM error code %u",33,1213

+"EHSM error code %u",34,1245

+"EHSM error code %u",35,1267

+"EHSM error code %u",36,1289

+"Invalid message_id %u",37,1299

+"message_size[%zu] are not set properly",38,1307

+"spscq_enqueue_ptr_get failed, rc = %d",39,1366

+"eHSM queue provided an invalid request element to enqueue",40,1371

+"Too much data to copy into queue (%d > %d)",41,1380

+"spscq_enqueue failed, rc = %d",42,1392

+"rt_pkt_ptr is NULL",43,1414

+"rsvc_ehsm_initialize_object failed",44,1427

+"secure_hdif_local_security_level_get failed rc = %u",45,1439

+"rsvc_packet_security_level_verify failed rc = %u",46,1445

+"rt_data_pull failed",47,1452

+"spscq_dequeue_ptr_get failed, rc = %d",48,1513

+"rsvc_ehsm_process_request_and_response failed",49,1538

+"spscq_dequeue failed, rc = %d",50,1544

+"spscq_init failed, rc = %d",51,1569

+"osal_thread_config_create failed rc = %d",52,1582

+"osal_thread_create failed rc = %d",53,1592

+"stats_register failed, rc = %u",54,1631

+"spscq_enqueue failed, rc %d",55,1662

+"spscq_deinit failed, rc = %d",56,1669

+

+file_id,170,hash_server.c

+"OSAL mutex lock failed",0,163

+"Invalid next state %d, current state %d",1,194

+"Invalid main argument",2,227

+"spscq_enqueue_ptr_get failed, rc %d",3,237

+"HASH Server queue retrieved an invalid enqueue ptr",4,242

+"Callback cannot be null",5,265

+"spscq_init failed, rc %d",6,275

+"osal_thread_config_create failed",7,293

+"osal_thread_create failed",8,303

+"sha_driver_initialize failed, rc = %u",9,312

+"Failed to register HASH/SERVER statistics, rc = %u",10,319

+"sha_driver_final failed, rc %d",11,356

+"Returned digest length is too long: %zu, max expected: %d",12,365

+"sha_driver_init failed, rc = %d",13,401

+"sha_driver_update failed, rc = %d",14,408

+"hash_server_final_response_handle failed, rc = %d",15,415

+"sha_driver_reset failed, rc = %d",16,427

+"spscq_dequeue_ptr_get failed, rc %d",17,461

+"sha_driver_init failed, rc %d",18,496

+"sha_driver_update failed, rc %d",19,509

+"hash_server_final_response_handle failed, rc %d",20,522

+"hash_server_compute_response_handle failed, rc %d",21,537

+"sha_driver_reset failed, rc %d",22,549

+"hash_server_compute_response_handle failed, rc %d",23,582

+"Invalid sub type %d",24,589

+"Unsupported request",25,596

+"rsvc_hash_cb failed, rc = %d",26,622

+"spscq_dequeue failed, rc %d",27,629

+"HASH server is not initialized",28,651

+"spscq_enqueue failed, rc %d",29,680

+"HASH server is not initialized",30,713

+"Pointer cannot be NULL",31,720

+"spscq_enqueue failed, rc %d",32,751

+"HASH server is not initialized",33,772

+"context_ptr cannot be NULL",34,779

+"spscq_enqueue failed, rc %d",35,806

+"HASH server is not initialized",36,836

+"Chunk size exceeds maximum supported",37,843

+"data_ptr cannot be NULL",38,850

+"spscq_enqueue failed, rc %d",39,878

+"HASH server is not initialized",40,897

+"spscq_enqueue failed, rc %d",41,916

+"HASH server is not initialized",42,934

+"async_req_ptr cannot be NULL",43,941

+"Invalid sub type %d",44,983

+"spscq_enqueue failed, rc %d",45,998

+"HASH server is not initialized",46,1015

+"spscq_enqueue failed, rc %d",47,1034

+"osal_thread_join failed, rc %d",48,1040

+"spscq_deinit failed, rc %d",49,1050

+

+file_id,171,rsvc_hash.c

+"Unsupported algorithm",0,51

+"rt_data_pull failed, rc %d",1,85

+"Registration of HASH/RSVC statistics failed, rc = %u",2,102

+"rt_data_pull failed, rc %d",3,140

+"rt_data_pull failed, rc %d",4,179

+"rt_data_pull failed, rc %d",5,224

+"rt_data_pull failed, rc %d",6,309

+"rt_data_pull failed, rc %d",7,366

+"rt_pkt is a NULL pointer",8,384

+"rt_data_pull failed, rc %d",9,408

+"rsvc_hash_handle_init failed, rc %d",10,417

+"hash_server_update failed, rc %d",11,424

+"rsvc_hash_handle_final failed, rc %d",12,431

+"hash_server_final failed, rc %d",13,438

+"rsvc_hash_handle_compute failed, rc %d",14,445

+"Unsupported operation",15,465

+"rt_data_put failed, rc %u",16,484

+"rt_data_put failed, rc %u",17,495

+"rsvc_dev_send_rsp failed, rc %u",18,504

+"Failed to allocate SDU for RT packet, rc %u",19,543

+"Failed to add remote_service to RT SDU, rc %u",20,554

+"Failed to add response_header to RT SDU, rc %u",21,571

+"Unsupported response type",22,647

+"Failed to add data to RT SDU, rc %u",23,655

+"rsvc_server_send_indication failed, rc = %u",24,665

+

+file_id,172,rsvc_ivn.c

+"RX Packets:           \t%10llu\n",0,32

+"TX Packets:           \t%10llu\n",1,33

+"RX Bytes:           \t%10u[GB] and %u[B]\n",2,35

+"RX Bytes:           \t%10u\n",3,40

+"TX Bytes:           \t%10u[GB] and %u[B]\n",4,45

+"TX Bytes:           \t%10u\n",5,50

+"RX Error:             \t%10llu\n",6,54

+"TX Error:             \t%10llu\n",7,55

+"RX Dropped:           \t%10llu\n",8,56

+"TX Dropped:           \t%10llu\n\n",9,57

+"M3 controller stats \r\n",10,70

+"M3 stats \r\n",11,73

+"device stats \r\n",12,76

+"Failed to pull IVN_MSG data",13,117

+"Expected at least %zu bytes, received only %u",14,123

+"Invalid argument. Number of filters (%u) exceeds maximum (%u)",15,137

+"Expected %zu bytes, received only %u",16,146

+"ivn_server_filter_tbl_set failed, rsp_rc = %d",17,155

+"rt_data_put failed, rc %d",18,165

+"Failed to pull device_id",19,200

+"ivn_server_filter_tbl_get failed, rc = %d",20,207

+"rt_data_put failed, rc %d",21,216

+"rt_data_put failed, rc %d",22,230

+"Invalid arguments from mcu_control_rx_cb, len = %zu ",23,267

+"Failed to allocate SDU for RT packet, rc = %d",24,274

+"Failed to add remote_service to RT SDU, rc = %d",25,285

+"Failed to add remote_indication to RT SDU, rc = %d",26,297

+"Failed to add data to RT SDU, rc = %d len = %zu ",27,304

+"secure_hdif_local_security_level_get failed rc = %u",28,310

+"Failed to send indication, rc = %d",29,319

+"RT packet is NULL",30,365

+"Failed to pull device_id, rc = %d",31,382

+"ivn_server_open failed, rsp_rc = %d",32,395

+"rt_data_put failed, rc = %d",33,406

+"Failed to pull IVN_MSG data, rc = %d",34,421

+"Expected at least %zu bytes, received only %u",35,428

+"Data length mismatch. Expected %zu bytes but got only %u",36,439

+"mailbox_adapter_send failed, rsp_rc = %d",37,452

+"ivn_server_send failed, rsp_rc = %d",38,455

+"rt_data_put failed, rc = %d",39,467

+"Failed to pull device_id, rc = %d",40,483

+"ivn_server_statistics_get failed, rc = %d",41,491

+"rt_data_put failed, rc = %d",42,507

+"rt_data_put failed, rc = %d",43,515

+"rsvc_ivn_filter_tbl_set failed, rc %d",44,524

+"rsvc_ivn_filter_tbl_get failed, rc %d",45,533

+"rsvc_ivn_handle_host_msg failed, unknown protocol",46,540

+"Registration of IVN/RSVC statistics failed, rc = %u",47,567

+

+file_id,173,rsvc_log.c

+"RT packet is NULL",0,33

+"secure_hdif_local_security_level_get failed rc = %u",1,48

+"rsvc_packet_security_level_verify failed rc = %u",2,54

+"SYSLOG destination UID set from %u to %u ",3,69

+"SYSLOG destination UID set from %u to %u ",4,86

+"Invalid message_id %u",5,91

+"rt_alloc_pdu failed, rc = %u",6,114

+"rt_data_put failed, rc = %u",7,124

+"rt_data_put failed, rc = %u",8,134

+"rt_data_put failed, rc = %u",9,142

+"secure_hdif_local_security_level_get failed rc = %u",10,149

+

+file_id,174,rsvc_common.c

+"Invalid remote object value type %u",0,60

+"Invalid remote object value type %u",1,107

+

+file_id,175,rsvc_server.c

+"rsvc_server_stop failed, rc %d",0,118

+"rsvc_loopback_enable=%u",1,137

+"rsvc_server_create failed, rc = %u",2,166

+"rsvc_ehsm_init failed rc = %u",3,174

+"Failed to initialize RT, rc %u",4,202

+"Failed to receive RT packet, rc %u",5,222

+"Failed to allocate SDU for RT packet, rc %u",6,237

+"Failed to add msg_header to RT SDU, rc %u",7,244

+"Failed to send back received packet, rc = %d",8,262

+"rt_data_pull failed, rc %d",9,281

+"Failed to allocate RT SDU, rc %u",10,294

+"rt_data_extend failed, rc = %u",11,300

+"Invalid destination_service %#x",12,369

+"rsvc_server_rsp_send failed, rc = %d",13,389

+"RSVC is not initialized",14,432

+"Mandatory argument not specified",15,439

+"Response size is zero",16,448

+"Failed to send response, rc %u",17,455

+"rsvc_srv_thread_once_init failed, rc = %u",18,488

+"osal_thread_create failed, rc = %u",19,496

+"stats_register failed, rc = %u",20,504

+"rsvc_v2x_stats_register failed, rc = %u",21,510

+"rsvc_ivn_stats_register failed, rc = %u",22,517

+"wdm_wlan_stats_register failed, rc = %u",23,524

+"rsvc_ecc_stats_register failed, rc = %u",24,530

+"osal_thread_join failed, rc %u",25,545

+"rt_pkt_ptr parameter not specified",26,564

+"RSVC is not initialized",27,569

+"Invalid packet type %d",28,590

+"Failed to send RT message, rc %u",29,601

+"RSVC is not initialized",30,619

+"rsvc_stat_ptr parameter not specified",31,624

+"received packet security level is not as expected: received %d, expected: %d",32,638

+

+file_id,176,rsvc_symmetric_crypto.c

+"rsvc_symmetric_crypto_dev_init",0,44

+"aesa100_driver_init failed, rc = %u",1,48

+"stats_register failed, rc = %u",2,57

+"Called",3,69

+"aesa100_driver_exit failed, rc = %u",4,73

+"RT packet is NULL",5,158

+"'rsvc_symmetric_crypto' is not initialized",6,164

+"Expected at least %d bytes, received only %zu",7,181

+"get_symmetric_crypto_key_len failed, rc %d",8,208

+"Expected at least %zu bytes, received only %zu",9,223

+"Expected at most %u bytes, received %zu",10,245

+"Expected at least %zu bytes, received only %zu",11,253

+"ecb_request failed, rc %d",12,288

+"rt_data_put failed, rc %d",13,304

+"rt_data_put failed, rc %d",14,319

+"rt_data_put failed, rc %d",15,328

+"get_symmetric_crypto_key_len failed, rc %d",16,351

+"Expected at least %zu bytes, received only %zu",17,366

+"Expected at most %u bytes, received %zu",18,389

+"Expected at least %zu bytes, received only %zu",19,397

+"cbc_request failed, rc %d",20,437

+"rt_data_put failed, rc %d",21,453

+"rt_data_put failed, rc %d",22,468

+"rt_data_put failed, rc %d",23,477

+"get_symmetric_crypto_key_len failed, rc %d",24,509

+"Expected at least %zu bytes, received only %zu",25,524

+"Expected at most %u bytes, received %zu",26,546

+"Expected at least %zu bytes, received only %zu",27,563

+"Expected at least %zu bytes, received only %zu",28,580

+"Expected at least %zu bytes, received only %zu",29,590

+"ccm_request failed, rc %d",30,647

+"rt_data_put failed, rc %d",31,663

+"rt_data_put failed, rc %d",32,678

+"rt_data_put failed, rc %d",33,687

+"rt_data_put failed, rc %d",34,696

+"rt_data_put failed, rc %d",35,705

+"get_symmetric_crypto_key_len failed, rc %d",36,737

+"Expected at least %zu bytes, received only %zu",37,752

+"Expected at most %u bytes, received %zu",38,774

+"Expected at least %zu bytes, received only %zu",39,784

+"Expected at least %zu bytes, received only %zu",40,796

+"Expected at least %zu bytes, received only %zu",41,818

+"gcm_request failed, rc %d",42,875

+"rt_data_put failed, rc %d",43,891

+"rt_data_put failed, rc %d",44,906

+"rt_data_put failed, rc %d",45,915

+"rt_data_put failed, rc %d",46,924

+"rt_data_put failed, rc %d",47,933

+"get_symmetric_crypto_key_len failed, rc %d",48,945

+"Expected at least %zu bytes, received only %zu",49,960

+"Expected at least %zu bytes, received only %zu",50,988

+"cmac_request failed, rc %d",51,1009

+"rt_data_put failed, rc %d",52,1025

+"rt_data_put failed, rc %d",53,1040

+"rt_data_put failed, rc %d",54,1049

+"get_symmetric_crypto_key_len failed, rc %d",55,1060

+"Expected at least %zu bytes, received only %zu",56,1075

+"Expected at least %zu bytes, received only %zu",57,1098

+"Expected at least %zu bytes, received only %zu",58,1111

+"gmac_request failed, rc %d",59,1143

+"rt_data_put failed, rc %d",60,1159

+"rt_data_put failed, rc %d",61,1174

+"rt_data_put failed, rc %d",62,1183

+"rsvc_symmetric_crypto_handle_host_msg failed, unknown protocol",63,1190

+

+file_id,177,rsvc_v2x.c

+"Invalid message_id %u",0,91

+"rt_data_put failed, rc %u",1,111

+"Mandatory arguments not specified",2,143

+"if_index = %u",3,149

+"ch_id.op_class = 0x%02x",4,150

+"ch_id.ch_num = 0x%02x",5,151

+"datarate = 0x%02x",6,152

+"power dbm = 0x%04x",7,153

+"diversity power dbm = 0x%04x",8,154

+"expiry_time_ms = 0x%04x",9,155

+"Enter",10,183

+"rt_pkt is a NULL pointer",11,186

+"Invalid V2X socket data received",12,202

+"Failed to remove remote_v2x_send_t from rx packet, rc %u",13,213

+"Failed to remove remote_v2x_extended_send_params_t from Rx packet, rc %u",14,228

+"Invalid socket index: %i",15,239

+"Enter",16,275

+"RT packet is a NULL pointer",17,277

+"rt packet destination_service = %u",18,281

+"rt packet service_context = %u",19,282

+"rt packet uid = %u",20,283

+"rt packet sdu_len = %u",21,284

+"rt_data_pull failed, rc %u",22,300

+"message_id = %u",23,305

+"secure_hdif_local_security_level_get failed rc = %u",24,311

+"rsvc_packet_security_level_verify failed rc = %u",25,317

+"rt_data_put failed, rc %u",26,342

+"rt_data_put failed, rc %u",27,357

+"Invalid message_id %u",28,398

+"Registration of V2X/RSVC statistics failed, rc = %u",29,432

+"Registration of CBR/RSVC statistics failed, rc = %u",30,439

+

+file_id,178,v2x_server.c

+"Invalid argument: if_index = %u",0,184

+"Failed to get rf_gain, rc %u",1,205

+"lmac_driver_wdm_last_rx_evm_fraction_get failed, rc %u",2,211

+"Failed to get TSSI for ranging packet, rc = %u",3,228

+"Invalid operation class",4,277

+"Invalid time slot",5,313

+"Failed to allocate SDU for RT packet, rc %u",6,451

+"Failed to add msg_header to RT SDU, rc %u",7,478

+"Failed to add message ID to RT SDU, rc %u",8,488

+"Failed to add result to RT SDU, rc %u",9,499

+"Failed to add measurements header to RT SDU, rc %u",10,513

+"Failed to add measurements data to RT SDU, rc %u",11,521

+"Failed to add response data to RT SDU, rc %u",12,530

+"secure_hdif_local_security_level_get failed rc = %u",13,539

+"Failed to send indication to host, rc %u",14,556

+"Failed to send indication to host, rc %u",15,563

+"V2X server isn't initialized",16,590

+"Failed to extract context, rc=%u",17,601

+"Mandatory arguments not specified",18,650

+"Invalid datarate %u",19,667

+"Invalid datarate %u",20,681

+"Invalid channel id %u",21,693

+"failed to get mac address for interface %d, rc %u",22,756

+"Unsupported remote access category %d",23,795

+"remote_to_lmac_access_category_convert failed, rc = %u",24,844

+"V2X server isn't initialized",25,871

+"RT packet is NULL",26,878

+"Converting message from Host: rc %u",27,896

+"Failed to extract context, rc=%u",28,904

+"rt_data_put failed, rc %u",29,937

+"Invalid param - NULL pointers",30,1002

+"V2X server isn't initialized",31,1030

+"RT packet is NULL",32,1037

+"Converting message from Host: rc %u",33,1055

+"Failed to extract context, rc=%u",34,1064

+"rt_data_put failed, rc %u",35,1098

+"Enter",36,1134

+"V2X server isn't initialized",37,1137

+"Mandatory function argument is not specified\n\r",38,1143

+"Invalid argument: if_index = %u",39,1156

+"Mandatory function argument is not specified\n\r",40,1162

+"Invalid transmission data rate %u\n\r",41,1170

+"Invalid power dbm8 %u\n\r",42,1178

+"Invalid diversity power dbm8 %i",43,1188

+"v2x_user_priority_to_lmac_access_category_convert failed, rc = %u",44,1221

+"lmac_driver_wdm_bandwidth_get failed, rc = %u",45,1233

+"Failed to set default extended parameters, rc = %u",46,1241

+"Failed to convert datarate to mcs, rc = %u",47,1260

+"Failed to convert datarate to mcs",48,1272

+"v2x_server_empty_context_get - failed",49,1319

+"Failed to extract context, rc=%u",50,1326

+"Packet:",51,1332

+"Dropped packet, rc=%u",52,1349

+"V2X server isn't initialized",53,1402

+"Invalid argument: if_index = %u",54,1411

+"Failed to allocate SDU for RT packet, rc %u",55,1425

+"Failed to add msg_header to RT SDU, rc %u",56,1449

+"Failed to add msg_header to RT SDU, rc %u",57,1458

+"Dropping packet",58,1478

+"Invalid if_index %u",59,1492

+"Failed to get 'channel id', rc %u",60,1514

+"lmac_driver_wdm_bandwidth_get failed, rc %u",61,1527

+"v2x_mcs_to_datarate_convert failed, rc %u",62,1534

+"sw_config_get failed, rc = %u",63,1545

+"v2x_server_receive_remote_set failed, rc %u",64,1565

+"remote_v2x_receive failed, rc %u",65,1572

+"Failed to add user data to RT SDU, rc %u",66,1580

+"lmac_driver_wdm_cbp_process failed %u",67,1602

+"Failed to add data to RT SDU, rc %u",68,1610

+"secure_hdif_local_security_level_get failed %u",69,1616

+"Failed to send indication, rc %u",70,1625

+"sw_config_get failed, rc = %u",71,1685

+"Failed to free context(%p)",72,1745

+"Failed to get indexes of interfaces, rc = %u",73,1760

+"Failed to get DOT4 statistics for if_index=%u time_slot=%u",74,1772

+"Registration of V2X/SERVER statistics failed, rc = %u",75,1798

+"Failed to get indexes of interfaces, rc = %u",76,1803

+"Registration of V2X/HW statistics failed, rc = %u",77,1816

+"V2X server already initialized",78,1836

+"config_ptr is NULL",79,1842

+"send_indication is NULL",80,1848

+"Invalid argument: first_if_index = %u, last_if_index = %u",81,1855

+"lmac_driver_dsp_type_get failed, rc = %u",82,1872

+"Failed to initialized 1609.4, rc=%d",83,1891

+"Enter",84,1896

+"Failed to get WLAN MAC address, if_index %u,  rc = %u",85,1905

+"lmac_driver_mode_dependent_attach failed, rc = %u",86,1914

+"Attached if#%u in DSRC mode by default",87,1918

+"Attached if#%u in CV2X mode by default",88,1921

+"RT packet is NULL",89,1978

+"V2X server isn't initialized",90,1984

+"lmac_driver_dot4_stats_get: %u",91,2007

+"rt_data_put failed, rc %u",92,2035

+"v2x_stat specified",93,2051

+"V2X server isn't initialized",94,2056

+"V2X server isn't initialized",95,2077

+"RT packet is NULL",96,2084

+"V2X server isn't initialized",97,2150

+"RT packet is NULL",98,2157

+"V2X server isn't initialized",99,2227

+"RT packet is NULL",100,2234

+"Failed to extract context, rc=%u",101,2251

+"invalid event type #%d",102,2361

+

+file_id,179,v2x_server_common.c

+"Invalid argument: user_priority = %u",0,62

+"Invalid frame length",1,198

+"Protocol Version %u != 0)",2,206

+"Control frame",3,211

+"To DS bit is set",4,217

+"Protected frame bit is set",5,223

+"Data is not present",6,228

+"Actual frame length is less then expected minimal length",7,235

+"lmac_driver_wdm_control_flag_get failed, rc %u",8,241

+"Malformed - multicast source address",9,254

+"lmac_driver_wdm_cbp_process failed %u",10,267

+"Destination address mismatch",11,277

+"Duplicate frame",12,282

+

+file_id,180,v2x_server_datarate.c

+"mcs_ptr is NULL",0,249

+"bandwidth not supported: bandwidth = %u",1,265

+"data_rate is NULL",2,278

+"Invalid MCS %u",3,283

+"bandwidth not supported: bandwidth = %u",4,299

+

+file_id,181,v2x_server_sampling.c

+"Invalid argument: if_index = %u",0,119

+"Not initialized",1,163

+"lmac_driver_passthrough_sampling_callback_register failed, rc = %u",2,174

+"lmac_driver_cbr_sampling_callback_register failed, rc = %u",3,182

+"lmac_driver_passthrough_tx_indication_enable failed, rc = %u",4,193

+"Not initialized",5,206

+"unregister, lmac_driver_cbr_sampling_callback_register failed, rc = %u",6,217

+"unregister, lmac_driver_passthrough_tx_indication_enable failed, rc = %u",7,228

+"Not initialized",8,241

+"Failed to get DB seq, if_index %u rc = %u",9,253

+"Failed to wait for sync, rc = %u",10,295

+"lmac_driver_if_indexes_get failed, rc = %u",11,316

+"lmac_driver_dsp_cbr_read failed, if_index = %u, rc = %u",12,334

+"Failed to set DB, if_index = %u, rc = %u",13,341

+"lmac_driver_wdm_diversity_get failed, rc = %u",14,352

+"Unknown diversity mode %d",15,380

+"Already initialized",16,417

+"Failed to create V2X Sample thread configuration, rc = %u",17,437

+"Failed to create V2X Sample thread, rc = %u",18,443

+"Registration of CBR/SERVICE failed, rc = %u",19,455

+"osal_thread_join failed, rc %u",20,481

+"TX complete failure indication ifindex=%d packet_id=%d flags=%d",21,520

+

+file_id,182,v2x_server_sampling_db.c

+"Invalid argument: if_index = %u",0,53

+"invalid main arguments",1,58

+"Failed to take lock, rc %u",2,65

+"Invalid argument: if_index %u",3,93

+"seq_ptr cannot be NULL",4,98

+"Failed to take lock, rc %u",5,105

+"Invalid argument: if_index = %u",6,129

+"invalid main arguments",7,134

+"Failed to take lock, rc %u",8,141

+"Already initialized",9,171

+"V2X Sampling DB not initialized",10,208

+

+file_id,183,v2x_sqn_cache.c

+"lmac_driver_if_indexes_get failed, rc = %u",0,341

+

+file_id,184,rsvc_wdm.c

+"'r_value_ptr' is null",0,40

+"Unknown WIFI_BW value %d",1,66

+"lmac_driver_if_indexes_get failed, rc = %u",2,100

+"craton2_soc_revision_get failed, rc = %u",3,107

+"lmac_driver_wdm_rf_temperature_get failed, rc %u",4,175

+"lmac_driver_wdm_dsp_status_get failed, rc %u",5,184

+"'remote_cable_loss_status_ptr' is null",6,200

+"Unknown cable loss status value %u",7,218

+"lmac_driver_events_service_compensator_user_status_get failed, rc = %u",8,246

+"Invalid compensator_status [%u]",9,272

+"lmac_driver_wdm_compensator_temperature_get failed, rc = %u",10,279

+"lmac_driver_wdm_compensator_cable_loss_info_get failed, rc = %u",11,292

+"lmac_driver_wdm_compensator_stats_get failed, rc = %u",12,345

+"lmac_driver_wdm_compensator_last_messages_get failed, rc = %u",13,370

+"wdm_external_object_get: unknown object_type=%d, ",14,462

+"lmac_driver_wdm_control_flag_set failed rc = %u",15,499

+"lmac_driver_phy_flags_set failed rc=%d",16,507

+"wdm_external_object_set: unknown object_type=%d",17,529

+"'w_value_ptr' is null",18,542

+"Unknown remote bandwidth value %d",19,568

+"Unsupported remote access category %d",20,609

+"dest_ptr is NULL",21,622

+"Unknown interface mode %d",22,644

+"RT packet is NULL",23,692

+"WDM get FREQUENCY_MHZ: if_index %u, value %u, rsp_rc %u",24,729

+"WDM get TSSI_LOOP_ENABLE: if_index %u, value %d, rsp_rc %u",25,759

+"WDM get RSSI_CALIB_RESULT: rf_index %u, value %llu, rsp_rc %u",26,770

+"WDM get WLAN_STATS: if_index %u, rsp_rc %u",27,797

+"WDM get primary_index: if_index %u, value %u, rsp_rc %u",28,810

+"WDM get BANDWIDTH: if_index %u, value %u, rsp_rc %u",29,828

+"WDM get PHY_MODE: if_index %u, value %u, rsp_rc %u",30,839

+"WDM get NTX: if_index %u, value %d, rsp_rc %u",31,852

+"lmac_driver_wdm_edca_config_get failed, rc = %u",32,873

+"WDM get EDCA_CONFIG: if_index %u, ac %u",33,877

+"aifsn %u, cwmin %u, cwmax %u, txop_limit %u, rsp_rc %u",34,879

+"WDM get CSD11P: if_index %u, value %d, rsp_rc %u",35,892

+"WDM get RF temperature offset: value %i[c], rsp_rc %u",36,903

+"WDM get IF STATUS: if_index %u, rsp_rc %u",37,934

+"afe_pll_status %u, rf_pll_status %u, calibration_status %u",38,945

+"temperature_celsius %u, rsp_rc %u",39,950

+"WDM get WLAN MAC: if_index %u, value %02x:%02x:%02x:",40,961

+"%02x:%02x:%02x, rsp_rc %u",41,963

+"WDM get CBR_SAMPLE_INTERVAL: if_index %u, value %u, rsp_rc %u",42,974

+"lmac_driver_wdm_rf_test_mode_get failed, rc = %d",43,985

+"WDM get RF test mode:",44,989

+"if_index %u, mode %ufreq_offset %u, tx_power %u, rsp_rc %u",45,990

+"compensator_status %u, temperature_celsius %d, cable_loss_db8 %d, cable_loss_status %u, rsp_rc %u",46,1005

+"hw_version %u, sw_version %u, protocol_version %u, rsp_rc %u",47,1021

+"total_messages %u, error_messages %u, rsp_rc %u",48,1035

+"raw_data_size %u, rsp_rc %u",49,1067

+"wdm_external_object_get failed, cwdm_type=%d, rc = %u",50,1092

+"Invalid object type %d",51,1131

+"rt_data_extend failed, rc %u",52,1159

+"secure_hdif_local_security_level_get failed rc = %u",53,1168

+"mode_ptr is NULL",54,1184

+"Unknown remote interface mode %d",55,1206

+"RT packet is NULL",56,1233

+"rt_data_extend failed, rc %u",57,1263

+"WDM set FREQUENCY_MHZ: if_index %u, value %u, rsp_rc %u",58,1280

+"WDM set TSSI_LOOP_ENABLE: if_index %u, value %u, rsp_rc %u",59,1306

+"failed to get SoC revision, rc = %u",60,1321

+"WDM TSSI CALIBRATION START: rf_index %u, mode %d, rsp_rc %u",61,1331

+"failed to get SoC revision, rc = %u",62,1341

+"WDM TSSI CALIBRATION STOP: rsp_rc %u",63,1351

+"WDM set primary_index: if_index %u, value %u rsp_rc %u",64,1371

+"WDM set RF temperature offset: value %i[c], rsp_rc %u",65,1385

+"WDM set BANDWIDTH: if_index %u, value %d, rsp_rc %u",66,1406

+"WDM set PHY_MODE: if_index %u, value %u, rsp_rc %u",67,1420

+"WDM set NTX: if_index %u, value %d, rsp_rc %u",68,1434

+"lmac_driver_wdm_edca_config_convert, rc = %u",69,1455

+"WDM set EDCA_CONFIG: if_index %u, ac %u",70,1463

+"aifsn %u, cwmin %u, cwmax %u, txop_limit %u, rsp_rc %u",71,1465

+"WDM set CSD11P: if_index %u, value %d, rsp_rc %u",72,1481

+"WDM set IF ATTACH: if_index %u, value %u, rsp_rc %u",73,1501

+"WDM set IF DETACH: if_index %u, rsp_rc %u",74,1509

+"WDM set WLAN MAC: if_index %u, value %02x:%02x:%02x:",75,1522

+"%02x:%02x:%02x, rsp_rc %u",76,1524

+"WDM set CBR_SAMPLE_INTERVAL: if_index %u, value %u, rsp_rc %u",77,1537

+"lmac_driver_wdm_rf_test_mode_set failed, rc = %d",78,1551

+"WDM set RF test mode:",79,1555

+"if_index %u, mode %u, freq_offset %u, tx_power %u, rsp_rc %u",80,1556

+"WDM set CTRL TX POWER: if_index %u, value %u, rsp_rc %u",81,1575

+"wdm_external_object_set failed, rc = %u",82,1594

+"Invalid object type %u",83,1613

+"secure_hdif_local_security_level_get failed rc = %u",84,1631

+"wdm_stat parameter not specified",85,1648

+"RT packet is NULL",86,1670

+"secure_hdif_local_security_level_get failed rc = %u",87,1687

+"rsvc_packet_security_level_verify failed rc = %u",88,1693

+"handle_set_req failed, rc %u",89,1701

+"handle_get_req failed, rc %u",90,1709

+"Invalid request_type %u",91,1715

+"wdm_stats_ptr parameter not specified",92,1737

+"Failed to get indexes of interfaces, rc = %u",93,1744

+"Failed to get WDM statistics for if_index = %u, rc = %u",94,1753

+"Registration of WDM/RSVC statistics failed, rc = %u",95,1779

+"Failed to get indexes of interfaces, rc = %u",96,1784

+"Registration of WDM/HW statistics failed, rc = %u",97,1797

+

+file_id,185,rsvc_wdm_cbp.c

+"Invalid object type %d",0,165

+"Invalid object type %d",1,219

+

+file_id,186,secure_hdif.c

+"compare_tags failed rv = %d",0,101

+"tx_mutex_get failed %d",1,164

+"tx_mutex_get failed %d",2,170

+"tx_mutex_put failed %d",3,198

+"tx_mutex_put failed %d",4,205

+"tx_mutex_create failed %d",5,322

+"tx_mutex_create failed %d",6,328

+"secure_hdif_security_level_set failed (rc=%d)",7,341

+"security level EHSM %d, security level ECC %d",8,368

+"tx_mutex_get failed %d",9,408

+"session_key_wear_down_counter_g exceeds maximum level %d",10,419

+"tx_mutex_put failed %d",11,497

+"session_key_wear_down_counter_g exceeds maximum level %d",12,542

+"session_key_update_state_done",13,626

+"check_error_validity",14,639

+"tx_mutex_put failed %d",15,651

+"ehsm_server_random_generate failed: rc = %d, ehsm_rc = %d",16,668

+"---------------Secure HDIF statistics---------------",17,725

+"packets_authenticated:                 %u",18,726

+"packets_encrypted:                     %u",19,727

+"packets_decrypted:                     %u",20,728

+"authentication_errors:                 %u",21,729

+"tag_compute_errors:                    %u",22,730

+"encrypt_errors:                        %u",23,731

+"decrypt_errors:                        %u",24,732

+"total_number_of_secure_blocks:         %u",25,733

+"number_of_session_keys_used:           %u",26,734

+"current_session_key_wear_down_counter: %u",27,735

+"session_key_wear_down_errors:          %u\n",28,736

+

+file_id,188,ehsm_server.c

+"Pointer cannot be NULL",0,126

+"Panic reason %x",1,309

+"EHSM_CSK is not programmed,\nInvalid operation",2,349

+"eHSM server is not initialized",3,360

+"Pointer cannot be NULL",4,387

+"eHSM server is not initialized",5,392

+"ehsm_driver_status_get failed rc = %d",6,400

+"Failed to wait ehsm_server_entrance_mutex rc = %d",7,412

+"eHSM Panicked",8,419

+"Pointer cannot be NULL",9,450

+"Invalid remote ehsm command %x",10,457

+"Expecting result for message_id %d received response message_id %d",11,464

+"ehsm_driver_status_get failed rc = %d",12,474

+"eHSM Panicked",13,482

+"Pointer cannot be NULL",14,511

+"Failed to wait ehsm_server_respons_sem rc = %d",15,518

+"firmware_version_ptr is NULL",16,532

+"ehsm_driver_firmware_version_read failed, rc = %d",17,545

+"Fail to initialize eHSM driver rc = %d",18,578

+"Failed to register eHSM server with eHSM driver rc = %d",19,594

+"ehsm_driver_psb_get failed",20,601

+"Failed to register eHSM/SERVER registration, rc = %u",21,608

+"firmware_version_read failed, rc = %d",22,614

+"ehsm_driver_firmware_version_read failed, rc = %d",23,650

+"ehsm_driver_life_cycle_read failed, rc = %d",24,677

+"ehsm_driver_otp_word_read failed, rc = %d",25,703

+"ehsm_driver_runtime_status_read failed, rc = %d",26,730

+"ehsm_driver_csk_generate Failed, rc = %d",27,791

+"ehsm_driver_ecc_key_pair_generate Failed, rc = %d",28,867

+"ehsm_driver_ecc_key_pair_import Failed, rc = %d",29,933

+"ehsm_driver_ecdsa_sign Failed, rc = %d",30,1000

+"Failed to wait ehsm_server_respons_sem rc = %d",31,1015

+"ehsm_driver_ecc_private_key_multiply_add Failed, rc = %d",32,1307

+"ehsm_driver_ecc_private_key_multiply_add Failed, rc = %d",33,1375

+"ehsm_driver_random_generate Failed, rc = %d",34,1435

+"ehsm_driver_otp_block_ecc_enable Failed, rc = %d",35,1488

+"ehsm_driver_otp_word_type_read Failed, rc = %d",36,1537

+"ehsm_driver_otp_word_read Failed, rc = %d",37,1592

+"ehsm_driver_otp_word_write Failed, rc = %d",38,1645

+"ehsm_driver_otp_word_lock Failed, rc = %d",39,1691

+"MAC generate data size should be multiple of 16 bytes",40,1743

+"ehsm_driver_storage_mac_generate Failed, rc = %d",41,1752

+"MAC verify data size should be multiple of 16 bytes",42,1812

+"ehsm_driver_storage_mac_verify Failed, rc = %d",43,1821

+"ehsm_driver_storage_auth_encrypt Failed, rc = %d",44,1881

+"caller_source cannot %d",45,1947

+"ehsm_driver_storage_auth_decrypt Failed, rc = %d",46,1958

+"ehsm_driver_storage_auth_decrypt Failed secure HDIF magic key detected",47,2003

+"ehsm_driver_storage_auth_decrypt Failed secure HDIF magic key not detected",48,2011

+"ehsm_driver_symmetric_key_generate Failed, rc = %d",49,2045

+"ehsm_driver_symmetric_key_import Failed, rc = %d",50,2105

+"Invalid data size",51,2165

+"ehsm_driver_symmetric_ecb_encrypt Failed, rc = %d",52,2173

+"Invalid data size",53,2233

+"ehsm_driver_symmetric_ecb_decrypt Failed, rc = %d",54,2241

+"Invalid data size",55,2302

+"ehsm_driver_symmetric_cbc_encrypt Failed, rc = %d",56,2310

+"Invalid data size",57,2371

+"ehsm_driver_symmetric_cbc_decrypt Failed, rc = %d",58,2379

+"Invalid data size",59,2439

+"ehsm_driver_symmetric_cmac_generate Failed, rc = %d",60,2447

+"Invalid data size",61,2508

+"ehsm_driver_symmetric_cmac_verify Failed, rc = %d",62,2516

+"Invalid data size",63,2577

+"Invalid associated_data size",64,2583

+"ehsm_driver_symmetric_ccm_encrypt Failed, rc = %d",65,2599

+"Invalid data size",66,2669

+"Invalid associated_data size",67,2675

+"ehsm_driver_symmetric_ccm_decrypt Failed, rc = %d",68,2692

+"ehsm_server_secure_hdif_master_key_magic_number_get failed",69,2771

+"ehsm_driver_self_test Failed, rc = %d",70,2789

+"ehsm_driver_lifecycle_set(%d) failed, rc = %d",71,2839

+"Error for field %d",72,2859

+

+version_0,0xA71F8C15

+version_1,0xF2A0C491

+version_2,0xA4687709

+version_3,0x14849B79

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/diag-cli b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/diag-cli
new file mode 100755
index 0000000..23e9357
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/diag-cli
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/dsp_sw_rev3.bin b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/dsp_sw_rev3.bin
new file mode 100755
index 0000000..53ef515
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/dsp_sw_rev3.bin
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libatlkremote_linux_u.so b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libatlkremote_linux_u.so
new file mode 100755
index 0000000..95e1f7a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libatlkremote_linux_u.so
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcli.so b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcli.so
new file mode 100755
index 0000000..68e87f7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcli.so
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcv2x.so b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcv2x.so
new file mode 100755
index 0000000..75cd026
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libcv2x.so
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libsmx.so b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libsmx.so
new file mode 100755
index 0000000..cd4f2f9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/libsmx.so
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/lynq-cv2x-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/lynq-cv2x-demo.cpp
new file mode 100755
index 0000000..cf2e426
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/lynq-cv2x-demo.cpp
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+int main(int argc, const char *argv[])
+{
+    printf("test\n");
+    return 0;
+}
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/pgen b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/pgen
new file mode 100755
index 0000000..26b4801
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/pgen
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/readme.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/readme.txt
new file mode 100755
index 0000000..d07f094
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/readme.txt
@@ -0,0 +1,78 @@
+1、  adb push  .\atk_flasher .\calib_file.bin .\cv2x_rrc_config.uper .\cv2x_sw_config.txt .\cv2x-example .\device_logs.csv .\diag-cli .\dsp_sw_rev3.bin .\libatlkremote_linux_u.so .\libcli.so .\libcv2x.so  .\rf_config.bin .\SECTON.packed_bin.rom.injected .\sw_config.txt /data

+通过adb push 将release中的文件push到模组/data 目录下,

+

+2.stty -F /dev/ttyS3 115200 cs8 cstopb -parenb  在adb shell终端中运行指令配置uart波特率115200

+

+3、./atk_flasher   --baudrate 115200 -b serial /dev/ttyS3  SECTON.packed_bin.rom.injected   运行下载命令,打印如下

+Boot parameters:

+  Device name: /dev/ttyS3

+  File to upload: SECTON.packed_bin.rom.injected

+  Baudrate: 921600 bps

+  Chunk size: 0 bytes

+  Chunk delay: 0 ms

+

+4.另起一个adb shell  执行指令给V2X上下电 echo out 169 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio

+                                                                echo out 169 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio

+Boot parameters:

+  Device name: /dev/ttyS3

+  File to upload: SECTON.packed_bin.rom.injected

+  Baudrate: 921600 bps

+  Chunk size: 0 bytes

+  Chunk delay: 0 ms

+sh-3.2#                  //此处等待时间会稍长

+跳出下载,即证明下载完成

+

+5.chmod 777 cv2x-example

+   ./cv2x-example /dev/spidev3.0 2运行测试example 发送数据包  有如下log打印即运行成功

+

+Using default value lmac_rf_config_file_location=1

+Using default value force_csk_generate=0

+Using default value log_level_device=3

+Using default value lmac_loopback_enable=0

+Using default value lmac_phy_loopback_enable=0

+Using default value lmac_trace_verbose=0

+Using default value swc_version=1

+Using default value lmac_ranging_enable=0

+Using default value lmac_dcc_indication_enable=1

+Using default value physical_interfaces_in_use=0

+Using default value lmac_diversity_enable=0

+[cv2x-example] getting WDM service ptr...

+[cv2x-example] getting DDM service ptr...

+[cv2x-example] Waiting for Device to be ready...

+[cv2x-example] Device ready

+

+Host:

+  CV2X version:      5.16.0 (SPI)

+  Software version:  secton-sdk-5.16.0-rel

+Device:

+  SDK version:       5.16.0 (SPI)

+  Software version:  secton-platform-sdk-5.16.0-rel

+DSP:

+  Software version:  3.6.0 beta1-bld3

+Baseband V2X:

+  Hardware version:  3.0

+  MAC CV2X Version:  3.8.0-0 (5.16.0 (SPI))

+  Software version:  secton-cv2x-sdk-5.16.0-rel

+

+[cv2x-example] getting CV2X service ptr...

+[cv2x-example] Setting CV2X src_l2id to 0x6d6e0d.

+[cv2x-example] Starting CV2X task...OK

+

+______cv2x-example - TX started_______________

+[cv2x-example TX] getting DDM service ptr...

+[cv2x-example] creating SP Socket...

+[cv2x-example] creating SP Socket...OK

+[cv2x-example] Setting SP Socket Policy...

+[cv2x-example] Setting SP Socket Policy...OK

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+[cv2x-example] Not ready for Tx!

+

+6.运行lynq-gnss-test开启GPS等待获取到定位

+

+6.运行cgen

+./cgen_5.16.0_armv8  eth=/dev/spidev1.0 freq=5915 power=0 接收数据

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/rf_config.bin b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/rf_config.bin
new file mode 100755
index 0000000..39b2617
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/rf_config.bin
Binary files differ
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config.txt
new file mode 100755
index 0000000..0810c06
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config.txt
@@ -0,0 +1,3 @@
+lmac_calib_file_location=0
+force_csk_generate=1
+internal_poti_disable=1
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config_internal.txt b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config_internal.txt
new file mode 100755
index 0000000..223e620
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/files/sw_config_internal.txt
@@ -0,0 +1 @@
+ll_spi_element_data_bits=8
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/lynq-cv2x-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/lynq-cv2x-demo.bb
new file mode 100755
index 0000000..680d5a5
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-cv2x/lynq-cv2x-demo.bb
@@ -0,0 +1,97 @@
+inherit externalsrc package
+DESCRIPTION = "lynq cv2x demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+
+SRC_URI =  "file://lynq-cv2x-demo.cpp \
+            file://cv2x-example \
+            file://atk_flasher \
+            file://atk_flasher \
+            file://calib_file.bin \
+            file://cgen \
+            file://cgen_5.16.0_armv8 \
+            file://cv2x_rrc_config.uper \
+            file://cv2x_sw_config.txt \
+            file://cv2x-example \
+            file://device_logs.csv \
+            file://diag-cli \
+            file://dsp_sw_rev3.bin \
+            file://pgen \
+            file://rf_config.bin \
+            file://SECTON.packed_bin.rom \
+            file://SECTON.packed_bin.rom.injected \
+            file://sw_config.txt \
+            file://sw_config_internal.txt \
+            file://readme.txt \
+            file://libatlkremote_linux_u.so \
+            file://libcli.so \
+            file://libcv2x.so \
+            file://libsmx.so \
+            file://LICENSE"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+
+FILES_${PN} = "${base_libdir}/*.so \
+               ${bindir}\
+               /etc/cv2x "
+
+FILES_${PN}-dev = "/test \
+                   ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+                  ${base_libdir}/.debug \
+                  ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "lynq-cv2x-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall lynq-cv2x-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+    install -d ${D}/etc/cv2x
+    install -d ${D}${bindir}/
+    install -m 0755 ${S}/cv2x-example ${D}${bindir}/
+    install -m 0755 ${S}/atk_flasher ${D}${bindir}/
+    install -m 0755 ${S}/atk_flasher                                  ${D}/etc/cv2x/atk_flasher
+    install -m 0644 ${S}/calib_file.bin                               ${D}/etc/cv2x/calib_file.bin
+    install -m 0755 ${S}/cgen                                         ${D}/etc/cv2x/cgen
+    install -m 0755 ${S}/cgen_5.16.0_armv8                            ${D}/etc/cv2x/cgen_5.16.0_armv8
+    install -m 0644 ${S}/cv2x_rrc_config.uper                         ${D}/etc/cv2x/cv2x_rrc_config.uper
+    install -m 0644 ${S}/cv2x_sw_config.txt                           ${D}/etc/cv2x/cv2x_sw_config.txt 
+    install -m 0755 ${S}/cv2x-example                                 ${D}/etc/cv2x/cv2x-example 
+    install -m 0644 ${S}/device_logs.csv                              ${D}/etc/cv2x/device_logs.csv
+    install -m 0644 ${S}/diag-cli                                     ${D}/etc/cv2x/diag-cli
+    install -m 0644 ${S}/dsp_sw_rev3.bin                              ${D}/etc/cv2x/dsp_sw_rev3.bin
+    install -m 0644 ${S}/pgen                                         ${D}/etc/cv2x/pgen
+    install -m 0644 ${S}/rf_config.bin                                ${D}/etc/cv2x/rf_config.bin
+    install -m 0644 ${S}/SECTON.packed_bin.rom                        ${D}/etc/cv2x/SECTON.packed_bin.rom
+    install -m 0644 ${S}/SECTON.packed_bin.rom.injected               ${D}/etc/cv2x/SECTON.packed_bin.rom.injected
+    install -m 0644 ${S}/sw_config.txt                                ${D}/etc/cv2x/sw_config.txt
+    install -m 0644 ${S}/sw_config_internal.txt                       ${D}/etc/cv2x/sw_config_internal.txt
+    install -m 0644 ${S}/readme.txt                                   ${D}/etc/cv2x/readme.txt
+    install -m 0644 ${S}/libatlkremote_linux_u.so                     ${D}/etc/cv2x/libatlkremote_linux_u.so
+    install -m 0644 ${S}/libcli.so                                    ${D}/etc/cv2x/libcli.so
+    install -m 0644 ${S}/libcv2x.so                                   ${D}/etc/cv2x/libcv2x.so
+    install -m 0644 ${S}/libsmx.so                                    ${D}/etc/cv2x/libsmx.so
+}
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/lynq-fota-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/lynq-fota-demo.cpp
new file mode 100755
index 0000000..849b139
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/files/lynq-fota-demo.cpp
@@ -0,0 +1,276 @@
+/**@File lynq-fota-demo.c

+*  @Brief :fota test

+*  @details :

+*  @Author : lt

+*  @Date : 2022-3-15

+*  @Version : V1.0

+*  @copy ritght : Copyright (c) MobileTek

+*/

+

+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <sys/types.h>

+#include <unistd.h>

+#include "fcntl.h"

+

+

+#define UPDATA_ADDR "/tmp/fota.delta"

+#define READ_BLOCK_SIZE 0x40000

+#if 0

+#define FLASH_DEV_DELTA       "/dev/disk/by-partlabel/delta"

+#else

+#define FLASH_DEV_DELTA       "/dev/mtd41"	

+#endif

+

+int (*lynq_md5_file_verfy)(char* filePath, char* file_md5);

+int (*lynq_rock_main)(int first_run);

+int (*mtk_device_wrap_open)(const char *pathname, int flags);

+ssize_t (*mtk_device_wrap_read)(int fd, void *buf, size_t count);

+ssize_t (*mtk_device_wrap_write)(int fd, void *buf, size_t count);

+int (*mtk_device_wrap_close)(int fd);

+int (*lynq_nand_open)(const char *pathname, int flags);

+ssize_t (*lynq_nand_read)(int fd, void *buf, size_t count);

+ssize_t (*lynq_nand_write)(int fd, void *buf, size_t count);

+int (*lynq_nand_close)(int fd);

+int (*lynq_get_upgrade_status)(void);

+int (*lynq_fota_nrestart)(void);

+void (*lynq_reboot_device)(void);

+int (*lynq_fota_set_addr_value)(char *value,int size);

+int (*lynq_fota_get_addr_value)(char *tmp);

+ 

+#if 0 

+int main(int argc,char argv[])

+{

+

+

+    int first_run = 1; 

+    int ret = 0;

+    int lynq_get_status = 0;

+    int fd_down,size,fd_target;

+    char input_md5_data[64];

+    char delta_data[READ_BLOCK_SIZE];

+    void *handle_fota;

+

+    const char *lynq_libpath_fota = "/lib64/liblynq-fota.so";

+ 

+    handle_fota = dlopen(lynq_libpath_fota,RTLD_NOW);

+    if(NULL == handle_fota)

+    {

+        printf("dlopen lynq_libpath_fota fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }   

+

+    lynq_get_upgrade_status = (int (*)(void))dlsym(handle_fota,"lynq_get_upgrade_status");

+    if(NULL != lynq_get_upgrade_status)

+    {

+        //get lynq status

+        lynq_get_status = lynq_get_upgrade_status(); 

+        printf("[+UP]: lynq_get_status = %d\n",lynq_get_status);

+    }

+    else

+    {

+        printf("[+UP]: NULL == lynq_get_upgrade_status\n");

+    }

+    

+    printf("[+UP]: input MD5 data:");	

+    //get md5(input)

+	while(fgets(input_md5_data,64,stdin) != NULL)

+	{

+		printf("[+UP]: receive MD5 data:%s\n",input_md5_data);

+        lynq_md5_file_verfy = (int (*)(char* filePath, char* file_md5))dlsym(handle_fota,"lynq_md5_file_verfy");

+        if(NULL != lynq_md5_file_verfy)

+        {

+            //md5 verfy

+            ret = lynq_md5_file_verfy(UPDATA_ADDR, input_md5_data); 

+            printf("[+UP]: MD5 ret = %d\n",ret);

+        }

+        else

+        {

+            printf("[+UP]: NULL == lynq_md5_file_verfy\n");

+        }

+		break;

+	}

+

+    fd_down = open(UPDATA_ADDR,O_RDONLY);

+    if (fd_down < 0) 

+    {

+        printf("[+UP]: open source  error\n");

+        dlclose(handle_fota);

+        return 1;

+    }

+

+    lynq_nand_open = (int (*)(const char *pathname, int flags))dlsym(handle_fota,"lynq_nand_open");

+

+    if(NULL != lynq_nand_open)

+    {

+        //open nanflash

+        fd_target = lynq_nand_open(FLASH_DEV_DELTA,O_RDWR);

+ 

+        if(fd_target < 0)

+        {

+            close(fd_down);

+            printf("+[UA]: open target  error\n");

+            dlclose(handle_fota);

+            return 1;

+        } 

+    }

+    else

+    {

+        printf("NULL == lynq_nand_open\n");

+    }

+

+

+

+    printf("[+UP]: Write data to flash\n");

+    lynq_nand_write = (ssize_t (*)(int fd, void *buf, size_t count))dlsym(handle_fota,"lynq_nand_write");

+    if(NULL != lynq_nand_write)

+    {

+        //get /tmp data(fota)

+        while(( size = read(fd_down,delta_data,READ_BLOCK_SIZE))>0) 

+        {

+            //write nandflash

+            lynq_nand_write(fd_target,delta_data,READ_BLOCK_SIZE);

+        }

+    }

+    else

+    {

+        printf("NULL == lynq_nand_write\n");

+    }

+   

+    printf("[+UP]: Write data to flash success\n");

+    lynq_nand_close = (int (*)(int fd))dlsym(handle_fota,"lynq_nand_close");	

+    if(NULL != lynq_nand_close)

+    {

+        //close

+        lynq_nand_close(fd_target);

+    }

+    close(fd_down);

+

+    printf("+[UA]: Upgrade to start ret:%d\n",ret);

+    if(ret == 0)

+    {

+        lynq_rock_main = (int (*)(int first_run))dlsym(handle_fota,"lynq_rock_main");

+        if(NULL != lynq_rock_main)

+        {

+            //ua start

+            lynq_rock_main(first_run);

+        }

+

+    }

+    printf("+[UA]: Upgrade to end\n");

+    dlclose(handle_fota);

+    return 0;

+

+}

+#else

+int main(int argc,char argv[])

+{

+

+    int ret = 0;

+    int lynq_get_status = 0;

+    char input_md5_data[64];

+    void *handle_fota;

+    char input_order_data[64] = {0};

+    char lynq_fota_data[64] = {0};

+

+    const char *lynq_libpath_fota = "/lib64/liblynq-fota.so";

+ 

+    handle_fota = dlopen(lynq_libpath_fota,RTLD_NOW);

+    if(NULL == handle_fota)

+    {

+        printf("dlopen lynq_libpath_fota fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }   

+

+    lynq_get_upgrade_status = (int (*)(void))dlsym(handle_fota,"lynq_get_upgrade_status");

+    if(NULL != lynq_get_upgrade_status)

+    {

+        //get lynq status

+        lynq_get_status = lynq_get_upgrade_status(); 

+        printf("[+UP]: lynq_get_status = %d\n",lynq_get_status);

+    }

+    else

+    {

+        printf("[+UP]: NULL == lynq_get_upgrade_status\n");

+    }

+    

+    printf("[+UP]: input MD5 data:");

+    //get md5(input)

+    while(fgets(input_md5_data,64,stdin) != NULL)

+    {

+        printf("[+UP]: receive MD5 data:%s\n",input_md5_data);

+        lynq_md5_file_verfy = (int (*)(char* filePath, char* file_md5))dlsym(handle_fota,"lynq_md5_file_verfy");

+        if(NULL != lynq_md5_file_verfy)

+        {

+            //md5 verfy

+            ret = lynq_md5_file_verfy(UPDATA_ADDR, input_md5_data); 

+            printf("[+UP]: MD5 ret = %d\n",ret);

+        }

+        else

+        {

+            printf("[+UP]: NULL == lynq_md5_file_verfy\n");

+        }

+            break;

+        }

+

+    lynq_fota_set_addr_value = (int (*)(char *value,int size))dlsym(handle_fota,"lynq_fota_set_addr_value");

+    if(NULL != lynq_fota_set_addr_value)

+    {

+        if(0 == lynq_fota_set_addr_value(UPDATA_ADDR,16))

+        { 

+            lynq_fota_get_addr_value = (int (*)(char *tmp))dlsym(handle_fota,"lynq_fota_get_addr_value");

+            if(NULL != lynq_fota_get_addr_value)

+            {

+                lynq_fota_get_addr_value(lynq_fota_data);

+                printf("+[UA]: get fota addr:%s\n",lynq_fota_data);

+            }

+            else

+            {

+                printf("+[UA]: get fota addr error\n");

+            }

+        }

+        else

+        {

+            printf("+[UA]: set fota addr error\n");

+            return -1;        

+        }

+

+    }

+

+    sleep(10);

+        

+    printf("+[UA]: Upgrade to start ret:%d\n",ret);

+    if(ret == 0)

+    {

+        lynq_fota_nrestart = (int (*)(void))dlsym(handle_fota,"lynq_fota_nrestart");

+        if(NULL != lynq_fota_nrestart)

+        {

+            //ua start

+            lynq_fota_nrestart();

+        }

+

+    }

+

+    lynq_reboot_device = (void (*)(void))dlsym(handle_fota,"lynq_reboot_device");

+    if(NULL != lynq_reboot_device)

+    {

+        //reboot

+        printf("+[UA]: input reboot order(reboot):\n");

+        while(fgets(input_order_data,64,stdin) != NULL)

+        {

+            if(0 == strncmp(input_order_data,"reboot",6))

+            {

+                lynq_reboot_device();

+            }

+        }

+    }   

+    printf("+[UA]: Upgrade to end\n");

+    

+    dlclose(handle_fota);

+    return 0;

+

+}

+#endif

+

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/lynq-fota-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/lynq-fota-demo.bb
new file mode 100755
index 0000000..eed5f81
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-fota-demo/lynq-fota-demo.bb
@@ -0,0 +1,31 @@
+#inherit externalsrc package
+DESCRIPTION = "lynq-fota demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+
+SRC_URI = "file://lynq-fota-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I. -I./include"
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "lynq-fota-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall lynq-fota-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/lynq-fota-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.cpp
new file mode 100755
index 0000000..ba11973
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.cpp
@@ -0,0 +1,309 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <dlfcn.h>
+#include <sys/types.h>
+#define LYNQ_APN_CHANNEL_MAX 10
+#define LYNQ_PDP_TYPE_MAX_LEN 16
+#define LYNQ_IFACE_NAME_MAX_LEN 50
+#define LYNQ_APN_MAX_LEN 50
+#define LYNQ_APN_TYPE_MAX_LEN 50
+#define LYNQ_PDP_ADDR_MAX_LEN 64
+#define LYNQ_DNS_ADDR_MAX_LEN 64
+#define LYNQ_GETWAYS_ADDR_MAX_LEN 64
+#define LYNQ_POXY_ADDR_MAX_LEN 64
+
+
+void *handle_network;
+void *handle_log;
+
+typedef struct{
+    int gw_sig_valid; /*1 valid,1 invalid*/
+    int rssi;         /* Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
+    int wcdma_sig_valid;/*1 valid,0 invalid*/
+    int rscp;        /* The Received Signal Code Power in dBm multipled by -1.
+                      * Range : 25 to 120
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 25.123, section 9.1.1.1 */
+    int ecno;        /* Valid values are positive integers.  This value is the actual Ec/Io multiplied
+                      * by -10.  Example: If the actual Ec/Io is -12.5 dB, then this response value
+                      * will be 125.*/
+    int lte_sig_valid;/*1 valid,0 invalid*/
+    int rsrp;        /* The current Reference Signal Receive Power in dBm multipled by -1.
+                      * Range: 44 to 140 dBm
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.133 9.1.4 */
+    int rsrq;        /* The current Reference Signal Receive Quality in dB multiplied by -1.
+                      * Range: 20 to 3 dB.
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.133 9.1.7 */
+    int rssnr;       /* The current reference signal signal-to-noise ratio in 0.1 dB units.
+                      * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
+                      * INT_MAX : 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.101 8.1.1 */
+    int nr_sig_valid;/*1 valid,0 invalid*/
+    int ssRsrp;      /* SS(Synchronization Signal) reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int ssRsrq;      /* SS reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int ssSinr;      /* SS signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+    int csiRsrp;     /* CSI reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int csiRsrq;     /* CSI reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int csiSinr;     /* CSI signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+}signalStrength_t;
+
+int (*lynq_network_init)(int);
+int (*lynq_radio_on)(const int data);
+
+typedef struct {
+    int            status;     /* A RIL_DataCallFailCause, 0 which is PDP_FAIL_NONE if no error */
+    int            suggestedRetryTime; /* If status != 0, this fields indicates the suggested retry
+                                           back-off timer value RIL wants to override the one
+                                           pre-configured in FW.
+                                           The unit is miliseconds.
+                                           The value < 0 means no value is suggested.
+                                           The value 0 means retry should be done ASAP.
+                                           The value of INT_MAX(0x7fffffff) means no retry. */
+    int            cid;        /* Context ID, uniquely identifies this call */
+    int            active;     /* 0=inactive, 1=active/physical link down, 2=active/physical link up */
+    char           type[LYNQ_PDP_TYPE_MAX_LEN];       /* One of the PDP_type values in TS 27.007 section 10.1.1.
+                                   For example, "IP", "IPV6", "IPV4V6", or "PPP". If status is
+                                   PDP_FAIL_ONLY_SINGLE_BEARER_ALLOWED this is the type supported
+                                   such as "IP" or "IPV6" */
+    char           ifname[LYNQ_IFACE_NAME_MAX_LEN];     /* The network interface name */
+    char           addresses[LYNQ_PDP_ADDR_MAX_LEN];  /* A space-delimited list of addresses with optional "/" prefix length,
+                                   e.g., "192.0.1.3" or "192.0.1.11/16 2001:db8::1/64".
+                                   May not be empty, typically 1 IPv4 or 1 IPv6 or
+                                   one of each. If the prefix length is absent the addresses
+                                   are assumed to be point to point with IPv4 having a prefix
+                                   length of 32 and IPv6 128. */
+    char           dnses[LYNQ_DNS_ADDR_MAX_LEN];      /* A space-delimited list of DNS server addresses,
+                                   e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".
+                                   May be empty. */
+    char           gateways[LYNQ_GETWAYS_ADDR_MAX_LEN];   /* A space-delimited list of default gateway addresses,
+                                   e.g., "192.0.1.3" or "192.0.1.11 2001:db8::1".
+                                   May be empty in which case the addresses represent point
+                                   to point connections. */
+    char           pcscf[LYNQ_POXY_ADDR_MAX_LEN];    /* the Proxy Call State Control Function address
+                                 via PCO(Protocol Configuration Option) for IMS client. */
+    int            mtu;        /* MTU received from network
+                                   Value <= 0 means network has either not sent a value or
+                                   sent an invalid value */
+} lynq_data_call_response_v11_t;
+void *dlHandle_data;
+int (*lynq_init_data)(int uToken);
+int (*lynq_deinit_data)(void);
+int (*lynq_setup_data_call)(int *);
+int (*lynq_deactive_data_call)(int *);
+int (*lynq_setup_data_call_sp)(int *,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol);
+int (*lynq_get_data_call_list)(int *,lynq_data_call_response_v11_t *dataCallList);
+int (*lynq_wait_data_call_state_change)(int *);
+#if 0
+// void *handle_log;
+void *dlHandle_log;
+void (*lynq_log_configuration_init)(char *);
+void (*lynq_log_configuration_set)(char *, char);
+void (*lynq_log_debug)(const char *, ...);
+#endif
+int init_data_api(void)
+{
+    const char *lynq_libpath_data = "/lib64/liblynq-data.so";
+    dlHandle_data = dlopen(lynq_libpath_data,RTLD_NOW);
+    if(dlHandle_data == NULL)
+    {
+        printf("dlopen dlHandle_data failed: %s", dlerror());
+        return -1;
+    }
+    lynq_init_data = (int(*)(int))dlsym(dlHandle_data,"lynq_init_data");
+    if(NULL == lynq_init_data)
+    {
+        printf("lynq_init_data not defined or exported in %s\r\n", lynq_libpath_data);
+        return -1;
+    }
+    lynq_deinit_data = (int (*)(void))dlsym(dlHandle_data,"lynq_deinit_data");
+    if(NULL == lynq_deinit_data)
+    {
+        printf("lynq_deinit_data dlsym error\n");
+        return -1;
+    }
+    lynq_setup_data_call = (int (*)(int *))dlsym(dlHandle_data,"lynq_setup_data_call");
+    if(NULL == lynq_setup_data_call)
+    {
+        printf("lynq_setup_data_call dlsym error\n");
+         return -1;
+    }
+    lynq_deactive_data_call = (int (*)(int *))dlsym(dlHandle_data,"lynq_deactive_data_call");
+    if(NULL == lynq_deactive_data_call)
+    {   
+        printf("lynq_deactive_data_call dlsym error\n");
+        return -1;
+    }
+    lynq_setup_data_call_sp = (int (*)(int *,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol))dlsym(dlHandle_data,"lynq_setup_data_call_sp");
+    if(NULL == lynq_setup_data_call_sp)
+    {
+       printf("lynq_setup_data_call_sp dlsym error\n");
+       return -1;
+    }
+   
+    lynq_get_data_call_list = (int (*)(int *handle,lynq_data_call_response_v11_t *dataCallList))dlsym(dlHandle_data,"lynq_get_data_call_list");
+    if(NULL == lynq_get_data_call_list)
+    {
+       printf("lynq_get_data_call_list dlsym error\n");
+       return -1;
+    }
+    lynq_get_data_call_list = (int (*)(int *handle,lynq_data_call_response_v11_t *dataCallList))dlsym(dlHandle_data,"lynq_get_data_call_list");
+    if(NULL == lynq_get_data_call_list)
+    {
+        printf("lynq_get_data_call_list dlsym error\n");
+        return -1;
+    }
+    
+    lynq_wait_data_call_state_change = (int (*)(int *handle))dlsym(dlHandle_data,"lynq_wait_data_call_state_change");
+    if(NULL == lynq_wait_data_call_state_change)
+    {
+        printf("lynq_wait_data_call_state_change dlsym error\n");
+        return -1;
+    }
+    return 0;
+}
+
+int init_network_api(void)
+{
+    const char *lynq_libpath_network = "/lib64/liblynq-network.so";
+    handle_network = dlopen(lynq_libpath_network,RTLD_NOW);
+    if(NULL == handle_network)
+    {
+        printf("dlopen lynq_libpath_network fail:%s",dlerror());
+        return -1;
+    }
+    lynq_network_init = (int(*)(int))dlsym(handle_network,"lynq_network_init");
+    if(NULL == lynq_network_init)
+    {
+        printf("lynq_init_network not defined or exported in %s\r\n", lynq_libpath_network);
+        return -1;
+    }
+    lynq_radio_on = (int(*)(const int data))dlsym(handle_network,"lynq_radio_on");
+    if(NULL == lynq_radio_on)
+    {
+        printf("lynq_init_network not defined or exported in %s\r\n", lynq_libpath_network);
+        return -1;
+    }
+    return 0;
+}
+#if 0
+int init_log_api(void)
+{
+    const char *lynq_libpath_log = "/lib64/liblynq-log.so";
+    dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);
+    if(dlHandle_log == NULL)
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        return -1;
+    }
+    lynq_log_configuration_init = (void (*)(char *))dlsym(dlHandle_log,"lynq_log_configuration_init");
+    if(NULL == lynq_log_configuration_init)
+    {
+        printf("lynq_log_configuration_init dlsym error\n");
+        return -1;
+    }
+    lynq_log_configuration_set = (void (*)(char *, char))dlsym(dlHandle_log,"lynq_log_configuration_set");
+    if(NULL == lynq_log_configuration_set)
+    {
+        printf("lynq_log_configuration_set dlsym error\n");
+        return -1;
+    }
+    lynq_log_debug = (void (*)(const char *, ...))dlsym(dlHandle_log,"lynq_log_debug");
+    if(NULL == lynq_log_debug)
+    {
+        printf("lynq_log_debug dlsym error\n");
+        return -1;
+    }
+    return 0;
+}
+#endif
+static int check_network_enable(void)
+{
+    FILE * fp;
+    char data[128] = {0};
+    fp = popen("ping 8.8.8.8 -c1", "r");
+    fgets(data, sizeof(data), fp);
+    printf("%s", data);
+    if(strstr(data, "bytes"))
+    {
+        pclose(fp);
+        return 0;
+    }
+    else
+    {
+        pclose(fp);
+        return -1;
+    }
+}
+int main(void)
+{
+    if(init_data_api())
+    {
+        printf("init_data_api error\n");
+        return -1;
+    }
+    if(init_network_api())
+    {
+        printf("init_network_api error\n");
+        return -1;
+    }
+    sleep(5);
+    system("connmanctl enable gadget");
+    system("connmanctl tether gadget on");
+    int handle = 0;
+    lynq_init_data(123);
+    lynq_network_init(123);
+    usleep(1000*1000);
+    int res = lynq_setup_data_call(&handle);
+    printf("lynq_setup_data_call result code:%d\n",res);
+    int time[3] = {2, 4, 8};
+    for(int i = 0;i < 3;i++)
+    {
+        sleep(time[i]);
+        if(check_network_enable)
+        {
+            res = lynq_radio_on(0);
+            printf("lynq_radio_on 0 res:%d  i:%d\n",res, i);
+            sleep(1);
+            res = lynq_radio_on(1);
+            printf("lynq_radio_on 1 res:%d  i:%d\n",res, i);
+            res = lynq_deactive_data_call(&handle);
+            printf("lynq_deactive_data_call result code:%d  i:%d\n",res, i);
+            usleep(500*1000);
+            res = lynq_setup_data_call(&handle);
+            printf("retry lynq_setup_data_call result code:%d  i:%d\n",res, i);
+        }
+        else
+        {
+            printf("i %d ping is ok\n", i);
+            break;
+        }
+    }
+    #if 0
+    char *log_name = "rndis service";
+    lynq_log_configuration_init(log_name);
+    lynq_log_configuration_set(log_name, 4);
+    if(init_log_api())
+    {
+        printf("init_log_api error\n");
+        return -1;
+    }
+    #endif
+    return 0;
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.service
new file mode 100755
index 0000000..db38c50
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/files/lynq_rndis_service.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=lynq rndis service
+After=lynq_ril_service.service
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/lynq-rndis-service
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/lynq-rndis-service.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/lynq-rndis-service.bb
new file mode 100755
index 0000000..dc99385
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-rndis-service/lynq-rndis-service.bb
@@ -0,0 +1,32 @@
+inherit systemd
+DESCRIPTION = "lynq-rndis-service"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://lynq_rndis_service.cpp file://LICENSE file://lynq_rndis_service.service"
+TARGET_CC_ARCH += "${LDFLAGS}"
+#lei add
+SYSTEMD_SERVICE_${PN} = "lynq_rndis_service.service"
+FILES_${PN} += "${systemd_unitdir}/system/lynq_rndis_service.service"
+#lei add
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "lynq-rndis-service"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	${CXX} -Wall ${LOCAL_C_INCLUDES} lynq_rndis_service.cpp ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/lynq-rndis-service ${D}${bindir}/
+	install -d ${D}${systemd_unitdir}/system/
+	install -m 0644 ${S}/lynq_rndis_service.service ${D}${systemd_unitdir}/system
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/lynq-systime-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/lynq-systime-demo.cpp
new file mode 100755
index 0000000..3e1cfca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/files/lynq-systime-demo.cpp
@@ -0,0 +1,131 @@
+/**@File lynq-systime-demo.c

+*  @Brief :thermal test

+*  @details :

+*  @Author : rita

+*  @Date : 2022-4-27

+*  @Version : V1.0

+*  @copy ritght : Copyright (c) MobileTek

+*/

+

+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <pthread.h>

+#include <sys/types.h>

+#include <unistd.h>

+

+int (*modem_time_enable)(int enable);

+//int (*gnss_time_enable)(int enable);

+//int (*ntp_sync_time)(int enable);

+

+

+int main(int argc,char *argv[])

+{

+    int ret = 0;

+    void *handle_systime;

+    int type;

+    int enable;

+

+    const char *lynq_libpath_systime = "/lib64/liblynq-systime.so";

+ 

+    handle_systime = dlopen(lynq_libpath_systime,RTLD_NOW);

+    if(NULL == handle_systime)

+    {

+        printf("dlopen lynq_libpath_systime fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }   

+

+   if(argc!=3)

+        return -1;

+

+   type = atoi(argv[1]);

+   enable = atoi(argv[2]);

+

+    switch(type)

+    {

+        case 0:

+        {

+            modem_time_enable = (int (*)(int enable))dlsym(handle_systime,"modem_time_enable");

+            if(NULL != modem_time_enable)

+            {

+                ret = modem_time_enable(enable);

+                if(ret == 0)

+                {

+                    printf("modem_time_set!!!\n");

+                }

+                else

+                {

+                    printf("modem_time_enable error, error = %d \n", ret);

+                }

+            }

+            else

+            {

+                printf("modem_time_enable dlsym error!!!\n");

+                exit(EXIT_FAILURE);

+            }

+

+            dlclose(handle_systime);

+

+            break;

+        }

+        case 1:

+        {

+#if 0

+            gnss_time_enable = (int (*)(int enable))dlsym(handle_systime,"gnss_time_enable");

+            if(NULL != gnss_time_enable)

+            {

+                ret = gnss_time_enable(enable);

+                if(ret == 0)

+                {

+                    printf("gnss_time_set!!!\n");

+                }

+                else

+                {

+                    printf("gnss_time_enable error, error = %d \n", ret);

+                }

+            }

+            else

+            {

+                printf("gnss_time_enable dlsym error!!!\n");

+                exit(EXIT_FAILURE);

+            }

+

+            dlclose(handle_systime);

+#endif

+            break;

+        }

+         case 2:

+        {

+#if 0

+            ntp_sync_time = (int (*)(int enable))dlsym(handle_systime,"ntp_sync_time");

+            if(NULL != ntp_sync_time)

+            {

+                ret = ntp_sync_time(enable);

+                if(ret == 0)

+                {

+                    printf("ntp_time_set!!!\n");

+                }

+                else

+                {

+                    printf("ntp_sync_time error, error = %d \n", ret);

+                }

+            }

+            else

+            {

+                printf("ntp_sync_time dlsym error!!!\n");

+                exit(EXIT_FAILURE);

+            }

+

+            dlclose(handle_systime);

+#endif

+            break;

+        }

+        default:

+            break;

+    }

+

+    return 0;

+

+}

+

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/lynq-systime-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/lynq-systime-demo.bb
new file mode 100755
index 0000000..d796a5c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-systime-demo/lynq-systime-demo.bb
@@ -0,0 +1,31 @@
+#inherit externalsrc package
+DESCRIPTION = "lynq-systime demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+
+SRC_URI = "file://lynq-systime-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I. -I./include"
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "lynq-systime-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall lynq-systime-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/lynq-systime-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/lynq-thermal-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/lynq-thermal-demo.cpp
new file mode 100755
index 0000000..4b78ce9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/files/lynq-thermal-demo.cpp
@@ -0,0 +1,99 @@
+/**@File lynq-thermal-demo.c

+*  @Brief :thermal test

+*  @details :

+*  @Author : rita

+*  @Date : 2022-4-14

+*  @Version : V1.0

+*  @copy ritght : Copyright (c) MobileTek

+*/

+

+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <pthread.h>

+#include <sys/types.h>

+#include <unistd.h>

+

+

+#define LYNQ_THM_PATH 256

+

+#define TYPE_PATH_PRE "/sys/class/thermal"

+

+

+

+#define LYNQ_THM_OK 0

+#define LYNQ_THM_OPEN_ERROR -1

+#define LYNQ_THM_READ_ERROR -2

+#define LYNQ_THM_ACCESS_ERROR -3

+

+#define LYNQ_THM_ZONE_KEY "thermal_zone"

+#define LYNQ_THM_COOLER_KEY "cooling_device"

+

+typedef enum {

+    soc_max=0,

+    cpu0,

+    cpu1,

+    cpu2,

+    cpu3,

+    gpu0,

+    gpu1,

+    dramc,

+    mmsys,

+    md_5g,

+    md_4g,

+    md_3g,

+    soc_dram_ntc,

+    pa_5g,

+    pa_4g,

+    rf_ntc,

+    pmic,

+    pmic_vcore,

+    pmic_vpro,

+    pmic_vgpu=19,

+} ZONE_NUM;

+

+

+int (*lynq_get_zone_tmp) (ZONE_NUM num, int *temp);

+ 

+ 

+int main(int argc,char *argv[])

+{

+    int ret = 0;

+    void *handle_thermal;

+    int temp = 0;

+    ZONE_NUM zone = md_5g;

+

+    const char *lynq_libpath_thermal = "/lib64/liblynq-thermal.so";

+ 

+    handle_thermal = dlopen(lynq_libpath_thermal,RTLD_NOW);

+    if(NULL == handle_thermal)

+    {

+        printf("dlopen lynq_libpath_thermal fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }   

+

+    lynq_get_zone_tmp = (int (*)(ZONE_NUM, int*))dlsym(handle_thermal,"lynq_get_zone_tmp");

+    if(NULL != lynq_get_zone_tmp)

+    {

+        ret = lynq_get_zone_tmp(zone, &temp);

+        if(ret == 0)

+        {

+        	printf("temp = %d \n", temp);

+        }

+        else

+        {

+        	printf("get temp error, error = %d \n", ret);

+        }

+    }

+    else

+    {

+        printf("lynq_get_zone_tmp dlsym error!!!\n");

+        exit(EXIT_FAILURE);

+    }

+

+    dlclose(handle_thermal);

+    return 0;

+

+}

+

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/lynq-thermal-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/lynq-thermal-demo.bb
new file mode 100755
index 0000000..de6b669
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/lynq-thermal-demo/lynq-thermal-demo.bb
@@ -0,0 +1,31 @@
+#inherit externalsrc package
+DESCRIPTION = "lynq-thermal demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+
+SRC_URI = "file://lynq-thermal-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I. -I./include"
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "lynq-thermal-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall lynq-thermal-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/lynq-thermal-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/media-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/media-demo.cpp
new file mode 100755
index 0000000..fbc1c4e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/files/media-demo.cpp
@@ -0,0 +1,179 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+#undef LOG_TAG
+#define LOG_TAG "MEDIA_DEMO"
+
+void *dlHandle_media;
+void *dlHandle_log;
+
+
+int (*lynq_get_spk_volume)(int* volume);
+int (*lynq_set_spk_volume)(const int volume);
+int (*lynq_media_play_audio)(const char *path);
+void (*lynq_media_stop_audio)();
+int (*lynq_get_mic_volume)(int* volume);
+int (*lynq_set_mic_volume)(const int volume);
+
+int main(int argc, char const *argv[])
+{
+    int ret = 0;
+    
+    if(argc<4)
+    {
+        printf("media demo should have 2 paramter, audio file path and volumn");
+        exit(EXIT_FAILURE);
+    }
+    
+
+    const char * addr =argv[1];
+    int set_volume = atoi(argv[2]);
+    int get_volume;
+
+    const char *lynqLibPath_Call = "/lib64/liblynq-media.so";
+    const char *lynqLibPath_Log = "/lib64/liblynq-log.so";
+
+    dlHandle_media = dlopen(lynqLibPath_Call, RTLD_NOW);
+    if (dlHandle_media == NULL) 
+    {
+        printf("dlopen dlHandle_media failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    dlHandle_log = dlopen(lynqLibPath_Log, RTLD_NOW);
+    if (dlHandle_log == NULL) 
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }       
+    
+    printf("media play audio!!! addr is %s\n", addr);
+    lynq_media_play_audio = (int(*)(const char *))dlsym(dlHandle_media,"lynq_media_play_audio");
+    if(NULL != lynq_media_play_audio)
+    {
+        ret= lynq_media_play_audio(addr);    
+        if(ret == 0)
+        {
+            printf("media play audio success.\n");            
+        }
+        else
+        { 
+            printf("media play audio error, ret is %d\n",ret);
+            exit(EXIT_FAILURE);
+        }        
+    }
+    else
+    { 
+        printf("lynq_media_play_audio dlsym error\n");
+        exit(EXIT_FAILURE);
+    }
+
+    printf("set speaker volumn, value is %d \n",set_volume);
+    lynq_set_spk_volume = (int (*)(const int volume))dlsym(dlHandle_media,"lynq_set_spk_volume");
+    if(NULL != lynq_set_spk_volume)
+    {
+        ret = lynq_set_spk_volume(set_volume);
+        if(ret == 0)
+        {
+            printf("set speaker volumn success!!! value is %d \n",set_volume);
+        }
+        else
+        { 
+            printf("set speaker volumn error, ret is %d\n",ret);
+        }
+    }
+    else
+    { 
+        printf("lynq_set_spk_volume dlsym error\n");
+    }
+       
+    sleep(1);
+    
+    printf("get speaker volumn!!!\n");
+    lynq_get_spk_volume = (int (*)(int*))dlsym(dlHandle_media,"lynq_get_spk_volume");
+    if(NULL != lynq_get_spk_volume)
+    {
+        ret = lynq_get_spk_volume(&get_volume);     
+        if(ret == 0)
+        {
+            printf("get speaker volumn success!!! value is %d\n",get_volume);
+            if(get_volume!=set_volume)
+            {
+                printf("get speaker volumn error, set value is %d, get value is %d!!!\n",get_volume,set_volume);
+            }
+        }
+        else
+        {
+            printf("get speaker volumn error, ret is %d\n",ret);
+        }        
+        
+        
+    }
+    else
+    { 
+        printf("lynq_get_spk_volume dlsym error\n");
+    }
+         
+    
+    sleep(19);
+    
+    printf("media stop audio!!!\n");
+    lynq_media_stop_audio = (void(*)())dlsym(dlHandle_media,"lynq_media_stop_audio");
+    if(NULL != lynq_media_stop_audio) 
+    {
+        lynq_media_stop_audio();
+        
+        printf("media stop audio success.\n");
+        
+    }
+    else
+    { 
+        printf("lynq_media_stop_audio dlsym error\n");
+        exit(EXIT_FAILURE);
+    }
+
+    printf("set mic volumn, value is %d \n",set_volume);
+    lynq_set_mic_volume = (int (*)(const int volume))dlsym(dlHandle_media,"lynq_set_mic_volume");
+    if(NULL != lynq_set_spk_volume)
+    {
+        set_volume = atoi(argv[3]);
+        ret = lynq_set_mic_volume(set_volume);
+        if(ret == 0)
+        {
+            printf("set mic volumn success!!! value is %d \n",set_volume);
+        }else{
+            printf("set mic volumn error, ret is %d\n",ret);
+        }
+    }else{
+        printf("lynq_set_mic_volume dlsym error\n");
+    }
+       
+    sleep(1);
+    
+    printf("get mic volume!!!\n");
+    lynq_get_mic_volume = (int (*)(int*))dlsym(dlHandle_media,"lynq_get_mic_volume");
+    if(NULL != lynq_get_mic_volume)
+    {
+        ret = lynq_get_mic_volume(&get_volume);     
+        if(ret == 0)
+        {
+            printf("get speaker volumn success!!! value is %d\n",get_volume);
+            if(get_volume!=set_volume)
+            {
+                printf("get mic volumn error, set value is %d, get value is %d!!!\n",get_volume,set_volume);
+            }
+        }else{
+            printf("get mic volumn error, ret is %d\n",ret);
+        }        
+        
+        
+    }else{
+        printf("lynq_get_mic_volume dlsym error\n");
+    }
+    return 0;
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/media-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/media-demo.bb
new file mode 100755
index 0000000..270f5da
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/media-demo/media-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "media demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://media-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "media-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall ${LOCAL_C_INCLUDES} media-demo.cpp ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/media-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/network-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/network-demo.cpp
new file mode 100755
index 0000000..5307c8b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/files/network-demo.cpp
@@ -0,0 +1,505 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <sys/types.h>

+#include <pthread.h>

+#include <unistd.h>

+

+#ifndef LOG_TAG

+#define LOG_TAG "NETWORK_DEMO"

+#endif

+

+void *handle_network;

+void *handle_log;

+

+typedef struct{

+    int gw_sig_valid; /*1 valid,1 invalid*/

+    int rssi;         /* Valid values are (0-31, 99) as defined in TS 27.007 8.5 */

+    int wcdma_sig_valid;/*1 valid,0 invalid*/

+    int rscp;        /* The Received Signal Code Power in dBm multipled by -1.

+                      * Range : 25 to 120

+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.

+                      * Reference: 3GPP TS 25.123, section 9.1.1.1 */

+    int ecno;        /* Valid values are positive integers.  This value is the actual Ec/Io multiplied

+                      * by -10.  Example: If the actual Ec/Io is -12.5 dB, then this response value

+                      * will be 125.*/

+    int lte_sig_valid;/*1 valid,0 invalid*/

+    int rsrp;        /* The current Reference Signal Receive Power in dBm multipled by -1.

+                      * Range: 44 to 140 dBm

+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.

+                      * Reference: 3GPP TS 36.133 9.1.4 */

+    int rsrq;        /* The current Reference Signal Receive Quality in dB multiplied by -1.

+                      * Range: 20 to 3 dB.

+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.

+                      * Reference: 3GPP TS 36.133 9.1.7 */

+    int rssnr;       /* The current reference signal signal-to-noise ratio in 0.1 dB units.

+                      * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).

+                      * INT_MAX : 0x7FFFFFFF denotes invalid value.

+                      * Reference: 3GPP TS 36.101 8.1.1 */

+    int nr_sig_valid;/*1 valid,0 invalid*/

+    int ssRsrp;      /* SS(Synchronization Signal) reference signal received power, multipled by -1.

+                      * Reference: 3GPP TS 38.215.

+                      * Range [44, 140], INT_MAX means invalid/unreported.*/

+    int ssRsrq;      /* SS reference signal received quality, multipled by -1.

+                      * Reference: 3GPP TS 38.215.

+                      * Range [3, 20], INT_MAX means invalid/unreported.*/

+    int ssSinr;      /* SS signal-to-noise and interference ratio.

+                      * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.

+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/

+    int csiRsrp;     /* CSI reference signal received power, multipled by -1.

+                      * Reference: 3GPP TS 38.215.

+                      * Range [44, 140], INT_MAX means invalid/unreported.*/

+    int csiRsrq;     /* CSI reference signal received quality, multipled by -1.

+                      * Reference: 3GPP TS 38.215.

+                      * Range [3, 20], INT_MAX means invalid/unreported.*/

+    int csiSinr;     /* CSI signal-to-noise and interference ratio.

+                      * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.

+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/

+}signalStrength_t;

+

+int (*lynq_network_init)(int);

+int (*lynq_query_operater)(char *OperatorFN,char *OperatorSH,char *MccMnc);

+int (*lynq_query_network_selection_mode)(int *netselMode);

+int (*lynq_set_network_selection_mode)(const char *mode,const char *mccmnc);

+int (*lynq_query_available_network)(char *OperatorFN,char *OperatorSH,char *MccMnc,char *NetStatus);

+int (*lynq_query_registration_state)(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam);

+int (*lynq_query_prefferred_networktype)(int *preNetType);

+int (*lynq_set_prefferred_networktype)(const int preffertype);

+int (*lynq_query_cell_info)(int cellinfo[10],int * realNum);

+int (*lynq_set_unsol_cell_info_listrate)(const int rate);

+int (*lynq_set_band_mode)(const int bandmode);

+int (*lynq_query_available_bandmode)(int availBanMode[]);

+int (*lynq_radio_on)(const int data);

+int (*lynq_query_radio_tech)(int* radioTech);

+int (*lynq_solicited_signal_strength)(signalStrength_t *solSigStren);

+int (*lynq_network_deinit)(void);

+

+int demoStrUpper(char * str)

+{

+    int i=0;

+    while(1)

+    {

+        if(str[i]=='\0')

+        {

+            break;

+        }

+        if(str[i]>='a'&&str[i]<='z')

+        {

+             str[i]=str[i]-32;

+        }

+        i++;

+    }

+    return 0;

+}

+

+int eventQueryOperator()//查询运营商信息demo

+{

+    int res = 0;

+    printf("lynq_query_operater begin");

+    lynq_query_operater = (int(*)(char *OperatorFN,char *OperatorSH,char *MccMnc))dlsym(handle_network,"lynq_query_operater");

+    if(NULL != lynq_query_operater)

+    {

+        char OperatorFN[128]={0};

+        char OperatorSH[128]={0};

+        char MccMnc[128]={0};

+        res = lynq_query_operater(OperatorFN,OperatorSH,MccMnc);

+        if(res == 0)

+        {

+            printf("OperatorFN is %s,OperatorSH is %s,MccMnc is %s\n",OperatorFN,OperatorSH,MccMnc);

+        }else{

+            printf("lynq_query_operater error");

+        }

+    }else{

+        printf("lynq_query_operater dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    printf("lynq_query_operater end");

+    return 0;

+}

+

+int eventQueryNetSelectMode(int* mode)//查询网络选择模式demo。

+{

+    int res = 0;

+    lynq_query_network_selection_mode = (int(*)(int *netselMode))dlsym(handle_network,"lynq_query_network_selection_mode");

+    if(NULL != lynq_query_network_selection_mode)

+    {

+        res = lynq_query_network_selection_mode(mode);

+        if(res == 0)

+        {

+            printf("network selection mode is %d\n",*mode);

+        }else{

+            printf("lynq_query_network_selection_mode error\n");

+        }

+    }else{

+        printf("lynq_query_network_selection_mode dlsym error\n");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+

+int eventSetNetSelectMode(char *mode,char *mccmnc)//设置网络选择模式demo。

+{

+    int res = 0;

+    lynq_set_network_selection_mode = (int(*)(const char *mode,const char* mccmnc))dlsym(handle_network,"lynq_set_network_selection_mode");

+    if(NULL != lynq_set_network_selection_mode)

+    {

+        res = lynq_set_network_selection_mode(mode,mccmnc);

+        if(res == 0)

+        {

+            printf("set network selection mode is %s,mccmnc is %s",mode,mccmnc);

+        }else{

+            printf("lynq_set_network_selection_mode error");

+        }

+    }else{

+        printf("lynq_set_network_selection_mode dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+

+int eventQueryAvailableNetwork()//查询可用网络demo。

+{

+    int res = 0;

+    lynq_query_available_network = (int(*)(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus))dlsym(handle_network,"lynq_query_available_network");

+    if(NULL != lynq_query_available_network)

+    {

+        char OperatorFN[128]={0};

+        char OperatorSH[128]={0};

+        char MccMnc[128]={0};

+        char NetStatus[128]={0};

+        res = lynq_query_available_network(OperatorFN,OperatorSH,OperatorSH,NetStatus);

+        if(res == 0)

+        {

+            printf("FN is %s,SH is %s,mccmnc is %s",OperatorFN,OperatorSH,OperatorSH,NetStatus);

+        }else{

+            printf("lynq_query_available_network error");

+        }

+    }else{

+        printf("lynq_query_available_network dlsym error");

+        exit(EXIT_FAILURE);

+    }

+

+    return 0;

+

+}

+

+int eventQueryRegistrationState(char *type)//查询VOICE/DATA/IMS 的注册状态

+{

+    int res = 0;

+    lynq_query_registration_state = (int(*)(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam))dlsym(handle_network,"lynq_query_registration_state");

+    if(NULL != lynq_query_registration_state)

+    {

+        int regState = 0;

+        int imsRegState = 0;

+        char CID[128]={0};

+        char LAC[128]={0};

+        int netType = 0;

+        int radioTechFam = 0;

+

+        res = lynq_query_registration_state(type,&regState,&imsRegState,LAC,CID,&netType,&radioTechFam);

+        if(res == 0)

+        {

+            demoStrUpper(type);

+            printf("upper str is %s\n",type);

+            if(!strcmp(type,"VOICE")){

+                printf("registration state is %d",regState);

+            }else if(!strcmp(type,"DATA")){

+                printf("registration state is %d,LAC is %s,CID is %s,network type is %d",regState,LAC,CID,netType);

+            }else if(!strcmp(type,"IMS")){

+                printf("ims registration state is %d,radio tech family is %d",imsRegState,radioTechFam);

+            }else{

+                printf("--------->[%s,%d] query ims registration state about voice, data, and ims!!! \n",__FUNCTION__,__LINE__);

+                return -1;

+            }

+        }else{

+            printf("lynq_query_registration_state error");

+        }

+    }else{

+        printf("lynq_query_registration_state dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+

+int eventQueryPrefferredNetworkType(int* pretype)//查询首选网络类型。

+{

+    int res = 0;

+    lynq_query_prefferred_networktype = (int(*)(int *preNetType))dlsym(handle_network,"lynq_query_prefferred_networktype");

+    if(NULL != lynq_query_prefferred_networktype)

+    {

+        res = lynq_query_prefferred_networktype(pretype);

+        if(res == 0)

+        {

+            printf("prefferred networktype is %d\n",pretype);

+        }else{

+            printf("lynq_query_prefferred_networktype error");

+        }

+    }else{

+        printf("lynq_query_prefferred_networktype dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventSetPrefferredNetworkType(int type)//设置首选网络类型。

+{

+    int res = 0;

+    lynq_set_prefferred_networktype = (int(*)(const int preffertype))dlsym(handle_network,"lynq_set_prefferred_networktype");

+    if(NULL != lynq_set_prefferred_networktype)

+    {

+        res = lynq_set_prefferred_networktype(type);

+        if(res == 0)

+        {

+            printf("set prefferred networktype is %d\n",type);

+        }else{

+            printf("lynq_set_prefferred_networktype error\n");

+        }

+    }else{

+        printf("lynq_set_prefferred_networktype dlsym error\n");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventQueryCellInfo()//查询小区信息demo。

+{

+    int res = 0;

+    lynq_query_cell_info = (int(*)(int cellinfo[10],int * realNum))dlsym(handle_network,"lynq_query_cell_info");

+    if(NULL != lynq_query_cell_info)

+    {

+        int cellinfo[10] = {0};

+        int realNum =0;//真实返回cell 的个数。

+        res = lynq_query_cell_info(cellinfo,&realNum);

+        if(res == 0)

+        {

+            for(int i = 0; i<10;i++)

+            {

+                printf("cellinfo[%d]: %d",i,cellinfo[i]);

+            }

+        }else{

+            printf("lynq_query_cell_info error");

+        }

+    }else{

+        printf("lynq_query_cell_info dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventSetUnsolCellInfoListrate(int rate)//设置小区信息主动上报频率demo。

+{

+    int res = 0;

+    lynq_set_unsol_cell_info_listrate = (int(*)(const int rate))dlsym(handle_network,"lynq_set_unsol_cell_info_listrate");

+    if(NULL != lynq_set_unsol_cell_info_listrate)

+    {

+        res = lynq_set_unsol_cell_info_listrate(rate);

+        if(res == 0)

+        {

+            printf("rate is %d",rate);

+        }else{

+            printf("lynq_set_unsol_cell_info_listrate error");

+        }

+    }else{

+        printf("lynq_set_unsol_cell_info_listrate dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventSetBandMode(int mode)//设置band mode demo。

+{

+    int res = 0;

+    lynq_set_band_mode = (int(*)(const int bandmode))dlsym(handle_network,"lynq_set_band_mode");

+    if(NULL != lynq_set_band_mode)

+    {

+        res = lynq_set_band_mode(mode);

+        if(res == 0)

+        {

+            printf("band mode is %d",mode);

+        }else{

+            printf("lynq_set_band_mode error");

+        }

+    }else{

+        printf("lynq_set_band_mode dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+

+}

+int eventQueryAvailableBandmode(int bandmode[])//查询band mode demo。

+{

+    int res = 0;

+    lynq_query_available_bandmode = (int(*)(int availBanMode[]))dlsym(handle_network,"lynq_query_available_bandmode");

+    if(NULL != lynq_query_available_bandmode)

+    {

+        res = lynq_query_available_bandmode(bandmode);

+        if(res == 0)

+        {

+            for(int i =1;i<=bandmode[0];i++)

+            {

+                printf("%d,",bandmode[i]);

+            }

+        }else{

+            printf("lynq_query_available_bandmode error");

+        }

+    }else{

+        printf("lynq_query_available_bandmode dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventRadioOn(int mode)//开启或者关闭无线电 demo。

+{

+    int res = 0;

+    lynq_radio_on = (int(*)(const int data))dlsym(handle_network,"lynq_radio_on");

+    if(NULL != lynq_radio_on)

+    {

+        res = lynq_radio_on(mode);

+        if(res == 0)

+        {

+            printf("radio mode is %d",mode);

+        }else{

+            printf("lynq_radio_on error");

+        }

+    }else{

+        printf("lynq_radio_on dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+int eventQueryRadioTech(int* radioTech)//查询无线电技术类型(3GPP/3GPP2)demo。

+{

+    int res = 0;

+    lynq_query_radio_tech = (int(*)(int* radioTech))dlsym(handle_network,"lynq_query_radio_tech");

+    if(NULL != lynq_query_radio_tech)

+    {

+        res = lynq_query_radio_tech(radioTech);

+        if(res == 0)

+        {

+            printf("radio mode is %d",radioTech);

+        }else{

+            printf("lynq_query_radio_tech error");

+        }

+    }else{

+        printf("lynq_query_radio_tech dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+

+int eventSolicitedSignalStrength()//查询信号强度demo。

+{

+    int res = 0;

+    lynq_solicited_signal_strength = (int(*)(signalStrength_t *solSigStren))dlsym(handle_network,"lynq_solicited_signal_strength");

+    if(NULL != lynq_solicited_signal_strength)

+    {

+        signalStrength_t msg;

+        res = lynq_solicited_signal_strength(&msg);

+        if(res == 0)

+        {

+            printf("test sss 006\n");

+            printf("gw_sig_valid=%d\n", msg.gw_sig_valid);

+            printf("rssi=%d\n", msg.rssi);

+            printf("wcdma_sig_valid=%d\n", msg.wcdma_sig_valid);

+            printf("rscp=%d\n", msg.rscp);

+            printf("ecno=%d\n", msg.ecno);

+            printf("lte_sig_valid=%d\n", msg.lte_sig_valid);

+            printf("rsrp=%d\n", msg.rsrp);

+            printf("rsrq=%d\n", msg.rsrq);

+            printf("rssnr=%d\n", msg.rssnr);

+            printf("nr_sig_valid=%d\n", msg.nr_sig_valid);

+            printf("ssRsrp=%d\n", msg.ssRsrp);

+            printf("ssRsrq=%d\n", msg.ssRsrq);

+            printf("ssSinr=%d\n", msg.ssSinr);

+            printf("csiRsrp=%d\n", msg.csiRsrp);

+            printf("csiRsrq=%d\n", msg.csiRsrq);

+            printf("csiSinr=%d\n", msg.csiSinr);

+        }else{

+            printf("lynq_solicited_signal_strength error");

+        }

+    }else{

+        printf("lynq_solicited_signal_strength dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+    return 0;

+}

+

+int eventNetworkDeinit(void)

+{

+    int res = 0;

+    lynq_network_deinit = (int(*)(void))dlsym(handle_network,"lynq_network_deinit");

+    if(NULL != lynq_network_deinit)

+    {

+        res = lynq_network_deinit();

+        if(res == 0)

+        {

+            printf("network server deinit");

+        }else{

+            printf("lynq_network_deinit error");

+        }

+    }else{

+        printf("lynq_network_deinit dlsym error");

+        exit(EXIT_FAILURE);

+    }

+}

+

+int main(int argc, char const *argv[])

+{

+    printf("--------->[%s,%d] start \n",__FUNCTION__,__LINE__);

+

+    int ret = 0;

+    int token = 123; //唯一标识符

+    const char *lynq_libpath_network = "/lib64/liblynq-network.so";

+    const char *lynq_libpath_log = "/lib64/liblynq-log.so";

+

+    handle_network = dlopen(lynq_libpath_network,RTLD_NOW);

+    if(NULL == handle_network)

+    {

+        printf("dlopen lynq_libpath_network fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }

+    handle_log = dlopen(lynq_libpath_log,RTLD_NOW);

+    if(NULL == handle_log)

+    {

+        printf("dlopen lynq_libpath_log fail:%s",dlerror());

+        exit(EXIT_FAILURE);

+    }

+

+    lynq_network_init = (int(*)(int))dlsym(handle_network,"lynq_network_init");

+    if(NULL == lynq_network_init)

+    {

+        printf("lynq_init_network not defined or exported in %s\r\n", lynq_libpath_network);

+        exit(EXIT_FAILURE);

+    }

+

+    ret = lynq_network_init(token);//初始化Network服务

+    if(ret != 0)

+    {

+        printf("lynq_network_init defalut");

+    }

+    dlerror();

+

+    sleep(5);//等待modem 准备好。

+

+    int pretype;

+    eventQueryNetSelectMode(&pretype);//查询网络选择模式。

+    printf("pretype = %d\r\n",pretype);

+    sleep(5);

+    char mode[32] = {};

+    char mccmnc[32] = {};

+    sprintf(mode,"Manual",strlen("Manual"));

+    sprintf(mccmnc,"46000",strlen("46000"));

+    eventSetNetSelectMode(mode,mccmnc);//设置网络选择模式为手动,以移动46000为例。

+    printf("mode = %s\r\n",mode);

+    printf("mccmnc = %s\r\n",mccmnc);

+

+    sleep(5);

+    eventQueryNetSelectMode(&pretype);//查询网络选择模式。

+    printf("pretype = %d\r\n",pretype);

+    int type = -1;

+    eventQueryPrefferredNetworkType(&type);

+    printf("Pre Network type:%d",type);

+    eventSetPrefferredNetworkType(9);

+    while(1){

+        sleep(1);

+    }

+    return 0;

+}

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/network-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/network-demo.bb
new file mode 100755
index 0000000..45b91fe
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/network-demo/network-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "network demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+
+SRC_URI = "file://network-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "network-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall network-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/rtp-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/rtp-demo.cpp
new file mode 100755
index 0000000..e908c1a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/files/rtp-demo.cpp
@@ -0,0 +1,136 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <dlfcn.h>

+#include <pthread.h>

+#include <sys/types.h>

+#include <unistd.h>

+

+#undef LOG_TAG

+#define LOG_TAG "RTP_DEMO"

+

+void *dlHandle_rtp;

+void *dlHandle_log;

+

+typedef enum{

+    RTP_CLIENT = 0,     

+    RTP_SERVER =1,

+}LYNQ_Rtp_Mode;

+

+int (*lynq_set_rtp_mode_media_play)(const LYNQ_Rtp_Mode rtp_mode);

+int (*lynq_set_rtp_ip_media_play)(LYNQ_Rtp_Mode rtp_mode,const char* ip,const int ip_length);

+int (*lynq_set_rtp_port_media_play)(LYNQ_Rtp_Mode rtp_mode,const int port);

+int (*lynq_set_rtp_param_media_play)(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency);

+int (*lynq_start_rtp_server_media_play)(void);

+int (*lynq_stop_rtp_server_media_play)(void);

+

+int main(int argc, char *argv[])

+{

+    printf("[LYNQ_RTP_DEMO]--------->[%s,%d] start",__FUNCTION__,__LINE__);

+

+    int ret =0 ;

+    const char *lynq_libpath_rtp = "/lib64/liblynq-rtp.so";

+    const char *lynq_libpath_log = "/lib64/liblynq-log.so";

+

+

+    dlHandle_rtp = dlopen(lynq_libpath_rtp,RTLD_NOW);

+    if(dlHandle_rtp == NULL)

+    {

+        printf("dlopen dlHandle_rtp failed: %s", dlerror());

+        exit(EXIT_FAILURE);

+    }

+    dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);

+    if(dlHandle_log == NULL)

+    {

+        printf("dlopen dlHandle_log failed: %s", dlerror());

+        exit(EXIT_FAILURE);

+    }

+

+    lynq_set_rtp_mode_media_play = (int(*)(const LYNQ_Rtp_Mode rtp_mode))dlsym(dlHandle_rtp,"lynq_set_rtp_mode_media_play");

+    if(NULL == lynq_set_rtp_mode_media_play)

+    {

+        printf("lynq_set_rtp_mode_media_play not defined or exported in %s\r\n", lynq_libpath_rtp);

+        exit(EXIT_FAILURE);

+    }

+    

+    ret = lynq_set_rtp_mode_media_play(RTP_CLIENT);//初始设置 必须在第一步执行

+

+

+    sleep(1);

+    if(ret == 0)

+    {

+        printf("set rtp mode success!!!\n");

+    }

+    else

+    {

+        printf("set rtp mode fail!!!\n");

+        return -1;

+    }

+

+    lynq_set_rtp_ip_media_play = (int (*)(LYNQ_Rtp_Mode ,const char* ip,const int length))dlsym(dlHandle_rtp,"lynq_set_rtp_ip_media_play");

+    if(NULL != lynq_set_rtp_ip_media_play)

+    {

+        ret = lynq_set_rtp_ip_media_play(RTP_CLIENT,"127.0.0.1",strlen("127.0.0.1"));//默认APN 参数拨号上网。

+        if(ret == 0)

+        {

+            printf("set ip success!!!\n");

+        }else{

+            printf("set ip error\n");

+        }

+    }else{

+        printf("lynq_set_rtp_ip_media_play dlsym error\n");

+    }

+

+    //set

+    lynq_set_rtp_port_media_play = (int (*)(LYNQ_Rtp_Mode rtp_mode,const int port))dlsym(dlHandle_rtp,"lynq_set_rtp_port_media_play");

+    if(NULL != lynq_set_rtp_port_media_play)

+    {

+        ret = lynq_set_rtp_port_media_play(RTP_CLIENT,5555);

+        if(ret == 0)

+        {

+            printf("lynq_set_rtp_port_media_play success!!!\n");

+        }else{

+            

+            printf("lynq_set_rtp_port_media_play error\n");

+        }

+    }else{

+        printf("lynq_set_rtp_port_media_play dlsym error\n");

+    }

+

+

+    printf("start lynq_set_rtp_param_media_play handle_1");

+

+    lynq_set_rtp_param_media_play = (int (*)(LYNQ_Rtp_Mode rtp_mode,char *file_address,const int clock_rate,const int channels,const int latency))dlsym(dlHandle_rtp,"lynq_set_rtp_param_media_play");

+    if(NULL != lynq_set_rtp_param_media_play)

+    {   

+        ret = lynq_set_rtp_param_media_play(RTP_CLIENT,"/data/ring.wav",8000,1,400);

+        if(ret == 0)

+        {

+            printf("lynq_set_rtp_param_media_play success!!!\n");

+        }else{

+            printf("lynq_set_rtp_param_media_play error\n");

+        }

+    }else{

+        printf("lynq_set_rtp_param_media_play dlsym error\n");

+    }

+

+    printf("start lynq_set_rtp_param_media_play handle_2\n");

+

+

+    lynq_start_rtp_server_media_play = (int (*)(void))dlsym(dlHandle_rtp,"lynq_start_rtp_server_media_play");

+    if(NULL != lynq_start_rtp_server_media_play)

+    {

+        ret = lynq_start_rtp_server_media_play();

+        if(ret == 0)

+        {

+            printf("start rtp server success!!!\n");

+        }else{

+            printf("start rtp server error\n");

+        }

+    }else{

+        printf("lynq_start_rtp_server_media_play dlsym error\n");

+    }

+    sleep(5);

+    return 0;

+

+}

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/rtp-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/rtp-demo.bb
new file mode 100755
index 0000000..02671c7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/rtp-demo/rtp-demo.bb
@@ -0,0 +1,29 @@
+#inherit externalsrc package
+DESCRIPTION = "rtp demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://rtp-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "rtp-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall rtp-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+    install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/security-storage-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/security-storage-demo.cpp
new file mode 100755
index 0000000..e34d24d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/files/security-storage-demo.cpp
@@ -0,0 +1,424 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <tee_client_api.h>
+#include <ta_storage.h>
+#include <tee_api_defines.h>
+
+#define TEEC_OPERATION_INITIALIZER {}
+
+static TEEC_Result fs_open(TEEC_Session *sess, void *id, uint32_t id_size,
+			   uint32_t flags, uint32_t *obj, uint32_t storage_id)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	TEEC_Result res = TEEC_ERROR_GENERIC;
+	uint32_t org = 0;
+
+	op.params[0].tmpref.buffer = id;
+	op.params[0].tmpref.size = id_size;
+	op.params[1].value.a = flags;
+	op.params[1].value.b = 0;
+	op.params[2].value.a = storage_id;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
+					 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
+					 TEEC_NONE);
+
+	res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_OPEN, &op, &org);
+
+	if (res == TEEC_SUCCESS)
+		*obj = op.params[1].value.b;
+
+	return res;
+}
+
+static TEEC_Result fs_create(TEEC_Session *sess, void *id, uint32_t id_size,
+			     uint32_t flags, uint32_t attr, void *data,
+			     uint32_t data_size, uint32_t *obj,
+			     uint32_t storage_id)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	TEEC_Result res = TEEC_ERROR_GENERIC;
+	uint32_t org = 0;
+
+	op.params[0].tmpref.buffer = id;
+	op.params[0].tmpref.size = id_size;
+	op.params[1].value.a = flags;
+	op.params[1].value.b = 0;
+	op.params[2].value.a = attr;
+	op.params[2].value.b = storage_id;
+	op.params[3].tmpref.buffer = data;
+	op.params[3].tmpref.size = data_size;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
+					 TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
+					 TEEC_MEMREF_TEMP_INPUT);
+
+	res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE, &op, &org);
+
+	if (res == TEEC_SUCCESS)
+		*obj = op.params[1].value.b;
+
+	return res;
+}
+
+static TEEC_Result fs_create_overwrite(TEEC_Session *sess, void *id,
+				       uint32_t id_size, uint32_t storage_id)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	TEEC_Result res = TEEC_ERROR_GENERIC;
+	uint32_t org = 0;
+
+	op.params[0].tmpref.buffer = id;
+	op.params[0].tmpref.size = id_size;
+	op.params[1].value.a = storage_id;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
+					 TEEC_VALUE_INPUT, TEEC_NONE,
+					 TEEC_NONE);
+
+	res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CREATE_OVERWRITE, &op, &org);
+
+	return res;
+}
+
+static TEEC_Result fs_close(TEEC_Session *sess, uint32_t obj)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	uint32_t org = 0;
+
+	op.params[0].value.a = obj;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
+					 TEEC_NONE, TEEC_NONE);
+
+	return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_CLOSE, &op, &org);
+}
+
+static TEEC_Result fs_read(TEEC_Session *sess, uint32_t obj, void *data,
+			   uint32_t data_size, uint32_t *count)
+{
+	TEEC_Result res = TEEC_ERROR_GENERIC;
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	uint32_t org = 0;
+
+	op.params[0].tmpref.buffer = data;
+	op.params[0].tmpref.size = data_size;
+	op.params[1].value.a = obj;
+	op.params[1].value.b = 0;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
+					 TEEC_VALUE_INOUT, TEEC_NONE,
+					 TEEC_NONE);
+
+	res = TEEC_InvokeCommand(sess, TA_STORAGE_CMD_READ, &op, &org);
+
+	if (res == TEEC_SUCCESS)
+		*count = op.params[1].value.b;
+
+	return res;
+}
+
+static TEEC_Result fs_write(TEEC_Session *sess, uint32_t obj, void *data,
+			    uint32_t data_size)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	uint32_t org = 0;
+
+	op.params[0].tmpref.buffer = data;
+	op.params[0].tmpref.size = data_size;
+	op.params[1].value.a = obj;
+	op.params[1].value.b = 0;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
+					 TEEC_VALUE_INPUT, TEEC_NONE,
+					 TEEC_NONE);
+
+	return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_WRITE, &op, &org);
+}
+
+static TEEC_Result fs_seek(TEEC_Session *sess, uint32_t obj, int32_t offset,
+			   int32_t whence)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	uint32_t org = 0;
+
+	op.params[0].value.a = obj;
+	op.params[0].value.b = *(uint32_t *)&offset;
+	op.params[1].value.a = whence;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_VALUE_INOUT,
+					 TEEC_NONE, TEEC_NONE);
+
+	return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_SEEK, &op, &org);
+}
+
+static TEEC_Result fs_unlink(TEEC_Session *sess, uint32_t obj)
+{
+	TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+	uint32_t org = 0;
+
+	op.params[0].value.a = obj;
+
+	op.paramTypes = TEEC_PARAM_TYPES(TEEC_VALUE_INPUT, TEEC_NONE,
+					 TEEC_NONE, TEEC_NONE);
+
+	return TEEC_InvokeCommand(sess, TA_STORAGE_CMD_UNLINK, &op, &org);
+}
+
+int example_read ()
+{
+    TEEC_Context teec_ctx;
+    TEEC_Session sess = {};
+    TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+    TEEC_Result res = TEEC_ERROR_GENERIC;
+    TEEC_UUID uuid = TA_STORAGE_UUID;
+    uint32_t org = 0;
+    uint32_t obj_id = 0;
+    uint32_t orig = 0;
+    char buff[128] = {0};
+    uint32_t count = 0;
+    
+    TEEC_InitializeContext(NULL, &teec_ctx);
+    TEEC_OpenSession(&teec_ctx, &sess, &uuid,
+                                TEEC_LOGIN_PUBLIC, NULL, NULL, &orig);
+
+    strcpy(buff, "abc");
+    op.params[0].tmpref.buffer = buff;
+    op.params[0].tmpref.size = 3;
+    op.params[1].value.a = TEE_DATA_FLAG_ACCESS_WRITE |
+			TEE_DATA_FLAG_ACCESS_READ;
+    op.params[1].value.b = 0;
+    op.params[2].value.a = TEE_STORAGE_PRIVATE;
+
+    op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_INPUT,
+                     TEEC_VALUE_INOUT, TEEC_VALUE_INPUT,
+                     TEEC_NONE);
+
+    res = TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_OPEN, &op, &org);
+
+    if (res == TEEC_SUCCESS)
+        obj_id = op.params[1].value.b;
+    else
+    {
+    TEEC_CloseSession(&sess);
+    TEEC_FinalizeContext(&teec_ctx);
+    
+          return -1;
+    }
+    op = TEEC_OPERATION_INITIALIZER;
+
+    op.params[0].tmpref.buffer = buff;
+    op.params[0].tmpref.size = sizeof(buff);
+    op.params[1].value.a = obj_id;
+    op.params[1].value.b = 0;
+    
+    op.paramTypes = TEEC_PARAM_TYPES(TEEC_MEMREF_TEMP_OUTPUT,
+    					 TEEC_VALUE_INOUT, TEEC_NONE,
+    					 TEEC_NONE);
+    
+    res = TEEC_InvokeCommand(&sess, TA_STORAGE_CMD_READ, &op, &org);
+    
+    if (res == TEEC_SUCCESS)
+        count = op.params[1].value.b;
+    else
+        count = -1;
+    
+    TEEC_CloseSession(&sess);
+    TEEC_FinalizeContext(&teec_ctx);
+    return count;
+}
+
+
+void usage(char *program);
+
+void usage(char *program)
+{
+	printf("Usage: %s <options> [content]\n", program);
+	printf("\n");
+	printf("options:\n");
+	printf("\t-c <command>       Security Storage commands in [create, read, write, delete]\n");
+	printf("\t-n <object_name>   the name of the storage object, less than 64\n");
+	printf("\t-p <pos>           the pos to seek, valid only when the command is read or write\n");
+	printf("\t[content]          the content to be write, used only when the command is create or write\n");
+	printf("\n");
+}
+
+int main(int argc, char *argv[])
+{
+	int opt = 0;
+	int ret = 0;
+	char * command = NULL;
+	char * object_name = NULL;
+	char * pos_str = NULL;
+	char * content = NULL;
+
+    uint32_t orig = 0;
+    uint32_t object_id = 0;
+    TEEC_Context teec_ctx;
+    TEEC_Session sess = {};
+    TEEC_Operation op = TEEC_OPERATION_INITIALIZER;
+    TEEC_Result res = TEEC_ERROR_GENERIC;
+    TEEC_UUID uuid = TA_STORAGE_UUID;
+
+    char buff[512] = {0};
+    uint32_t count = 0;
+
+    if (argc <= 1)
+    {
+        usage(argv[0]);
+		return -1;
+    }
+
+
+	while ((opt = getopt(argc, argv, "c:n:p:h")) != -1)
+	{
+		switch (opt) {
+		case 'c':
+			command = optarg;
+			printf("command :%s\n", command);
+			break;
+		case 'n':
+			object_name = optarg;
+			printf("object name:%s\n", object_name);
+			break;
+		case 'p':
+			pos_str = optarg;
+			printf("pos:%s\n", pos_str);
+			break;
+		case 'h':
+			usage(argv[0]);
+			return 0;
+		default:
+			usage(argv[0]);
+			return -1;
+ 		}
+	}
+
+	if (NULL == command || NULL == object_name) {
+		usage(argv[0]);
+		return -1;
+	}
+
+	if (optind < argc)
+	{
+		content = argv[optind];
+		printf("content: %s\n", content);
+	}
+
+    
+    res = TEEC_InitializeContext(NULL, &teec_ctx);
+	if (TEEC_SUCCESS != res)
+	{
+		return -1;
+	}
+
+    res = TEEC_OpenSession(&teec_ctx, &sess, &uuid,
+                                TEEC_LOGIN_PUBLIC, NULL, NULL, &orig);
+	if (TEEC_SUCCESS != res)
+	{
+        TEEC_FinalizeContext(&teec_ctx);
+		return -1;
+	}
+
+	if (strcmp(command, "create") == 0) 
+	{
+		res = fs_create(&sess, object_name, strlen(object_name),
+				TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ, 0,
+				content, NULL == content ? 0 : strlen(content),
+			    &object_id, TEE_STORAGE_PRIVATE);
+		if (TEEC_SUCCESS != res)
+			ret = -1;
+	}
+	else 
+	{
+		res = fs_open(&sess, object_name, strlen(object_name), 
+				TEE_DATA_FLAG_ACCESS_WRITE | TEE_DATA_FLAG_ACCESS_READ |TEE_DATA_FLAG_ACCESS_WRITE_META,
+				&object_id, TEE_STORAGE_PRIVATE);
+		if (TEEC_SUCCESS == res)
+		{
+			if (NULL != pos_str && (strcmp(command, "read") == 0  || strcmp(command, "write") == 0))
+			{
+				count = atoi(pos_str);
+				if (count < 0)
+				{
+					printf("bad pos [%d]\n", count);
+					ret = -1;
+				}
+				else
+				{
+					res = fs_seek( &sess, object_id, count, 0);
+					if (TEEC_SUCCESS != res)
+						ret = -1;
+				}
+			}
+			if (ret == -1)
+			{
+				printf("seek pos [%d]  fail\n", count);
+			}
+			else if (strcmp(command, "read") == 0) 
+			{
+				count = 0;
+				res = fs_read(&sess, object_id, buff, 512, &count);
+				if (TEEC_SUCCESS == res)
+				{
+					buff[count] = '\0';
+					printf("read %d data: [ %s ]\n", count, buff);
+				}
+				else
+				{
+					printf("read %s fail\n", object_name);
+					ret = -1;
+				}
+			}
+			else if (strcmp(command, "write") == 0 && NULL != content ) 
+			{
+				res = fs_write(&sess, object_id, content, strlen(content));
+				if (TEEC_SUCCESS == res)
+				{
+					printf("write data success\n");
+				}
+				else
+				{
+					printf("write %s fail [%d]\n", object_name, res);
+					ret = -1;
+				}
+			}
+			else if (strcmp(command, "delete") == 0) 
+			{
+				res = fs_unlink(&sess, object_id);
+				if (TEEC_SUCCESS == res)
+				{
+					printf("delete object %s success\n", object_name);
+				}
+				else
+				{
+					printf("delete object %s fail\n", object_name);
+					ret = -1;
+				}
+			}
+			else
+			{
+				printf("unkown command [ %s ]\n", command);
+				ret = -1;
+			}
+		}
+		else
+		{
+		    printf("object [%s] is not exist\n", object_name);
+			ret = -1;
+		}
+
+	}
+
+	TEEC_CloseSession(&sess);
+	TEEC_FinalizeContext(&teec_ctx);
+
+	return ret;
+}
+
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/security-storage-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/security-storage-demo.bb
new file mode 100755
index 0000000..ae7ed57
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/security-storage-demo/security-storage-demo.bb
@@ -0,0 +1,55 @@
+#inherit externalsrc package
+inherit optee-build
+DESCRIPTION = "security storage demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://security-storage-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+PLATFORM_TYPE = "${@d.getVar('TARGET_PLATFORM', True)[0:3]+'xxx'}"
+
+LOCAL_C_INCLUDES += " -I${WORKDIR}/../../optee-client/3.2.0-${PR}/out/export/include/"
+LOCAL_C_INCLUDES += " -I${TOPDIR}/../src/bsp/trustzone/optee/optee_test/${PLATFORM_TYPE}/ta/include/"
+LOCAL_C_INCLUDES += " -I${TOPDIR}/../src/bsp/trustzone/optee/optee_os/${PLATFORM_TYPE}/3.2.0/lib/libutee/include/"
+
+LOCAL_LIBS += "-L${WORKDIR}/../../optee-client/3.2.0-${PR}/out/export/lib -lteec"
+
+DEPENDS += "optee-client"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "security-storage-demo"
+S = "${WORKDIR}"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	echo "S --- ${S}"
+	echo "TARGET_PREFIX --- ${TARGET_PREFIX}"
+	echo "TEE_ARCH --- ${TEE_ARCH}"
+	echo "STAGING_DIR_HOST --- ${STAGING_DIR_HOST}"
+	echo "prefix --- ${prefix}"
+	echo "PLATFORM_TYPE --- ${PLATFORM_TYPE}"
+	echo "TMPDIR --- ${TMPDIR}"
+	echo "PACKAGE_ARCH --- ${PACKAGE_ARCH}"
+	echo "TARGET_OS --- ${TARGET_OS}"
+	echo "PN --- ${PN}"
+	echo "PV --- ${PV}"
+	echo "PR --- ${PR}"
+	echo "WORKDIR --- ${WORKDIR}"
+	echo "TARGET_PLATFORM --- ${TARGET_PLATFORM}"
+	echo "LOCAL_C_INCLUDES --- ${LOCAL_C_INCLUDES}"
+	echo "CXX --- ${CXX}"
+	echo "LOCAL_LIBS --- ${LOCAL_LIBS}"
+	echo "TOPDIR --- ${TOPDIR}"
+	${CXX} -Wall ${LOCAL_C_INCLUDES} security-storage-demo.cpp ${LOCAL_LIBS} -o ${EXECUTABLE}
+
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/security-storage-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/LICENSE
new file mode 100644
index 0000000..1b15bd2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/LICENSE
@@ -0,0 +1,31 @@
+opyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/Makefile b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/Makefile
new file mode 100644
index 0000000..08db144
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/Makefile
@@ -0,0 +1,4 @@
+subsystem:
+	cd src && $(MAKE)
+clean:
+	rm -f ./src*.o ./src*.d
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/Makefile b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/Makefile
new file mode 100644
index 0000000..978e8d3
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/Makefile
@@ -0,0 +1,21 @@
+ifneq ($(CROSS_COMPILE),)
+CROSS-COMPILE:=$(CROSS_COMPILE)
+endif
+SRC  = $(wildcard *.c)
+OBJ  = $(patsubst %.c,%.o,$(SRC))
+TAR  = set_alarm
+
+#CC:=/home/jinyu/Xilinx/SDK/2017.4/gnu/aarch64/lin/aarch64-linux/bin/aarch64-linux-gnu-gcc
+#CC   = gcc
+#CC:=/home/paulfrank/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc
+#CFLAGS = -W -g
+#CFLAGS += -I $(shell pwd)
+#LDFLAGS := -lpthread -lxml2 -ludev -lutil 
+
+$(TAR):$(OBJ)
+	$(CC) $^ -o $@ $(LDFLAGS)
+	mv ./set_alarm ../
+%.o : %.c 
+	$(CC) $(CFLAGS) $< -c -o $@
+	
+.PHONY:
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/main.c b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/main.c
new file mode 100644
index 0000000..77b22df
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/files/src/main.c
@@ -0,0 +1,169 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<dlfcn.h>
+#include<string.h>
+
+
+#define LIB_SETALARM "/lib64/libpoweralarm.so"
+#define POWERALARM "power"
+#define WAKEALARM "wake"
+
+typedef ssize_t (*SET_ALARM)(char *);
+
+/*****************************************************************************
+* 
+*   Prototype    : check_parameter
+*   Description  : Check the parameters in the main function 
+*   Input        : char *param ;  input format : 2022-04-23-15-30-00(OR 90-15-30-40 OR 1200)           
+*   Output       : None
+*   Return Value : -1: error ; >0: return interval ;
+*
+*****************************************************************************/
+long int check_parameter(char *param,char type)
+{
+    int ret =0;
+    long int sec;
+    int time[6] = {0};
+
+    ret = sscanf(param, "%d%*[-]%d%*[-]%d%*[-]%d%*[-]%d%*[-]%d", &time[0], &time[1], &time[2], &time[3], &time[4], &time[5]);
+    if ((ret == 4) && (type == 'i')) //match parameter : -i
+    {
+        if ((time[0] < 0) || (time[0] > 99) || (time[1] < 0) || (time[1] > 23) || (time[2] < 0) || (time[2] > 59) || (time[3] < 0) || (time[3] > 59))
+        {
+            printf("error, minimum input range: 00-00-01-00;maximum input range:99-23-59-59\n");
+            return -1;
+        }
+        sec = ((((time[0] * 24) + time[1]) *60) + time[2]) * 60 + time[3]; //time[0] : day; time[1] : hour; time[2] : minute; time[3] : second; 
+
+        return sec;
+        
+    }
+    else if ((ret == 6) && (type == 'w')) //match parameter : -wp
+    {
+        if (time[0]>2099)
+        {
+            printf("maximum date range:2099-12-31-23-59-59\n");
+            return -1;
+        }
+        return 1;
+    }
+    else
+    {
+        printf("invalid input\n");
+        return -1;
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    static void *handle = NULL;
+    SET_ALARM poweralarm = NULL;
+    SET_ALARM wakealarm = NULL;
+    ssize_t res;
+    long int sec = 0; 
+
+    if (argc != 4) //ÅжÏÈë¿Ú²ÎÊýµÄ¸öÊýÊÇ·ñÕýÈ·
+    {
+        printf("eg1: ./set-alarm -i 00-00-20-00(OR 1200) wake(OR power)\n");
+        printf("eg2: ./set-alarm -wp 2022-04-08-12-05-09 wake(OR power)\n");
+        return -1;
+    }
+
+    if (strcmp(argv[1],"-i") == 0)
+    {
+        if (NULL != strchr(argv[2], '-'))
+        {
+            sec = check_parameter(argv[2],'i');
+            if (sec <= 0)
+            {
+                printf("eg: ./set_alarm -i 00-00-20-00(OR 1200) wake(OR power)\n");
+                return -1;
+            }
+            sprintf(argv[2], "%ld", sec);
+        }
+        else
+        {
+            sec = atol(argv[2]);
+        }
+        if(sec < 60)
+        {
+            printf("error, minimum input range: 00-00-01-00\n");
+            return -1; 
+        }
+        printf("Success: set the time interval to wake up the system\n");
+    }
+    else if (strcmp(argv[1], "-wp") == 0)
+    {
+        sec = check_parameter(argv[2],'w');
+        if (sec == -1)
+        {
+            printf("eg: ./set-alarm -wp 2022-04-08-12-05-09 wake(OR power)\n");
+            return -1;
+        }  
+        printf("set the time point to wake up the system\n");
+    }
+    else
+    {
+        printf("illegal parameter\n");
+        return -1;
+    }
+
+    handle = dlopen(LIB_SETALARM, RTLD_NOW); //»ñÈ¡¶¯Ì¬¿â¾ä±ú
+    if (handle == NULL)
+    {
+        fprintf(stderr, "%s\n", dlerror());
+        exit(EXIT_FAILURE);
+    } 
+
+    dlerror();
+    printf("dlopen Success !!!!\n");
+    if (!strncmp(argv[3], POWERALARM, sizeof(POWERALARM)))
+    {
+        poweralarm = (ssize_t(*)(char *))dlsym(handle, "poweralarm"); //»ñÈ¡poweralarmº¯ÊýµØÖ·
+        if (poweralarm != NULL)
+        {
+            res = poweralarm(argv[2]); //µ÷ÓùػúÄÖÖÓ
+            if (res > 0)               //³É¹¦ÉèÖÃÄÖÖÓ
+            {
+                system("poweroff");
+                printf("Poweroff OK,res = %ld\n", res);
+            }
+            else
+            {
+                printf("set poweralarm error,please cat log file,LOG_TAG : libpoweralarm\n");
+            }
+        }
+        else
+        {
+            printf("open function poweralarm error\n");
+        }
+    }
+    else if (!strncmp(argv[3], WAKEALARM, sizeof(WAKEALARM)))
+    {
+        wakealarm = (ssize_t(*)(char *))dlsym(handle, "wakealarm"); //»ñÈ¡poweralarmº¯ÊýµØÖ·
+        if (wakealarm != NULL)
+        {
+            res = wakealarm(argv[2]); //µ÷ÓùػúÄÖÖÓ
+            if (res > 0)              //³É¹¦ÉèÖÃÄÖÖÓ
+            {
+                printf("Wake_up OK,res = %ld\n", res);
+            }
+            else
+            {
+                printf("set wakealarm error,please cat log file,LOG_TAG : libpoweralarm\n");
+            }
+        }
+        else
+        {
+            printf("open function wakealarm error\n");
+        }
+    }
+    else
+    {
+        printf("!!!!Input wake or power!!!!\n");
+    }
+
+    dlclose(handle); //¹Ø±Õ¾ä±ú
+ 
+    return 0;
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/setalarm.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/setalarm.bb
new file mode 100755
index 0000000..fb148f8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/setalarm/setalarm.bb
@@ -0,0 +1,31 @@
+#inherit externalsrc package systemd
+
+DESCRIPTION = "setalarm"
+
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=44d8d2b6296ca24bcd4894bb7155bf27"
+SRC_URI = "file://*"
+
+#DEPENDS += "libxml2 udev"
+
+LOCAL_LIBS = "-ldl"
+
+EXECUTABLE = "set_alarm"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	oe_runmake "CC=${CC}" "CFLAGS=${CFLAGS}" "LDFLAGS=${LDFLAGS} -ldl"
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+	install -d ${D}${includedir}
+}
+
+
+
+
+
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/sim-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/sim-demo.cpp
new file mode 100755
index 0000000..0a9f6d2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/files/sim-demo.cpp
@@ -0,0 +1,502 @@
+#include <stdio.h>
+#include <dlfcn.h>
+#include <signal.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define BUF_SIZE 32
+#define BUF_PIN 4
+
+void *dlHandle_sim;
+void *dlHandle_log;
+
+int (*lynq_sim_init)(int utoken);
+int (*lynq_sim_deinit)(void);
+int (*lynq_enable_pin)(char pin[]);
+int (*lynq_disable_pin)(char pin[]);
+int (*lynq_get_iccid)(char buf[]);
+int (*lynq_query_pin_lock)(char *pin,int buf[]);
+int (*lynq_verify_pin)(char *pin);
+int (*lynq_change_pin)(char *old_pin,char *new_pin);
+int (*lynq_unlock_pin)(char *puk,char *pin);
+int (*lynq_query_phone_number)(char buf[]);
+int (*lynq_get_sim_status)(int *card_status);
+int (*lynq_get_imsi)(char buf[]);
+int (*lynq_get_imei)(char buf[]);
+int (*lynq_get_imei_and_sv)(char imei[],char sv[]);
+int (*lynq_req_sim_io)(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse);
+
+int flag_init = 0;
+typedef struct
+{
+    int cmdIdx;
+    char *funcName;
+}st_api_test_case;
+
+st_api_test_case api_testcases[] = 
+{
+    {0,    "lynq_sim_init"},
+    {1,    "lynq_enable_pin"},
+    {2,    "lynq_disable_pin"},
+    {4,    "lynq_get_iccid"},
+    {5,    "lynq_query_pin_lock"},
+    {6,    "lynq_verify_pin"},
+    {7,    "lynq_change_pin"},
+    {8,    "lynq_unlock_pin"},
+    {9,    "lynq_query_phone_number"},
+    {10,    "lynq_get_imsi"},
+    {11,    "lynq_get_sim_status"},
+    {12,    "lynq_sim_deinit"},
+    {13,    "lynq_get_imei"},
+    {14,    "lynq_get_imei_and_sv"},
+    {15,    "lynq_req_sim_io"},
+    {-1,    NULL}
+};
+
+void print_help(void)
+{
+    int i;
+
+    printf("Supported test cases:\n");
+    for(i = 0; ; i++)
+    {
+        if(api_testcases[i].cmdIdx == -1)
+        {
+            break;
+        }
+        printf("%d:\t%s\n", api_testcases[i].cmdIdx, api_testcases[i].funcName);
+    }
+}
+
+
+int main(void){
+    int cmdIdx = 0;
+    int flag = 0;
+    int res = 0;
+
+    const char *lynq_libpath_sim = "/lib64/liblynq-sim.so";
+    const char *lynq_libpath_log = "/lib64/liblynq-log.so";
+
+    dlHandle_sim = dlopen(lynq_libpath_sim,RTLD_NOW);
+    if(dlHandle_sim == NULL)
+    {
+        printf("dlopen dlHandle_sim failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);
+    if(dlHandle_log == NULL)
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+
+    print_help();
+    while(1)
+    {
+        printf("please input cmd index(-1 exit, 80-help): ");
+        if (scanf("%d", &cmdIdx) != 1)
+        {
+            char c;
+            while((c = getchar()) != '\n' && c != EOF);
+            printf("Illegal input.Please input correctly\n");
+            print_help();
+            continue;
+        }
+        switch(cmdIdx)
+        {
+            case 0: /* lynq_sim_init  */
+            {   
+                
+                if(flag_init == 1)
+                {
+                   printf("init is already\n"); 
+                   break;
+                }
+                else{
+                    int token;
+                    printf("input token\n");
+                    scanf("%d", &token);
+                    lynq_sim_init = (int(*)(int utoken))dlsym(dlHandle_sim,"lynq_sim_init");
+                    if(NULL != lynq_sim_init)
+                    {
+                        res = lynq_sim_init(token);
+                        if(res == 0)
+                        {
+                            printf("Run lynq_sim_init\n");
+                            flag_init = 1;
+                        }else{
+                            printf("lynq sim init error\n");
+                        }
+                    }else{
+                        printf("lynq_sim_init dlsym error\n");
+                    }
+                    break;
+                }
+                
+            }
+            case 1: /* lynq_enable_pin */
+            {   
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char pin[BUF_PIN] = {0};
+                    printf("input pin\n");
+                    scanf("%s", pin);
+                    lynq_enable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_enable_pin");
+                    if(NULL != lynq_enable_pin)
+                    {
+                        res = lynq_enable_pin(pin);
+                        if(res == 0)
+                        {
+                            printf("pin enabled!!!\n");
+                        }else{
+                            printf("pin enable error\n");
+                        }
+                    }else{
+                        printf("lynq_enable_pin dlsym error\n");
+                    }                                    
+                }
+                break;
+            }
+
+            case 2: /* lynq_disable_pin */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char pin[BUF_PIN] = {0};
+                    printf("input pin\n");
+                    scanf("%s", pin);
+                    lynq_disable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_disable_pin");
+                    if(NULL != lynq_disable_pin)
+                    {
+                        res = lynq_disable_pin(pin);
+                        if(res == 0)
+                        {
+                            printf("pin disnabled!!!\n");
+                        }else{
+                            printf("pin disable error\n");
+                        }
+                    }else{
+                        printf("lynq_disable_pin dlsym error\n");
+                    }
+                }
+                break;
+            }
+        
+            case 4: /* lynq_get_iccid */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char iccid[BUF_SIZE] = {0};
+                    lynq_get_iccid = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_iccid");
+                    if(NULL != lynq_get_iccid)
+                    {
+                        res = lynq_get_iccid(iccid);
+                        if(res == 0)
+                        {
+                            printf("get iccid success!!! iccid is %s\n",iccid);
+                        }else{
+                            printf("get iccid error\n");
+                        }
+                    }else{
+                        printf("lynq_get_iccid dlsym error\n");
+                    }
+                }
+                break;
+            }
+
+            case 5:  /* lynq_query_pin_lock */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char pin[BUF_PIN] = {0};
+                    printf("input pin\n");
+                    scanf("%s", pin);
+                    int lock[BUF_SIZE] = {0};
+
+                    lynq_query_pin_lock = (int(*)(char *pin,int buf[]))dlsym(dlHandle_sim,"lynq_query_pin_lock");
+                    if(NULL != lynq_query_pin_lock)
+                    {
+                        res = lynq_query_pin_lock(pin,lock);
+                        if(res == 0)
+                        {
+                            printf("query pin lock success!!! iccid is %d\n",lock);
+                        }else{
+                            printf("query pin lock error\n");
+                        }
+                    }else{
+                        printf("lynq_query_pin_lock dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 6: /* lynq_verify_pin */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char pin[BUF_PIN] = {0};
+                    printf("input pin\n");
+                    scanf("%s", pin);
+
+                    lynq_verify_pin = (int(*)(char *pin))dlsym(dlHandle_sim,"lynq_verify_pin");
+                    if(NULL != lynq_verify_pin)
+                    {
+                        res = lynq_verify_pin(pin);
+                        if(res == 0)
+                        {
+                            printf("verify pin success!!!\n");
+                        }else{
+                            printf("verify pin error\n");
+                        }
+                    }else{
+                        printf("lynq_verify_pin dlsym error\n");
+                    }
+                }
+                break;
+            }            
+            case 7: /* lynq_change_pin */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char old_pin[BUF_PIN] = {0};
+                    printf("input old pin\n");
+                    scanf("%s", old_pin);
+                    char new_pin[BUF_PIN] = {0};
+                    printf("input new pin\n");
+                    scanf("%s", new_pin);
+
+                    lynq_change_pin = (int(*)(char *old_pin,char *new_pin))dlsym(dlHandle_sim,"lynq_change_pin");
+                    if(NULL != lynq_change_pin)
+                    {
+                        res = lynq_change_pin(old_pin,new_pin);
+                        if(res == 0)
+                        {
+                            printf("change pin success!!!\n");
+                        }else{
+                            printf("change pin error\n");
+                        }
+                    }else{
+                        printf("lynq_change_pin dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 8: /* lynq_unlock_pin */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char puk[BUF_SIZE] = {0};
+                    printf("input  puk\n");
+                    scanf("%s", puk);
+                    char new_pin[BUF_PIN] = {0};
+                    printf("input new pin\n");
+                    scanf("%s", new_pin);
+                    lynq_unlock_pin = (int(*)(char *puk,char *pin))dlsym(dlHandle_sim,"lynq_unlock_pin");
+                    if(NULL != lynq_unlock_pin)
+                    {
+                        res = lynq_unlock_pin(puk,new_pin);
+                        if(res == 0)
+                        {
+                            printf("unlock pin success!!!\n");
+                        }else{
+                            printf("unlock pin error\n");
+                        }
+                    }else{
+                        printf("lynq_unlock_pin dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 9: /* lynq_query_phone_number */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char number[BUF_SIZE] = {0};
+                    lynq_query_phone_number = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_query_phone_number");
+                    if(NULL != lynq_query_phone_number)
+                    {
+                        res = lynq_query_phone_number(number);
+                        if(res == 0)
+                        {
+                            printf("phone number is %s!!!\n",number);
+                        }else{
+                            printf("unlock pin error\n");
+                        }
+                    }else{
+                        printf("lynq_query_phone_number dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 10: /* lynq_get_imsi */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    char imsi[BUF_SIZE] = {0};
+
+                    lynq_get_imsi = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_imsi");
+                    if(NULL != lynq_get_imsi)
+                    {
+                        res = lynq_get_imsi(imsi);
+                        if(res == 0)
+                        {
+                            printf("imsi is %s!!!\n",imsi);
+                        }else{
+                            printf("get imsi error\n");
+                        }
+                    }else{
+                        printf("lynq_get_imsi dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 11: /* lynq_get_sim_status */
+            {
+                if(flag_init == 0){
+                    printf("must init first\n");
+                }
+                else{
+                    int x = -1;
+                    int *y = &x;
+
+                    lynq_get_sim_status = (int(*)(int* card_status))dlsym(dlHandle_sim,"lynq_get_sim_status");
+                    if(NULL != lynq_get_sim_status)
+                    {
+                        res = lynq_get_sim_status(y);
+                        if(res == 0)
+                        {
+                            printf("state is %d!!!\n",*y);
+                        }else{
+                            printf("get imsi error\n");
+                        }
+                    }else{
+                        printf("lynq_get_sim_status dlsym error\n");
+                    }
+                }
+                break;
+            }
+            case 12:
+            {
+                lynq_sim_deinit = (int(*)(void))dlsym(dlHandle_sim,"lynq_sim_deinit");
+                if(NULL != lynq_sim_deinit)
+                {
+                    res = lynq_sim_deinit();
+                    if(res == 0)
+                    {
+                        printf("sim deinit success is!!!\n");
+                    }else{
+                        printf("get imsi error\n");
+                    }
+                }else{
+                    printf("lynq_sim_deinit dlsym error\n");
+                }
+                flag_init = 0;
+                break;
+            }
+            case 13:
+            {
+                lynq_get_imei = (int (*)(char *buf))dlsym(dlHandle_sim,"lynq_get_imei");
+                if(NULL != lynq_get_imei)
+                {
+                    char buf[20] = {0};
+                    res = lynq_get_imei(buf);
+                    if(res == 0)
+                    {
+                        printf("imei is %s!!!\n",buf);
+                    }
+                    else
+                    {
+                        printf("get imei error %d\n", res);
+                    }
+                }
+                else
+                {
+                    printf("lynq_get_imei dlsym error\n");
+                }
+                break;
+            }
+            case 14:
+            {
+                lynq_get_imei_and_sv = (int (*)(char *imei, char* sv))dlsym(dlHandle_sim,"lynq_get_imei_and_sv");
+                if(NULL != lynq_get_imei_and_sv)
+                {
+                    char imei[20] = {0};
+                    char sv[20] = {0};
+                    res = lynq_get_imei_and_sv(imei,sv);
+                    if(res == 0)
+                    {
+                        printf("imei is %s sv is %s!!!\n",imei,sv);
+                    }
+                    else
+                    {
+                        printf("get imei sv error %d\n", res);
+                    }
+                }
+                else
+                {
+                    printf("lynq_get_imei_and_sv dlsym error\n");
+                }
+                break;
+            }
+            case 15:
+            {
+                lynq_req_sim_io = (int (*)(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse))dlsym(dlHandle_sim,"lynq_req_sim_io");
+                if(NULL != lynq_req_sim_io)
+                {
+                    int list[5] = {176,28423,0,0,9};
+                    char *path = "3F007F20";
+                    char *data = NULL;
+                    char *pin2 = NULL;
+                    char *aidPtr = NULL;
+                    int sw[2];
+                    char simResponse[256] = {0};
+                    res = lynq_req_sim_io(list, path, data, pin2, aidPtr, sw, simResponse);
+                    if(res == 0)
+                    {
+                        printf("%d %d  %s\n", sw[0], sw[1], simResponse);
+                    }
+                    else
+                    {
+                        printf("lynq_req_sim_io error %d\n", res);
+                    }
+                }
+                else
+                {
+                    printf("lynq_req_sim_io dlsym error \n");
+                }
+                break;
+            }
+            case -1:
+            {
+                flag = 1;        /* exit */
+                break;
+            }
+            case 80:
+                print_help(); 
+                break;
+            default:
+                print_help();
+            break;     
+        }
+        if(flag == 1)
+            break;
+    }
+    return 0;
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/sim-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/sim-demo.bb
new file mode 100755
index 0000000..dcc910b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sim-demo/sim-demo.bb
@@ -0,0 +1,28 @@
+#inherit externalsrc package
+DESCRIPTION = "call demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://sim-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "sim-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	${CXX} -Wall sim-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/sim-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/sms-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/sms-demo.cpp
new file mode 100755
index 0000000..fe6c1a2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/files/sms-demo.cpp
@@ -0,0 +1,353 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <sys/time.h>

+#include <fcntl.h>

+#include <unistd.h>

+#include <signal.h>

+#include <unistd.h>

+#include <sys/types.h>

+#include <pthread.h>

+#include <dlfcn.h>

+#undef LOG_TAG

+#define LOG_TAG "MAIN_LOG"

+

+void *handle_network;

+void *handle_log;

+void *handle_sms;

+

+int (*lynq_network_init)(int);

+int (*lynq_set_prefferred_networktype)(const int preffertype);

+int (*lynq_query_registration_state)(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam);

+int (*lynq_network_deinit)(void);

+

+int (*lynq_sms_init)(int uToken);

+int (*lynq_sms_deinit)(void);

+int (*lynq_send_sms)(char telephony_num[64], int charset, char *msg);

+int (*lynq_read_sms)(int index,int *status,int *charset,char smsc[22],int *smscLen,int *smslen,char message[1024],char teleNum[64],int *numLen);

+int (*lynq_get_smsc_address)(char service_num[22]);

+int (*lynq_set_smsc_address)(const char* service_num);

+int (*lynq_list_sms)(char index_list[255]);

+int (*lynq_delete_sms)(int index);

+int (*lynq_wait_receive_new_sms)(int *handle);

+

+

+

+

+

+

+

+int demoStrUpper(char * str)

+{

+    int i=0;

+    while(1)

+    {

+        if(str[i]=='\0')

+        {

+            break;

+        }

+        if(str[i]>='a'&&str[i]<='z')

+        {

+             str[i]=str[i]-32;

+        }

+        i++;

+    }

+    return 0;

+}

+

+int eventQueryRegistrationState(char *type)//查询VOICE/DATA/IMS 的注册状态

+{

+    int res = 0;

+    lynq_query_registration_state = (int(*)(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam))dlsym(handle_network,"lynq_query_registration_state");

+    if(NULL != lynq_query_registration_state)

+    {

+        int regState = 0;

+        int imsRegState = 0;

+        char CID[128]={0};

+        char LAC[128]={0};

+        int netType = 0;

+        int radioTechFam = 0;

+

+        res = lynq_query_registration_state(type,&regState,&imsRegState,LAC,CID,&netType,&radioTechFam);

+        if(res == 0)

+        {

+            demoStrUpper(type);

+            printf("upper str is %s\n",type);

+            if(!strcmp(type,"VOICE")){

+                printf("registration state is %d",regState);

+            }else if(!strcmp(type,"DATA")){

+                printf("registration state is %d,LAC is %s,CID is %s,network type is %d",regState,LAC,CID,netType);

+            }else if(!strcmp(type,"IMS")){

+                printf("ims registration state is %d,radio tech family is %d",imsRegState,radioTechFam);

+            }else{

+                printf("--------->[%s,%d] query ims registration state about voice, data, and ims!!! \n",__FUNCTION__,__LINE__);

+                return -1;

+            }

+        }else{

+            printf("lynq_query_registration_state error");

+        }

+    }else{

+        printf("lynq_query_registration_state dlsym error");

+        exit(EXIT_FAILURE);

+    }

+    return 0;

+}

+

+

+void *triggerUrcEvent(void *parg)

+{

+    int ret=0;

+    int handle = -1;

+    char smsc[22] = {};

+    char msg[1024] = {};

+    char addr[64] = {};

+    char index_list [255] = {};

+    int index = -1;

+    int status = -1;

+    int charset = -1;

+    int smsclen = -1;

+    int smslen = 1;

+    int numlen = -1;

+    while(1)

+    {

+        bzero(smsc,22);

+        bzero(msg,1024);

+        bzero(addr,64);

+

+        lynq_wait_receive_new_sms = (int (*)(int *handle))dlsym(handle_sms,"lynq_wait_receive_new_sms"); // 等待接收新短消息上报,并获取handle。

+        if(NULL != lynq_wait_receive_new_sms)

+        {

+            ret = lynq_wait_receive_new_sms(&handle);

+            if(ret == 0)

+            {

+                printf("index = %d\n",handle);

+            }else{

+                printf("wait receive error\n");

+            }

+        }else{

+            printf("lynq_wait_receive_new_sms dlsym error\n");

+        }

+

+        /**********根据handle 读取该条短消息--start**********/

+        lynq_read_sms = (int (*)(int index,int *status,int *charset,char smsc[22],int *smscLen,int *smslen,char message[1024],char teleNum[64],int *numLen))dlsym(handle_sms,"lynq_read_sms"); // 等待接收新短消息上报,并获取handle。

+        if(NULL != lynq_read_sms)

+        {

+            ret = lynq_read_sms(handle, &status, &charset,smsc, &smsclen, &smslen,msg, addr,&numlen);

+            if(ret == 0)

+            {

+                printf("status=%d,charset=%d,smsc=%s,smsclen=%d,smslen=%d,msg=%s,addr=%s,numlen=%d\n",

+                status,charset,smsc,smsclen,smslen,msg,addr,numlen);

+            }else{

+                printf("read sms error\n");

+            }

+        }else{

+            printf("lynq_read_sms dlsym error\n");

+        }

+        /**********根据handle 读取该条短消息--end**********/

+

+

+        /**********获取短消息列表--start**********/

+        

+        lynq_list_sms = (int (*)(char index_list[255]))dlsym(handle_sms,"lynq_list_sms");

+        if(NULL != lynq_list_sms)

+        {

+            ret = lynq_list_sms(index_list);

+            if(ret == 0)

+            {

+                printf("ret= %d,list=%s",ret,index_list);

+            }else{

+                printf("list sms error\n");

+            }

+        }else{

+            printf("lynq_list_sms dlsym error\n");

+        }

+        /**********获取短消息列表--end**********/

+

+        /**********根据handle 删除该条短消息--start**********/

+        //删除短消息只需要带上索引号即可,不一定要使用handle。

+        lynq_delete_sms = (int (*)(int index))dlsym(handle_sms,"lynq_delete_sms");

+        if(NULL != lynq_delete_sms)

+        {

+            ret = lynq_delete_sms(handle);

+            if(ret == 0)

+            {

+                printf("ret= %d,list=%d",ret,handle);

+            }else{

+                printf("del sms error\n");

+            }

+        }else{

+            printf("lynq_delete_sms dlsym error\n");

+        }

+        /**********根据handle 删除该条短消息--end**********/

+

+        if(NULL != lynq_list_sms)

+        {

+            ret = lynq_list_sms(index_list);

+            if(ret == 0)

+            {

+                printf("ret= %d,list=%s",ret,index_list);

+            }else{

+                printf("list sms error\n");

+            }

+        }else{

+            printf("lynq_list_sms dlsym error\n");

+        }

+    }

+    return NULL;

+}

+

+//以下示例默认为所有API 执行都成功的情况下,依次执行后续API。以移动SIM 注册在4G网络下为例

+int main(int argc, char *argv[])

+{

+    printf("[LYNQ_SMS_DEMO]--------->[%s,%d] start \n",__FUNCTION__,__LINE__);

+    char smsc[50] = {};

+    char telephony_num[64] = {};

+    char msg[100] = {};

+    int ret = -1;

+    sprintf(telephony_num,"10086");//请用户务必替换此号码,随意向运营商发短消息极有可能被封号。

+    sprintf(msg,"\"Welcome to MobileTek ^_^!!!!\"");//短消息内容需要用双引号("")引起来。

+    

+    const char *lynqLibpathSms = "/lib64/liblynq-sms.so";

+    const char *lynqLibpathNetwork = "/lib64/liblynq-network.so";

+    const char *lynqLibpathLog = "/lib64/liblynq-log.so";

+

+    handle_network = dlopen(lynqLibpathNetwork,RTLD_NOW);

+    if(NULL == handle_network)

+    {

+        printf("dlopen lynqLibpathNetwork fail:%s\n",dlerror());

+        exit(EXIT_FAILURE);

+    }

+    handle_sms = dlopen(lynqLibpathSms,RTLD_NOW);

+    if(NULL == handle_sms)

+    {

+        printf("dlopen lynqLibpathSms fail:%s\n",dlerror());

+        exit(EXIT_FAILURE);

+    }

+    handle_log = dlopen(lynqLibpathLog,RTLD_NOW);

+    if(NULL == handle_log)

+    {

+        printf("dlopen lynqLibpathLog fail:%s\n",dlerror());

+        exit(EXIT_FAILURE);

+    }

+    lynq_network_init = (int(*)(int))dlsym(handle_network,"lynq_network_init");

+    if(NULL == lynq_network_init)

+    {

+        printf("lynq_sms_init not defined or exported in %s\r\n", lynqLibpathNetwork);

+        exit(EXIT_FAILURE);

+    }

+    lynq_sms_init = (int(*)(int))dlsym(handle_sms,"lynq_sms_init");

+    if(NULL == lynq_sms_init)

+    {

+        printf("lynq_sms_init not defined or exported in %s\r\n", lynqLibpathSms);

+        exit(EXIT_FAILURE);

+    }

+

+    ret = lynq_sms_init(2022);//初始化短消息业务。

+    if(ret != 0)

+    {

+        printf("lynq_sms_init defalut\n");

+    }

+    dlerror();

+    sleep(1);

+    ret = lynq_network_init(2023);//初始化NETWORK 业务。

+    if(ret != 0)

+    {

+        printf("lynq_network_init defalut\n");

+    }

+    sleep(1);

+    pthread_t tid;

+    pthread_attr_t attr;

+    pthread_attr_init(&attr);

+    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

+    ret = pthread_create(&tid,&attr,triggerUrcEvent,NULL);//创建一个线程用来处理接收新短消息事件。

+

+    /**********查询短消息中心号码--start**********/

+    lynq_get_smsc_address = (int (*)(char service_num[22]))dlsym(handle_sms,"lynq_get_smsc_address");

+    if(NULL != lynq_get_smsc_address)

+    {

+        ret = lynq_get_smsc_address(smsc);

+        if(ret == 0)

+        {

+            printf("get smsc success,smsc = %s\n",smsc);

+        }else{

+            printf("get smsc error\n");

+        }

+    }else{

+        printf("lynq_get_smsc_address dlsym error\n");

+    }

+    sleep(1);

+    /**********查询短消息中心号码--end**********/

+    

+    /**********设置短消息中心号码--start**********/

+    lynq_set_smsc_address = (int (*)(const char* service_num))dlsym(handle_sms,"lynq_set_smsc_address");

+    if(NULL != lynq_set_smsc_address)

+    {

+        ret = lynq_set_smsc_address("+8613800230500");

+        if(ret == 0)

+        {

+            printf("set smsc success");

+        }else{

+            printf("set smsc error\n");

+        }

+    }else{

+        printf("lynq_set_smsc_address dlsym error\n");

+    }

+    /**********设置短消息中心号码--end**********/

+

+    /**********发送短消息--start**********/

+    eventQueryRegistrationState("IMS");

+    sleep(1);

+    lynq_set_prefferred_networktype = (int(*)(const int preffertype))dlsym(handle_network,"lynq_set_prefferred_networktype");

+    if(NULL != lynq_set_prefferred_networktype)

+    {

+        ret = lynq_set_prefferred_networktype(9);

+        if(ret == 0)

+        {

+            printf("set prefferred networktype is %d\n",9);

+        }else{

+            printf("lynq_set_prefferred_networktype error\n");

+        }

+    }else{

+        printf("lynq_set_prefferred_networktype dlsym error\n");

+        exit(EXIT_FAILURE);

+    }

+    sleep(1);

+    eventQueryRegistrationState("IMS");

+    sleep(1);

+

+    lynq_send_sms = (int(*)(char telephony_num[64],int charset, char *msg))dlsym(handle_sms,"lynq_send_sms");

+    if(NULL != lynq_send_sms)

+    {

+        ret = lynq_send_sms(telephony_num,0,msg);

+        if(ret == 0)

+        {

+            printf("sed sms success\n");

+        }else{

+            printf("send sms error\n");

+        }

+    }else{

+        printf("lynq_send_sms dlsym error\n");

+        exit(EXIT_FAILURE);

+    }

+    /**********发送短消息--end**********/

+    sleep(120); //在此期间向模组发送短消息,即可出发“接受新短消息事件”。

+

+    /**********注销短消息业务--start**********/

+    lynq_sms_deinit = (int (*)(void))dlsym(handle_sms,"lynq_sms_deinit");

+    if(NULL != lynq_sms_deinit)

+    {

+        ret = lynq_sms_deinit();

+        if(ret == 0)

+        {

+            printf("sms deinit success");

+        }else{

+            printf("sms deinit error\n");

+        }

+    }else{

+        printf("lynq_sms_deinit dlsym error\n");

+    }

+    sleep(5);

+    /**********注销短消息业务--end**********/

+

+    return 0;

+}

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/sms-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/sms-demo.bb
new file mode 100755
index 0000000..5a54e8f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/sms-demo/sms-demo.bb
@@ -0,0 +1,28 @@
+#inherit externalsrc package
+DESCRIPTION = "sms demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://sms-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "sms-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall sms-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/${EXECUTABLE} ${D}${bindir}/
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/LICENSE
new file mode 100644
index 0000000..1b15bd2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/LICENSE
@@ -0,0 +1,31 @@
+opyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/wakelock-demo.c b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/wakelock-demo.c
new file mode 100755
index 0000000..840ad4a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/files/wakelock-demo.c
@@ -0,0 +1,109 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+
+#undef LOG_TAG
+#define LOG_TAG "WAKELOCK_DEMO"
+//static pthread_mutex_t s_urc_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+//static pthread_cond_t s_urc_call_state_change_cond = PTHREAD_COND_INITIALIZER;
+
+void *dlHandle_wakelock;
+void *dlHandle_log;
+
+
+enum {
+    PARTIAL_WAKE_LOCK = 1,  // the cpu stays on, but the screen is off
+    FULL_WAKE_LOCK = 2      // the screen is also on
+};
+
+// while you have a lock held, the device will stay on at least at the
+// level you request.
+
+int (*acquire_wake_lock)(int lock, const char* id);
+int (*release_wake_lock)(const char* id);
+
+
+void init_call_func(void)
+{
+    const char *lynqLibPath_WakeLock = "/usr/lib64/libpower.so";
+    const char *lynqLibPath_Log = "/lib64/liblynq-log.so";
+
+    dlHandle_wakelock = dlopen(lynqLibPath_WakeLock, RTLD_NOW);
+    if (dlHandle_wakelock == NULL) 
+    {
+        printf("dlopen lynqLibPath_WakeLock failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    dlHandle_log = dlopen(lynqLibPath_Log, RTLD_NOW);
+    if (dlHandle_log == NULL) 
+    {
+        printf("dlopen dlHandle_log failed: %s", dlerror());
+        exit(EXIT_FAILURE);
+    }
+    acquire_wake_lock = (int(*)(int,const char*))dlsym(dlHandle_wakelock, "acquire_wake_lock");
+    if (acquire_wake_lock == NULL) {
+        printf("acquire_wake_lock not defined or exported in %s", lynqLibPath_WakeLock);
+        exit(EXIT_FAILURE);
+    }
+    release_wake_lock = (int(*)( const char*))dlsym(dlHandle_wakelock, "release_wake_lock");
+    if (release_wake_lock == NULL) {
+        printf("release_wake_lock not defined or exported in %s", lynqLibPath_WakeLock);
+        exit(EXIT_FAILURE);
+    }
+    dlerror(); // Clear any previous dlerror
+
+  return;
+}
+
+
+int main(int argc,char** argv)
+{
+
+    init_call_func();
+    if (argc != 3)
+    {
+        printf("wrong input format.\n");
+        return -1;
+    }
+
+
+    if (strcmp(argv[1],"-a") == 0)
+    {
+        if (acquire_wake_lock(PARTIAL_WAKE_LOCK,argv[2]) < 0)
+        {
+            printf("acquire_wake_lock : %s fail.\n",argv[2]);
+            return -1;
+        }
+        else  
+        {
+            printf("acquire_wake_lock : %s success.\n",argv[2]);
+            return 0;
+        }
+        
+    }
+    else if (strcmp(argv[1],"-r") == 0)
+    {
+        if (release_wake_lock(argv[2]) < 0)
+        {
+            printf("release_wake_lock : %s fail.\n",argv[2]);
+            return -1;
+        }
+        else
+        {
+            printf("release_wake_lock : %s success.\n",argv[2]);
+            return 0;
+        }   
+    }
+    else
+    {
+        printf("wrong input format.\n");
+        return -1;
+    }
+
+
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/wakelock-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/wakelock-demo.bb
new file mode 100644
index 0000000..b5b9e7a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wakelock-demo/wakelock-demo.bb
@@ -0,0 +1,31 @@
+inherit externalsrc package
+DESCRIPTION = "wakelock demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=44d8d2b6296ca24bcd4894bb7155bf27"
+SRC_URI = "file://wakelock-demo.c file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I. -I$(ROOT)$(includedir)/hardware_legacy"
+
+#DEPENDS = "platform-libs"
+
+#LOCAL_LIBS = "-L. -ldl -lstdc++ -lpower"
+LOCAL_LIBS = "-L. -ldl -lstdc++"
+SOURCES = "$(wildcard *.c )"
+
+OBJECTS = "$(SOURCES:.c=.o)"
+
+EXECUTABLE = "wakelock-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall ${LOCAL_C_INCLUDES} wakelock-demo.c ${LOCAL_LIBS} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/wakelock-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/wifi-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/wifi-demo.cpp
new file mode 100755
index 0000000..ca56db4
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/files/wifi-demo.cpp
@@ -0,0 +1,339 @@
+/**@File wifi_test.c
+*  @Brief :about function test
+*  @details :
+*  @Author : qs.xiong
+*  @Date : 2022-3-14
+*  @Version : V1.0
+*  @copy ritght : Copyright (c) MobileTek
+*/
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <unistd.h>
+
+void *handle_wifi;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+typedef enum {
+	LYNQ_WIFI_WORK_MODE_STA=0,		/*WiFi is in STA mode */
+	LYNQ_WIFI_WORK_MODE_AP,			/*WiFi is in AP mode */
+}lynq_wifi_work_mode_m;
+
+typedef enum {
+	LYNQ_WIFI_BANDWIDTH_HT20 = 0,	
+	LYNQ_WIFI_BANDWIDTH_HT80,		
+}lynq_wifi_bandwidth_type_m;
+
+typedef enum {
+	LYNQ_WIFI_AUTH_OPEN = 0,
+	LYNQ_WIFI_AUTH_WPA_PSK,
+}lynq_wifi_ap_auth_s;
+
+typedef enum {
+	LYNQ_WIFI_STA_AUTH_OPEN = 0,
+	LYNQ_WIFI_STA_AUTH_WPA_PSK,
+}lynq_wifi_sta_auth_s;
+
+typedef enum {
+	LYNQ_NETWORK_0 =0,
+	LYNQ_NETWORK_1,
+	LYNQ_NETWORK_2,
+	LYNQ_NETWORK_3,
+	LYNQ_NETWORK_4,
+	LYNQ_NETWORK_5,
+	LYNQ_NETWORK_6,
+	LYNQ_NETWORK_7,
+	LYNQ_NETWORK_8,
+	LYNQ_NETWORK_9,
+}lynq_wifi_index_e;
+
+
+int (*lynq_wifi_enable)(void);
+int (*lynq_wifi_disable)(void);
+int (*lynq_wifi_wpa_start)(void);
+int (*lynq_wifi_wpacli_start)(void);
+int (*lynq_wifi_work_mode_get)(lynq_wifi_work_mode_m *mode);
+int (*lynq_wifi_ap_ssid_set)(lynq_wifi_index_e idx,char *ap_ssid);
+int (*lynq_wifi_ap_ssid_get)(lynq_wifi_index_e idx,char *ap_ssid);
+int (*lynq_wifi_ap_frequency_set)(lynq_wifi_index_e idx,int lynq_wifi_frequency);
+int (*lynq_wifi_ap_frequency_get)(lynq_wifi_index_e idx,int *lynq_wifi_frequency);
+int (*lynq_wifi_ap_bandwidth_get)(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m *bandwidth);
+int (*lynq_wifi_ap_channel_get)(lynq_wifi_index_e idx,int* channel);
+int (*lynq_wifi_ap_auth_set)(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth);
+int (*lynq_wifi_ap_auth_get)(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth);
+int (*lynq_wifi_ap_max_sta_get)(lynq_wifi_index_e idx,int* max_sta_num);
+int (*lynq_wifi_ap_start)(lynq_wifi_index_e idx);
+int (*lynq_wifi_ap_restart)(lynq_wifi_index_e idx);
+int (*lynq_wifi_ap_stop)(lynq_wifi_index_e idx);
+int (*lynq_wifi_ap_hide_ssid)(lynq_wifi_index_e idx);
+int (*lynq_ap_ssid_pass_set)(lynq_wifi_index_e idx,char *password);
+
+
+int main(int argc, char *argv[])
+{
+    printf("[LYNQ_WIFI_DEMO]--------->[%s,%d] start \n",__FUNCTION__,__LINE__);
+    int ret = -1;
+    int get_ap_frequency = -1;
+    int get_ap_channel=-1;
+    int get_max_sta_num=-1;
+	int test_freq = 5180;
+	char test_ssid[50] = "TEST_SSID_5G";
+    char get_ap_ssid[50]={0};
+	char test_pass[25] = "12345678";
+	
+	lynq_wifi_index_e idxd;
+    lynq_wifi_ap_auth_s set_ap_auth;
+    lynq_wifi_work_mode_m get_work_mode;
+    lynq_wifi_ap_auth_s get_ap_auth;
+    lynq_wifi_bandwidth_type_m get_ap_bandwidth;
+  
+    const char *lynqLibpathWifi = "/lib64/liblynq-wifi6.so";
+   
+    handle_wifi = dlopen(lynqLibpathWifi,RTLD_NOW);
+    if(NULL == handle_wifi)
+    {
+        printf("dlopen lynqLibpathWifi fail:%s\n",dlerror());
+        exit(EXIT_FAILURE);
+    }
+   
+    lynq_wifi_enable = (int(*)())dlsym(handle_wifi,"lynq_wifi_enable");
+    if(NULL == lynq_wifi_enable)
+    {
+        printf("lynq_wifi_enable not defined or exported in %s\r\n", lynqLibpathWifi);
+        exit(EXIT_FAILURE);
+    }
+    
+    ret = lynq_wifi_enable();	//< insmod drv wg870/cyw955572
+    if(ret != 0)
+    {
+        printf("lynq_wifi_enable defalut\n");
+    }
+
+        lynq_wifi_wpa_start = (int(*)())dlsym(handle_wifi,"lynq_wifi_wpa_start");
+    if(NULL == lynq_wifi_wpa_start)
+    {
+        printf("lynq_wifi_wpa_start not defined or exported in %s\r\n", lynqLibpathWifi);
+        exit(EXIT_FAILURE);
+    }
+    
+    ret = lynq_wifi_wpa_start();	//< start supplicant
+    if(ret != 0)
+    {
+        printf("lynq_wifi_wpa_start defalut\n");
+    }
+    
+    lynq_wifi_wpacli_start = (int(*)())dlsym(handle_wifi,"lynq_wifi_wpacli_start");
+    if(NULL == lynq_wifi_wpacli_start)
+    {
+        printf("lynq_wifi_wpacli_start not defined or exported in %s\r\n", lynqLibpathWifi);
+        exit(EXIT_FAILURE);
+    }
+    
+    ret = lynq_wifi_wpacli_start();	//< start supplicant
+    if(ret != 0)
+    {
+        printf("lynq_wifi_wpacil_start defalut\n");
+    }
+   
+   
+
+	 idxd=LYNQ_NETWORK_0;
+
+	 printf("into case 0 start ap test\n");
+	 set_ap_auth=LYNQ_WIFI_AUTH_WPA_PSK;
+	 lynq_wifi_ap_ssid_set = (int (*)(lynq_wifi_index_e idx,char *ap_ssid))dlsym(handle_wifi,"lynq_wifi_ap_ssid_set");
+	
+	 if(NULL != lynq_wifi_ap_ssid_set)
+	 {
+		ret = lynq_wifi_ap_ssid_set(idxd,test_ssid);	//< set ssid for ap
+		if(ret == 0)
+		{
+			printf("set ssid success");
+		}else{
+			printf("set ssid error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_ssid_set dlsym error\n");
+	}
+		
+	lynq_wifi_ap_auth_set = (int (*)(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth))dlsym(handle_wifi,"lynq_wifi_ap_auth_set");
+	if(NULL != lynq_wifi_ap_auth_set)
+	{
+		ret = lynq_wifi_ap_auth_set(idxd,set_ap_auth);	//< set ap work with WPA2 
+		if(ret == 0)
+		{
+			printf("set auth success");
+		}else{
+			printf("set auth error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_auth_set dlsym error\n");
+	}
+	
+	lynq_ap_ssid_pass_set = (int (*)(lynq_wifi_index_e idx,char *password))dlsym(handle_wifi,"lynq_ap_ssid_pass_set");
+	if(NULL != lynq_ap_ssid_pass_set)
+	{
+		ret = lynq_ap_ssid_pass_set(idxd,test_pass);	//< set password for ap
+		if(ret == 0)
+		{
+			printf("set password success");
+		}else{
+			printf("set password error\n");
+		}
+	}else{
+		printf("lynq_ap_ssid_pass_set dlsym error\n");
+	}
+	lynq_wifi_ap_frequency_set = (int (*)(lynq_wifi_index_e idx,int lynq_wifi_frequency))dlsym(handle_wifi,"lynq_wifi_ap_frequency_set");
+	if(NULL != lynq_wifi_ap_frequency_set)
+	{
+		ret = lynq_wifi_ap_frequency_set(idxd,test_freq);	//< set freq and 
+		if(ret == 0)
+		{
+			printf("set frequency success");
+		}else{
+			printf("set frequency error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_frequency_set dlsym error\n");
+	}
+	lynq_wifi_ap_start = (int (*)(lynq_wifi_index_e idx))dlsym(handle_wifi,"lynq_wifi_ap_start");
+	if(NULL != lynq_wifi_ap_start)
+	{
+		ret = lynq_wifi_ap_start(idxd);	//< start ap
+		if(ret == 0)
+		{
+			printf("start ap success");
+		}else{
+			printf("start ap error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_start dlsym error\n");
+	}
+	
+	sleep(5);
+	lynq_wifi_ap_ssid_get = (int (*)(lynq_wifi_index_e idx,char *ap_ssid))dlsym(handle_wifi,"lynq_wifi_ap_ssid_get");
+	if(NULL != lynq_wifi_ap_ssid_get)
+	{   
+		ret = lynq_wifi_ap_ssid_get(idxd,get_ap_ssid);	//< get ssid of ap
+		if(ret == 0)
+		{
+			printf("get ap_ssid success %s\n",get_ap_ssid);
+		}else{
+			printf("set ap_ssid error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_ssid_get dlsym error\n");
+	}
+
+
+	lynq_wifi_ap_frequency_get = (int (*)(lynq_wifi_index_e idx,int *lynq_wifi_frequency))dlsym(handle_wifi,"lynq_wifi_ap_frequency_get");
+	if(NULL != lynq_wifi_ap_frequency_get)
+	{   
+		ret = lynq_wifi_ap_frequency_get(idxd,&get_ap_frequency);	//< get ap frequency
+		if(ret == 0)
+		{
+			printf("get frequency success %d\n",get_ap_frequency);
+		}else{
+			printf("get frequency error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_frequency_get dlsym error\n");
+	}
+
+	lynq_wifi_work_mode_get = (int (*)(lynq_wifi_work_mode_m *mode))dlsym(handle_wifi,"lynq_wifi_work_mode_get");
+	if(NULL != lynq_wifi_work_mode_get)
+	{   
+		ret = lynq_wifi_work_mode_get(&get_work_mode);	//< get wifi mode
+		if(ret == 0)
+		{
+			printf("get work_mode success: %d\n",get_work_mode);
+		}else{
+			printf("get work_mode error\n");
+		}
+	}else{
+		printf("lynq_wifi_work_mode_get dlsym error\n");
+	}
+
+
+	lynq_wifi_ap_auth_get = (int (*)(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth))dlsym(handle_wifi,"lynq_wifi_ap_auth_get");
+	if(NULL != lynq_wifi_ap_auth_get)
+	{   
+		ret = lynq_wifi_ap_auth_get(idxd,&get_ap_auth);	//< get wifi auth
+		if(ret == 0)
+		{
+			printf("get ap_auth success: %d\n",get_ap_auth); //< 0 is OPEN 1 is WPA-PSK
+		}else{
+			printf("get ap_auth error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_auth_get dlsym error\n");
+	}
+
+	lynq_wifi_ap_bandwidth_get = (int (*)(lynq_wifi_index_e idx, lynq_wifi_bandwidth_type_m *bandwidth))dlsym(handle_wifi,"lynq_wifi_ap_bandwidth_get");
+	if(NULL != lynq_wifi_ap_bandwidth_get)
+	{   
+		ret = lynq_wifi_ap_bandwidth_get(idxd,&get_ap_bandwidth);	//< get ap bandwidth
+		if(ret == 0)
+		{
+			printf("get bandwidth success %d\n",get_ap_bandwidth); //< 0 is 20HMz 1 is 80HMz
+		}else{
+			printf("get bandwidth error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_bandwidth_get dlsym error\n");
+	}
+
+
+	lynq_wifi_ap_channel_get = (int (*)(lynq_wifi_index_e idx,int* channel))dlsym(handle_wifi,"lynq_wifi_ap_channel_get");
+	if(NULL != lynq_wifi_ap_channel_get)
+	{   
+		ret = lynq_wifi_ap_channel_get(idxd,&get_ap_channel);	//< get ap channel
+		if(ret == 0)
+		{
+			printf("get channel success %d\n",get_ap_channel); 
+		}else{
+			printf("get channel error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_channel_get dlsym error\n");
+	}
+
+	lynq_wifi_ap_max_sta_get = (int (*)(lynq_wifi_index_e idx,int* max_sta_num))dlsym(handle_wifi,"lynq_wifi_ap_max_sta_get");
+	if(NULL != lynq_wifi_ap_max_sta_get)
+	{   
+		ret = lynq_wifi_ap_max_sta_get(idxd,&get_max_sta_num);	
+		if(ret == 0)
+		{
+			printf("get max_sta_num success %d\n",get_max_sta_num); 
+		}else{
+			printf("get max_sta_num error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_max_sta_get dlsym error\n");
+	}
+
+	sleep(10);
+	lynq_wifi_ap_hide_ssid = (int (*)(lynq_wifi_index_e idx))dlsym(handle_wifi,"lynq_wifi_ap_hide_ssid");
+	if(NULL != lynq_wifi_ap_channel_get)
+	{   
+		ret = lynq_wifi_ap_hide_ssid(idxd);	//< hide the ssid
+		if(ret == 0)
+		{
+			printf("hide ssid success\n"); 
+		}else{
+			printf("hide ssid error\n");
+		}
+	}else{
+		printf("lynq_wifi_ap_hide_ssid dlsym error\n");
+	}
+
+    return 0;
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/wifi-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/wifi-demo.bb
new file mode 100755
index 0000000..9f7e0b9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi-demo/wifi-demo.bb
@@ -0,0 +1,28 @@
+#inherit externalsrc package
+DESCRIPTION = "wifi demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://wifi-demo.cpp file://LICENSE"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "wifi-demo"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	${CXX} -Wall wifi-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/wifi-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/libwifi6.h b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/libwifi6.h
new file mode 100755
index 0000000..c6e4803
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/libwifi6.h
@@ -0,0 +1,221 @@
+/**@File libwifi6.h
+*  @Brief :about function test
+*  @details :
+*  @Author : qs.xiong
+*  @Date : 2022-3-14
+*  @Version : V1.0
+*  @copy ritght : Copyright (c) MobileTek
+*/
+#ifndef __LIBWIFI6_H__
+#define __LIBWIFI6_H__
+
+typedef enum {
+    LYNQ_WIFI_BANDWIDTH_HT10 = 0, // not support in ap mode
+    LYNQ_WIFI_BANDWIDTH_HT20,
+    LYNQ_WIFI_BANDWIDTH_HT40,    // not support in ap mode
+    LYNQ_WIFI_BANDWIDTH_HT80,
+}lynq_wifi_bandwidth_type_m;
+
+typedef enum {
+    LYNQ_WIFI_AUTH_OPEN = 0,
+    LYNQ_WIFI_AUTH_WEP,
+    LYNQ_WIFI_AUTH_WPA_PSK,
+    LYNQ_WIFI_AUTH_WPA2_PSK,
+}lynq_wifi_auth_s;
+
+typedef enum {
+    LYNQ_WIFI_2G_band = 1,
+    LYNQ_WIFI_5G_band,
+    LYNQ_WIFI_2_and_5G_band,  //not support
+}lynq_wifi_band_m;
+
+typedef enum {
+    LYNQ_WIFI_AP_STATUS_DISABLE = 0,   
+    LYNQ_WIFI_AP_STATUS_ENABLE,        //ap is running status
+}lynq_wifi_ap_run_status_s;
+
+typedef enum {
+    LYNQ_WIFI_STA_STATUS_DISABLE = 0,
+    LYNQ_WIFI_STA_STATUS_ENABLE,       //sta is running status
+}lynq_wifi_sta_run_status_s;
+
+typedef enum {
+    LYNQ_WIFI_INTERFACE_0 = 0,      //sta
+    LYNQ_WIFI_INTERFACE_1,         //ap
+}lynq_wifi_index_e;
+
+typedef enum {
+    LYNQ_WIFI_STATUS_DISCONNECT = 0,
+    LYNQ_WIFI_STATUS_CONNECT,
+}lynq_wifi_ap_status_s;
+
+typedef struct ap_info
+{
+    char ap_ip[32];
+    char ap_mac[32];
+    char ap_ssid[32];
+    char psw[64];                      //password 
+    lynq_wifi_auth_s auth;
+    lynq_wifi_band_m band;
+}ap_info_s;
+
+typedef struct device_info
+{
+    char sta_ip[32];
+    char sta_mac[32];
+    char hostname[32];
+    lynq_wifi_ap_status_s status;
+}device_info_s;                
+
+typedef struct scan_info
+{
+    char mac[32];
+    char ssid[32];
+    lynq_wifi_band_m band;
+    lynq_wifi_auth_s auth;
+    int rssi;
+}scan_info_s;
+
+typedef struct ap_detail_info
+{
+    struct ap_info base_info;            // base_info : base info of strcut ap_info 
+    lynq_wifi_ap_run_status_s status;     // status:is not running 1:is running
+    int rssi;                         //[0~199]
+}ap_detail_info_s;
+
+typedef struct saved_ap_info
+{
+    struct ap_info base_info;
+}saved_ap_info_s;
+
+
+// insmod drive and start service of wifi
+int lynq_wifi_enable(void);
+//rmmod drive
+int lynq_wifi_disable(void);
+//set ssid of ap
+int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid);
+//get ap of ssid
+int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char *ap_ssid);
+
+//set frquency for ap
+int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency);
+//get freuency of ap
+int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency);
+
+//set bandwidth for ap
+int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth);
+//get thr bandwidth of ap
+int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m *bandwidth);
+
+//set channel for ap
+int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel);
+//get channel of ap 
+int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel);
+
+//set auth for ap
+int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_auth_s auth);
+//get ap auth
+int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_auth_s *auth);
+
+//start ap
+int lynq_wifi_ap_start(lynq_wifi_index_e idx);
+//stop ap
+int lynq_wifi_ap_stop(lynq_wifi_index_e idx);
+//restart ap
+int lynq_wifi_ap_restart(lynq_wifi_index_e idx);
+
+//hide ssid
+int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx);
+//unhide ssid
+int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx);
+
+//set the password for ap
+int lynq_ap_password_set(lynq_wifi_index_e idx, char *password);
+//get the ap password
+int lynq_ap_password_get(lynq_wifi_index_e idx, char *password);
+
+//set the password to connet to dest_ap
+int lynq_sta_ssid_password_set(lynq_wifi_index_e idx, ap_info_s *ap, char *password);
+int lynq_sta_ssid_password_get(lynq_wifi_index_e idx, ap_info_s *ap, char *password);
+
+//get the ssid of sta
+int lynq_wifi_get_sta_ssid(lynq_wifi_index_e idx,char *sta_ssid);
+//get availble device info such as:ssid mac band rssi status auth
+int lynq_wifi_get_sta_available_ap(lynq_wifi_index_e idx,ap_detail_info_s *info);  
+
+
+
+//get the sta connect ap auth
+int lynq_wifi_get_sta_auth(lynq_wifi_index_e idx, lynq_wifi_auth_s* auth);    //auth 0:OPEN 1:WEP 2:WPA-PSK 3:WPA2-PSK
+
+//sta start connect to dest_ap
+int lynq_wifi_sta_connect(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw);
+//disconnect 
+int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx,char *ssid);
+
+//start sta mode;enable sta
+int lynq_wifi_sta_start(lynq_wifi_index_e idx);
+//stop sta:disable sta
+int lynq_wifi_sta_stop(lynq_wifi_index_e idx);
+
+//Get all device info linked ap
+int lynq_get_ap_device_list(lynq_wifi_index_e idx, ap_info_s **ap, device_info_s ** list,int * len);        //list info:mac ip hostname status  len:device len
+//Get scan_result info
+int lynq_get_scan_list(lynq_wifi_index_e idx, scan_info_s ** list,int * len);                    //list info:mac ssid band auth rssi    len:scan_info len
+int lynq_sta_forget_ap(lynq_wifi_index_e idx, char *ssid,lynq_wifi_auth_s auth);
+int lynq_get_sta_saved_ap(lynq_wifi_index_e idx,saved_ap_info_s ** list,int * len);      //len: length of saved_ap_info
+
+//start scan availbale ap active
+int lynq_wifi_sta_start_scan(lynq_wifi_index_e idx);
+
+/*
+ * event usage:
+ * first declare a funcion like AP_CALLBACK_FUNC_PTR to recv messge from wifi lib
+ * call lynq_reg_ap_event_callback to register whih private data pointer and the callback fuction pointer declared before
+ * when envent comes the last registered callback function will been called
+ */
+
+typedef void(*AP_CALLBACK_FUNC_PTR)(void *priv, lynq_wifi_ap_status_s status);
+int lynq_reg_ap_event_callback(void *priv, AP_CALLBACK_FUNC_PTR cb);
+int lynq_unreg_ap_event_callback(void *priv);
+
+typedef enum {
+    LYNQ_WIFI_STA_STATUS_DISCONNECT = 0,
+    LYNQ_WIFI_STA_STATUS_CONNECT,
+    LYNQ_WIFI_STA_STATUS_SCAN_RESULT,    //finish sta scan 
+}lynq_wifi_sta_status_s;
+typedef enum
+{
+    LYNQ_TIME_OUT = 0,
+    LYNQ_PSW_ERROR,
+    LYNQ_AUTH_ERROR,
+    LYNQ_NOT_FIND_AP,
+}error_number_s;
+
+typedef void(*STA_CALLBACK_FUNC_PTR)(void *priv, lynq_wifi_sta_status_s status, error_number_s number);
+int lynq_reg_sta_event_callback(void * priv, STA_CALLBACK_FUNC_PTR cb);
+int lynq_unreg_sta_event_callback(void * priv);
+
+//get current ap status
+int lynq_get_ap_status(lynq_wifi_index_e idx, lynq_wifi_ap_run_status_s * ap_status);
+//get curent sta status
+int lynq_get_sta_status(lynq_wifi_index_e idx, lynq_wifi_sta_run_status_s * sta_status);
+
+//set the country code 
+int lynq_get_country_code(lynq_wifi_index_e idx, char *country_code);
+//get current country code
+int lynq_set_country_code(lynq_wifi_index_e idx, char *country_code);
+
+//get wlan0/ap0 ip or mac
+int lynq_get_interface_ip(lynq_wifi_index_e idx,char *ip);
+int lynq_get_interface_mac(lynq_wifi_index_e idx,char *mac);   
+
+
+//get current connect ap mac rssi band
+int lynq_get_connect_ap_mac(lynq_wifi_index_e idx,char *mac);
+int lynq_get_connect_ap_rssi(lynq_wifi_index_e idx,int * rssi);
+int lynq_get_connect_ap_band(lynq_wifi_index_e idx,lynq_wifi_band_m * band);
+int lynq_get_connect_ap_ip(lynq_wifi_index_e idx,char *ip);
+
+#endif
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/wifi6-demo.cpp b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/wifi6-demo.cpp
new file mode 100755
index 0000000..57623ff
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/files/wifi6-demo.cpp
@@ -0,0 +1,152 @@
+/**@File wifi_test.c

+*  @Brief :about function test

+*  @details :

+*  @Author : qs.xiong

+*  @Date : 2022-6-21

+*  @Version : V1.1

+*  @copy ritght : Copyright (c) MobileTek

+*/

+

+#include <stdio.h>

+#include <string.h>

+#include <stdlib.h>

+#include <stdlib.h>

+#include <dlfcn.h>

+#include <unistd.h>

+#include <time.h>

+#include <pthread.h>

+

+void *handle_wifi;

+

+#ifdef __cplusplus

+extern "C" {

+#include "libwifi6.h"

+#endif

+#ifdef __cplusplus

+}

+#endif

+

+

+

+int lynq_set_ap_init(char *ssid,char *auth,char *freq,char *password){

+    

+    int ret = -1;

+    int test_freq = -1;   

+    int input_auth = -1;

+	

+    lynq_wifi_index_e idxd;                          //ap

+    lynq_wifi_auth_s set_ap_auth;

+    

+    idxd=LYNQ_WIFI_INTERFACE_1;	

+    input_auth=atoi(auth);

+    set_ap_auth=(lynq_wifi_auth_s)input_auth;

+    test_freq=atoi(freq);

+    ret = lynq_wifi_ap_ssid_set(idxd,ssid);	//< set ssid for ap

+    if(ret == 0)

+    {

+        printf("set ssid success");

+    }else{

+        printf("set ssid error\n");

+    }

+    ret = lynq_wifi_ap_auth_set(idxd,set_ap_auth);	//< set ap work with WPA2 

+    if(ret == 0)

+    {

+        printf("set auth success");

+    }else{

+        printf("set auth error\n");

+    }

+    ret = lynq_ap_password_set(idxd,password);	//< set password for ap

+    if(ret == 0)

+    {

+        printf("set password success");

+    }else{		

+        printf("set password error\n");

+    }

+    ret = lynq_wifi_ap_frequency_set(idxd,test_freq);	//< set freq and 

+    if(ret == 0)

+    {

+        printf("set frequency success");

+    }else{

+        printf("set frequency error\n");

+    }

+    ret = lynq_wifi_ap_start(idxd);	//< start ap

+    if(ret == 0)

+    {

+        printf("start ap success");

+    }else{

+        printf("start ap error\n");

+        }

+            return 0;

+}

+

+

+int lynq_set_sta_init(char * test_ssid,char * auth,char * password){

+    

+    int ret = -1;

+    int input_auth = -1;

+    char test_pass[25] = "";

+    lynq_wifi_index_e idxd = LYNQ_WIFI_INTERFACE_0;

+    

+    input_auth=atoi(auth);   

+    lynq_wifi_auth_s set_ap_auth;

+    set_ap_auth=(lynq_wifi_auth_s)input_auth;	

+

+    ret = lynq_wifi_sta_start(idxd);

+    if ( ret == 0 ){

+    printf("lynq_wifi_sta_start is sucssec\n");

+    }else{

+    printf("lynq_wifi_sta_start is fail\n");

+    }

+

+     ret = lynq_wifi_sta_connect(idxd, test_ssid, set_ap_auth, password);

+     if ( ret == 0 ){

+     printf("lynq_wifi_sta_connect is sucssec\n");

+     }else{

+     printf("lynq_wifi_sta_connect is fail\n");

+     }

+

+     return ret;

+}

+

+

+int main(char * argc,char * argv[]){

+

+    printf("[LYNQ_WIFI_DEMO]--------->[%s,%d] start \n",__FUNCTION__,__LINE__);

+    int cs = -1; 

+    int ret = -1;

+

+

+    ret = lynq_wifi_enable();	//< insmod drv wg870/cyw955572

+    if(ret != 0)

+    {	

+        printf("lynq_wifi_enable defalut\n");

+    }

+    cs=atoi(argv[1]);

+

+    /*

+    *   cs:为0 is sta mode

+    *   cs:为1 is ap  mode

+    *

+    */

+

+    if( cs == 0 ){

+        if(lynq_set_sta_init(argv[2],argv[3],argv[4]) != 0){

+            printf("sta init error");

+        }

+

+    }else if( cs == 1 ){

+        if(lynq_set_ap_init(argv[2],argv[3],argv[4],argv[5]) !=0 ){

+            printf("ap init error\n");

+        }

+    }else{

+        return -1;

+    }

+

+    return 0;

+}

+

+

+

+

+

+

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/wifi6-demo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/wifi6-demo.bb
new file mode 100755
index 0000000..286a50d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-customer/wifi6-demo/wifi6-demo.bb
@@ -0,0 +1,45 @@
+#inherit externalsrc package
+DESCRIPTION = "wifi6 demo"
+LICENSE = "MobileTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+SRC_URI = "file://libwifi6.h file://wifi6-demo.cpp file://LICENSE"
+
+DEPENDS += "lynq-rootfs"
+do_compile[depends] = "lynq-rootfs:do_install"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++ -lpthread -llynq-wifi6"
+
+SOURCES = "$(wildcard *.cpp )"
+
+OBJECTS = "$(SOURCES:.cpp=.o)"
+
+EXECUTABLE = "wifi6-demo"
+S = "${WORKDIR}"
+
+
+INSANE_SKIP_${PN} = "ldflags"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+INHIBIT_PACKAGE_STRIP = "1"
+
+do_compile_prepend() {
+  . ${TOPDIR}/rootbase.sh
+  cp -rf ${ROOTFS_BASE}/* ${STAGING_DIR_HOST}/
+
+}
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	${CXX} -Wall wifi6-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o ${EXECUTABLE}
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/wifi6-demo ${D}${bindir}/
+	install -d ${D}${includedir}
+    install -d ${D}/lib64/
+    install -m 644 ${STAGING_DIR_HOST}/lib64/liblynq-wifi6.so  ${D}/lib64/
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/adbd_5.0.0_r1.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/adbd_5.0.0_r1.bb
new file mode 100644
index 0000000..cf743e1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/adbd_5.0.0_r1.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "adbd binary"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://NOTICE;md5=720f14959428458dd19787dbf1e02b95"
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+SRC_URI = "file://usb.config"
+
+inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/devtools/adb/"
+
+DEPENDS += "uci platform-libs-common"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+EXTRA_OEMAKE = "'BB_SYSROOT_ADD=${STAGING_DIR_HOST}'"
+EXTRA_OEMAKE += "'PACKAGE_ARCH=${PACKAGE_ARCH}'"
+EXTRA_OEMAKE += "'TOP_ROOT=${B}'"
+
+INSANE_SKIP_${PN} += "already-stripped"
+
+FILES_${PN} += "${bindir}/adbd"
+FILES_${PN} += "/etc/config/usb"
+
+do_compile() {
+    oe_runmake all -f ${B}/Makefile
+}
+
+do_install() {
+    install -d ${D}${bindir}
+    install -m 0755 ${B}adbd ${D}${bindir}
+    install -d ${D}/etc/config
+    install -m 0644 ${WORKDIR}/usb.config ${D}/etc/config/usb
+}
+
+do_install_append() {
+    install -d ${D}${bindir}
+    ln -sf /usr/share/init/usb_switch ${D}${bindir}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/files/usb.config b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/files/usb.config
new file mode 100644
index 0000000..cbcd995
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/adbd/files/usb.config
@@ -0,0 +1,5 @@
+config usb 'adb'
+	option serial '0123456789ABCDEF'
+
+config usb 'config'
+	option mipcboot '0'
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/fbtool.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/fbtool.bbappend
new file mode 100644
index 0000000..f26d2bc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/fbtool.bbappend
@@ -0,0 +1,9 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI_append = " file://dl_addr.ini"
+
+SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}"
+do_deploy_append () {
+        install -d ${DEPLOYDIR}
+        install -m 0644 ${WORKDIR}/dl_addr.ini -t ${DEPLOYDIR}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/files/dl_addr.ini b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/files/dl_addr.ini
new file mode 100644
index 0000000..6d7d165
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/datool/files/dl_addr.ini
@@ -0,0 +1,19 @@
+[DA1]

+da1_path=lk.bin

+da1_addr=0x201000

+da1_jump_64=0x1

+

+[DA2]

+da2_path=

+da2_addr=0x0

+

+[FALL_THRU_TO_FB]

+fall_thru_to_fb=0

+

+[Cert]

+cert_path=

+[MEID]

+meid_ctrl=0

+

+[Auth]

+auth_path=

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/align_4kb.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/align_4kb.py
new file mode 100644
index 0000000..c9c9a99
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/align_4kb.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python
+
+import sys
+import os
+
+
+if len(sys.argv) != 2:
+    print('Usage : align_4kb [file_name]')
+    sys.exit()
+
+if not os.path.isfile(sys.argv[1]):
+    print(sys.argv[1] + ' not exist')
+    sys.exit()
+
+if os.path.getsize(sys.argv[1]) % 4096 == 0:
+    print('file size is 4KB alignment')
+    sys.exit()
+
+file_src = sys.argv[1]
+file_dst = os.path.splitext(
+    file_src)[0] + "_original" + os.path.splitext(file_src)[1]
+
+if os.path.exists(file_dst):
+    os.remove(file_dst)
+
+os.rename(file_src, file_dst)
+
+file_src = file_dst
+file_dst = sys.argv[1]
+
+with open(file_dst, 'ab') as fdst:
+    with open(file_src, 'rb') as fsrc:
+        data = fsrc.read()
+        len_diff = 4096 - len(data) % 4096
+        fdst.write(data)
+    if len_diff:
+        fdst.write(b'\xff' * len_diff)
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main-user/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main-user/flashproc.py
new file mode 100644
index 0000000..714a0ad
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main-user/flashproc.py
@@ -0,0 +1,165 @@
+# SPDX-License-Identifier: MediaTekProprietary
+
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'nand0'],
+                ['fastboot', 'flash', 'nand0', 'MBR_NAND'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ubi'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'erase', 'vbmeta_a'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'erase', 'vbmeta_b'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img']]
+}
+
+# return procedure list
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main/flashproc.py
new file mode 100755
index 0000000..b895511
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-main/flashproc.py
@@ -0,0 +1,244 @@
+# SPDX-License-Identifier: MediaTekProprietary
+
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'nand0'],
+                ['fastboot', 'flash', 'nand0', 'MBR_NAND'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ubi'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img'],
+                ['fastboot', 'flash', 'oemdata', 'oemdata.img'],
+                ['fastboot', 'flash', 'oemapp_a', 'oemapp.img'],
+                ['fastboot', 'flash', 'oemapp_b', 'oemapp.img'],
+                ['fastboot', 'flash', 'oemapp2_a', 'oemapp2.img'],
+                ['fastboot', 'flash', 'oemapp2_b', 'oemapp2.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'erase', 'vbmeta_a'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'erase', 'vbmeta_b'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img'],
+                ['fastboot', 'erase', 'oemapp_a'],
+                ['fastboot', 'flash', 'oemapp_a', 'oemapp.img'],
+                ['fastboot', 'erase', 'oemapp_b'],
+                ['fastboot', 'flash', 'oemapp_b', 'oemapp.img'],
+                ['fastboot', 'erase', 'oemapp2_a'],
+                ['fastboot', 'flash', 'oemapp2_a', 'oemapp2.img'],
+                ['fastboot', 'erase', 'oemapp2_b'],
+                ['fastboot', 'flash', 'oemapp2_b', 'oemapp2.img']]
+}
+
+userdataprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'erase', 'vbmeta_a'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'erase', 'vbmeta_b'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img'],
+                ['fastboot', 'erase', 'oemapp_a'],
+                ['fastboot', 'flash', 'oemapp_a', 'oemapp.img'],
+                ['fastboot', 'erase', 'oemapp_b'],
+                ['fastboot', 'flash', 'oemapp_b', 'oemapp.img'],
+                ['fastboot', 'erase', 'oemapp2_a'],
+                ['fastboot', 'flash', 'oemapp2_a', 'oemapp2.img'],
+                ['fastboot', 'erase', 'oemapp2_b'],
+                ['fastboot', 'flash', 'oemapp2_b', 'oemapp2.img'],
+                ['fastboot', 'erase', 'oemdata'],
+                ['fastboot', 'flash', 'oemdata', 'oemdata.img'],
+                ['fastboot', 'erase', 'userdata'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+# return procedure list
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
+    
+def getFlashUserDataProc(product):
+    try:
+        ret = userdataprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-smt/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-smt/flashproc.py
new file mode 100644
index 0000000..638887b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-smt/flashproc.py
@@ -0,0 +1,150 @@
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'nand0'],
+                ['fastboot', 'flash', 'nand0', 'MBR_NAND'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ubi'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img']]
+}
+
+# return procedure list
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp1/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp1/flashproc.py
new file mode 100644
index 0000000..bc1bd55
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp1/flashproc.py
@@ -0,0 +1,165 @@
+# SPDX-License-Identifier: MediaTekProprietary
+
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'nand0'],
+                ['fastboot', 'flash', 'nand0', 'MBR_NAND'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'mcf1_a', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf1_b', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_a', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_b', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ubi'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'vbmeta_a', 'vbmeta.img'],
+                ['fastboot', 'flash', 'vbmeta_b', 'vbmeta.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img']]
+}
+
+# return procedure list
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2-user/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2-user/flashproc.py
new file mode 100644
index 0000000..a7740bd
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2-user/flashproc.py
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: MediaTekProprietary
+
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'mmc0'],
+                ['fastboot', 'erase', 'mmc0boot0'],
+                ['fastboot', 'flash', 'mmc0boot0', 'MBR_EMMC_BOOT0'],
+                ['fastboot', 'flash', 'mmc0', 'MBR_EMMC'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ext4'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'mcf1_a', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf1_b', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_a', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_b', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ext4'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'spm_a'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'erase', 'hsm_bl'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img']]
+}
+
+# return procedure list
+
+
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2/flashproc.py
new file mode 100644
index 0000000..a7740bd
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp2/flashproc.py
@@ -0,0 +1,173 @@
+# SPDX-License-Identifier: MediaTekProprietary
+
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'mmc0'],
+                ['fastboot', 'erase', 'mmc0boot0'],
+                ['fastboot', 'flash', 'mmc0boot0', 'MBR_EMMC_BOOT0'],
+                ['fastboot', 'flash', 'mmc0', 'MBR_EMMC'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ext4'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'mcf1_a', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf1_b', 'MCF_MOD_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_a', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'mcf2_b', 'MCF_OEM_OTA.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ext4'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'spm_a'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'erase', 'hsm_bl'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img']]
+}
+
+# return procedure list
+
+
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp3/flashproc.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp3/flashproc.py
new file mode 100644
index 0000000..958098c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/auto2735evb-ivt-vp3/flashproc.py
@@ -0,0 +1,157 @@
+#!/usr/bin/python
+import os
+
+procedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'download:spmfw', 'spmfw.img'],
+                ['fastboot', 'flash', 'download:mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'download:medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'download:sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'download:dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'download:hsmos', 'hsm_os.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'nand0'],
+                ['fastboot', 'flash', 'nand0', 'MBR_NAND'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'spm_a', 'spmfw.img'],
+                ['fastboot', 'flash', 'spm_b', 'spmfw.img'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'flash', 'hsm_bl', 'hsm_bl.img'],
+                ['fastboot', 'flash', 'hsm_os', 'hsm_os.img'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img'],
+                ['fastboot', 'flash', 'nvram', 'nvram.ubi'],
+                ['fastboot', 'flash', 'mcupm', 'mcupm.img'],
+                ['fastboot', 'flash', 'medmcu', 'medmcu.img'],
+                ['fastboot', 'flash', 'sspm', 'sspm.img'],
+                ['fastboot', 'flash', 'dpm', 'dpm.img'],
+                ['fastboot', 'flash', 'userdata', 'userdata.img']]
+}
+
+userprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+bootprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'oem', 'set_active', '0']]
+}
+
+testprocedures = {
+    # product   : fastboot args
+    'DEFAULT': [['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'hsm_bl.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'EMPTY', 'bl2.img'],
+                ['fastboot', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'flash', 'download:tz', 'tee.img'],
+                ['fastboot', 'flash', 'download:bl33', 'bl33.img'],
+                ['fastboot', 'oem', 'continue'],
+                ['fbWait'],
+                ['fastboot', 'erase', 'bl2'],
+                ['fastboot', 'flash', 'bl2', 'bl2.img'],
+                ['fastboot', 'erase', 'bl33'],
+                ['fastboot', 'flash', 'bl33', 'bl33.img'],
+                ['fastboot', 'erase', 'dtbo'],
+                ['fastboot', 'flash', 'dtbo', 'combo.dtbo'],
+                ['fastboot', 'erase', 'proinfo'],
+                ['fastboot', 'flash', 'proinfo', 'sncfg.ubi'],
+                ['fastboot', 'erase', 'boot_a'],
+                ['fastboot', 'flash', 'boot_a', 'boot.img'],
+                ['fastboot', 'erase', 'boot_b'],
+                ['fastboot', 'flash', 'boot_b', 'boot.img'],
+                ['fastboot', 'erase', 'system_a'],
+                ['fastboot', 'flash', 'system_a', 'system.img'],
+                ['fastboot', 'erase', 'system_b'],
+                ['fastboot', 'flash', 'system_b', 'system.img'],
+                ['fastboot', 'erase', 'md1img_a'],
+                ['fastboot', 'flash', 'md1img_a', 'md1img.img'],
+                ['fastboot', 'erase', 'md1img_b'],
+                ['fastboot', 'flash', 'md1img_b', 'md1img.img'],
+                ['fastboot', 'erase', 'md1dsp_a'],
+                ['fastboot', 'flash', 'md1dsp_a', 'md1dsp.img'],
+                ['fastboot', 'erase', 'md1dsp_b'],
+                ['fastboot', 'flash', 'md1dsp_b', 'md1dsp.img'],
+                ['fastboot', 'erase', 'tee_a'],
+                ['fastboot', 'flash', 'tee_a', 'tee.img'],
+                ['fastboot', 'erase', 'tee_b'],
+                ['fastboot', 'flash', 'tee_b', 'tee.img']]
+}
+
+# return procedure list
+def getFlashProc(product):
+    try:
+        ret = procedures[product.upper()]
+        return ret
+    except:
+        return None
+
+
+def getFlashUserProc(product):
+    try:
+        ret = userprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashBootProc(product):
+    try:
+        ret = bootprocedures[product.upper()]
+        return ret
+    except:
+        return None
+
+def getFlashTestProc(product):
+    try:
+        ret = testprocedures[product.upper()]
+        return ret
+    except:
+        return None
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/flashimage.py b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/flashimage.py
new file mode 100755
index 0000000..557af18
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/files/flashimage.py
@@ -0,0 +1,398 @@
+# SPDX-License-Identifier: MediaTekProprietary
+#!/usr/bin/python
+
+import os
+import os.path
+import sys
+import platform
+import argparse
+import shlex
+import subprocess
+import time
+import re
+
+################################################################################
+# check python version
+if sys.hexversion >= 0x02070000:
+    pass
+else:
+    print('Please install Python 2.7.x or newer to run this script')
+    exit(1)
+
+# override input() in python2
+try:
+    input = raw_input
+except NameError:
+    pass
+
+################################################################################
+
+verbose = False
+for_nata = False
+skipFlash = False
+
+fbtool = 'fbtool.py'
+fastboot = 'fastboot'
+
+system = platform.system()
+machine = platform.machine()
+product_out = os.path.abspath('.')
+
+if 'Windows' in system or 'CYGWIN' in system:
+    fastboot += '.exe'
+elif 'Linux' in system:
+    if 'x86_64' in machine:
+        fastboot += '-linux-x86_64'
+    elif 'arm' in machine or 'aarch64' in machine:
+        fastboot += '-linux-arm'
+elif 'Darwin' in system:
+    fastboot += '-darwin'
+
+# Generate image list from procedure list
+
+
+def getImageList(procs):
+    imgs = []
+    try:
+        for p in procs:
+            if p[0] == 'fastboot' and p[1] == 'flash' and p[3] not in imgs:
+                imgs.append(p[3])
+    except Exception as e:
+        print(e)
+    return imgs
+
+
+def call(cmd):
+    '''cmd: the command list for subprocess.call'''
+    if verbose:
+        print('call:', ' '.join(cmd))
+    if for_nata is True:
+        return subprocess.call(cmd, stdout=sys.stdout, stderr=subprocess.STDOUT, shell=True)
+    else:
+        return subprocess.call(cmd)
+
+def check_output(cmd):
+    '''cmd: the command list for subprocess.check_output'''
+    if verbose:
+        print('check_output:', ' '.join(cmd))
+    return subprocess.check_output(formatArgsForSubprocess(cmd), stderr=subprocess.STDOUT)
+
+
+def checkImage(filename, needreboot=True, _verbose=False):
+    filepath = os.path.join(product_out, filename)
+    if os.path.exists(filepath):
+        if _verbose:
+            print(filename.rjust(39, ' ') + ':' + ' PASS')
+        return filepath
+    if needreboot:
+        print(filename.rjust(39, ' ') + ':' + ' FAIL')
+        if args.nata:
+            print('[AT] Image not exist!')
+        else:
+            call([fastboot, 'reboot'])
+        exit(1)
+    return None
+
+# return 0 if success
+
+
+def cmdRun(cmd, dryrun=False):
+    ret = 1
+    raw_cmd = []
+    if cmd[0] == 'daWait':
+        daWait()
+        print('')
+        return 0
+    elif cmd[0] == 'fbWait':
+        fbWait()
+        print('')
+        return 0
+    elif cmd[0] == 'fastboot':  # processing fastboot commands
+        cmd[0] = fastboot
+        if cmd[1] == 'flash':
+            # check if image path exits and valid
+            filepath = checkImage(cmd[3], False, False)
+            if filepath != None:
+                if 'CYGWIN' in system:
+                    p = subprocess.check_output(
+                        'cygpath --absolute --mixed %s' % filepath)
+                    if p:
+                        filepath = p.strip()
+                raw_cmd += [cmd[0], cmd[1], cmd[2], filepath]
+        else:
+            raw_cmd += cmd
+    else:
+        print('FAIL: Unknown command!')
+        return -1
+    if dryrun:
+        print(' '.join(raw_cmd))
+        ret = 0
+    else:
+        ret = call(raw_cmd)
+        # Bypass fastboot continue
+        if cmd[1] == 'continue':
+            ret = 0
+        if ret == 0 and cmd[0] == 'fastboot' and cmd[1] == 'reboot-bootloader' and not dryrun:
+            fbWait()
+    return ret
+
+
+def daWait(secs=60):
+    print('Waiting for DA mode')
+    ret = None
+    for i in range(secs):
+        sys.stdout.write('.')
+        sys.stdout.flush()
+        time.sleep(1)
+        ret = check_output('python %s ' % fbtool)
+        if ret != None and len(ret) != 0:
+            print('')
+            print('datool - device detected: ')
+            break
+        if i == secs - 1:
+            print('No device detected. Please ensure that datool is running')
+            exit(1)
+
+
+def fbWait(secs=60):
+    print('Waiting for fastboot mode')
+    ret = None
+    for i in range(secs):
+        sys.stdout.write('.')
+        sys.stdout.flush()
+        time.sleep(1)
+        ret = check_output('%s devices' % fastboot)
+        if ret != None and len(ret) != 0:
+            print('')
+            print('Fastboot - device detected: %s' % (ret.split())[0])
+            break
+        if i == secs - 1:
+            print('No device detected. Please ensure that fastboot is running on the target device')
+            exit(1)
+
+
+def cmdReboot(toBootloader=True):
+    if toBootloader:
+        call([fastboot, 'reboot-bootloader'])
+        fbWait()
+    else:
+        call([fastboot, 'reboot'])
+
+
+def formatArgsForSubprocess(cmd):
+    if not 'Windows' in system:
+        return shlex.split(cmd)
+    else:
+        return cmd
+
+
+if __name__ == '__main__':
+    # parse args
+    parser = argparse.ArgumentParser(
+        description='''
+Auto device flasher, Python 2.7.x required
+''',
+        formatter_class=argparse.RawTextHelpFormatter)
+    parser.add_argument('partition', nargs='?', default='all',
+                        help='partition to flash [default: all] , not include test partition')
+    parser.add_argument('-d', '--dryrun', action='store_true', default=False,
+                        help='dryrun for debug, no image would be flashed')
+    parser.add_argument('-u', '--user', action='store_true', default=False,
+                        help='Flash user data partition')
+    parser.add_argument('-b', '--boot', action='store_true', default=False,
+                        help='Flash boot partition')
+    parser.add_argument('-t', '--test', action='store_true', default=False,
+                        help='Flash test partition')
+    parser.add_argument('-s', '--userdata', action='store_true', default=False,
+                        help='Flash userdata partition')
+    parser.add_argument('-v', '--verbose', action='store_true', default=False,
+                        help='print more information while flashing')
+    parser.add_argument('-n', '--nata', action = 'store_true', default = False,
+                        help = 'Flash image in nata')
+    parser.add_argument('--toolsdir', default=None,
+                        help='''\
+The tools dir where to find fbtool and fastboot.
+Path priority order:
+    1. --toolsdir specified
+    2. current directory
+    3. $PATH
+''')
+    parser.add_argument('--productdir', default=None,
+                        help='''\
+The product out directory where to find images.
+Path priority order:
+    1. --productdir specified
+    2. current directory
+''')
+
+    args = parser.parse_args()
+    verbose = args.verbose
+    if args.dryrun:
+        verbose = True
+
+    print('')
+    parser.print_usage()
+    print('')
+    print(''.center(80, '*'))
+    print(('Running flasher on ' + platform.platform()).center(80))
+    print(''.center(80, '*'))
+    print('')
+
+    if args.nata:
+        for_nata = True
+        args.toolsdir = os.path.abspath(os.path.dirname(__file__))
+        args.productdir = args.toolsdir
+        print ('[AT] Flash Dir: %s' %args.productdir)
+
+    try:
+        from flashproc import getFlashProc
+    except ImportError as e:
+        print('ImportError:', e)
+        print('')
+        exit(1)
+    try:
+        from flashproc import getFlashUserProc
+    except:
+        getFlashUserProc = getFlashProc
+    try:
+        from flashproc import getFlashBootProc
+    except:
+        getFlashBootProc = getFlashProc
+    try:
+        from flashproc import getFlashTestProc
+    except:
+        getFlashTestProc = getFlashProc
+    try:
+        from flashproc import getFlashUserDataProc
+    except:
+        getFlashUserDataProc = getFlashProc
+
+    # check flash tools
+    toolsdir = ''
+    try:
+        if args.toolsdir:
+            toolsdir = os.path.abspath(args.toolsdir)
+            fbtool = os.path.join(toolsdir, fbtool)
+            fastboot = os.path.join(toolsdir, fastboot)
+            if not os.path.exists(fbtool) or not os.path.exists(fastboot):
+                raise Exception(str(toolsdir))
+        else:
+            toolsdir = os.path.abspath('.')
+            if os.path.exists(os.path.join(toolsdir, fbtool)) and os.path.exists(os.path.join(toolsdir, fastboot)):
+                fbtool = os.path.join(toolsdir, fbtool)
+                fastboot = os.path.join(toolsdir, fastboot)
+    except Exception as e:
+        print('Can not find fbtool or fastboot in %s' % str(e))
+        print('')
+        exit(1)
+
+    devProduct = 'DEFAULT'
+
+    procs = getFlashProc(devProduct)
+    if args.user:
+        procs = getFlashUserProc(devProduct)
+    if args.boot:
+        procs = getFlashBootProc(devProduct)
+    if args.test:
+        procs = getFlashTestProc(devProduct)
+    if args.userdata:
+        procs = getFlashUserDataProc(devProduct)
+    if procs:
+        if verbose:
+            print('Flash procedure'.center(80))
+            print(''.center(80, '-'))
+            for p in procs:
+                print('fastboot', ' '.join(p))
+            print('')
+    else:
+        print('Can not retrieve flash procedure according to product type of', devProduct)
+        print('Exit !')
+        exit(1)
+
+    # check image path
+    if args.productdir:
+        # take user specific product directory
+        product_out = os.path.abspath(args.productdir)
+    else:
+        # check current directory
+        product_out = os.path.abspath('.')
+        for img in getImageList(procs):
+            if checkImage(img, False, False) is None:
+                product_out = None
+                break
+        if product_out is None:
+            product_out = os.getenv('PRODUCT_OUT', '.')
+    product_out = os.path.abspath(product_out)
+
+    print(''.center(80, '*'))
+    print('* flash images under:'.ljust(79, ' ') + '*')
+    print('*     ' + product_out.ljust(73, ' ') + '*')
+    print(''.center(80, '*'))
+    print('')
+
+    # check images
+    print('Checking image'.center(80))
+    print(''.center(80, '-'))
+    images = getImageList(procs)
+    try:
+        for img in images:
+            checkImage(img, _verbose=True)
+    except Exception as e:
+        print(e)
+        time.sleep(2)
+        if args.nata:
+            print ('[AT] Check image fail, stop to flash!')
+        else:
+            cmdReboot(False)
+            input('Fail, press enter to exit: ')
+        exit(1)
+    # For NATA
+    if args.nata:
+        #POWER OFF
+        print ('[AT] POWER PIN KEY:0, %s' %time.ctime())
+        time.sleep(2)
+        #PRESS DOWNLOAD KEY
+        print ('[AT] DOWNLOAD KEY:1, %s' %time.ctime())
+        time.sleep(2)
+        #POWER ON
+        print ('[AT] POWER PIN KEY:1, %s' %time.ctime())
+        time.sleep(2)
+
+    # align 4kb for modem related images
+    os.system('python align_4kb.py \"%s\"' % checkImage('md1img.img', False, False))
+    os.system('python align_4kb.py \"%s\"' % checkImage('md1dsp.img', False, False))
+
+    # flash images
+    print('')
+    print('Start flashing'.center(80))
+    print(''.center(80, '-'))
+    try:
+        for proc in procs:
+            if skipFlash == False:
+                if 0 != cmdRun(proc, args.dryrun):
+                    raise Exception('<<FAILED>> %s' % ' '.join(proc))
+            else:
+                if proc[0] == 'fastboot' and proc[1] == 'flash':
+                    print('Skip flashing', proc[3])
+    except Exception as e:
+        print(e)
+        if args.nata:
+            #RELEASE DOWNLOAD KEY
+            print ('[AT] DOWNLOAD KEY:0, %s' %time.ctime())
+            time.sleep(2)
+        time.sleep(2)
+        cmdReboot(False)
+        exit(1)
+
+    if args.nata:
+        #RELEASE DOWNLOAD KEY
+        print ('[AT] DOWNLOAD KEY:0, %s' %time.ctime())
+        sys.stdout.flush()
+        time.sleep(2)
+    time.sleep(2)
+    cmdReboot(False)
+    print('')
+    if args.nata:
+        print ('[AT] Flash Success')
+    else:
+        print('Success')
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/flashtool.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/flashtool.bbappend
new file mode 100644
index 0000000..062cc1c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/flashtool/flashtool.bbappend
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI = "file://README file://flashimage.py file://align_4kb.py file://${MACHINE}"
+
+SSTATE_DUPWHITELIST += "${DEPLOY_DIR_IMAGE}"
+
+do_compile[nostamp] = "1"
+
+do_deploy () {
+	install -d ${DEPLOYDIR}
+	install -m 755 ${WORKDIR}/flashimage.py -t ${DEPLOYDIR}
+	install -m 755 ${WORKDIR}/align_4kb.py -t ${DEPLOYDIR}
+	install -m 755 ${WORKDIR}/${MACHINE}/flashproc.py -t ${DEPLOYDIR}
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bb
new file mode 100644
index 0000000..123c389
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "A signing tool to pack image"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=41dcd72a73784acc0e6d9713bce9b087"
+DEPENDS = "python-native python-pycrypto-native \
+          python-setuptools-native python-six-native \
+          python-ecdsa-native python-cryptoplus-native python-jsoncomment-native"
+BBCLASSEXTEND = "native"
+
+inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/devtools/packer"
+
+do_install() {
+	install -d ${D}${datadir}/packer
+	install -m 644 ${S}/${TARGET_PLATFORM}/mipack.py ${D}${datadir}/packer
+	install -m 644 ${S}/${TARGET_PLATFORM}/cryptoSB.py ${D}${datadir}/packer
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bbappend
new file mode 100644
index 0000000..8d12424
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-devtools/packer/packer_1.0.0.bbappend
@@ -0,0 +1,6 @@
+
+do_install_append () {
+	install -m 644 ${S}/${TARGET_PLATFORM}/test_pkcs1_15_mytest.py ${D}${datadir}/packer
+	install -m 644 ${S}/${TARGET_PLATFORM}/test_pkcs1_pss_mytest.py ${D}${datadir}/packer
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/libxcrypt/libxcrypt_4.1.1.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/libxcrypt/libxcrypt_4.1.1.bbappend
new file mode 100644
index 0000000..cf98466
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/libxcrypt/libxcrypt_4.1.1.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+CFLAGS = "-Wno-error=inline"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps/sysctl.conf b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps/sysctl.conf
new file mode 100644
index 0000000..d57965c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps/sysctl.conf
@@ -0,0 +1,65 @@
+# This configuration file is taken from Debian.
+#
+# /etc/sysctl.conf - Configuration file for setting system variables
+# See sysctl.conf (5) for information.
+#
+
+#kernel.domainname = example.com
+
+# Uncomment the following to stop low-level messages on console
+#kernel.printk = 4 4 1 7
+
+##############################################################3
+# Functions previously found in netbase
+#
+
+# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
+# Turn on Source Address Verification in all interfaces to
+# prevent some spoofing attacks
+net.ipv4.conf.default.rp_filter=0
+net.ipv4.conf.all.rp_filter=0
+
+# Uncomment the next line to enable TCP/IP SYN cookies
+#net.ipv4.tcp_syncookies=1
+
+# Uncomment the next line to enable packet forwarding for IPv4
+#net.ipv4.ip_forward=1
+
+# Uncomment the next line to enable packet forwarding for IPv6
+#net.ipv6.conf.all.forwarding=1
+
+
+###################################################################
+# Additional settings - these settings can improve the network
+# security of the host and prevent against some network attacks
+# including spoofing attacks and man in the middle attacks through
+# redirection. Some network environments, however, require that these
+# settings are disabled so review and enable them as needed.
+#
+# Ignore ICMP broadcasts
+#net.ipv4.icmp_echo_ignore_broadcasts = 1
+#
+# Ignore bogus ICMP errors
+#net.ipv4.icmp_ignore_bogus_error_responses = 1
+#
+# Do not accept ICMP redirects (prevent MITM attacks)
+#net.ipv4.conf.all.accept_redirects = 0
+#net.ipv6.conf.all.accept_redirects = 0
+# _or_
+# Accept ICMP redirects only for gateways listed in our default
+# gateway list (enabled by default)
+# net.ipv4.conf.all.secure_redirects = 1
+#
+# Do not send ICMP redirects (we are not a router)
+#net.ipv4.conf.all.send_redirects = 0
+#
+# Do not accept IP source route packets (we are not a router)
+#net.ipv4.conf.all.accept_source_route = 0
+#net.ipv6.conf.all.accept_source_route = 0
+#
+# Log Martian Packets
+#net.ipv4.conf.all.log_martians = 1
+#
+
+#kernel.shmmax = 141762560
+vm.watermark_scale_factor = 100
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps_%.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps_%.bbappend
new file mode 100644
index 0000000..3a344be
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-extended/procps/procps_%.bbappend
@@ -0,0 +1,17 @@
+
+FILESEXTRAPATHS_append := ":${THISDIR}/${PN}"
+
+SRC_URI += " \
+	file://sysctl.conf \
+"
+
+DEPENDS = "ncurses"
+
+inherit autotools gettext pkgconfig update-alternatives
+
+FILES_${PN} += " ${sysconfdir}/sysctl.conf"
+
+do_install_append()  {
+    install -d ${D}${sysconfdir}
+    install -m 0644 ${TOPDIR}/../meta/meta-lynqSDK-T800/recipes-extended/procps/procps/sysctl.conf ${D}${sysconfdir}/sysctl.conf
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/LICENSE
new file mode 100644
index 0000000..1f38e30
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("LYNQ") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to LYNQ Inc. and/or its licensors. Without
+the prior written permission of LYNQ inc. and/or its licensors, any
+reproduction, modification, use or disclosure of LYNQ Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("LYNQ SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.json b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.json
new file mode 100644
index 0000000..5f9a70a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.json
@@ -0,0 +1,236 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection 
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* cert */
+			"img_file": "cert.bin",
+			"img_enc_inf": 0,
+			"img_enc_alg": 0,
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		},
+		{
+			/* bootloader */
+			"img_file": "bootloader.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* cert */
+			"cmd": "LOAD",
+			"img_file": "cert.bin",
+			"addr": "0x00040000"
+		},
+		{
+			/* HSM bootloader */
+			"cmd": "LOAD",
+			"img_file": "bootloader.bin",
+			"addr": "0x00020000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 1,
+			"addr": "0x00020400"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+	
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.jsonback b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.jsonback
new file mode 100644
index 0000000..26f657e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/bootloader.jsonback
@@ -0,0 +1,223 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection 
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* bootloader */
+			"img_file": "bootloader.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* HSM bootloader */
+			"cmd": "LOAD",
+			"img_file": "bootloader.bin",
+			"addr": "0x00020000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 1,
+			"addr": "0x00020400"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+	
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.json b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.json
new file mode 100644
index 0000000..5f3138c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.json
@@ -0,0 +1,223 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* HSM OS */
+			"img_file": "hsm.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* HSM OS */
+			"cmd": "LOAD",
+			"img_file": "hsm.bin",
+			"addr": "0x131CA000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 1,
+			"addr": "0x131CA400"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.jsonback b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.jsonback
new file mode 100644
index 0000000..5f3138c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/files/hsm.jsonback
@@ -0,0 +1,223 @@
+{
+	"version": "0.0.2",
+	"magic_num": "0x000100000046504d",
+	"bl_version": 0,
+
+	/* NIST P256 hex key */
+	"public_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	/* NIST P384 hex key */
+	# "public_key": "0xcc72f96eb58964c8726ebe6978139ef567499d38af85055bebd2c9adac992c1c844d33117e12f9f3ad110e951f93b1e6b82ee2b5e62cee846a5218e079356ef4bc338061acef96ad907b06c0655356ffc64ae2bf5b82b31720409e0423bb6f9a",
+
+	/* RSA modulus */
+	"sbc_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+
+	/*
+	0: IMG_AUTH_NONE
+	1: IMG_AUTH_CUS
+	*/
+	"sbc_auth_inf": 0,
+
+	/* public key hash algorithm selection
+	0: KEY_HASH_SHA256
+	1: KEY_HASH_SHA384
+	*/
+	"sbc_key_hash": 0,
+
+	/* signature algorithm
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: AES CMAC
+	3: HMAC SHA256
+	4: NONSB SHA256
+	5: NONSB SHA384
+	*/
+	"sbc_auth_alg": 0,
+
+	/* signature algorithm v2
+	0: ECDSA NIST p256
+	1: ECDSA NIST p384
+	2: ECDSA NIST p521
+	3: RSA2048
+	4: RSA3072
+	5: RSA4096
+	*/
+	"sbc_auth_alg_dsa": 0,
+
+	/* header hash algorithm selection
+	0: DSA_HASH_SHA256
+	1: DSA_HASH_SHA384
+	2: DSA_HASH_SHA512
+	*/
+	"sbc_auth_alg_hash": 0,
+
+	/* RSA padding selection
+	0: SSA_PKCS1_V1_5
+	1: SSA_PSS
+	*/
+	"sbc_rsa_pad_sel": 0,
+
+	/* set RSA public key byte size */
+	"sbc_pub_key_len": 64,
+
+	/* images information */
+	"images": [
+		{
+			/* HSM OS */
+			"img_file": "hsm.bin",
+
+			/* infomations of image encryption and key usage
+			0: none
+			1: customer
+			2: master
+			*/
+			"img_enc_inf": 0,
+
+			/* image encryption algorithm
+			0: AES128 ECB
+			1: AES128 CBC
+			2: AES256 ECB
+			3: AES256 CBC
+			*/
+			"img_enc_alg": 0,
+
+			/* AES IV vector*/
+			"img_iv": "0xa5a5a5a5c1c1c1c1e2e2e2e298989898",
+		}
+
+	],
+
+	"load_srcipt_cmd": [
+		{
+			/* HSM OS */
+			"cmd": "LOAD",
+			"img_file": "hsm.bin",
+			"addr": "0x131CA000"
+		},
+		{
+			"cmd": "MCU-ENTRY",
+			"mcu_id": 1,
+			"addr": "0x131CA400"
+		}
+	],
+
+	/*
+	0: sign key and enc key input are from json file
+	1: sign key and enc key input are from the command line
+	*/
+	"cmd_line_key": 0,
+
+	/* sign key : ECDSA + PEM format
+	0: use above "sign_priv_key" for AES128 CMAC, HMAC-SHA25, ECDSA
+	1: key is from pem format, just for ECDSA
+	*/
+	"pem_key_format": 0,
+
+	/* sign key for ECDSA NIST p256 */
+	"sign_priv_key": "0xbc8f18dab95489a01d12b742a270d011ba41386ee52703341dae9110441e0d16",
+
+	/* sign key for ECDSA NIST p384 */
+	#"sign_priv_key": "0x55640ac9f5c622ac328e95fb11ebc8749b1e3b69007a19a9e44681a68f8ebc1dc58257b967b19e8dea7a7bf129b6bb4c",
+
+	/* sign key for AES128 CMAC, HMAC-SHA256 */
+	# "sign_priv_key": "0x000102030405060708090a0b0c0d0e0f",
+
+	/* encrypt symmetric key */
+	"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f",
+	#"aes_enc_sym_key": "0x000102030405060708090a0b0c0d0e0f00000000000000000000000000000000",
+
+	/* change key field enable */
+	"change_key_en": 0,
+
+	/* change key field
+	ck_magic: 16 bytes
+	ck_soc_id: 32 bytes
+	ck_pub_key: 512 bytes
+	ck_auth_algo: 4 bytes
+	ck_pub_key_len: 4 bytes
+	ck_signature:
+	*/
+	"ck_magic_num": "0x3c3d3e3f434b4669656c642a2b2c2d30",
+	"ck_soc_id": "0x0000000000000000cafecafecafecafe0000000000000000cafecafecafecafe",
+	/* if ck, ck_pub_key and sign_priv_key are pair */
+	"ck_pub_key": "0x2ecc5c840b628386025e74b69180ce2afced3c4bcd53a31d53e6a0dc631d9120223f3e9d4c98b8e243dbe22719046bd990a81d54c9f5b75b744ad4caccfae50b",
+	"ck_rsa_n": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		/*
+		0: ECDSA NIST p256
+		1: ECDSA NIST p384
+		2: ECDSA NIST p521
+		3: RSA2048
+		4: RSA3072
+		5: RSA4096
+		*/
+	"ck_auth_algo": 0,
+	"ck_pub_key_len": 3,
+
+	/* sign ck's priv key, ECDSA NIST p256 */
+	"sign_ck_priv_key": "0xc1bee4fa86af8684677caeeea88ab0723e554aef0160b8fc653c0e00080f4f78",
+
+	/* RSA information */
+	/* PKCS1 v15 padding */
+	"rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"rsa_data_pss": [
+		{
+
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* ck rsa region */
+	/* PKCS1 v15 padding */
+	"ck_rsa_data": [
+		{
+			/* RSA test pattern */
+			/* RSA2048 + SHA256 + PKSC1_v15 padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "0f1982057d5dad90121bd0ff90fce9cb6d2bdcee97d96e3453645353e6e431e6d86d1670af57e6744c3bd07755838f86d3537de7df48a5f6b6dace19194c7ca1d48e93d91586776684602c29438ae913a3d79fbcc6e7fde965829a74243b3949857ab01e12dede948f144bbb99430817854fda6cb39268b4b8753168a81e807d7ec9f7edb74f6a8c1a152413d00745e8ac3cae8bf58d5c9e38f7c5dbae604431e8f338c5bf10e49d4ee56ba8d87103d649337fe9c70b821f1f330cbbeace8562e89b2422a4b4f403a31ddb1d89237dc9d7380fdfc482b11cf805ec1a2328369dcd762b2164b097dfba16595e9a80402cbe53584b62ec89c34ca5f4bffb6bc629",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+	/* pkcs1 pss padding */
+	"ck_rsa_data_pss": [
+		{
+			/* RSA2048 + SHA256 + PKSC1_PSS padding */
+			"n": "b9bd2e2ed0f531dc00a0f44bf36caa1c2358d3c48645cb51bec95a3a38fb7f99fc646814da5f6b410ea9897fa0d8bfa8a1bd21065a66e105918175248a6b089c39dc9805f03ab4f9a3f43684c8f9b8cd7fbe2ab120eeda08200c370cb51fe7258f72130a962e551581157aec40bc99435d4cc50e74a878a428b0dc739cd518b98089b162ca609ce84bce7cf303a0174d1520505775e57f685b63b8e16646486d131582b08be3b7b379a7e076791fe32537bc464e847dcb4aed95286a3b70af320f30e9ac44c26ce8cf093e3f851a9d96ebd6876f93f330df94c4cf07b1dddab160d287aebe0fa4cf050fe9fb5cb04f8f85c5d3454ef6bc17581a41793359c61b",
+			"e": "010001",
+			"d": "3a44ef4820a5cb8e8963f5401e8de8900b46c2a8d4b6f0a224886695fd6a690d95f0a9f660cbae8a2a5f659374928b0e0c2f993cb4ffb1785dbd8f52775a3cc9461dbe539e99cc4cc4f2c867bfe517e4e03e7886391eb5a7f6e5de1f4e7343c0b4cfc4c97d73eb9d6371a9ae946096745bc0c9d14f27cb3134d2c7563dcd5c83cc2c817446175812cb4040275e6b4c91d3bad61de64a3cc14973e11108170f186ce1b124457e7bcc28768d69ae60bd4e2e275d72b6eedb157cdc1bbd2e802c86b478c0c76cd2fa2e4ed54f274a84f57a50716c0ff8df37a2ad409b1a3335332cd4225868dd4cfd4304b3eb4884630e1977fad20c7ce9ed9467632658296a0601",
+			"msg2hash": "abc",
+			"signvalue": "883498167358e92760191fa1f39fce2ab3e895bd1f43ef33b7434fb592e5361ba21d168fc0b0df6aa5787c8dd3915593e8953db87ba273a451ab996ce14e3bebbb1be2ab3405f03d9714b167b946005b85e7e6bd5125302888d3b7099ac42caee450cd0845ca56593621dc56bb18144e508d37fcc22ae93ee4d15d2fedf65dc67d2a6a198bde355a03509bbe76471e819a4b53832ef402321178f614c3ddef3ff4434ec17f434a9bdf93c1c28d3356d68d89f4007b5f2d081aca5f7d36adcef707609746d6d4b1d187bb0876204d33ceb572365e2e84c81de45d437cea118bfc254ed2eb1370bb8616b9547837ba7281f3b81178d5119b47a38efb983354494c",
+			"salt": "575212ed29beb5171fc54ea24573f4c3d584218d1ad799f3e5338fb20e13cd72",
+			"shafunc": "SHA256",
+			"msgtest": 0
+		}
+	],
+
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm-image_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm-image_1.0.0.bb
new file mode 100644
index 0000000..b7ccb78
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm-image_1.0.0.bb
@@ -0,0 +1,41 @@
+SUMMARY = "HSM-IMAGE"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=411c267670838099ca82e01c7f044a7b"
+SRC_URI = " file://LICENSE \
+          "
+WORKONSRC = "${TOPDIR}/../prebuilt/firmware/hsm"
+HSM_BIN_OUT = "${WORKDIR}/out"
+HSM_IMG_OUT = "${WORKDIR}/out/img"
+DEPENDS = "packer-native "
+SRC_URI = " file://LICENSE \
+            file://hsm.json \
+            file://bootloader.json \
+            file://${WORKONSRC}/hsm-out.tar.gz \
+          "
+inherit workonsrc deploy
+
+do_compile[nostamp] = "1"
+do_deploy() {
+	install -m 755 ${HSM_IMG_OUT}/bootloader.bin ${DEPLOYDIR}/hsm_bl.img
+	install -m 755 ${HSM_IMG_OUT}/hsm.bin ${DEPLOYDIR}/hsm_os.img
+}
+
+addtask deploy before do_build after do_compile
+do_compile() {
+	echo "no source with images"
+        rm -rf ${HSM_IMG_OUT}
+        install -d ${HSM_IMG_OUT}
+        install -m 755 ${HSM_BIN_OUT}/bootloader.bin ${HSM_IMG_OUT}/bootloader.bin
+        install -m 755 ${HSM_BIN_OUT}/hsm.bin       ${HSM_IMG_OUT}/hsm.bin 
+        install -m 755 ${HSM_BIN_OUT}/cert.bin      ${HSM_IMG_OUT}/cert.bin       
+}
+
+
+
+do_genheader () {
+	${WORKDIR}/recipe-sysroot-native${bindir}/python-native/python2 ${WORKDIR}/recipe-sysroot-native${datadir}/packer/mipack.py -d ${HSM_IMG_OUT}/ -o ${HSM_IMG_OUT}/bootloader.bin ${WORKDIR}/bootloader.json
+        ${WORKDIR}/recipe-sysroot-native${bindir}/python-native/python2 ${WORKDIR}/recipe-sysroot-native${datadir}/packer/mipack.py -d ${HSM_IMG_OUT}/ -o ${HSM_IMG_OUT}/hsm.bin ${WORKDIR}/hsm.json
+}
+
+
+addtask genheader before do_deploy after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm_1.0.0.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm_1.0.0.bbappend
new file mode 100644
index 0000000..8a389ca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-hsm/hsm/hsm_1.0.0.bbappend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI += "file://bootloader.json \
+	file://hsm.json"
+
+do_addcert() {
+	# add secure JTAG certificate
+	mkdir -p ${B}out
+	touch ${B}out/cert.bin
+	if [ -f "${B}src/application/bootloader/mt2735/cert/cert.bin" ]; then
+		cp ${B}src/application/bootloader/mt2735/cert/cert.bin ${B}out
+	fi
+}
+
+do_deploy() {
+	install -m 755 ${B}out/bootloader.bin ${DEPLOYDIR}/hsm_bl.img
+	install -m 755 ${B}out/hsm.bin ${DEPLOYDIR}/hsm_os.img
+}
+
+addtask addcert before do_compile after do_configure
+addtask deploy before do_build after do_compile
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bb
new file mode 100644
index 0000000..da0f327
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bb
@@ -0,0 +1,16 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files/${TARGET_PLATFORM}"
+DESCRIPTION = "Kernal Device Tree Overlay"
+SECTION = "kernel"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+DEPENDS += "dtc-native"
+SRC_URI = "file://Makefile file://combo.dts  file://LICENSE"
+S = "${WORKDIR}"
+inherit deploy
+do_deploy () {
+        install -d ${DEPLOYDIR}
+        install -m 644 ${S}/*.dtbo -t ${DEPLOYDIR}
+}
+addtask deploy before do_build after do_compile
+FILES_${PN} = ""
+ALLOW_EMPTY_${PN} = "1"
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bbappend
new file mode 100644
index 0000000..a1d212b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/dtbo.bbappend
@@ -0,0 +1 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/Makefile b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/Makefile
new file mode 100644
index 0000000..b84a2c6
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/Makefile
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: MediaTekProprietary
+DTBO := $(patsubst %.dts,%.dtbo,$(wildcard *.dts))
+
+all: $(DTBO)
+
+%.dtbo: %.dts
+	dtc -@ -O dtb -o $@ $<
+
+clean:
+	rm -rf *.dtbo
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/combo.dts b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/combo.dts
new file mode 100644
index 0000000..71493da
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/dtbo/files/combo.dts
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MediaTekProprietary
+/dts-v1/;
+/plugin/;
+
+/ {
+	fragment@0 {
+		target-path = "/";
+		__overlay__ {
+			combo:connectivity-combo@0 {
+				aucMacAddress = [00 00 00 00 00 00];
+				btAddr = [00 00 46 66 30 01];
+				btRadio = [06 80 00 06 05 06];
+				aucEFUSE144 =  [00 00 00 00 00 00 00 00
+								00 00
+								00 20 22 00
+								00 00 00 00 00 00 00 00 00 00 00 00 00 00
+								60 60 60
+								00
+								00
+								00 00 00 00 00 00 00 00 00 00 00
+								00 30 00 00 00 00 00 10
+								00
+								00 00 00 00 00 00 00
+								23 23 23 23 23 20 1E 00 00 00 00
+								01
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00
+								00 00 00 00 00 00 00 00];
+			};
+		};
+	};
+	fragment@1 {
+		target-path = "/";
+		__overlay__ {
+			snps_mac: ethernet@11021000 {
+				/* mac-address = [00 0A 00 00 00 01]; */
+			};
+			eth: ethernet@15100000 {
+				gmac0: mac@0 {
+					/* mac-address = [00 0A 00 00 00 02]; */
+				};
+				gmac1: mac@1 {
+					/* mac-address = [00 0A 00 00 00 03]; */
+				};
+			};
+		};
+	};
+};
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb_ivt_optee.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb_ivt_optee.cfg
new file mode 100644
index 0000000..07554cf
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/auto2735evb_ivt_optee.cfg
@@ -0,0 +1,2 @@
+CONFIG_TEE=y
+CONFIG_OPTEE=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/cpu_2cores.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/cpu_2cores.cfg
new file mode 100644
index 0000000..c3f00c1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/cpu_2cores.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_CORE_NUM=2
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/dm_verity.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/dm_verity.cfg
new file mode 100644
index 0000000..6505076
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/dm_verity.cfg
@@ -0,0 +1 @@
+CONFIG_DM_VERITY=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/emmc.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/emmc.cfg
new file mode 100644
index 0000000..11fec2d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/emmc.cfg
@@ -0,0 +1 @@
+CONFIG_MTD_ROOTFS_ROOT_DEV=n
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hsm.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hsm.cfg
new file mode 100644
index 0000000..97129cf
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hsm.cfg
@@ -0,0 +1,2 @@
+CONFIG_HSM_CLK=y

+CONFIG_HSM_SUPPORT=y

diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hyp.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hyp.cfg
new file mode 100644
index 0000000..fdcd75a
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/hyp.cfg
@@ -0,0 +1,28 @@
+# CONFIG_PSTORE is not set
+# CONFIG_PSTORE_CONSOLE is not set
+# CONFIG_PSTORE_PMSG is not set
+# CONFIG_PSTORE_FTRACE is not set
+# CONFIG_PSTORE_RAM is not set
+# CONFIG_MTK_WATCHDOG is not set
+# CONFIG_PAGE_OWNER is not set
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_MTK_SCHED_MONITOR is not set
+CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQFD=y
+CONFIG_HAVE_KVM_IRQ_ROUTING=y
+CONFIG_HAVE_KVM_EVENTFD=y
+CONFIG_KVM_MMIO=y
+CONFIG_HAVE_KVM_MSI=y
+CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
+CONFIG_KVM_VFIO=y
+CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=y
+CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
+CONFIG_KVM_COMPAT=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM_ARM_VGIC_V3_ITS=y
+CONFIG_KVM=y
+CONFIG_KVM_ARM_HOST=y
+CONFIG_KVM_ARM_PMU=y
+# CONFIG_VHOST_NET is not set
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
\ No newline at end of file
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_1024mb.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_1024mb.cfg
new file mode 100644
index 0000000..6260685
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_1024mb.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_MEMORY_SIZE=1024
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_512mb.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_512mb.cfg
new file mode 100644
index 0000000..863dfa9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_512mb.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_MEMORY_SIZE=512
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_640mb.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_640mb.cfg
new file mode 100644
index 0000000..41b8909
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_640mb.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_MEMORY_SIZE=640
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_768mb.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_768mb.cfg
new file mode 100644
index 0000000..a595bb2
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_768mb.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_MEMORY_SIZE=768
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_896mb.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_896mb.cfg
new file mode 100644
index 0000000..efacb27
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/memory_896mb.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_MEMORY_SIZE=896
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/mt2735.dtsi b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/mt2735.dtsi
new file mode 100644
index 0000000..19f1b9b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/mt2735.dtsi
@@ -0,0 +1,4327 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2019 MediaTek Inc.
+ */
+
+/dts-v1/;
+#include <generated/autoconf.h>
+
+#include <dt-bindings/clock/mt6890-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/mt2735-pinfunc.h>
+#include <dt-bindings/memory/mt6880-larb-port.h>
+#include <dt-bindings/power/mt6890-power.h>
+#include <dt-bindings/reset/ti-syscon.h>
+#include <dt-bindings/soc/mediatek,boot-mode.h>
+#include <dt-bindings/spmi/spmi.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/interconnect/mtk,mt6873-emi.h>
+#include <dt-bindings/iio/mt635x-auxadc.h>
+#include <dt-bindings/gce/mt6890-gce.h>
+#include <dt-bindings/thermal/thermal.h>
+/ {
+	model = "MT6890";
+	compatible = "mediatek,MT6890";
+	interrupt-parent = <&gic>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	/* chosen */
+	chosen: chosen {
+		bootargs = "console=tty0 console=ttyS0,921600n1 root=/dev/ram \
+			vmalloc=400M slub_debug=OFZPU swiotlb=noforce \
+			firmware_class.path=/vendor/firmware \
+			page_owner=on";
+	};
+
+	psci {
+		compatible = "arm,psci-0.2";
+		method = "smc";
+	};
+
+	gpio_leds {
+		compatible = "gpio-leds";
+		led0 {
+			label = "led9501:red:sim";
+			gpios = <&pio 209 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led1 {
+			label = "led9502:red:cellular-stat";
+			gpios = <&pio 210 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led2 {
+			label = "led9504:red:cellular-data";
+			gpios = <&pio 211 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led3 {
+			label = "led9505:red:cellular-rat";
+			gpios = <&pio 212 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led4 {
+			label = "led9506:red:cellular-ims";
+			gpios = <&pio 213 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+	};
+
+	cluster0_opp: opp_table0 {
+                compatible = "operating-points-v2";
+                opp-shared;
+		opp0 {
+			opp-hz = /bits/ 64 <500000000>;
+			opp-microvolt = <650000>;
+		};
+		opp1 {
+			opp-hz = /bits/ 64 <600000000>;
+			opp-microvolt = <650000>;
+		};
+		opp2 {
+			opp-hz = /bits/ 64 <684000000>;
+			opp-microvolt = <668750>;
+		};
+		opp3 {
+			opp-hz = /bits/ 64 <768000000>;
+			opp-microvolt = <687500>;
+		};
+		opp4 {
+			opp-hz = /bits/ 64 <820000000>;
+			opp-microvolt = <700000>;
+		};
+		opp5 {
+			opp-hz = /bits/ 64 <937000000>;
+			opp-microvolt = <725000>;
+		};
+		opp6 {
+			opp-hz = /bits/ 64 <1060000000>;
+			opp-microvolt = <750000>;
+		};
+		opp7 {
+			opp-hz = /bits/ 64 <1134000000>;
+			opp-microvolt = <768750>;
+		};
+		opp8 {
+			opp-hz = /bits/ 64 <1275000000>;
+			opp-microvolt = <800000>;
+		};
+		opp9 {
+			opp-hz = /bits/ 64 <1387000000>;
+			opp-microvolt = <825000>;
+		};
+		opp10 {
+			opp-hz = /bits/ 64 <1500000000>;
+			opp-microvolt = <850000>;
+		};
+		opp11 {
+			opp-hz = /bits/ 64 <1666000000>;
+			opp-microvolt = <900000>;
+		};
+		opp12 {
+			opp-hz = /bits/ 64 <1750000000>;
+			opp-microvolt = <925000>;
+		};
+		opp13 {
+			opp-hz = /bits/ 64 <1833000000>;
+			opp-microvolt = <950000>;
+		};
+		opp14 {
+			opp-hz = /bits/ 64 <1916000000>;
+			opp-microvolt = <975000>;
+		};
+		opp15 {
+			opp-hz = /bits/ 64 <2000000000>;
+			opp-microvolt = <1000000>;
+		};
+        };
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu0: cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0000>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu1: cpu@001 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0100>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu2: cpu@002 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0200>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu3: cpu@003 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0300>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu-map {
+			cluster0 {
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+				core2 {
+					cpu = <&cpu2>;
+				};
+				core3 {
+					cpu = <&cpu3>;
+				};
+			};
+		};
+
+		idle-states {
+			entry-method = "arm,psci";
+			cpuoff_l: cpuoff_l {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x00010001>;
+					local-timer-stop;
+					entry-latency-us = <50>;
+					exit-latency-us = <100>;
+					min-residency-us = <1600>;
+			};
+			clusteroff_l: clusteroff_l {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x01010001>;
+					local-timer-stop;
+					entry-latency-us = <100>;
+					exit-latency-us = <250>;
+					min-residency-us = <2100>;
+			};
+			mcusysoff: mcusysoff {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x01010002>;
+					local-timer-stop;
+					entry-latency-us = <300>;
+					exit-latency-us = <1200>;
+					min-residency-us = <2600>;
+			};
+		};
+
+	};
+
+	pmu {
+		compatible = "arm,armv8-pmuv3";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	dsu-pmu-0 {
+		compatible = "arm,dsu-pmu";
+		interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+		cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+	};
+
+	dvfsp: dvfsp@0011bc00 {
+                compatible = "mediatek,mcupm-dvfsp";
+                reg = <0 0x0011bc00 0 0x1400>;
+		nvmem = <&efuse>;
+                nvmem-names = "mtk_efuse";
+                nvmem-cells = <&efuse_segment>;
+                nvmem-cell-names = "efuse_segment_cell";
+        };
+
+        leakage@1100b000 {
+                compatible = "mediatek,leakage";
+                reg = <0 0x1100b000 0 0x1000>;
+                interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_LOW>;
+                nvmem = <&efuse>;
+                nvmem-names = "mtk_efuse";
+                nvmem-cells = <&efuse_segment>;
+                nvmem-cell-names = "efuse_segment_cell";
+                n-domain = <7>;
+                domain = "LL", "CCI", "VCORE", "MODEM_NR", "VSRAM_CPULL", "VSRAM_MODEM", "VCORE_OFF";
+                LL = <750 30 0x224 0 0 1>;
+                CCI = <750 30 0x220 24 0 1>;
+                VCORE = <750 30 0x21C 16 0 1>;
+                MODEM_NR = <825 30 0x21C 8 0 1>;
+                VSRAM_CPULL = <750 30 0X228 16 0 1>;
+                VSRAM_MODEM = <825 30 0X22C 0 0 1>;
+                VCORE_OFF = <550 30 0x224 16 0 1>;
+        };
+
+	memory {
+		device_type = "memory";
+#if defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 1024)
+		reg = <0 0x40000000 0 0x40000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 896)
+		reg = <0 0x40000000 0 0x38000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 768)
+		reg = <0 0x40000000 0 0x30000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 640)
+		reg = <0 0x40000000 0 0x28000000>;
+#else
+		reg = <0 0x40000000 0 0x20000000>;
+#endif
+	};
+
+	wed: wed@15010000 {
+                compatible = "mediatek,wed";
+                wed_num = <2>;
+                /* add this property for wed get the pci slot number. */
+                pci_slot_map = <0>, <1>;
+                reg = <0 0x15010000 0 0x1000>,
+                                <0 0x15011000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 406 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wed2: wed2@15011000 {
+                compatible = "mediatek,wed2";
+                wed_num = <2>;
+                reg = <0 0x15010000 0 0x1000>,
+                                <0 0x15011000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 406 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wdma: wdma@15102800 {
+                compatible = "mediatek,wed-wdma";
+                reg = <0 0x15102800 0 0x400>,
+                                <0 0x15102c00 0 0x400>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+	ap2woccif: ap2woccif@151A9000 {
+                compatible = "mediatek,ap2woccif";
+                reg = <0 0x151a9000 0 0x1000>,
+                                <0 0x151ab000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 414 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 415 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wocpu_sysram: wocpu@15180000 {
+                compatible = "mediatek,wocpu_sysram";
+                reg = <0 0x15180000 0 0x8000>;
+                shared = <1>;
+        };
+
+        wocpu_dlm: wocpu_dlm@1518E000 {
+                compatible = "mediatek,wocpu_dlm";
+                reg = <0 0x1518E000 0 0x2000>,
+				<0 0x15192000 0 0x2000>;
+
+		resets = <&ethsysrst 0>;
+		reset-names = "wocpu_rst";
+        };
+
+        cpu_boot: wocpu_boot@15194000 {
+                compatible = "mediatek,wocpu_boot";
+                reg = <0 0x15194000 0 0x1000>;
+        };
+
+        pcie_mirror: pcie_mirror@10201000 {
+                compatible = "mediatek,pcie-mirror";
+                reg = <0 0x10201000 0 0x1000>;
+        };
+
+	reserved_memory: reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		reserve-memory-atf {
+			compatible = "mediatek,reserve-memory-atf";
+			no-map;
+			reg = <0 0x42FC0000 0 0x1FA000>;
+		};
+
+		reserve-memory-mcupm_share {
+			compatible = "mediatek,reserve-memory-mcupm_share";
+			no-map;
+			status = "okay";
+#if defined(CONFIG_MTK_GMO_RAM_OPTIMIZE) || defined(CONFIG_MTK_MET_MEM_ALLOC)
+			reg = <0 0x42290000 0 0x210000>; /* 2M + 64K */
+#else
+			reg = <0 0x42290000 0 0x610000>; /* 6M + 64K */
+#endif
+		};
+
+		reserve-memory-sspm_share {
+			compatible = "mediatek,reserve-memory-sspm_share";
+			no-map;
+			status = "okay";
+#if defined(CONFIG_MTK_GMO_RAM_OPTIMIZE) || defined(CONFIG_MTK_MET_MEM_ALLOC)
+			reg = <0 0x429A0000 0 0x210000>; /* 2M + 64K */
+#else
+			reg = <0 0x429A0000 0 0x610000>; /* 6M + 64K */
+#endif
+		};
+
+		gps_mem: gps-reserve-memory {
+			compatible = "mediatek,gps-reserve-memory";
+			no-map;
+			reg = <0 0x432ca000 0 0x60000>; /* 384KB */
+		};
+
+		reserved-memory-pstore  {
+			compatible = "ramoops";
+			reg = <0x0 0x4332a000 0x0 0xe0000>;
+			record-size = <0x1000>;
+			console-size = <0x40000>;
+			ftrace-size = <0x1000>;
+			pmsg-size = <0x10000>;
+		};
+
+		reserved-memory-aee {
+			reg = <0x0 0x4340a000 0x0 0x100000>;
+			compatible = "mediatek,aee-lk";
+		};
+
+		reserved-memory-minirdump {
+			reg = <0x0 0x4350a000 0x0 0x10000>;
+			no-map;
+			compatible = "mediatek,minirdump";
+		};
+
+		reserved-memory-ram_console {
+			reg = <0x0 0x4351a000 0x0 0x10000>;
+			no-map;
+			compatible = "mediatek,ram_console";
+		};
+
+		reserved-memory-log_store {
+			reg = <0x0 0x4352a000 0x0 0x40000>;
+			compatible = "mediatek,log_store";
+		};
+
+		wocpu0_emi: wocpu0_emi@50000000 {
+                        compatible = "mediatek,wocpu0_emi";
+                        no-map;
+                        reg = <0 0x50000000 0 0x80000>;
+                        shared = <0>;
+                };
+
+                wocpu1_emi: wocpu1_emi@50040000 {
+                        compatible = "mediatek,wocpu1_emi";
+                        no-map;
+                        reg = <0 0x50080000 0 0x80000>;
+                        shared = <0>;
+                };
+
+                wocpu_data: wocpu_data@50100000 {
+                        compatible = "mediatek,wocpu_data";
+                        no-map;
+                        reg = <0 0x50100000 0 0x180000>;
+                        shared = <1>;
+                };
+	};
+
+	gic: interrupt-controller {
+		compatible = "arm,gic-v3";
+		#interrupt-cells = <3>;
+		#address-cells = <2>;
+		#size-cells = <2>;
+		#redistributor-regions = <1>;
+		interrupt-parent = <&gic>;
+		interrupt-controller;
+		reg = <0 0x0c000000 0 0x40000>, // distributor
+		      <0 0x0c040000 0 0x200000>; // redistributor
+		interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	clkao: clkao {
+		compatible = "simple-bus";
+	};
+
+	clocks {
+		clk_null: clk_null {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <0>;
+		};
+
+		clk10m: clk10m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <10000000>;
+		};
+
+		clk26m: clk26m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <26000000>;
+		};
+
+		clk12m: clk12m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <12000000>;
+		};
+
+		clk32k: clk32k {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <32000>;
+		};
+
+		clk13m: clk13m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <13000000>;
+		};
+
+		ulposc: ulposc {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <260000000>;
+		};
+	};
+
+	topckgen_clk: syscon@10000000 {
+		compatible = "mediatek,mt6890-topckgen", "syscon";
+		reg = <0 0x10000000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	apmixedsys_clk: syscon@1000c000 {
+		compatible = "mediatek,mt6890-apmixedsys", "syscon";
+		reg = <0 0x1000c000 0 0xe00>;
+		#clock-cells=<1>;
+	};
+
+	dbgsys_dem_clk: syscon@0d0a0000 {
+		compatible = "mediatek,mt6890-dbgsys_dem", "syscon";
+		reg = <0 0x0d0a0000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	infracfg_ao_clk: syscon@10001000 {
+		compatible = "mediatek,mt6890-infracfg_ao", "syscon";
+		reg = <0 0x10001000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	pericfg_clk: syscon@10003000 {
+		compatible = "mediatek,mt6890-pericfg", "syscon";
+		reg = <0 0x10003000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	scpsys: power-controller@10006000 {
+		compatible = "mediatek,mt6890-scpsys", "syscon";
+		reg = <0 0x10006000 0 0x1000>;
+		#power-domain-cells = <1>;
+		infracfg = <&infracfg_ao_clk>;
+		clocks = <&topckgen_clk CLK_TOP_MM_SEL>,
+			<&topckgen_clk CLK_TOP_MFG_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_312P5M_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_250M_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_62P4M_PTP_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_50M_RMII_SEL>,
+			<&topckgen_clk CLK_TOP_EIP97_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_AUDIO_26M_BCLK>;
+		clock-names = "mm",
+			"mfg",
+			"snps_eth_312p5m_sel",
+ 			"snps_eth_250m_sel",
+			"snps_ptp_sel",
+			"snps_rmii_sel",
+			"eip97_sel",
+			"audio";
+		/*status="disabled";*/
+	};
+
+	gce_clk: syscon@10228000 {
+		compatible = "mediatek,mt6890-gce", "syscon";
+		reg = <0 0x10228000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	audsys_clk: syscon@11210000 {
+		compatible = "mediatek,mt6890-audsys", "syscon";
+		reg = <0 0x11210000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	imp_iic_wrap_e_clk: syscon@11c46000 {
+		compatible = "mediatek,mt6890-imp_iic_wrap_e", "syscon";
+		reg = <0 0x11c46000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mfgsys_clk: syscon@13fbf000 {
+		compatible = "mediatek,mt6890-mfgsys", "syscon";
+		reg = <0 0x13fbf000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mmsys_config_clk: syson@14000000 {
+		compatible = "mediatek,mt6890-mmsys_config", "syscon";
+		reg = <0 0x14000000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mtk_lpm: mtk_lpm {
+		compatible = "mediatek,mtk-lpm";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+		suspend-method = "system";
+		irq-remain = <&edge_keypad &edge_mdwdt>;
+		resource-ctrl = <&bus26m &infra &syspll>,
+				<&dram_s0 &dram_s1>;
+		constraints = <&rc_bus26m &rc_syspll &rc_dram>;
+
+		lpm_sysram: lpm_sysram@0011b500 {
+			compatible = "mediatek,lpm-sysram";
+			reg = <0 0x0011b500 0 0x300>;
+		};
+
+		irq-remain-list {
+			edge_keypad: edge_keypad {
+				target = <&keypad>;
+				value = <1 0 0 0x4>;
+			};
+			edge_mdwdt: edge_mdwdt {
+				target = <&mddriver>;
+				value = <1 0 0 0x02000000>;
+			};
+		};
+		resource-ctrl-list {
+			bus26m: bus26m {
+				id = <0x00000000>;
+				value = <0>;
+			};
+			infra: infra {
+				id = <0x00000001>;
+				value = <0>;
+			};
+			syspll: syspll {
+				id = <0x00000002>;
+				value = <0>;
+			};
+			dram_s0: dram_s0 {
+				id = <0x00000003>;
+				value = <0>;
+			};
+			dram_s1: dram_s1 {
+				id = <0x00000004>;
+				value = <0>;
+			};
+		};
+		constraint-list {
+			rc_bus26m: rc_bus26m {
+				id = <0x00000000>;
+				value = <1>;
+			};
+			rc_syspll: rc_syspll {
+				id = <0x00000001>;
+				value = <1>;
+			};
+			rc_dram: rc_dram {
+				id = <0x00000002>;
+				value = <1>;
+			};
+		};
+	};
+
+	cpupm_sysram: cpupm-sysram@0011b000 {
+		compatible = "mediatek,cpupm-sysram";
+		reg = <0 0x0011b000 0 0x500>;
+	};
+
+	mcusys_ctrl: mcusys-ctrl@0c53a000 {
+			compatible = "mediatek,mcusys-ctrl";
+			reg = <0 0x0c53a000 0 0x1000>;
+	};
+
+	tboard_thermistor1: thermal-ntc1 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0D4 0 0x4>; /* TIA DATA T0 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor2: thermal-ntc2 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0D8 0 0x4>; /* TIA DATA T1 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor3: thermal-ntc3 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0DC 0 0x4>; /* TIA DATA T2 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor4: thermal-ntc4 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0E0 0 0x4>; /* TIA DATA T3 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	trm: thermal_risk_monitor {
+		compatible = "mediatek,mt6880-trm";
+	};
+
+	pmic_temp: pmic_temp {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_CHIP_TEMP>;
+		io-channel-names =
+			"pmic_chip_temp";
+
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1681>;
+		pmic_temp,iio_chan = <0>;
+	};
+
+	pmic_vcore: pmic_vcore {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VCORE_TEMP>;
+		io-channel-names =
+			"pmic_buck1_temp";
+
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <1>;
+	};
+
+	pmic_vproc: pmic_vproc {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VPROC_TEMP>;
+		io-channel-names =
+			"pmic_buck2_temp";
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <2>;
+	};
+
+	pmic_vgpu: pmic_vgpu {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VGPU_TEMP>;
+		io-channel-names =
+			"pmic_buck3_temp";
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <3>;
+	};
+
+	md_rf_ic: md-rf-ic {
+		compatible = "mediatek,md-rf";
+		#thermal-sensor-cells = <0>;
+	};
+
+	md_cooler_mutt: mutt {
+		compatible = "mediatek,mt6297-md-cooler-mutt";
+		mutt_pa1: mutt-pa1 {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa1_no_ims: mutt-pa1-no-ims {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa2: mutt-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa2_no_ims: mutt-pa2-no-ims {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+	md_cooler_tx_pwr: tx-pwr {
+		compatible = "mediatek,md-cooler-tx-pwr";
+		tx_pwr_pa1: tx-pwr-pa1 {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		tx_pwr_pa2: tx-pwr-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+	md_cooler_scg_off: scg-off {
+		compatible = "mediatek,md-cooler-scg-off";
+		scg_off_pa2: scg-off-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+
+	thermal-zones {
+		soc_max {
+			polling-delay = <100>; /* milliseconds */
+			polling-delay-passive = <50>; /* milliseconds */
+			thermal-sensors = <&lvts 0>;
+			sustainable-power = <1700>;
+
+			trips {
+				threshold: trip-point@0 {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				ipa_target: trip-point@1 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				soc_max_crit: soc_max_crit@0 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+
+			cooling-maps {
+				map0 {
+					trip = <&ipa_target>;
+					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+					contribution = <1024>;
+				};
+
+				map1 {
+					trip = <&ipa_target>;
+					cooling-device = <&mali THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+					contribution = <1024>;
+				};
+			};
+		};
+
+		cpu_little0 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 1>;
+		};
+
+		cpu_little1 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 2>;
+		};
+
+		cpu_little2 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 3>;
+		};
+
+		cpu_little3 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 4>;
+		};
+
+		gpu0 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 5>;
+		};
+
+		gpu1 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 6>;
+		};
+
+		dramc {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 7>;
+		};
+
+		mmsys {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 8>;
+		};
+
+		md_5g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 9>;
+		};
+
+		md_4g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 10>;
+		};
+
+		md_3g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 11>;
+		};
+
+		soc_dram_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor1>;
+
+			trips {
+				soc_dram_ntc_crit: soc_dram_ntc_crit@0 {
+					temperature = <100000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+
+		nrpa_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor2>;
+
+			trips {
+				nrpa_ntc_target: nrpa_ntc_trip@0 {
+					temperature = <82000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				nrpa_ntc_no_ims: nrpa_ntc_trip@1 {
+					temperature = <90000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+			};
+			cooling-maps {
+				map0 {
+					trip = <&nrpa_ntc_target>;
+					cooling-device = <&mutt_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				map1 {
+					trip = <&nrpa_ntc_no_ims>;
+					cooling-device = <&mutt_pa2_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+			};
+		};
+
+		ltepa_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor3>;
+
+			trips {
+				ltepa_ntc_target: ltepa_ntc_trip@0 {
+					temperature = <82000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				ltepa_ntc_no_ims: ltepa_ntc_trip@1 {
+					temperature = <90000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				ltepa_ntc_crit: ltepa_ntc_trip@2 {
+					temperature = <100000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+			cooling-maps {
+				map0 {
+					trip = <&ltepa_ntc_target>;
+					cooling-device = <&mutt_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				map1 {
+					trip = <&ltepa_ntc_no_ims>;
+					cooling-device = <&mutt_pa1_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+			};
+		};
+
+		rf_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor4>;
+
+			trips {
+				rf_ntc_crit: rf_ntc_crit@0 {
+					temperature = <100000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+
+		pmic {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&pmic_temp>;
+
+			trips {
+				pmic_temp_crit: pmic_temp_crit@0 {
+					temperature = <125000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+		pmic_vcore {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vcore>;
+		};
+		pmic_vproc {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vproc>;
+		};
+		pmic_vgpu {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vgpu>;
+		};
+
+		md_rf {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&md_rf_ic>;
+
+			trips {
+				md_rf_crit: md_rf_crit@0 {
+					temperature = <117000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+		conn_gps {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&consys>;
+
+			trips {
+				consys_max_crit: consys_max_crit@0 {
+					temperature = <117000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+	};
+
+	chipid@08000000 {
+		compatible = "mediatek,chipid";
+		reg = <0 0x08000000 0 0x0004>,
+		      <0 0x08000004 0 0x0004>,
+		      <0 0x08000008 0 0x0004>,
+		      <0 0x0800000c 0 0x0004>;
+	};
+
+	dbgtop@1000d000 {
+		compatible = "mediatek,dbgtop";
+		reg = <0 0x1000d000 0 0x1000>;
+	};
+
+	mcupm@0C540000 {
+		compatible = "mediatek,mcupm";
+		reg =<0 0x0C540000 0 0x22000>,
+
+			<0 0x0c55fb00 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fba0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fc40 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fce0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fd80 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fe20 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fec0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55ff60 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>;
+
+		reg-names = "mcupm_base",
+
+			"mbox0_base",
+			"mbox0_set",
+			"mbox0_clr",
+			"mbox0_send",
+			"mbox0_recv",
+
+			"mbox1_base",
+			"mbox1_set",
+			"mbox1_clr",
+			"mbox1_send",
+			"mbox1_recv",
+
+			"mbox2_base",
+			"mbox2_set",
+			"mbox2_clr",
+			"mbox2_send",
+			"mbox2_recv",
+
+			"mbox3_base",
+			"mbox3_set",
+			"mbox3_clr",
+			"mbox3_send",
+			"mbox3_recv",
+
+			"mbox4_base",
+			"mbox4_set",
+			"mbox4_clr",
+			"mbox4_send",
+			"mbox4_recv",
+
+			"mbox5_base",
+			"mbox5_set",
+			"mbox5_clr",
+			"mbox5_send",
+			"mbox5_recv",
+
+			"mbox6_base",
+			"mbox6_set",
+			"mbox6_clr",
+			"mbox6_send",
+			"mbox6_recv",
+
+			"mbox7_base",
+			"mbox7_set",
+			"mbox7_clr",
+			"mbox7_send",
+			"mbox7_recv";
+
+		interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
+
+		interrupt-names = "mbox0",
+			"mbox1",
+			"mbox2",
+			"mbox3",
+			"mbox4",
+			"mbox5",
+			"mbox6",
+			"mbox7";
+	};
+
+	topckgen: topckgen@10000000 {
+		compatible = "mediatek,topckgen", "syscon";
+		reg = <0 0x10000000 0 0x1000>;
+	};
+
+	dcm: dcm@10001000 {
+		compatible = "mediatek,mt6880-dcm";
+		reg = <0 0x10001000 0 0x1000>,
+			<0 0x10002000 0 0x1000>,
+			<0 0x10022000 0 0x1000>,
+			<0 0x10219000 0 0x1000>,
+			<0 0x10230000 0 0x2000>,
+			<0 0x10235000 0 0x1000>,
+			<0 0x10238000 0 0x1000>,
+			<0 0x10240000 0 0x2000>,
+			<0 0x10248000 0 0x1000>,
+			<0 0xc538000 0 0x5000>,
+			<0 0xc53a800 0 0x1000>;
+		reg-names = "infracfg_ao",
+			"infracfg_ao_mem",
+			"infra_ao_bcrm",
+			"emi",
+			"dramc_ch0_top0",
+			"chn0_emi",
+			"dramc_ch0_top5",
+			"dramc_ch1_top0",
+			"dramc_ch1_top5",
+			"mp_cpusys_top",
+			"cpccfg_reg";
+	};
+
+	infracfg_ao: infracfg_ao@10001000 {
+		compatible = "mediatek,infracfg_ao", "syscon", "simple-mfd";
+		reg = <0 0x10001000 0 0x1000>;
+		infracfg_rst: reset-controller {
+			compatible = "ti,syscon-reset";
+			#reset-cells = <1>;
+
+			ti,reset-bits = <
+				0x120 0 0x124 0 0 0 (ASSERT_SET | DEASSERT_SET | STATUS_NONE) /* 0: lvts_ap */
+				0x730 12 0x734 12 0 0 (ASSERT_SET | DEASSERT_SET | STATUS_NONE) /* 1: lvts_mcu */
+				>;
+		};
+	};
+
+	infracfg_ao_mem@10002000 {
+		compatible = "mediatek,infracfg_ao_mem";
+		reg = <0 0x10002000 0 0x1000>;
+	};
+
+	pericfg@10003000 {
+		compatible = "mediatek,pericfg";
+		reg = <0 0x10003000 0 0x1000>;
+	};
+
+	gpio_usage_mapping: gpio_usage_mapping {
+		compatible = "mediatek,gpio_usage_mapping";
+	};
+
+	gpio: gpio@10005000 {
+		compatible = "mediatek,gpio";
+		reg = <0 0x10005000 0 0x1000>;
+	};
+
+	pio: pinctrl@10005000 {
+		compatible = "mediatek,mt2735-pinctrl";
+		reg = <0 0x10005000 0 0x1000>,
+		      <0 0x11c10000 0 0x1000>,
+		      <0 0x11c20000 0 0x1000>,
+		      <0 0x11d00000 0 0x1000>,
+		      <0 0x11d10000 0 0x1000>,
+		      <0 0x11d20000 0 0x1000>,
+		      <0 0x11e00000 0 0x1000>,
+		      <0 0x11f00000 0 0x1000>,
+			  <0 0x1000b000 0 0x1000>;
+		reg-names = "gpio", "iocfg_rm",
+			"iocfg_rb", "iocfg_bl",
+			"iocfg_bm", "iocfg_br",
+			"iocfg_lt", "iocfg_tl",
+			"eint";
+		gpio-controller;
+		#gpio-cells = <2>;
+		gpio-ranges = <&pio 0 0 235>;
+		interrupt-controller;
+		#interrupt-cells = <2>;
+		interrupts = <GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-parent = <&gic>;
+	};
+
+	sleep: sleep@10006000 {
+		compatible = "mediatek,sleep", "syscon";
+		reg = <0 0x10006000 0 0x1000>;
+	};
+
+	spmtwam: spmtwam@10006000 {
+		compatible = "mediatek,spmtwam";
+		reg = <0 0x10006000 0 0x1000>;
+		interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
+		spm_twam_con = <0xa0>;
+		spm_twam_window_len = <0xa4>;
+		spm_twam_idle_sel = <0xa8>;
+		spm_irq_mask = <0xb4>;
+		spm_irq_sta = <0x128>;
+		spm_twam_last_sta0 = <0x1d0>;
+		spm_twam_last_sta1 = <0x1d4>;
+		spm_twam_last_sta2 = <0x1d8>;
+		spm_twam_last_sta3 = <0x1dc>;
+	};
+
+	srclken: srclken@10006500 {
+		compatible = "mediatek,srclken";
+		reg = <0 0x10006500 0 0x1000>,
+			<0 0x105c4000 0 0x1000>,
+			<0 0x10005000 0 0x1000>;
+		reg-names = "srclken", "scpdvfs", "gpio";
+		srclken-mode = "bringup";
+
+		srclken-rst-cfg = <0x0>;
+		srclken-central-cfg = <0x4 0x8 0x1C>;
+		srclken-cmd-cfg = <0xC>;
+		srclken-pmic-cfg = <0x10 0x14>;
+		srclken-dcxo-fpm-cfg = <0x18>;
+		srclken-subsys-cfg = <0x20>;
+		srclken-misc-cfg = <0xB4>;
+		srclken-spm-cfg = <0xB8>;
+		srclken-subsys-if-cfg = <0xBC>;
+		srclken-fsm-sta = <0x60>;
+		srclken-cmd-sta = <0x64 0x68>;
+		srclken-spi-sta = <0x6C>;
+		srclken-pipo-sta = <0x70>;
+		srclken-subsys-sta = <0x80>;
+		srclken-dbg-trace-sta = <0xC0 0xC4>;
+
+		srclken-scp-enable = "n";
+		scp-vreq-cfg = <0x54>;
+		scp-rc-vreq-bit = <27 28>;
+
+		srclken-gpio-enable = "n";
+		gpio-dir-cfg = <0x0>;
+		gpio-dout-cfg = <0x100>;
+		gpio-pull-bit = <6>;
+	};
+
+	watchdog: watchdog@10007000 {
+		compatible = "mediatek,mt2735-wdt";
+		reg = <0 0x10007000 0 0x1000>;
+	};
+
+	apxgpt@10008000 {
+		compatible = "mediatek,apxgpt";
+		reg = <0 0x10008000 0 0x1000>;
+		interrupts = <GIC_SPI 275 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	sej@1000a000 {
+		compatible = "mediatek,sej";
+		reg = <0 0x1000a000 0 0x1000>;
+		interrupts = <GIC_SPI 294 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	apmixed: apmixed@1000c000 {
+		compatible = "mediatek,apmixed";
+		reg = <0 0x1000c000 0 0xe00>;
+	};
+
+	fhctl@1000ce00 {
+		compatible = "mediatek,mt6880-fhctl";
+		reg = <0 0x1000ce00 0 0x200>;
+		mediatek,apmixed = <&apmixed>;
+
+		armpll_ll {
+			mediatek,fh-id = <0>;
+			mediatek,fh-pll-id = <CLK_APMIXED_ARMPLL_LL>;
+			mediatek,fh-cpu-pll;
+		};
+
+		mainpll {
+			mediatek,fh-id = <1>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MAINPLL>;
+		};
+
+		mpll {
+			mediatek,fh-id = <2>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MPLL>;
+		};
+
+		msdcpll {
+			mediatek,fh-id = <4>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MSDCPLL>;
+		};
+
+		mfgpll {
+			mediatek,fh-id = <5>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MFGPLL>;
+		};
+
+		mmpll {
+                        mediatek,fh-id = <6>;
+                        mediatek,fh-pll-id = <CLK_APMIXED_MMPLL>;
+                };
+	};
+
+	pwrap@1000d000 {
+		compatible = "mediatek,pwrap";
+		reg = <0 0x1000d000 0 0x1000>;
+	};
+
+	keypad:kp@10010000 {
+		compatible = "mediatek,kp";
+		reg = <0 0x10010000 0 0x1000>;
+		interrupts = <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>;
+		clocks = <&clk26m>;
+		clock-names = "kpd";
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		button0 {
+			label = "Modem RF";
+			gpios = <&pio 6 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_PHONE>;
+		};
+
+		button1 {
+			label = "GPS";
+			gpios = <&pio 7 GPIO_ACTIVE_LOW>;
+			linux,code = <246>;
+		};
+/*
+		button2 {
+			label = "Factory Mode";
+			gpios = <&pio 112 GPIO_ACTIVE_LOW>;
+			linux,code = <112>;
+		};
+
+		button3 {
+			label = "WIFI";
+			gpios = <&pio 114 GPIO_ACTIVE_LOW>;
+			linux,code = <114>;
+		};
+
+		button4 {
+			label = "WPS";
+			gpios = <&pio 115 GPIO_ACTIVE_LOW>;
+			linux,code = <115>;
+		};
+*/
+	};
+
+	topmisc@10011000 {
+		compatible = "mediatek,topmisc";
+		reg = <0 0x10011000 0 0x1000>;
+	};
+
+	dvfsrc: dvfsrc@10012000 {
+		compatible = "mediatek,mt6890-dvfsrc";
+		reg = <0 0x10012000 0 0x1000>,
+			<0 0x10006000 0 0x1000>;
+		reg-names = "dvfsrc", "spm";
+		#interconnect-cells = <1>;
+		dvfsrc_vcore: dvfsrc-vcore {
+			regulator-name = "dvfsrc-vcore";
+			regulator-min-microvolt = <550000>;
+			regulator-max-microvolt = <750000>;
+			regulator-always-on;
+		};
+
+		dvfsrc_freq_opp6: opp6 {
+			opp-peak-KBps = <0>;
+		};
+		dvfsrc_freq_opp5: opp5 {
+			opp-peak-KBps = <2500000>;
+		};
+		dvfsrc_freq_opp4: opp4 {
+			opp-peak-KBps = <3800000>;
+		};
+		dvfsrc_freq_opp3: opp3 {
+			opp-peak-KBps = <5100000>;
+		};
+		dvfsrc_freq_opp2: opp2 {
+			opp-peak-KBps = <5900000>;
+		};
+		dvfsrc_freq_opp1: opp1 {
+			opp-peak-KBps = <7600000>;
+		};
+		dvfsrc_freq_opp0: opp0 {
+			opp-peak-KBps = <10200000>;
+		};
+
+		dvfsrc-helper {
+			compatible = "mediatek,dvfsrc-helper";
+			vcore-supply = <&mt6330_vcore_buck_reg>;
+			rc-vcore-supply = <&dvfsrc_vcore>;
+			interconnects = <&dvfsrc MT6873_MASTER_DBGIF &dvfsrc MT6873_SLAVE_DDR_EMI>;
+			interconnect-names = "icc-perf-bw";
+			required-opps = <&dvfsrc_freq_opp0>,
+					<&dvfsrc_freq_opp1>,
+					<&dvfsrc_freq_opp2>,
+					<&dvfsrc_freq_opp3>,
+					<&dvfsrc_freq_opp4>,
+					<&dvfsrc_freq_opp5>,
+					<&dvfsrc_freq_opp6>;
+		};
+
+		dvfsrc-met {
+			compatible = "mediatek,dvfsrc-met";
+		};
+	};
+
+	mbist_ao@10013000 {
+		compatible = "mediatek,mbist_ao";
+		reg = <0 0x10013000 0 0x1000>;
+	};
+
+	dpmaif_ao@10014000 {
+		compatible = "mediatek,dpmaif_ao";
+		reg = <0 0x10014000 0 0x1000>;
+	};
+
+	aes_top0@10016000 {
+		compatible = "mediatek,aes_top0";
+		reg = <0 0x10016000 0 0x1000>;
+	};
+
+	timer: timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>;
+		clock-frequency = <13000000>;
+	};
+
+	sys_timer@10017000 {
+		compatible = "mediatek,sys_timer",
+				"mediatek,mt6765-timer";
+		reg = <0 0x10017000 0 0x1000>;
+		interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk13m>;
+	};
+
+	modem_temp_share@10018000 {
+		compatible = "mediatek,modem_temp_share";
+		reg = <0 0x10018000 0 0x1000>;
+	};
+
+	security_ao@1001a000 {
+		compatible = "mediatek,security_ao";
+		reg = <0 0x1001a000 0 0x1000>;
+	};
+
+	topckgen_ao@1001b000 {
+		compatible = "mediatek,topckgen_ao";
+		reg = <0 0x1001b000 0 0x1000>;
+	};
+
+	devapc_ao_mm@1001c000 {
+		compatible = "mediatek,devapc_ao_mm";
+		reg = <0 0x1001c000 0 0x1000>;
+	};
+
+	sleep_sram@1001e000 {
+		compatible = "mediatek,sleep_sram";
+		reg = <0 0x1001e000 0 0x4000>;
+	};
+
+	bcrm_ao_peri@10022000 {
+		compatible = "mediatek,bcrm_ao_peri";
+		reg = <0 0x10022000 0 0x1000>;
+	};
+
+	debug_ao_peri@10023000 {
+		compatible = "mediatek,debug_ao_peri";
+		reg = <0 0x10023000 0 0x1000>;
+	};
+
+	mhccif: mhccif@10024000 {
+		compatible = "mediatek,mt6880-mhccif";
+		#interrupt-cells = <3>;
+		interrupt-controller;
+		reg = <0 0x10024000 0 0x1000>,
+		      <0 0x10025000 0 0x1000>;
+		reg-names = "mhccif_rc", "mhccif_ep";
+		interrupts = <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>;
+		status = "disabled";
+	};
+
+	spmi_bus: spmi@10026000 {
+		compatible = "mediatek,mt6880-pmif-m", "syscon";
+		reg = <0 0x10026000 0 0x0008F0>,
+		      <0 0x10029000 0 0x000110>;
+		reg-names = "pmif", "spmimst";
+		interrupts-extended = <&gic GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>,
+				      <&pio 216 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "pmif_irq", "rcs_irq";
+		interrupt-controller;
+		#interrupt-cells = <1>;
+		irq_event_en = <0x0 0x00180000 0x0 0x0 0x0>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PMIC_AP_SET>,
+			<&infracfg_ao_clk CLK_IFRAO_PMIC_TMR_SET>,
+			<&topckgen_clk CLK_TOP_PWRAP_ULPOSC_SEL>,
+			<&topckgen_clk CLK_TOP_OSC_D10>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_SPMI_M_MST_SEL>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_OSC_D10>;
+		clock-names = "pmif_sys_ck",
+			"pmif_tmr_ck",
+			"pmif_clk_mux",
+			"pmif_clk_osc_d10",
+			"pmif_clk26m",
+			"spmimst_clk_mux",
+			"spmimst_clk26m",
+			"spmimst_clk_osc_d10";
+		swinf_ch_start = <6>;
+		ap_swinf_no = <2>;
+		grpid = <0xB>;
+		#address-cells = <2>;
+		#size-cells = <0>;
+	};
+
+	spmi_p_bus: spmi_p@10027000 {
+		compatible = "mediatek,mt6880-pmif-p";
+		reg = <0 0x10027000 0 0x0008F0>,
+		      <0 0x10028000 0 0x000110>;
+		reg-names = "pmif", "spmimst";
+		interrupts = <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "pmif_irq";
+		irq_event_en = <0x0 0x0 0x0 0x0 0x0>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PMIC_AP_SET>,
+			<&infracfg_ao_clk CLK_IFRAO_PMIC_TMR_SET>,
+			<&topckgen_clk CLK_TOP_PWRAP_ULPOSC_SEL>,
+			<&topckgen_clk CLK_TOP_OSC_D10>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_SPMI_P_MST_SEL>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_MAINPLL_D7_D8>;
+		clock-names = "pmif_sys_ck",
+			"pmif_tmr_ck",
+			"pmif_clk_mux",
+			"pmif_clk_osc_d10",
+			"pmif_clk26m",
+			"spmimst_clk_mux",
+			"spmimst_clk26m",
+			"spmimst_clk_mainpll_d7_d8";
+		swinf_ch_start = <6>;
+		ap_swinf_no = <2>;
+		grpid = <0xB>;
+		#address-cells = <2>;
+		#size-cells = <0>;
+	};
+
+	/* ATF logger */
+        atf_logger {
+                compatible = "mediatek,atf_logger";
+        };
+
+	bcrm_peri_ao@1002a000 {
+		compatible = "mediatek,bcrm_peri_ao";
+		reg = <0 0x1002a000 0 0x1000>;
+	};
+
+	debug_ao_peri@1002b000 {
+		compatible = "mediatek,debug_ao_peri";
+		reg = <0 0x1002b000 0 0x1000>;
+	};
+
+	bcrm_peri_ao2@1002d000 {
+		compatible = "mediatek,bcrm_peri_ao2";
+		reg = <0 0x1002d000 0 0x1000>;
+	};
+
+	debug_ao_peri2@1002e000 {
+		compatible = "mediatek,debug_ao_peri2";
+		reg = <0 0x1002e000 0 0x1000>;
+	};
+
+	devapc_ao_infra@10030000 {
+		compatible = "mediatek,devapc_ao_infra";
+		reg = <0 0x10030000 0 0x4000>;
+	};
+
+	devapc_ao_peri@10034000 {
+		compatible = "mediatek,devapc_ao_peri";
+		reg = <0 0x10034000 0 0x4000>;
+	};
+
+	devapc_ao_peri2@10038000 {
+		compatible = "mediatek,devapc_ao_peri2";
+		reg = <0 0x10038000 0 0x4000>;
+	};
+
+	devapc_ao_peri_par@1003c000 {
+		compatible = "mediatek,devapc_ao_peri_par";
+		reg = <0 0x1003c000 0 0x4000>;
+	};
+
+	debug_ao_peri_par@10040000 {
+		compatible = "mediatek,debug_ao_peri_par";
+		reg = <0 0x10040000 0 0x1000>;
+	};
+
+	bcrm_peri_par_ao@10041000 {
+		compatible = "mediatek,bcrm_peri_par_ao";
+		reg = <0 0x10041000 0 0x1000>;
+	};
+
+	debug_ao_fmem@10042000 {
+		compatible = "mediatek,debug_ao_fmem";
+		reg = <0 0x10042000 0 0x1000>;
+	};
+
+	bcrm_fmem_ao@10043000 {
+		compatible = "mediatek,bcrm_fmem_ao";
+		reg = <0 0x10043000 0 0x1000>;
+	};
+
+	devapc_ao_fmem@10044000 {
+		compatible = "mediatek,devapc_ao_fmem";
+		reg = <0 0x10044000 0 0x4000>;
+	};
+
+	pwm@10048000 {
+		compatible = "mediatek,mt6880-pwm";
+		reg = <0 0x10048000 0 0x1000>;
+		#pwm-cells = <2>;
+		interrupts = <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>;
+
+		clocks = <&topckgen_clk CLK_TOP_PWM_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM1>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM2>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM3>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM4>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM5>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM6>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM7>;
+		clock-names = "top",
+			"main",
+			"pwm1",
+			"pwm2",
+			"pwm3",
+			"pwm4",
+			"pwm5",
+			"pwm6",
+			"pwm7";
+	};
+
+	sgmii0@10060000 {
+		compatible = "mediatek,sgmii0";
+		reg = <0 0x10060000 0 0x8000>;
+		interrupts = <GIC_SPI 367 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	sgmii1@10070000 {
+		compatible = "mediatek,sgmii1";
+		reg = <0 0x10070000 0 0x8000>;
+		interrupts = <GIC_SPI 368 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	sys_cirq@10204000 {
+		compatible = "mediatek,sys_cirq";
+		reg = <0 0x10204000 0 0x1000>;
+		interrupts = <GIC_SPI 501 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	devapc@10207000 {
+		compatible = "mediatek,mt6880-devapc";
+		reg = <0 0x10207000 0 0x1000>,
+		      <0 0x10274000 0 0x1000>,
+		      <0 0x10275000 0 0x1000>,
+		      <0 0x11020000 0 0x1000>,
+		      <0 0x10030000 0 0x1000>,
+		      <0 0x1020e000 0 0x1000>,
+		      <0 0x10033000 0 0x1000>;
+		interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_DEVICE_APC>;
+		clock-names = "devapc-infra-clock";
+	};
+
+	hwrng: hwrng {
+		compatible = "mediatek,mt67xx-rng";
+	};
+
+	bus_dbg@10208000 {
+		compatible = "mediatek,bus_dbg-v2";
+		reg = <0 0x10208000 0 0x1000>,
+			<0 0x10001000 0 0x1000>;
+		mediatek,bus_dbg_con_offset = <0x2fc>;
+		interrupt = <GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	ap_ccif0@10209000 {
+		compatible = "mediatek,ap_ccif0";
+		reg = <0 0x10209000 0 0x1000>;
+		interrupts = <GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif0@1020a000 {
+		compatible = "mediatek,md_ccif0";
+		reg = <0 0x1020a000 0 0x1000>;
+	};
+
+	ap_ccif1@1020b000 {
+		compatible = "mediatek,ap_ccif1";
+		reg = <0 0x1020b000 0 0x1000>;
+		interrupts = <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif1@1020c000 {
+		compatible = "mediatek,md_ccif1";
+		reg = <0 0x1020c000 0 0x1000>;
+	};
+
+	infra_mbist@1020d000 {
+		compatible = "mediatek,infra_mbist";
+		reg = <0 0x1020d000 0 0x1000>;
+	};
+
+	infracfg@1020e000 {
+		compatible = "mediatek,infracfg";
+		reg = <0 0x1020e000 0 0x1000>;
+	};
+
+	trng@1020f000 {
+		compatible = "mediatek,trng";
+		reg = <0 0x1020f000 0 0x1000>;
+		interrupts = <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	dxcc_sec@10210000 {
+		compatible = "mediatek,dxcc_sec";
+		reg = <0 0x10210000 0 0x1000>;
+	};
+
+	cq_dma@10212000 {
+		compatible = "mediatek,cq_dma";
+		reg = <0 0x10212000 0 0x1000>;
+		interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md2md_md2_ccif0@10213000 {
+		compatible = "mediatek,md2md_md2_ccif0";
+		reg = <0 0x10213000 0 0x1000>;
+	};
+
+	sramrom@10214000 {
+		compatible = "mediatek,sramrom";
+		reg = <0 0x10214000 0 0x1000>;
+	};
+
+	bcrm_infra@10215000 {
+		compatible = "mediatek,bcrm_infra";
+		reg = <0 0x10215000 0 0x1000>;
+	};
+
+	dbg_tracker2@10218000 {
+		compatible = "mediatek,dbg_tracker2";
+		reg = <0 0x10218000 0 0x1000>;
+	};
+
+	emicen: emicen@10219000 {
+		compatible = "mediatek,mt6880-emicen",
+			     "mediatek,common-emicen";
+		reg = <0 0x10219000 0 0x1000>;
+		mediatek,emi-reg = <&emichn>;
+	};
+
+	infra_device_mpu@1021a000 {
+		compatible = "mediatek,infra_device_mpu";
+		reg = <0 0x1021a000 0 0x1000>;
+	};
+
+	infra_device_mpu@1021b000 {
+		compatible = "mediatek,infra_device_mpu";
+		reg = <0 0x1021b000 0 0x1000>;
+	};
+
+	infracfg_mem@1021c000 {
+		compatible = "mediatek,infracfg_mem";
+		reg = <0 0x1021c000 0 0x1000>;
+	};
+
+	emimpu:emimpu@10226000 {
+		compatible = "mediatek,mt6880-emimpu",
+			     "mediatek,common-emimpu";
+		reg = <0 0x10226000 0 0x1000>;
+		mediatek,emi-reg = <&emicen>;
+		interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+		region_cnt = <32>;
+		domain_cnt = <16>;
+		addr_align = <16>;
+		ap_region = <31>;
+		ap_apc = <0 0 5 5 0 0 6 0>,
+			 <0 0 5 5 5 5 5 5>;
+		dump = <0x1f0 0x1f8 0x1fc>;
+		clear = <0x160 0xffffffff 16>,
+			<0x200 0x00000003 16>,
+			<0x1f0 0x80000000 1>;
+		clear_md = <0x1fc 0x80000000 1>;
+		ctrl_intf = <1>;
+		slverr = <0>;
+	};
+
+	cldma_sys_ap {
+		compatible = "mediatek,cldma_sys_ap";
+		reg = <0 0x1004A000 0 0x1000>, /*CLDMA0_AO_INDMA_AO_MD*/
+			<0 0x1021E000 0 0x1000>; /*CLDMA0_AO_INDMA_PD_MD*/
+		interrupts = <GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; /*cldma0_md_int_ap*/
+		clocks = <&infracfg_ao_clk CLK_IFRAO_RG_133M_CLDMA_TOP>;
+		clock-names = "infra-cldma0-rh";
+		mediatek,hif_ids = <1>; /* (1 << HIF_ID_CLDMA) */
+	};
+
+	mrdump_ext_rst: mrdump_ext_rst {
+		compatible = "mediatek, mrdump_ext_rst-disabled";
+		mode = "IRQ";
+		status = "okay";
+	};
+
+	dpmaif:dpmaif@10014000 {
+		compatible = "mediatek,dpmaif";
+		reg = <0 0x10014000 0 0x1000>, /*AO_UL*/
+			<0 0x1022D000 0 0x1000>, /*PD_UL*/
+			<0 0x1022C000 0 0x1000>, /*PD_MD_MISC*/
+			<0 0x1022E000 0 0x1000>, /*SRAM*/
+			<0 0x15B14000 0 0x1000>, /*MED_BMP_CFG*/
+			<0 0x15B38000 0 0x1000>; /*MED_SSR1_CFG*/
+		interrupts = <GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH>; /*209+32=241*/
+		mediatek,dpmaif_capability = <6>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_DPMAIF_MAIN>,
+			<&infracfg_ao_clk CLK_IFRAO_CLDMA_BCLK>;
+		clock-names = "infra-dpmaif-clk",
+			"infra-dpmaif-blk-clk";
+	};
+
+	mddriver:mddriver {
+		compatible = "mediatek,mddriver";
+		mediatek,mdhif_type = <2>; /* bit0~3: CLDMA|CCIF|DPMAIF */
+		mediatek,md_id = <0>;
+		mediatek,cldma_capability = <2>;
+		reg = <0 0x10209000 0 0x1000>, /*AP_CCIF_BASE*/
+			<0 0x1020a000 0 0x1000>; /*MD_CCIF_BASE*/
+		interrupts = <GIC_SPI 194 IRQ_TYPE_LEVEL_HIGH>, /*CCIF0 174/206*/
+			     <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>, /*CCIF0 175/207*/
+			     <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>; /*MDWDT*/
+		clocks = <&infracfg_ao_clk CLK_IFRAO_CCIF_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF1_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF1_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF2_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF2_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF4_MD>;
+		clock-names = "infra-ccif-ap",
+			"infra-ccif-md",
+			"infra-ccif1-ap",
+			"infra-ccif1-md",
+			"infra-ccif2-ap",
+			"infra-ccif2-md",
+			"infra-ccif4-md";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MD1>;
+	};
+
+/*	md_auxadc:md_auxadc {
+		compatible = "mediatek,md_auxadc";
+		io-channels = <&auxadc 2>;
+		io-channel-names = "md-channel",
+			"md-battery";
+	};
+
+	md_ccci_rtc:md_ccci_rtc {
+		compatible = "mediatek,md_ccci_rtc";
+		nvmem-cells = <&ext_32k>;
+		nvmem-cell-names = "external-32k";
+	}; */
+
+	gce_mbox: gce_mbox@10228000 {
+		compatible = "mediatek,mailbox-gce";
+		reg = <0 0x10228000 0 0x4000>;
+		interrupts = <GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH>;
+
+		#mbox-cells = <3>;
+		#gce-event-cells = <1>;
+		#gce-subsys-cells = <2>;
+		default_tokens = /bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_0>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_1>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_2>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_3>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_4>,
+			/bits/ 16 <CMDQ_SYNC_RESOURCE_WROT0>,
+			/bits/ 16 <CMDQ_SYNC_RESOURCE_WROT1>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_GCE>,
+			 <&infracfg_ao_clk CLK_IFRAO_GCE_26M_SET>;
+		clock-names = "gce", "gce-timer";
+	};
+
+	cmdq-test {
+		compatible = "mediatek,cmdq-test";
+		mediatek,gce = <&gce_mbox>;
+		mmsys_config = <&mmsys_config>;
+		mediatek,gce-subsys = <99>, <SUBSYS_1400XXXX>;
+		mboxes = <&gce_mbox 23 0 CMDQ_THR_PRIO_1>,
+			<&gce_mbox 22 CMDQ_NO_TIMEOUT CMDQ_THR_PRIO_1>,
+			<&gce_mbox 11 0 CMDQ_THR_PRIO_1>;
+		token_user0 = /bits/ 16 <CMDQ_SYNC_TOKEN_USER_0>;
+		token_gpr_set4 = /bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_4>;
+	};
+
+	infra_dpmaif@1022c000 {
+		compatible = "mediatek,infra_dpmaif";
+		reg = <0 0x1022c000 0 0x10>;
+	};
+
+	dramc: dramc@10230000 {
+		compatible = "mediatek,mt6880-dramc",
+			"mediatek,common-dramc";
+		reg = <0 0x10230000 0 0x2000>, /* DRAMC AO CHA */
+			<0 0x10240000 0 0x2000>, /* DRAMC AO CHB */
+			<0 0x10234000 0 0x1000>, /* DRAMC NAO CHA */
+			<0 0x10244000 0 0x1000>, /* DRAMC NAO CHB */
+			<0 0x10238000 0 0x2000>, /* DDRPHY AO CHA */
+			<0 0x10248000 0 0x2000>, /* DDRPHY AO CHB */
+			<0 0x10236000 0 0x1000>, /* DDRPHY NAO CHA */
+			<0 0x10246000 0 0x1000>, /* DDRPHY NAO CHB */
+			<0 0x10006000 0 0x1000>; /* SLEEP BASE */
+		mr4_version = <1>;
+		mr4_rg = <0x0090 0x0000ffff 0>;
+		fmeter_version = <1>;
+		crystal_freq = <52>;
+		pll_id = <0x050c 0x00000100 8>;
+		shu_lv = <0x050c 0x00030000 16>;
+		shu_of = <0x700>;
+		sdmpcw = <0x0704 0xffff0000 16>,
+			<0x0724 0xffff0000 16>;
+		prediv = <0x0708 0x000c0000 18>,
+			<0x0728 0x000c0000 18>;
+		posdiv = <0x0708 0x00000007 0>,
+			<0x0728 0x00000007 0>;
+		ckdiv4 = <0x0874 0x00000004 2>,
+			<0x0874 0x00000004 2>;
+		pll_md = <0x0744 0x00000100 8>,
+			<0x0744 0x00000100 8>;
+		cldiv2 = <0x08b4 0x00000002 1>,
+			<0x08b4 0x00000002 1>;
+		fbksel = <0x070c 0x00000040 6>,
+			<0x070c 0x00000040 6>;
+		dqopen = <0x0870 0x00100000 20>,
+			<0x0870 0x00100000 20>;
+	};
+	emiisu: emiisu {
+		compatible = "mediatek,mt6880-emiisu",
+			     "mediatek,common-emiisu";
+		ctrl_intf = <1>;
+	};
+	emichn: emichn@10235000 {
+		compatible = "mediatek,mt6880-emichn",
+			     "mediatek,common-emichn";
+		reg = <0 0x10235000 0 0x1000>,
+		      <0 0x10245000 0 0x1000>;
+	};
+
+	dramc_ch0_top0@10230000 {
+		compatible = "mediatek,dramc_ch0_top0";
+		reg = <0 0x10230000 0 0x2000>;
+	};
+
+	dramc_ch0_top1@10232000 {
+		compatible = "mediatek,dramc_ch0_top1";
+		reg = <0 0x10232000 0 0x2000>;
+	};
+
+	dramc_ch0_top2@10234000 {
+		compatible = "mediatek,dramc_ch0_top2";
+		reg = <0 0x10234000 0 0x1000>;
+	};
+
+	dramc_ch0_top3@10235000 {
+		compatible = "mediatek,dramc_ch0_top3";
+		reg = <0 0x10235000 0 0x1000>;
+	};
+
+	dramc_ch0_top4@10236000 {
+		compatible = "mediatek,dramc_ch0_top4";
+		reg = <0 0x10236000 0 0x2000>;
+	};
+
+	dramc_ch0_top5@10238000 {
+		compatible = "mediatek,dramc_ch0_top5";
+		reg = <0 0x10238000 0 0x2000>;
+	};
+
+	dramc_ch0_top6@1023a000 {
+		compatible = "mediatek,dramc_ch0_top6";
+		reg = <0 0x1023a000 0 0x2000>;
+	};
+
+	ap_ccif2@1023c000 {
+		compatible = "mediatek,ap_ccif2";
+		reg = <0 0x1023c000 0 0x1000>;
+		interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif2@1023d000 {
+		compatible = "mediatek,md_ccif2";
+		reg = <0 0x1023d000 0 0x1000>;
+	};
+
+	ap_ccif3@1023e000 {
+		compatible = "mediatek,ap_ccif3";
+		reg = <0 0x1023e000 0 0x1000>;
+		interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif3@1023f000 {
+		compatible = "mediatek,md_ccif3";
+		reg = <0 0x1023f000 0 0x1000>;
+	};
+
+	i2c_common: i2c_common {
+		compatible = "mediatek,i2c_common";
+		dma_support = /bits/ 8 <3>;
+		idvfs = /bits/ 8 <1>;
+		set_dt_div = /bits/ 8 <1>;
+		check_max_freq = /bits/ 8 <1>;
+		ver = /bits/ 8 <2>;
+		set_ltiming = /bits/ 8 <1>;
+		ext_time_config = /bits/ 16 <0x1801>;
+		cnt_constraint = /bits/ 8 <1>;
+		dma_ver = /bits/ 8 <1>;
+	};
+
+	i2c0: i2c0@11c40000 {
+		compatible = "mediatek,i2c";
+		id = <0>;
+		reg = <0 0x11c40000 0 0x1000>,
+			<0 0x10217080 0 0x80>;
+		interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C0_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c1: i2c1@11c41000 {
+		compatible = "mediatek,i2c";
+		id = <1>;
+		reg = <0 0x11c41000 0 0x1000>,
+			<0 0x10217100 0 0x80>;
+		interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C1_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c2: i2c2@11c42000 {
+		compatible = "mediatek,i2c";
+		id = <2>;
+		reg = <0 0x11c42000 0 0x1000>,
+			<0 0x10217180 0 0x80>;
+		interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C2_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c3: i2c3@11c43000 {
+		compatible = "mediatek,i2c";
+		id = <3>;
+		reg = <0 0x11c43000 0 0x1000>,
+			<0 0x10217200 0 0x80>;
+		interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C3_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c4: i2c4@11c44000 {
+		compatible = "mediatek,i2c";
+		id = <4>;
+		reg = <0 0x11c44000 0 0x1000>,
+			<0 0x10217280 0 0x80>;
+		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C4_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c5: i2c5@11c45000 {
+		compatible = "mediatek,i2c";
+		id = <5>;
+		reg = <0 0x11c45000 0 0x1000>,
+			<0 0x10217300 0 0x80>;
+		interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C5_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	ssusb: usb@11201000 {
+		compatible = "mediatek,mtu3";
+		reg = <0 0x11201000 0 0x2e00>,
+			<0 0x11203e00 0 0x0100>;
+		reg-names = "mac", "ippc";
+		vusb33-supply = <&mt6330_vusb_ldo_reg>;
+		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
+
+		phy-cells = <1>;
+		phys = <&u2port0 PHY_TYPE_USB2>,
+			 <&u3port0 PHY_TYPE_USB3>;
+		plat_type = <1>; /* 0: FPGA 1: ASIC */
+		dr_mode = "peripheral";
+		maximum-speed = "super-speed";
+		clocks = <&infracfg_ao_clk CLK_IFRAO_SSUSB>,
+			 <&infracfg_ao_clk CLK_IFRAO_SSUSB_XHCI>;
+		clock-names = "sys_ck","ref_ck";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SSUSB>;
+		usb-role-switch;
+		mediatek,force-vbus;
+		mediatek,usb3-drd;
+
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		usb_host: xhci0@11200000 {
+			compatible = "mediatek,mtk-xhci";
+			reg = <0 0x11200000 0 0x1000>;
+			reg-names = "mac";
+			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk26m>;
+			clock-names = "sys_ck";
+		};
+	};
+
+	u3fpgaphy: usb-phy {
+		compatible = "mediatek,fpga-u3phy";
+		mediatek,ippc = <0x11203e00>;
+		#address-cells = <2>;
+		#size-cells = <2>;
+		fpga_i2c_physical_base = <0x11c42000>;
+		status = "disabled";
+
+		u3fpgaport0: usb-phy@0 {
+			chip-id= <0xa60931a>;
+			port = <0>;
+			pclk_phase = <23>;
+			#phy-cells = <1>;
+		};
+	};
+
+	u3phy: usb-phy@11e30000 {
+		compatible = "mediatek,generic-tphy-v2";
+		clocks = <&clk26m>;
+		clock-names = "u3phya_ref";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		u2port0: usb2-phy0@11e30000 {
+			reg = <0 0x11e30000 0 0x700>;
+			#phy-cells = <1>;
+			mediatek,eye-rev6 = <1>;
+			mediatek,eye-vrt = <5>;
+			mediatek,eye-term = <5>;
+			mediatek,rx-sqth = <5>;
+			status = "okay";
+		};
+
+		u3port0: usb3-phy0@11e30700 {
+			reg = <0 0x11e30700 0 0x900>;
+			#phy-cells = <1>;
+			status = "okay";
+		};
+	};
+
+	apdma: dma-controller@0x10217000 {
+		compatible = "mediatek, mt6873-uart-dma",
+					 "mediatek,mt6577-uart-dma";
+		reg = <0 0x10217380 0 0x80>,
+			  <0 0x10217400 0 0x80>,
+			  <0 0x10217480 0 0x80>,
+			  <0 0x10217500 0 0x80>,
+			  <0 0x10217580 0 0x80>,
+			  <0 0x10217600 0 0x80>;
+		interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
+		dma-requests = <6>;
+		dma-bits = <34>;
+		clocks = <&clk26m>;
+		#dma-cells = <1>;
+	};
+
+	auxadc: auxadc@11001000 {
+		compatible = "mediatek,mt6765-auxadc";
+		reg = <0 0x11001000 0 0x1000>;
+		interrupts = <GIC_SPI 64 IRQ_TYPE_EDGE_RISING>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_AUXADC>;
+		clock-names = "main";
+		#io-channel-cells = <1>;
+		/* Auxadc efuse calibration */
+		/* 1. Auxadc cali on/off bit shift */
+		mediatek,cali-en-bit = <20>;
+		/* 2. Auxadc cali ge bits shift */
+		mediatek,cali-ge-bit = <10>;
+		/* 3. Auxadc cali oe bits shift */
+		mediatek,cali-oe-bit = <0>;
+		/* 4. Auxadc cali efuse reg offset */
+		mediatek,cali-efuse-reg-offset = <0xf8>;
+		nvmem = <&efuse>;
+		nvmem-names = "mtk_efuse";
+		#interconnect-cells = <1>;
+	};
+
+	uart0: serial@11002000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11002000 0 0x1000>;
+		interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART0>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 0
+				&apdma 1>;
+		dma-names = "tx", "rx";
+	};
+
+	uart1: serial@11003000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11003000 0 0x1000>;
+		interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART1>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 2
+				&apdma 3>;
+		dma-names = "tx", "rx";
+	};
+
+	uart2: serial@11004000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11004000 0 0x1000>;
+		interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART2>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 4
+				&apdma 5>;
+		dma-names = "tx", "rx";
+	};
+
+	nandc: nfi@11005000 {
+		compatible = "mediatek,mt6880-nfc";
+		reg = <0 0x11005000 0 0x1000>,
+			<0 0x11006000 0 0x1000>;
+		interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
+					<GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+		status = "ok";
+	};
+
+	nor: nor_flash@0x11250000 {
+		compatible = "mediatek,mt8173-nor";
+		reg = <0 0x11250000 0 0x1000>;
+		clocks =<&topckgen_clk CLK_TOP_SFLASH_SEL>,
+				<&infracfg_ao_clk CLK_IFRAO_RG_FLASHIF_SFLASH>;
+		clock-names = "spi", "sf";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "ok";
+	};
+
+	pd-sgmii_0_phy {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_PHY>;
+	};
+
+	pd-sgmii_0_top {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_TOP>;
+	};
+
+	pd-sgmii_1_phy {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_PHY>;
+	};
+
+	pd-sgmii_1_top {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_TOP>;
+	};
+
+	sgmiisys_0: sgmiisys@10060000 {
+		compatible = "mediatek,colgin-sgmiisys_0", "syscon";
+		reg = <0 0x10060000 0 0x1000>;
+		#clock-cells = <1>;
+		mediatek,physpeed = "2500";
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_TOP>;
+	};
+
+	sgmiisys_1: sgmiisys@10070000 {
+		compatible = "mediatek,colgin-sgmiisys_1", "syscon";
+		reg = <0 0x10070000 0 0x1000>;
+		#clock-cells = <1>;
+		mediatek,physpeed = "2500";
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_TOP>;
+	};
+
+	sgmiisys_phy_0: sgmiiphy@11ED0000 {
+		compatible = "mediatek,colgin-sgmiisys_phy_0", "syscon";
+		reg = <0 0x11ED0000 0 0x1000>;
+		#clock-cells = <1>;
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_PHY>;
+	};
+
+	sgmiisys_phy_1: sgmiiphy@11EE0000 {
+		compatible = "mediatek,colgin-sgmiisys_phy_1", "syscon";
+		reg = <0 0x11EE0000 0 0x1000>;
+		#clock-cells = <1>;
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_PHY>;
+	};
+
+	ethsys: ethsys@15000000 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "mediatek,leopard-ethsys", "syscon", "simple-mfd";
+		reg = <0 0x15000000 0 0x1000>;
+		#clock-cells = <1>;
+		#reset-cells = <1>;
+
+		ethsysrst: reset-controller {
+			compatible = "ti,syscon-reset";
+			#reset-cells = <1>;
+			ti,reset-bits = <
+				0x34 4 0x34 4 0x34 4 (ASSERT_SET | DEASSERT_CLEAR   | STATUS_SET) /* 4: wocpu_rst */
+			>;
+		};
+	};
+
+        wo: wo@15195000 {
+		compatible = "mediatek,leopard-ethsys", "syscon", "simple-mfd";
+                reg = <0 0x15195000 0 0x1000>;
+        };
+
+	eth: ethernet@15100000 {
+		compatible = "mediatek,mt6890-eth",
+			     "syscon";
+		reg = <0 0x15100000 0 0x20000>;
+		interrupts = <GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 394 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 395 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_NETSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_MEDSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_500M_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_MED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_WED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_2X_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SBUS_SEL>;
+		clock-names = "net_sel", "med_sel", "net_500_sel",
+			      "med_mcu_sel", "wed_mcu_sel",
+			      "net_2x_sel", "sgmii_sel", "sgmii_sbus_sel";
+        /*modify by CLK SW Pei-hsuan Cheng
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_NETSYS>;*/
+		mediatek,ethsys = <&ethsys>;
+		mediatek,wo = <&wo>;
+		mediatek,sgmiisys = <&sgmiisys_0>,<&sgmiisys_1>;
+		mediatek,sgmiisys_phy = <&sgmiisys_phy_0>,<&sgmiisys_phy_1>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "disabled";
+	};
+
+	stmmac_axi_setup: stmmac-axi-config {
+		snps,wr_osr_lmt = <0x7>;
+		snps,rd_osr_lmt = <0x7>;
+		snps,blen = <0 0 0 0 16 8 4>;
+	};
+
+	mtl_rx_setup: rx-queues-config {
+		snps,rx-queues-to-use = <1>;
+		snps,rx-sched-sp;
+		queue0 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x0>;
+			snps,priority = <0x0>;
+		};
+		queue1 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x1>;
+			snps,priority = <0x0>;
+			snps,route-ptp;
+		};
+		queue2 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x2>;
+			snps,priority = <0x0>;
+			snps,route-multi-broad;
+		};
+	};
+
+	mtl_tx_setup: tx-queues-config {
+		snps,tx-queues-to-use = <3>;
+		snps,tx-sched-wrr;
+		queue0 {
+			snps,weight = <0x10>;
+			snps,dcb-algorithm;
+			snps,priority = <0x0>;
+		};
+
+		queue1 {
+			snps,weight = <0x11>;
+			snps,dcb-algorithm;
+			snps,priority = <0x1>;
+		};
+
+		queue2 {
+			snps,weight = <0x12>;
+			snps,dcb-algorithm;
+			snps,priority = <0x2>;
+		};
+	};
+
+	snps_mac: ethernet@11021000 {
+		compatible = "mediatek,mt2735-gmac";
+		reg = <0 0x11021000 0 0x1300>;
+		interrupts = <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "macirq";
+		mac-address = [00 55 7b b5 7d f7];
+		clock-names = "mac_main",
+			      "ptp_ref",
+			      "eth_cg",
+			      "eth_rmii",
+			      "sgmii_sel",
+			      "sgmii_sbus_sel";
+		clocks = <&topckgen_clk CLK_TOP_SNPS_ETH_312P5M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_62P4M_PTP_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_250M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_50M_RMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SBUS_SEL>;
+		mediatek,pericfg = <&infracfg_ao>;
+		snps,axi-config = <&stmmac_axi_setup>;
+		snps,mtl-rx-config = <&mtl_rx_setup>;
+		snps,mtl-tx-config = <&mtl_tx_setup>;
+		/*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_ETH>;
+		mediatek,sgmiisys = <&sgmiisys_0>;
+		mediatek,sgmiisys_phy = <&sgmiisys_phy_0>;
+		snps,txpbl = <1>;
+		snps,rxpbl = <1>;
+		clk_csr = <0>;
+		status = "disabled";
+	};
+
+	crypto: crypto@10320000 {
+		/* compatible = "mediatek,eip97-crypto"; */
+		/* compatible = "safexcel-ip-97-mob"; */
+		compatible = "inside-secure,safexcel-eip97";
+		reg = <0 0x10320000 0 0x40000>;
+		interrupts = <GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "ring0", "ring1", "ring2", "ring3";
+		clocks = <&topckgen_clk CLK_TOP_EIP97_SEL>,
+				<&topckgen_clk CLK_TOP_NET2PLL>,
+				<&topckgen_clk CLK_TOP_MAINPLL_D5_D2>;
+		clock-names = "clk-mux", "net2pll", "D5_D2";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_EIP97>;
+	};
+
+	dramc_ch1_top0@10240000 {
+		compatible = "mediatek,dramc_ch1_top0";
+		reg = <0 0x10240000 0 0x2000>;
+	};
+
+	dramc_ch1_top1@10242000 {
+		compatible = "mediatek,dramc_ch1_top1";
+		reg = <0 0x10242000 0 0x2000>;
+	};
+
+	dramc_ch1_top2@10244000 {
+		compatible = "mediatek,dramc_ch1_top2";
+		reg = <0 0x10244000 0 0x1000>;
+	};
+
+	dramc_ch1_top3@10245000 {
+		compatible = "mediatek,dramc_ch1_top3";
+		reg = <0 0x10245000 0 0x1000>;
+	};
+
+	dramc_ch1_top4@10246000 {
+		compatible = "mediatek,dramc_ch1_top4";
+		reg = <0 0x10246000 0 0x2000>;
+	};
+
+	dramc_ch1_top5@10248000 {
+		compatible = "mediatek,dramc_ch1_top5";
+		reg = <0 0x10248000 0 0x2000>;
+	};
+
+	dramc_ch1_top6@1024a000 {
+		compatible = "mediatek,dramc_ch1_top6";
+		reg = <0 0x1024a000 0 0x2000>;
+	};
+
+	ap_ccif4@1024c000 {
+		compatible = "mediatek,ap_ccif4";
+		reg = <0 0x1024c000 0 0x1000>;
+	};
+
+	md_ccif4@1024d000 {
+		compatible = "mediatek,md_ccif4";
+		reg = <0 0x1024d000 0 0x1000>;
+	};
+
+	md_ccif4@1024e000 {
+		compatible = "mediatek,md_ccif4";
+		reg = <0 0x1024e000 0 0x1000>;
+	};
+
+	dramc_ch2_top0@10250000 {
+		compatible = "mediatek,dramc_ch2_top0";
+		reg = <0 0x10250000 0 0x2000>;
+	};
+
+	dramc_ch2_top1@10252000 {
+		compatible = "mediatek,dramc_ch2_top1";
+		reg = <0 0x10252000 0 0x2000>;
+	};
+
+	dramc_ch2_top2@10254000 {
+		compatible = "mediatek,dramc_ch2_top2";
+		reg = <0 0x10254000 0 0x1000>;
+	};
+
+	dramc_ch2_top3@10255000 {
+		compatible = "mediatek,dramc_ch2_top3";
+		reg = <0 0x10255000 0 0x1000>;
+	};
+
+	dramc_ch2_top4@10256000 {
+		compatible = "mediatek,dramc_ch2_top4";
+		reg = <0 0x10256000 0 0x2000>;
+	};
+
+	dramc_ch2_top5@10258000 {
+		compatible = "mediatek,dramc_ch2_top5";
+		reg = <0 0x10258000 0 0x2000>;
+	};
+
+	dramc_ch2_top6@1025a000 {
+		compatible = "mediatek,dramc_ch2_top6";
+		reg = <0 0x1025a000 0 0x2000>;
+	};
+
+	ap_ccif5@1025c000 {
+		compatible = "mediatek,ap_ccif5";
+		reg = <0 0x1025c000 0 0x1000>;
+	};
+
+	md_ccif5@1025d000 {
+		compatible = "mediatek,md_ccif5";
+		reg = <0 0x1025d000 0 0x1000>;
+	};
+
+	mm_vpu_m0_sub_common@1025e000 {
+		compatible = "mediatek,mm_vpu_m0_sub_common";
+		reg = <0 0x1025e000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1025f000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1025f000 0 0x1000>;
+	};
+
+	dramc_ch3_top0@10260000 {
+		compatible = "mediatek,dramc_ch3_top0";
+		reg = <0 0x10260000 0 0x2000>;
+	};
+
+	dramc_ch3_top1@10262000 {
+		compatible = "mediatek,dramc_ch3_top1";
+		reg = <0 0x10262000 0 0x2000>;
+	};
+
+	dramc_ch3_top2@10264000 {
+		compatible = "mediatek,dramc_ch3_top2";
+		reg = <0 0x10264000 0 0x1000>;
+	};
+
+	dramc_ch3_top3@10265000 {
+		compatible = "mediatek,dramc_ch3_top3";
+		reg = <0 0x10265000 0 0x1000>;
+	};
+
+	dramc_ch3_top4@10266000 {
+		compatible = "mediatek,dramc_ch3_top4";
+		reg = <0 0x10266000 0 0x2000>;
+	};
+
+	dramc_ch3_top5@10268000 {
+		compatible = "mediatek,dramc_ch3_top5";
+		reg = <0 0x10268000 0 0x2000>;
+	};
+
+	dramc_ch3_top6@1026a000 {
+		compatible = "mediatek,dramc_ch3_top6";
+		reg = <0 0x1026a000 0 0x2000>;
+	};
+
+	bcrm_peri@10272000 {
+		compatible = "mediatek,bcrm_peri";
+		reg = <0 0x10272000 0 0x1000>;
+	};
+
+	bcrm_peri2@10273000 {
+		compatible = "mediatek,bcrm_peri2";
+		reg = <0 0x10273000 0 0x1000>;
+	};
+
+	devapc_peri@10274000 {
+		compatible = "mediatek,devapc_peri";
+		reg = <0 0x10274000 0 0x1000>;
+	};
+
+	devapc_peri2@10275000 {
+		compatible = "mediatek,devapc_peri2";
+		reg = <0 0x10275000 0 0x1000>;
+	};
+
+	bcrm_fmem@10276000 {
+		compatible = "mediatek,bcrm_fmem";
+		reg = <0 0x10276000 0 0x1000>;
+	};
+
+	mm_vpu_m0_sub_common@10309000 {
+		compatible = "mediatek,mm_vpu_m0_sub_common";
+		reg = <0 0x10309000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030a000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030a000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030b000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030b000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030c000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030c000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030d000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030d000 0 0x1000>;
+	};
+
+	sys_cirq1@10312000 {
+		compatible = "mediatek,sys_cirq1";
+		reg = <0 0x10312000 0 0x1000>;
+	};
+
+	sys_cirq2@10313000 {
+		compatible = "mediatek,sys_cirq2";
+		reg = <0 0x10313000 0 0x1000>;
+	};
+
+	dbg_tracker@10314000 {
+		compatible = "mediatek,dbg_tracker";
+		reg = <0 0x10314000 0 0x1000>;
+	};
+
+	pwrmcu@10400000 {
+		compatible = "mediatek,pwrmcu";
+		reg = <0 0x10400000 0 0x100000>;
+	};
+
+	sspm@10400000 {
+		compatible = "mediatek,sspm";
+		reg = <0 0x10400000 0 0x28000>,
+			<0 0x10440000 0 0x10000>,
+			<0 0x10450000 0 0x100>,
+			<0 0x10451000 0 0x4>,
+			<0 0x10451004 0 0x4>,
+			<0 0x10460000 0 0x100>,
+			<0 0x10461000 0 0x4>,
+			<0 0x10461004 0 0x4>,
+			<0 0x10470000 0 0x100>,
+			<0 0x10471000 0 0x4>,
+			<0 0x10471004 0 0x4>,
+			<0 0x10480000 0 0x100>,
+			<0 0x10481000 0 0x4>,
+			<0 0x10481004 0 0x4>,
+			<0 0x10490000 0 0x100>,
+			<0 0x10491000 0 0x4>,
+			<0 0x10491004 0 0x4>;
+
+		reg-names = "sspm_base",
+			"cfgreg",
+			"mbox0_base",
+			"mbox0_set",
+			"mbox0_clr",
+			"mbox1_base",
+			"mbox1_set",
+			"mbox1_clr",
+			"mbox2_base",
+			"mbox2_set",
+			"mbox2_clr",
+			"mbox3_base",
+			"mbox3_set",
+			"mbox3_clr",
+			"mbox4_base",
+			"mbox4_set",
+			"mbox4_clr";
+
+		interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>;
+
+		interrupt-names = "ipc",
+			"mbox0",
+			"mbox1",
+			"mbox2",
+			"mbox3",
+			"mbox4";
+	};
+
+	tinsys@10500000 {
+		compatible = "mediatek,tinsys";
+		reg = <0 0x10500000 0 0x0>;
+	};
+
+	dramc_ch1_rsv0@10900000 {
+		compatible = "mediatek,dramc_ch1_rsv0";
+		reg = <0 0x10900000 0 0x40000>;
+	};
+
+	dramc_ch1_rsv1@10940000 {
+		compatible = "mediatek,dramc_ch1_rsv1";
+		reg = <0 0x10940000 0 0xc0000>;
+	};
+
+	mali: mali@13000000 {
+		compatible = "mediatek,mali", "arm,mali-midgard", "arm,mali-bifrost";
+		reg = <0 0x13000000 0 0x4000>;
+		interrupts =
+			<GIC_SPI 363 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 364 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 365 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 366 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names =
+			"GPU",
+			"MMU",
+			"JOB",
+			"EVENT";
+		operating-points-v2 = <&gpu_mali_opp>;
+		#cooling-cells = <2>;
+		gpufreq-supply = <&gpufreq>;
+	};
+
+	gpu_mali_opp: opp-table0 {
+		compatible = "operating-points-v2";
+		opp00 {
+			opp-hz = /bits/ 64 <780000000>;
+			opp-microvolt = <750000>;
+		};
+		opp01 {
+			opp-hz = /bits/ 64 <570000000>;
+			opp-microvolt = <650000>;
+		};
+		opp02 {
+			opp-hz = /bits/ 64 <360000000>;
+			opp-microvolt = <600000>;
+		};
+		opp03 {
+			opp-hz = /bits/ 64 <300000000>;
+			opp-microvolt = <550000>;
+		};
+	};
+
+	gpufreq: gpufreq {
+		compatible = "mediatek,gpufreq";
+		clocks =
+			<&topckgen_clk CLK_TOP_MFG_SEL>,
+			<&topckgen_clk CLK_TOP_MFGPLL>,
+			<&topckgen_clk CLK_TOP_MFG_REF_SEL>,
+			<&mfgsys_clk CLK_MFGCFG_BG3D>;
+		clock-names =
+			"clk_mux",	/* switch main/sub */
+			"clk_main_parent",	/* main pll freq */
+			"clk_sub_parent",	/* default 218.4 MHz */
+			"cg_bg3d";
+		/* power-domains = <&scpsys MT6890_POWER_DOMAIN_MFG0>; */
+		status = "disabled";
+	};
+
+	mmc0: mmc@11230000 {
+		compatible = "mediatek,mt6880-mmc";
+		reg = <0 0x11230000 0 0x1000>,
+			<0 0x11f10000 0 0x1000>;
+		interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_MSDC50_0_SEL>,
+				<&infracfg_ao_clk CLK_IFRAO_MSDC0>,
+				<&infracfg_ao_clk CLK_IFRAO_MSDC0_SRC_CLK>;
+		clock-names = "source", "hclk", "source_cg";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MSDC>;
+		status = "disabled";
+	};
+
+	mmc1: mmc@11240000 {
+		compatible = "mediatek,mt6880-mmc";
+		reg = <0 0x11240000 0 0x1000>,
+			<0 0x11f20000 0 0x1000>;
+		interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_MSDC30_1_SEL>,
+				 <&infracfg_ao_clk CLK_IFRAO_MSDC1>,
+				 <&infracfg_ao_clk CLK_IFRAO_MSDC1_SRC_CLK>;
+		clock-names = "source", "hclk", "source_cg";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MSDC>;
+		status = "disabled";
+	};
+
+	lvts: lvts@1100b000 {
+		compatible = "mediatek,mt6880-lvts";
+		reg = <0 0x1100b000 0 0x1000>,
+		      <0 0x11278000 0 0x1000>,
+		      <0 0x10001000 0 0x1000>;
+		interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_THERM>;
+		clock-names = "lvts_clk";
+
+		resets = <&infracfg_rst 0>,
+			 <&infracfg_rst 1>;
+
+		nvmem-cells = <&lvts_e_data1>;
+		nvmem-cell-names = "e_data1";
+		#thermal-sensor-cells = <1>;
+	};
+
+	disp_pwm: disp_pwm0@1100e000 {
+		compatible = "mediatek,disp_pwm0",
+				"mediatek,mt6890-disp-pwm";
+		reg = <0 0x1100e000 0 0x1000>;
+		interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+		#pwm-cells = <2>;
+		clocks = <&infracfg_ao CLK_IFRAO_DISP_PWM>,
+			<&topckgen CLK_TOP_DISP_PWM_SEL>;
+		clock-names = "main", "mm";
+	};
+
+	pcie0: pcie@11280000 {
+		compatible = "mediatek,mt2735-pcie";
+		reg = <0 0x11280000 0 0x2000>;
+		reg-names = "pcie-mac";
+		linux,pci-domain = <0>;
+		#address-cells = <3>;
+		#size-cells = <2>;
+		interrupts = <GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH>;
+		bus-range = <0x00 0xff>;
+		ranges = <0x82000000 0 0x00000000
+			  0x0 0x30000000 0 0x10000000>;
+		status = "disabled";
+
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_26M>,
+		         <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_96M>,
+			 <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_32K>,
+			 <&infracfg_ao_clk CLK_IFRAO_PCIE_PERI_26M>,
+			 <&infracfg_ao_clk CLK_IFRAO_RG_133M_PCIE_P0>;
+
+		phys = <&pciephy0>;
+		phy-names = "pcie-phy";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_PEXTP_D_2LX1>;
+
+		#interrupt-cells = <1>;
+		interrupt-map-mask = <0 0 0 7>;
+		interrupt-map = <0 0 0 1 &pcie_intc0 0>,
+				<0 0 0 2 &pcie_intc0 1>,
+				<0 0 0 3 &pcie_intc0 2>,
+				<0 0 0 4 &pcie_intc0 3>;
+		pcie_intc0: legacy-interrupt-controller {
+			interrupt-controller;
+			#address-cells = <0>;
+			#interrupt-cells = <1>;
+		};
+	};
+
+	pciephy0: phy0@11e40000 {
+		compatible = "mediatek,mt2735-pcie-phy";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		#phy-cells = <0>;
+		reg = <0 0x11e40000 0 0x10000>,
+		      <0 0x11e50000 0 0x10000>;
+		reg-names = "phy-sif", "phy-ckm";
+		nvmem = <&efuse>;
+		nvmem-names = "mtk_efuse";
+		nvmem-cells = <&efuse_segment>;
+		nvmem-cell-names = "efuse_segment_cell";
+
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_PEXTP_D_2LX1_PHY>;
+	};
+
+	efuse: efuse@11ec0000 {
+		compatible = "mediatek,devinfo";
+		reg = <0 0x11ec0000 0 0x10000>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+		efuse_segment: segment@78 {
+			reg = <0x78 0x4>;
+		};
+
+                lvts_e_data1: data1 {
+			reg = <0x1E0 0x24>;
+                };
+	};
+
+	dfd@13e00000 {
+		compatible = "mediatek,dfd";
+		reg = <0 0x13e00000 0 0x40000>;
+	};
+
+	g3d_dvfs@13fbc000 {
+		compatible = "mediatek,g3d_dvfs";
+		reg = <0 0x13fbc000 0 0x1000>;
+	};
+
+	g3d_testbench@13fbd000 {
+		compatible = "mediatek,g3d_testbench";
+		reg = <0 0x13fbd000 0 0x1000>;
+	};
+
+	g3d_config@13fbf000 {
+		compatible = "mediatek,g3d_config";
+		reg = <0 0x13fbf000 0 0x1000>;
+	};
+
+	mmsys_config: mmsys_config@14000000 {
+		compatible = "mediatek,mmsys_config";
+		reg = <0 0x14000000 0 0x1000>;
+	};
+
+	disp_mutex0@14001000 {
+		compatible = "mediatek,disp_mutex0";
+		reg = <0 0x14001000 0 0x1000>;
+	};
+
+	mdp_rdma0@14002000 {
+		compatible = "mediatek,mdp_rdma0";
+		reg = <0 0x14002000 0 0x1000>;
+	};
+
+	mdp_rsz0@14003000 {
+		compatible = "mediatek,mdp_rsz0";
+		reg = <0 0x14003000 0 0x1000>;
+	};
+
+	mdp_wrot0@14004000 {
+		compatible = "mediatek,mdp_wrot0";
+		reg = <0 0x14004000 0 0x1000>;
+	};
+
+	mdp_tdshp0@14005000 {
+		compatible = "mediatek,mdp_tdshp0";
+		reg = <0 0x14005000 0 0x1000>;
+	};
+
+	disp_ovl0@14006000 {
+		compatible = "mediatek,disp_ovl0";
+		reg = <0 0x14006000 0 0x1000>;
+	};
+
+	disp_rdma0@14007000 {
+		compatible = "mediatek,disp_rdma0";
+		reg = <0 0x14007000 0 0x1000>;
+	};
+
+	disp_color0@14008000 {
+		compatible = "mediatek,disp_color0";
+		reg = <0 0x14008000 0 0x1000>;
+	};
+
+	disp_ccorr0@14009000 {
+		compatible = "mediatek,disp_ccorr0";
+		reg = <0 0x14009000 0 0x1000>;
+	};
+
+	disp_aal0@1400a000 {
+		compatible = "mediatek,disp_aal0";
+		reg = <0 0x1400a000 0 0x1000>;
+	};
+
+	disp_gamma0@1400b000 {
+		compatible = "mediatek,disp_gamma0";
+		reg = <0 0x1400b000 0 0x1000>;
+	};
+
+	disp_dither0@1400c000 {
+		compatible = "mediatek,disp_dither0";
+		reg = <0 0x1400c000 0 0x1000>;
+	};
+
+	disp_wdma0@1400d000 {
+		compatible = "mediatek,disp_wdma0";
+		reg = <0 0x1400d000 0 0x1000>;
+	};
+
+	dsi0@1400e000 {
+		compatible = "mediatek,dsi0";
+		reg = <0 0x1400e000 0 0x1000>;
+	};
+
+	dbpi0@1400f000 {
+		compatible = "mediatek,dbpi0";
+		reg = <0 0x1400f000 0 0x1000>;
+	};
+
+	smi_sub_common0@14010000 {
+		compatible = "mediatek,smi_sub_common0";
+		reg = <0 0x14010000 0 0x1000>;
+	};
+
+	smi_common0@14016000 {
+		compatible = "mediatek,smi_common0";
+		reg = <0 0x14016000 0 0x1000>;
+	};
+
+	smi_larb0: larb@14017000 {
+		compatible = "mediatek,smi_larb0";
+		reg = <0 0x14017000 0 0x1000>;
+		mediatek,larb-id = <0>;
+	};
+
+	spi0: spi0@1100a000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x1100a000 0 0x100>;
+		interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI0>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	spi1: spi1@11010000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11010000 0 0x100>;
+		interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI1>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	spi2: spi2@11012000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11012000 0 0x100>;
+		interrupts = <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI2>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	spi3: spi3@11013000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11013000 0 0x100>;
+		interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI3>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	iommu0: iommu@14011000 {
+		compatible = "mediatek,mt6880-m4u";
+		reg = <0 14011000 0 0x1000>;
+		mediatek,larbs = <&smi_larb0>;
+		interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>;
+#if 0
+		clocks = <&dispsys_config MM_SMI_INFRA>,
+		       <&dispsys_config MM_SMI_IOMMU>,
+		       <&scpsys SCP_SYS_DIS>;
+		clock-names = "disp-infra-ck", "disp-iommu-ck", "power";
+#endif
+		#iommu-cells = <1>;
+	};
+
+	amms_control {
+		compatible = "mediatek,amms";
+		interrupts = <GIC_SPI 425 IRQ_TYPE_EDGE_RISING>;
+	};
+
+	mtk_m4u_debug {
+		compatible = "mediatek,mt6880-m4u-debug";
+#if 0
+		iommus = <&iommu0 M4U_PORT_DISP_POSTMASK0>,
+			 <&iommu0 M4U_PORT_OVL_RDMA0_HDR>,
+			 <&iommu0 M4U_PORT_OVL_RDMA0>,
+			 <&iommu0 M4U_PORT_DISP_FAKE0>;
+#endif
+	};
+
+	reserved@14018000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14018000 0 0x1000>;
+	};
+
+	reserved@14019000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14019000 0 0x1000>;
+	};
+
+	reserved@1401a000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401a000 0 0x1000>;
+	};
+
+	reserved@1401b000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401b000 0 0x1000>;
+	};
+
+	reserved@1401c000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401c000 0 0x1000>;
+	};
+
+	reserved@1401d000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401d000 0 0x1000>;
+	};
+
+	reserved@1401e000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401e000 0 0x1000>;
+	};
+
+	reserved@1401f000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401f000 0 0x1000>;
+	};
+
+	reserved@14020000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14020000 0 0x1000>;
+	};
+
+	reserved@14021000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14021000 0 0x1000>;
+	};
+
+	reserved@14022000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14022000 0 0x1000>;
+	};
+
+	reserved@14023000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14023000 0 0x1000>;
+	};
+
+	reserved@14024000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14024000 0 0x1000>;
+	};
+
+	reserved@14025000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14025000 0 0x1000>;
+	};
+
+	reserved@14026000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14026000 0 0xda000>;
+	};
+
+        medmcu: medmcu@15f00000 {
+            compatible = "mediatek,medmcu";
+            status = "okay";
+            reg = <0 0x15d00000 0 0x20000>,  /* tcm */
+                <0 0x15f24000 0 0x1000>,     /* cfg */
+                <0 0x15f21000 0 0x1000>,     /* clk*/
+                <0 0x15f30000 0 0x1000>,     /* cfg core0 */
+                <0 0x15f40000 0 0x1000>,     /* cfg core1 */
+                <0 0x15f52000 0 0x1000>,     /* bus tracker */
+                <0 0x15f60000 0 0x40000>,    /* llc */
+                <0 0x15fa5000 0 0x4>,        /* cfg_sec */
+                <0 0x15ffb000 0 0x100>,      /* mbox0 base */
+                <0 0x15ffb100 0 0x4>,        /* mbox0 set */
+                <0 0x15ffb10c 0 0x4>,        /* mbox0 clr */
+                <0 0x15fa5020 0 0x4>,        /* mbox0 init */
+                <0 0x15ffc000 0 0x100>,      /* mbox1 base */
+                <0 0x15ffc100 0 0x4>,        /* mbox1 set */
+                <0 0x15ffc10c 0 0x4>,        /* mbox1 clr */
+                <0 0x15fa5024 0 0x4>,        /* mbox1 init */
+                <0 0x15ffd000 0 0x100>,      /* mbox2 base */
+                <0 0x15ffd100 0 0x4>,        /* mbox2 set */
+                <0 0x15ffd10c 0 0x4>,        /* mbox2 clr */
+                <0 0x15fa5028 0 0x4>,        /* mbox2 init */
+                <0 0x15ffe000 0 0x100>,      /* mbox3 base */
+                <0 0x15ffe100 0 0x4>,        /* mbox3 set */
+                <0 0x15ffe10c 0 0x4>,        /* mbox3 clr */
+                <0 0x15fa502c 0 0x4>,        /* mbox3 init */
+                <0 0x15fff000 0 0x100>,      /* mbox4 base */
+                <0 0x15fff100 0 0x4>,        /* mbox4 set */
+                <0 0x15fff10c 0 0x4>,        /* mbox4 clr */
+                <0 0x15fa5030 0 0x4>;        /* mbox4 init */
+
+            reg-names = "scp_sram_base",
+                "scp_cfgreg",
+                "scp_clkreg",
+                "scp_cfgreg_core0",
+                "scp_cfgreg_core1",
+                "scp_bus_tracker",
+                "scp_l1creg",
+                "scp_cfgreg_sec",
+                "mbox0_base",
+                "mbox0_set",
+                "mbox0_clr",
+                "mbox0_init",
+                "mbox1_base",
+                "mbox1_set",
+                "mbox1_clr",
+                "mbox1_init",
+                "mbox2_base",
+                "mbox2_set",
+                "mbox2_clr",
+                "mbox2_init",
+                "mbox3_base",
+                "mbox3_set",
+                "mbox3_clr",
+                "mbox3_init",
+                "mbox4_base",
+                "mbox4_set",
+                "mbox4_clr",
+                "mbox4_init";
+
+            interrupts = <GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>;
+
+             interrupt-names = "mbox0",
+                "mbox1",
+                "mbox2",
+                "mbox3",
+                "mbox4";
+
+            core_0 = "enable";
+            scp_sramSize = <0x00020000>;
+        };
+
+	consys: consys@18000000 {
+		compatible = "mediatek,mt6880-consys";
+		#thermal-sensor-cells = <0>;
+			/* conn_infra_rgu */
+		reg = <0 0x18000000 0 0x1000>,
+			/* conn_infra_cfg */
+			<0 0x18001000 0 0x1000>,
+			/* conn_host_csr_top */
+			<0 0x18060000 0 0x10000>,
+			/* infracfg_ao */
+			<0 0x10001000 0 0x1000>,
+			/* TOP RGU */
+			<0 0x10007000 0 0x1000>,
+			/* SPM */
+			<0 0x10006000 0 0x1000>,
+			/* INFRACFG */
+			<0 0x1020e000 0 0x1000>,
+			/* conn_wt_slp_ctl_reg */
+			<0 0x18005000 0 0x1000>,
+			/* conn_afe_ctl */
+			<0 0x18003000 0 0x1000>,
+			/* GPIO */
+			<0 0x10005000 0 0x1000>,
+			/* conn_rf_spi_mst_reg */
+			<0 0x18004000 0 0x1000>,
+			/* conn_semaphore */
+			<0 0x18070000 0 0x10000>,
+			/* conn_top_therm_ctl */
+			<0 0x18002000 0 0x1000>,
+			/* IOCFG_BM */
+			<0 0x11d10000 0 0x1000>,
+			/* debug_ctrl */
+			<0 0x1800f000 0 0x1000>,
+			/* conn_infra_clkgen_on_top */
+			<0 0x18009000 0 0x1000>,
+			/* conn_infra_bus_cr */
+			<0 0x1800e000 0 0x400>,
+			/* conn_infra_debug_ctrl_ao */
+			<0 0x1802f000 0 0x430>;
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_CONN>;
+	};
+
+	gps: gps@18C00000 {
+		compatible = "mediatek,connac2-gps";
+		reg = <0 0x18000000 0 0x100000>,
+			<0 0x18C00000 0 0x100000>,
+			<0 0x10003304 0 0x4>,
+			<0 0x1001C000 0 0x4>,
+			<0 0x1001C030 0 0x4>;
+		reg-names = "conn_infra_base", "conn_gps_base",
+			"status_dummy_cr", "tia2_gps_on", "tia2_gps_rc_sel";
+		interrupts = <GIC_SPI 377 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 378 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 379 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 380 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 381 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
+		memory-region = <&gps_mem>;
+		pmic = <&pmic_efuse>;
+		mtk-vcore-supply = <&dvfsrc_vcore>;
+	};
+
+	odm: odm {
+		compatible = "simple-bus";
+		/* reserved for overlay by odm */
+	};
+
+	pmic_clock_buffer_ctrl: pmic_clock_buffer_ctrl {
+		compatible = "mediatek,pmic_clock_buffer";
+		mediatek,clkbuf-quantity = <7>;
+		mediatek,clkbuf-config = <2 1 1 2 0 0 2>;
+		mediatek,clkbuf-output-impedance = <3 4 3 4 0 0 3>;
+		mediatek,clkbuf-controls-for-desense = <0 4 0 3 0 0 0>;
+		mediatek,bblpm-support = "enable";
+
+		pwrap-dcxo-en = <0x24 4 0x28 1 0x28 0>;
+		pwrap-dcxo-conn = <0x5c 0 0x5c 16 0x60 0 0x60 16>;
+		pwrap-dcxo-nfc = <0x64 0 0x64 16 0x68 0 0x68 16>;
+
+		spm-pwr-status = <0x16c 0 0x16c 1>;
+		spm-io-en = <0x2c 7>;
+		spm-power-on-val = <0x8 21 0x8 14>;
+		spm-sck-con = <0xc 24>;
+		pcm-reg7-rf = <0x10c 21>;
+
+		pwrap = <&spmi_bus>;
+		sleep = <&sleep>;
+	};
+	typec_switch: typec_switch {
+		compatible = "mediatek,typec_switch";
+	};
+
+	afe: mt6880-afe-pcm@11210000 {
+		compatible = "mediatek,mt6880-sound";
+		reg = <0 0x11210000 0 0x1000>;
+		interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
+		i2s3-share = "I2S0";
+		topckgen = <&topckgen_clk>;
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_AUDIO>;
+		clocks = <&audsys_clk CLK_AUDSYS_AFE>,
+			 <&audsys_clk CLK_AUDSYS_DAC>,
+			 <&audsys_clk CLK_AUDSYS_DAC_PREDIS>,
+			 <&audsys_clk CLK_AUDSYS_ADC>,
+			 <&audsys_clk CLK_AUDSYS_22M>,
+			 <&audsys_clk CLK_AUDSYS_24M>,
+			 <&audsys_clk CLK_AUDSYS_APLL_TUNER>,
+			 <&audsys_clk CLK_AUDSYS_APLL2_TUNER>,
+			 <&audsys_clk CLK_AUDSYS_TDM>,
+			 <&audsys_clk CLK_AUDSYS_TML>,
+			 <&infracfg_ao_clk CLK_IFRAO_AUDIO>,
+			 <&infracfg_ao_clk CLK_IFRAO_AUDIO_26M_BCLK>,
+			 <&topckgen_clk CLK_TOP_AUDIO_SEL>,
+			 <&topckgen_clk CLK_TOP_AUD_INTBUS_SEL>,
+			 <&topckgen_clk CLK_TOP_MMPLL_D4_D4>,
+			 <&topckgen_clk CLK_TOP_AUD_1_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL1>,
+			 <&topckgen_clk CLK_TOP_AUD_2_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL2>,
+			 <&topckgen_clk CLK_TOP_AUD_ENGEN1_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL1_D8>,
+			 <&topckgen_clk CLK_TOP_AUD_ENGEN2_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL2_D8>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S0_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S1_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S2_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S4_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_TDMOUT_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S5_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S6_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV0>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV1>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV2>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV4>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV_TDMOUT_M>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV_TDMOUT_B>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV5>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV6>,
+			 <&topckgen_clk CLK_TOP_TCK_26M_MX9>;
+		clock-names = "aud_afe_clk",
+			      "aud_dac_clk",
+			      "aud_dac_predis_clk",
+			      "aud_adc_clk",
+			      "aud_apll22m_clk",
+			      "aud_apll24m_clk",
+			      "aud_apll1_tuner_clk",
+			      "aud_apll2_tuner_clk",
+			      "aud_tdm_clk",
+			      "aud_tml_clk",
+			      "aud_infra_clk",
+			      "mtkaif_26m_clk",
+			      "top_mux_audio",
+			      "top_mux_audio_int",
+			      "top_mainpll_d2_d4",
+			      "top_mux_aud_1",
+			      "top_apll1_ck",
+			      "top_mux_aud_2",
+			      "top_apll2_ck",
+			      "top_mux_aud_eng1",
+			      "top_apll1_d8",
+			      "top_mux_aud_eng2",
+			      "top_apll2_d8",
+			      "top_i2s0_m_sel",
+			      "top_i2s1_m_sel",
+			      "top_i2s2_m_sel",
+			      "top_i2s4_m_sel",
+			      "top_tdm_m_sel",
+			      "top_i2s5_m_sel",
+			      "top_i2s6_m_sel",
+			      "top_apll12_div0",
+			      "top_apll12_div1",
+			      "top_apll12_div2",
+			      "top_apll12_div4",
+			      "top_apll12_divm",
+			      "top_apll12_divb",
+			      "top_apll12_div5",
+			      "top_apll12_div6",
+			      "top_clk26m_clk";
+		pinctrl-names = "aud_gpio_i2s0_off",
+					"aud_gpio_i2s0_on",
+					"aud_gpio_i2s1_off",
+					"aud_gpio_i2s1_on",
+					"aud_gpio_i2s2_off",
+					"aud_gpio_i2s2_on",
+					"aud_gpio_i2s3_off",
+					"aud_gpio_i2s3_on",
+					"aud_gpio_i2s4_off",
+					"aud_gpio_i2s4_on",
+					"aud_gpio_i2s5_off",
+					"aud_gpio_i2s5_on",
+					"aud_gpio_i2s6_off",
+					"aud_gpio_i2s6_on",
+					"aud_gpio_proslic_off",
+					"aud_gpio_proslic_on",
+					"aud_gpio_tdm_off",
+					"aud_gpio_tdm_on",
+					"extamp-pullhigh",
+					"extamp-pulllow";
+		pinctrl-0 = <&aud_gpio_i2s0_off>;
+		pinctrl-1 = <&aud_gpio_i2s0_on>;
+		pinctrl-2 = <&aud_gpio_i2s1_off>;
+		pinctrl-3 = <&aud_gpio_i2s1_on>;
+		pinctrl-4 = <&aud_gpio_i2s2_off>;
+		pinctrl-5 = <&aud_gpio_i2s2_on>;
+		pinctrl-6 = <&aud_gpio_i2s3_off>;
+		pinctrl-7 = <&aud_gpio_i2s3_on>;
+		pinctrl-8 = <&aud_gpio_i2s4_off>;
+		pinctrl-9 = <&aud_gpio_i2s4_on>;
+		pinctrl-10 = <&aud_gpio_i2s5_off>;
+		pinctrl-11 = <&aud_gpio_i2s5_on>;
+		pinctrl-12 = <&aud_gpio_i2s6_off>;
+		pinctrl-13 = <&aud_gpio_i2s6_on>;
+		pinctrl-14 = <&aud_gpio_proslic_off>;
+		pinctrl-15 = <&aud_gpio_proslic_on>;
+		pinctrl-16 = <&aud_gpio_tdm_off>;
+		pinctrl-17 = <&aud_gpio_tdm_on>;
+		pinctrl-18 = <&aud_pins_extamp_high>;
+		pinctrl-19 = <&aud_pins_extamp_low>;
+	};
+	sound: sound {
+		compatible = "mediatek,mt6880-mt6359-sound";
+		mediatek,platform = <&afe>;
+	};
+
+	audio_sram@11211000 {
+		compatible = "mediatek,audio_sram";
+		reg = <0 0x11211000 0 0x10000>;
+		prefer_mode = <1>;
+		mode_size = <0xC000 0x10000>;
+		block_size = <0x1000>;
+	};
+
+	smart_pa: smart_pa {
+	};
+
+	extcon_usb: extcon_usb {
+		compatible = "mediatek,extcon-usb";
+		dev-conn = <&ssusb>;
+	};
+};
+
+&spmi_bus {
+	mt6315_5: mt6315@5 {
+		compatible = "mediatek,mt6315", "mtk,spmi-pmic";
+		reg = <0x5 SPMI_USID 0xb SPMI_GSID>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		mt6315_5_regulator: mt6315_5_regulator {
+			compatible = "mediatek,mt6315_5-regulator";
+			#interrupt-cells = <2>;
+			interrupt-controller;
+			interrupt-parent = <&pio>;
+			interrupts = <2 IRQ_TYPE_LEVEL_HIGH>;
+		};
+	};
+
+	md1_sim1_hot_plug_eint: md1_sim1_hot_plug_eint {
+	};
+
+	md1_sim2_hot_plug_eint: md1_sim2_hot_plug_eint {
+	};
+};
+#include "mt6890-clkao.dtsi"
+#include "mt6330.dtsi"
+#include "cust_mt6890_msdc.dtsi"
+
+&pmic {
+	mt63xx_ot_debug: mt63xx-ot-debug {
+		compatible = "mediatek,mt63xx-ot-debug";
+		interrupt-parent = <&mt6315_5_regulator>;
+		/* INT_TEMP_H */
+		interrupts = <5 IRQ_TYPE_EDGE_RISING>;
+	};
+};
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_squashfs.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_squashfs.cfg
new file mode 100644
index 0000000..1d81e1c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_squashfs.cfg
@@ -0,0 +1,3 @@
+CONFIG_CMDLINE=" rootfstype=squashfs root=/dev/ubiblock0_0 "
+CONFIG_CMDLINE_EXTEND=y
+CONFIG_MTD_UBI_BLOCK=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_ubifs.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_ubifs.cfg
new file mode 100644
index 0000000..fcf7a04
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/rootfstype_ubifs.cfg
@@ -0,0 +1,3 @@
+CONFIG_CMDLINE=" rootfstype=ubifs root=ubi0_0 "
+CONFIG_CMDLINE_EXTEND=y
+CONFIG_MTD_UBI_BLOCK=n
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_netsys.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_netsys.cfg
new file mode 100755
index 0000000..16dbfee
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_netsys.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_SGMII_NETSYS=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_snps.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_snps.cfg
new file mode 100755
index 0000000..ac11b31
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/sgmii_snps.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_SGMII_SNPS=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/slc_nand.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/slc_nand.cfg
new file mode 100644
index 0000000..7bf6869
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/slc_nand.cfg
@@ -0,0 +1,2 @@
+CONFIG_MTD_NANDX_V2=y
+CONFIG_MTD_NANDX_V2_SPI=n
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/smt.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/smt.cfg
new file mode 100644
index 0000000..b560e1b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/smt.cfg
@@ -0,0 +1,2 @@
+CONFIG_DEVMEM=y
+CONFIG_MTK_PCIE_SMT_SUPPORT=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_1g.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_1g.cfg
new file mode 100644
index 0000000..ae24040
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_1g.cfg
@@ -0,0 +1 @@
+# CONFIG_MTK_PHY_SGMII_INTF is not set
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_2.5g.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_2.5g.cfg
new file mode 100644
index 0000000..3fbf668
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/snps_2.5g.cfg
@@ -0,0 +1 @@
+CONFIG_MTK_PHY_SGMII_INTF=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/spi_nand.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/spi_nand.cfg
new file mode 100644
index 0000000..46bfcd8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/spi_nand.cfg
@@ -0,0 +1,2 @@
+CONFIG_MTD_NANDX_V2=y
+CONFIG_MTD_NANDX_V2_SPI=y
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/user_build.cfg b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/user_build.cfg
new file mode 100644
index 0000000..826968f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/files/user_build.cfg
@@ -0,0 +1,12 @@
+# CONFIG_PSTORE is not set
+# CONFIG_PSTORE_CONSOLE is not set
+# CONFIG_PSTORE_PMSG is not set
+# CONFIG_PSTORE_FTRACE is not set
+# CONFIG_PSTORE_RAM is not set
+# CONFIG_MTK_WATCHDOG is not set
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
+# CONFIG_PAGE_OWNER is not set
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_MTK_SCHED_MONITOR is not set
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension.inc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension.inc
new file mode 100644
index 0000000..756a1b1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension.inc
@@ -0,0 +1,97 @@
+inherit kernel externalsrc kernel-fitimage-extension recovery-kernel-fitimage
+
+DEPENDS_append_aarch64 = " libgcc"
+KERNEL_CC_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
+KERNEL_LD_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+EXTERNALSRC = "${KERNEL_SRC}"
+STAGING_KERNEL_DIR = "${KERNEL_SRC}"
+LINUX_VERSION_EXTENSION = "-custom"
+KERNEL_EXTRA_ARGS = "dtbs"
+KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} ${KBUILD_DEFCONFIG}"
+
+DST_IMG_KEY_FILE = "${TOPDIR}/../src/devtools/nfsb/rsa.key"
+MTD_DST_IMG_KEY_FILE = "${TOPDIR}/../src/devtools/nfsb/mtd_verity/rsa.key"
+
+do_configure_prepend() {
+	install -d ${TMPDIR}/work-shared/${MACHINE}
+	ln -nfs ${STAGING_KERNEL_DIR} ${TMPDIR}/work-shared/${MACHINE}/kernel-source
+}
+
+do_compile_prepend() {
+
+       SRC_IMG_KEY_FILE=""
+
+       if [ "${ROOTFS_VERITY_KEY}" = "" ]; then
+              SRC_IMG_KEY_FILE="${MTK_KEY_DIR}/${VERIFIED_KEY}.pem"
+       else
+              SRC_IMG_KEY_FILE="${MTK_KEY_DIR}/${ROOTFS_VERITY_KEY}.pem"
+       fi
+
+       #backwards compatible for FORCE_DISABLE_DM_VERITY which only for NFSB actually
+       if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${SECURE_BOOT_TYPE}" = "" ]; then
+              ENABLE_DM_NFSB="yes"
+       fi
+       if [ "${FORCE_DISABLE_DM_VERITY}" = "yes" ]; then
+              ENABLE_DM_NFSB="no"
+       fi
+       echo "SECURE_BOOT_ENABLE is ${SECURE_BOOT_ENABLE},SECURE_BOOT_TYPE is ${SECURE_BOOT_TYPE}"
+       if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${SECURE_BOOT_TYPE}" = "avb" ]; then
+              ENABLE_DM_VERITY="yes"
+       fi
+       echo "ENABLE_DM_VERITY is ${ENABLE_DM_VERITY}"
+       if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${ENABLE_DM_NFSB}" = "yes" ]; then
+              if ! grep -Fxq "CONFIG_DM_NFSB=y" ${B}/.config ; then
+                     echo "Error: If SECURE_BOOT_ENABLE is set to yes,kernel must be configed CONFIG_DM_NFSB=y"
+                     exit 1
+              fi
+
+              if test -e ${SRC_IMG_KEY_FILE}; then
+                     cp ${SRC_IMG_KEY_FILE} ${DST_IMG_KEY_FILE}
+                     python ${TOPDIR}/../src/devtools/nfsb/pretreat-key.py ${TOPDIR} ${KERNEL_SRC}
+              fi
+       else
+              if grep -Fxq "CONFIG_DM_NFSB=y" ${B}/.config ; then
+                     echo "Error: If SECURE_BOOT_ENABLE is set to no,kernel must be configed CONFIG_DM_NFSB=n"
+                     exit 1
+              fi
+       fi
+
+       if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${ENABLE_DM_VERITY}" = "yes" ]; then
+            if ! grep -Fxq "CONFIG_DM_VERITY=y" ${B}/.config ; then
+                     echo "Error: If SECURE_BOOT_ENABLE is set to yes,kernel must be configed CONFIG_DM_VERITY=y"
+                     exit 1
+            fi
+       fi
+
+       if [ "${ENABLE_MTD_VERITY}" = "yes" ]; then
+           echo "ENABLE_MTD_VERITY is abandoned, plese use ENABLE_ROOTFS_CHECK in [project].config and CONFIG_ROOTFS_CHECK in kernel config"
+           exit 1
+       fi
+
+       if [ "${SECURE_BOOT_ENABLE}" = "yes" ] && [ "${ENABLE_ROOTFS_CHECK}" = "yes" ]; then
+              if ! grep -Fxq "CONFIG_ROOTFS_CHECK=y" ${B}/.config ; then
+                     echo "Error: If SECURE_BOOT_ENABLE and ENABLE_ROOTFS_CHECK is set to yes,kernel must be configed CONFIG_ROOTFS_CHECK=y"
+                     exit 1
+              fi
+
+              if test -e ${SRC_IMG_KEY_FILE}; then
+                     cp ${SRC_IMG_KEY_FILE} ${MTD_DST_IMG_KEY_FILE}
+                     python ${TOPDIR}/../src/devtools/nfsb/mtd_verity/pretreat-key.py ${TOPDIR} ${KERNEL_SRC}
+              fi
+       else
+              if grep -Fxq "CONFIG_ROOTFS_CHECK=y" ${B}/.config ; then
+                     echo "Error: If SECURE_BOOT_ENABLE and ENABLE_ROOTFS_CHECK is set to no,kernel must be configed CONFIG_ROOTFS_CHECK=n"
+                     exit 1
+              fi
+       fi
+
+       if [ "${ENABLE_USRDATA_DM_CRYPT}" = "yes" ]; then
+              if ! grep -Fxq "CONFIG_DM_CRYPT=y" ${B}/.config ; then
+                     echo "Error: If ENABLE_USRDATA_DM_CRYPT is set to yes,kernel must be configed CONFIG_DM_CRYPT=y"
+                     exit 1
+              fi
+       fi
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_3.18.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_3.18.bb
new file mode 100644
index 0000000..694ff27
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_3.18.bb
@@ -0,0 +1,11 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v3.18"
+LINUX_VERSION = "3.18.22"
+
+#align with kernel4.9 to avoid gcc7.2 checking
+KERNEL_CC_append += "-Wno-format-truncation -Wno-frame-address -Wno-format-overflow -Wno-int-in-bool-context"
+#align with kernel 3.18 to avoid gcc checking
+KERNEL_CC_append += "-Wno-format -Wno-duplicate-decl-specifier -Wno-return-type -Wno-unused-variable -Wno-unused-result -Wno-unused-function -Wno-incompatible-pointer-types -Wno-array-bounds -Wno-unused-value -Wno-array-bounds -Wno-switch-bool -Wno-unused-label -Wno-declaration-after-statement -Wno-misleading-indentation -Wno-declaration-after-statement -Wno-implicit-int -Wno-uninitialized"
+#in drm_dp_mst_topology.c, function strncat trigger the warning
+KERNEL_CC_append += "-Wno-stringop-overflow"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.14.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.14.bb
new file mode 100644
index 0000000..2f13077
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.14.bb
@@ -0,0 +1,4 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.14"
+LINUX_VERSION = "4.14.24"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bb
new file mode 100644
index 0000000..6d954ca
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bb
@@ -0,0 +1,4 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.19"
+LINUX_VERSION = "4.19.21"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bbappend b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bbappend
new file mode 100644
index 0000000..77870e7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.19.bbappend
@@ -0,0 +1,78 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
+
+# don't include kernel-image to rootfs
+RDEPENDS_${KERNEL_PACKAGE_NAME}-base = ""
+
+DEPENDS += "kern-tools-native"
+
+SRC_URI += "\
+        ${@bb.utils.contains('CORE_NUM', '2', ' file://cpu_2cores.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('NAND_TYPE', 'slc', ' file://slc_nand.cfg', '', d)} \
+        ${@bb.utils.contains('NAND_TYPE', 'spi', ' file://spi_nand.cfg', '', d)} \
+        ${@bb.utils.contains('BOOTDEV_TYPE', 'emmc', ' file://emmc.cfg', '', d)} \
+        ${@bb.utils.contains('TEE_SUPPORT', 'optee', ' file://auto2735evb_ivt_optee.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('MEMORY_SIZE', '512', ' file://memory_512mb.cfg', '', d)} \
+        ${@bb.utils.contains('MEMORY_SIZE', '640', ' file://memory_640mb.cfg', '', d)} \
+        ${@bb.utils.contains('MEMORY_SIZE', '768', ' file://memory_768mb.cfg', '', d)} \
+        ${@bb.utils.contains('MEMORY_SIZE', '896', ' file://memory_896mb.cfg', '', d)} \
+        ${@bb.utils.contains('MEMORY_SIZE', '1024', ' file://memory_1024mb.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('BUILD_TYPE', 'user', ' file://user_build.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('MTK_SMT_BUILD', 'yes', ' file://smt.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('SECURE_BOOT_ENABLE', 'yes', ' file://dm_verity.cfg', '', d)} \
+	${@bb.utils.contains('IMAGE_FSTYPES', 'squashfs', ' file://rootfstype_squashfs.cfg', '', d)} \
+	${@bb.utils.contains('IMAGE_FSTYPES', 'ubi', ' file://rootfstype_ubifs.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('HSM_OS_SUPPORT', 'yes', ' file://hsm.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('SGMII_SNPS_INTERFACE', 'yes', ' file://sgmii_snps.cfg', '', d)} \
+        ${@bb.utils.contains('SGMII_NETSYS_INTERFACE', 'yes', ' file://sgmii_netsys.cfg', '', d)} \
+"
+
+SRC_URI += "\
+        ${@bb.utils.contains('AEE_SUPPORT', 'yes', '', ' file://disable_aee.cfg', d)} \
+"
+
+def find_cfg(d):
+    sources=src_patches(d, True)
+    sources_list=[]
+    for s in sources:
+        base, ext = os.path.splitext(os.path.basename(s))
+        if ext and ext in [".scc", ".cfg"]:
+            sources_list.append(s)
+        elif base and base in 'defconfig':
+            sources_list.append(s)
+
+    return sources_list
+
+
+do_configure_append () {
+	merge_config.sh -m .config ${@" ".join(find_cfg(d))}
+}
+
+do_configure_prepend () {
+	if [ "${MTK_SMT_BUILD}" = "yes" ]; then
+		cp -rf ${TOPDIR}/../meta/meta-mediatek-mt2735/recipes-kernel/linux/files/mt2735.dtsi ${KERNEL_SRC}/arch/arm64/boot/dts/mediatek/
+	fi
+
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.4.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.4.bb
new file mode 100644
index 0000000..a9d3a9b
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.4.bb
@@ -0,0 +1,4 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.4"
+LINUX_VERSION = "4.4.0"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.9.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.9.bb
new file mode 100644
index 0000000..e1787a7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_4.9.bb
@@ -0,0 +1,4 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.9"
+LINUX_VERSION = "4.9.17"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_99.9.9.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_99.9.9.bb
new file mode 100644
index 0000000..43a1a25
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-extension_99.9.9.bb
@@ -0,0 +1,4 @@
+require linux-mtk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/upstream"
+LINUX_VERSION = "99.9.9"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension.inc b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension.inc
new file mode 100644
index 0000000..38cdcbc
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension.inc
@@ -0,0 +1,24 @@
+inherit kernel externalsrc ramdisk-fitimage-extension
+DEPENDS_append_aarch64 = " libgcc"
+KERNEL_CC_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
+KERNEL_LD_append_aarch64 = " ${TOOLCHAIN_OPTIONS}"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+EXTERNALSRC = "${KERNEL_SRC}"
+STAGING_KERNEL_DIR = "${KERNEL_SRC}"
+LINUX_VERSION_EXTENSION = "-custom"
+KERNEL_EXTRA_ARGS = "dtbs"
+KERNEL_CONFIG_COMMAND = "oe_runmake_call -C ${S} O=${B} ${KBUILD_DEFCONFIG}"
+
+INITRAMFS_IMAGE = "mtk-core-image-minimal-initramfs"
+INITRAMFS_IMAGE_BUNDLE = "1"
+
+SRC_IMG_KEY_FILE = "${MTK_KEY_DIR}/${VERIFIED_KEY}.pem"
+DST_IMG_KEY_FILE = "${TOPDIR}/../src/devtools/nfsb/rsa.key"
+
+do_configure_prepend() {
+	install -d ${TMPDIR}/work-shared/${MACHINE}
+	ln -nfs ${STAGING_KERNEL_DIR} ${TMPDIR}/work-shared/${MACHINE}/kernel-source
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_3.18.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_3.18.bb
new file mode 100644
index 0000000..0c276a0
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_3.18.bb
@@ -0,0 +1,4 @@
+require linux-mtk-ramdisk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v3.18"
+LINUX_VERSION = "3.18.22"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.14.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.14.bb
new file mode 100644
index 0000000..8fca69c
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.14.bb
@@ -0,0 +1,4 @@
+require linux-mtk-ramdisk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.14"
+LINUX_VERSION = "4.14.24"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.4.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.4.bb
new file mode 100644
index 0000000..2a57ce7
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.4.bb
@@ -0,0 +1,4 @@
+require linux-mtk-ramdisk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.4"
+LINUX_VERSION = "4.4.0"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.9.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.9.bb
new file mode 100644
index 0000000..5d7cee1
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/linux/linux-mtk-ramdisk-extension_4.9.bb
@@ -0,0 +1,4 @@
+require linux-mtk-ramdisk-extension.inc
+
+KERNEL_SRC = "${TOPDIR}/../src/kernel/linux/v4.9"
+LINUX_VERSION = "4.9.17"
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.service
new file mode 100644
index 0000000..119f021
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=mt66xx_drv_insmod
+
+[Service]
+Type=simple
+ExecStart=/bin/sh /etc/mt66xx_drv_insmod.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.sh b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.sh
new file mode 100644
index 0000000..02c0343
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/mt66xx_drv_insmod.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+# insmod conninfra driver before gps starts
+echo insmod conninfra driver
+insmod /lib/modules/mt66xx/conninfra_drv.ko
+
+# insmod gps driver
+echo insmod gps driver
+insmod /lib/modules/mt66xx/gps_drv.ko
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.service b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.service
new file mode 100755
index 0000000..967d10d
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=netsys_drv_insmod
+
+[Service]
+Type=simple
+ExecStart=/bin/sh /etc/netsys_drv_insmod.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.sh b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.sh
new file mode 100755
index 0000000..b1b4e88
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/files/netsys_drv_insmod.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# insmod hwnat driver
+echo insmod hwnat driver
+insmod /lib/modules/netsys/hwnat.ko
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-conninfra-drv.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-conninfra-drv.bb
new file mode 100644
index 0000000..9c51260
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-conninfra-drv.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "Mediatek MT66xx conninfra Driver"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/bitbake/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "linux-mtk-extension"
+inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/kernel/modules/connectivity/2.0/conninfra_driver/"
+
+MODULE_NAME = "conninfra_drv"
+LINUX_SRC = "${TOPDIR}/tmp/work/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/linux-mtk-extension/4.19-r0/linux-mtk-extension-4.19/"
+LDFLAGS = "-L ${RECIPE_SYSROOT}"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+do_buildclean() {
+}
+
+do_configure() {
+}
+
+do_compile() {
+	echo mt66xx conninfra start compile
+	echo ${WORKONSRC}
+	echo ${S}
+	oe_runmake -f Makefile.ce TOPDIR=${TOPDIR} MODULE_NAME=${MODULE_NAME} DRIVER_DIR=${S} LINUX_SRC=${LINUX_SRC} PACKAGE_ARCH=${PACKAGE_ARCH} ARCH=${KERNEL_ARCH} CROSS_COMPILE=${TARGET_PREFIX} CONFIG_MTK_PLATFORM=${TARGET_PLATFORM} ENABLE_TCXO=${TCXO_SUPPORT}
+	echo mt66xx conninfra end compile
+}
+
+do_install() {
+	echo ${D}
+	install -d ${D}/lib/modules/mt66xx/
+	install -m 0644 ${S}/${MODULE_NAME}.ko ${D}/lib/modules/mt66xx/
+	install -d ${D}${includedir}
+	install -m 0644 ${S}/include/* ${D}${includedir}
+}
+
+FILES_${PN} += "/lib/modules/mt66xx"
+INSANE_SKIP_${PN} += "already-stripped"
+FILES_${PN}-dev = ""
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-drv-insmod.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-drv-insmod.bb
new file mode 100644
index 0000000..da69b1e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-drv-insmod.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Mediatek MT66xx GPS Driver insmod"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${COREBASE}/bitbake/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "file://mt66xx_drv_insmod.service \
+			file://mt66xx_drv_insmod.sh"
+
+
+inherit  systemd
+
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "mt66xx_drv_insmod.service"
+FILES_${PN} += "${systemd_unitdir}/system/mt66xx_drv_insmod.service"
+FILES_${PN} += "etc/mt66xx_drv_insmod.sh ${systemd_unitdir}"
+
+do_install() {
+	install -d ${D}/etc
+	install -m 755 ${WORKDIR}/mt66xx_drv_insmod.sh ${D}/etc/mt66xx_drv_insmod.sh
+	install -d ${D}${systemd_unitdir}/system
+	install -m 755 ${WORKDIR}/mt66xx_drv_insmod.service ${D}${systemd_unitdir}/system
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-gps-drv.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-gps-drv.bb
new file mode 100644
index 0000000..c66b49e
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/mt66xx-gps-drv.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "Mediatek MT66xx GPS Driver"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/bitbake/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "linux-mtk-extension mt66xx-conninfra-drv"
+MT66xx_SRC = "${TOPDIR}/../src/kernel/modules/connectivity"
+
+inherit workonsrc
+WORKONSRC = "${MT66xx_SRC}/2.0/gps_driver/"
+MODULE_NAME = "gps_drv"
+LINUX_SRC = "${TOPDIR}/tmp/work/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/linux-mtk-extension/4.19-r0/linux-mtk-extension-4.19/"
+LDFLAGS = "-L ${RECIPE_SYSROOT}"
+
+EXTRA_OEMAKE = "'CONNINFRA_INC_FOLDER=${STAGING_DIR_HOST}${includedir}'"
+
+do_buildclean() {
+}
+
+do_configure() {
+}
+
+do_compile() {
+	echo mt66xx gps start compile
+	echo ${WORKONSRC}
+	oe_runmake -f Makefile.ce MODULE_NAME=${MODULE_NAME} DRIVER_DIR=${S} LINUX_SRC=${LINUX_SRC} ARCH=${KERNEL_ARCH} CROSS_COMPILE=${TARGET_PREFIX}
+	echo mt66xx gps end compile
+}
+
+do_install() {
+	echo ${D}
+	install -d ${D}/lib/modules/mt66xx/
+	install -m 0644 ${S}/${MODULE_NAME}.ko ${D}/lib/modules/mt66xx/
+}
+
+FILES_${PN} += "/lib/modules/mt66xx"
+INSANE_SKIP_${PN} += "already-stripped"
+FILES_${PN}-dev = ""
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-drv-insmod.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-drv-insmod.bb
new file mode 100755
index 0000000..10c1800
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-drv-insmod.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Mediatek Netsys HWNAT Driver insmod"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${COREBASE}/bitbake/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "file://netsys_drv_insmod.service \
+			file://netsys_drv_insmod.sh"
+
+
+inherit  systemd
+
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "netsys_drv_insmod.service"
+FILES_${PN} += "${systemd_unitdir}/system/netsys_drv_insmod.service"
+FILES_${PN} += "etc/netsys_drv_insmod.sh ${systemd_unitdir}"
+
+do_install() {
+	install -d ${D}/etc
+	install -m 755 ${WORKDIR}/netsys_drv_insmod.sh ${D}/etc/netsys_drv_insmod.sh
+	install -d ${D}${systemd_unitdir}/system
+	install -m 755 ${WORKDIR}/netsys_drv_insmod.service ${D}${systemd_unitdir}/system
+}
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-hwnat-drv.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-hwnat-drv.bb
new file mode 100755
index 0000000..6ad7685
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-kernel/modules/netsys-hwnat-drv.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "Mediatek Netsys HWNAT Driver"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/bitbake/COPYING;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "linux-mtk-extension"
+inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/kernel/modules/netsys_driver/nat/"
+
+MODULE_NAME = "hwnat"
+LINUX_SRC = "${TOPDIR}/tmp/work/${MACHINE_ARCH}${TARGET_VENDOR}-${TARGET_OS}/linux-mtk-extension/4.19-r0/linux-mtk-extension-4.19/"
+LDFLAGS = "-L ${RECIPE_SYSROOT}"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+do_buildclean() {
+}
+
+do_configure() {
+}
+
+do_compile() {
+	echo hwnat start compile
+	echo ${WORKONSRC}
+    echo ${S}
+	oe_runmake -f Makefile.ce MODULE_NAME=${MODULE_NAME} DRIVER_DIR=${S} LINUX_SRC=${LINUX_SRC} ARCH=${KERNEL_ARCH} CROSS_COMPILE=${TARGET_PREFIX}
+	echo hwnat end compile
+}
+
+do_install() {
+	echo ${D}
+	install -d ${D}/lib/modules/netsys/
+	install -m 0644 ${S}/${MODULE_NAME}.ko ${D}/lib/modules/netsys/
+}
+
+FILES_${PN} += "/lib/modules/netsys"
+INSANE_SKIP_${PN} += "already-stripped"
+FILES_${PN}-dev = ""
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/ltg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/ltg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/ltg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwctg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwctg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwctg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/files/lwg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_1.0.0.bb
new file mode 100644
index 0000000..d087fe8
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_1.0.0.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Modem database file"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+SRC_URI = "file://LICENSE"
+SRC_URI += "file://lwg"
+SRC_URI += "file://ltg"
+SRC_URI += "file://lwctg"
+
+S = "${WORKDIR}"
+
+FILES_${PN} = "${datadir}/modem/db/*"
+
+#provide shell connmand rename
+DEPENDS = "util-linux-native"
+
+do_compile[noexec] = "1"
+
+ALLOW_EMPTY_${PN} = "1"
+
+do_install_append() {
+    if [ -s ${S}/lwg/*GUInfo* ]; then
+    install -d ${D}${datadir}/modem/db
+    install lwg/*GUInfo* ${D}${datadir}/modem/db/BPLGUInfo_lwg
+    fi
+
+    if [ -s ${S}/ltg/*GUInfo* ]; then
+    install -d ${D}${datadir}/modem/db
+    install ltg/*GUInfo* ${D}${datadir}/modem/db/BPLGUInfo_ltg
+    fi
+
+    if [ -s ${S}/lwctg/*GUInfo* ]; then
+    install -d ${D}${datadir}/modem/db
+    install lwctg/*GUInfo* ${D}${datadir}/modem/db/BPLGUInfo_lwctg
+    install lwctg/MDDB.META* ${D}${datadir}/modem/db/
+    rename .EDB _1_ulwctg_n.EDB ${D}${datadir}/modem/db/MDDB.META*.EDB
+    rename .XML.GZ _1_ulwctg_n.XML.GZ ${D}${datadir}/modem/db/MDDB.META*.XML.GZ
+    fi
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_2.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_2.0.0.bb
new file mode 100644
index 0000000..ffc70bb
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-db/md-db_2.0.0.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "Modem database file"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${MTK_LICENSE_DIR}/MediaTekProprietary;md5=c5d17c6905715d0948a3d6087602d12d"
+
+inherit workonsrc
+WORKONSRC = "${MODEM_DIR}"
+
+FILES_${PN} = "${datadir}/modem/* ${sysconfdir}/mddb/* ${sysconfdir}/firmware/* /vendor/*"
+
+do_compile[noexec] = "1"
+
+ALLOW_EMPTY_${PN} = "1"
+do_install_append() {
+    if [ -s ${S}/MDDB.META.ODB_*.XML.GZ ]; then
+        install -d ${D}${datadir}/modem
+        install ${S}/MDDB.META.ODB_*.XML.GZ ${D}${datadir}/modem/MDDB.META.ODB.XML.GZ
+    fi
+
+    if [ -s ${S}/MDDB_MT2735*.EDB ]; then
+        install -d ${D}${sysconfdir}/mddb
+        install ${S}/MDDB_MT2735*.EDB ${D}${sysconfdir}/mddb
+    fi
+
+    if [ -s ${S}/catcher_filter.bin ]; then
+        install -d ${D}${sysconfdir}/firmware
+        install ${S}catcher*.bin ${D}${sysconfdir}/firmware
+    fi
+
+    if [ -s ${S}/mddata/cacerts ]; then
+        install -d ${D}/vendor
+        install -d ${D}/vendor/etc
+        install -d ${D}/vendor/etc/md
+        install -d ${D}/vendor/etc/md/cacerts
+        install -d ${D}/vendor/etc/md/cacerts/ikev2
+        install -d ${D}/vendor/etc/md/cacerts/tls
+        install ${S}/mddata/cacerts/ikev2/* ${D}/vendor/etc/md/cacerts/ikev2/
+        install ${S}/mddata/cacerts/tls/* ${D}/vendor/etc/md/cacerts/tls/
+
+        install -d ${D}/vendor/etc/md/plmn 
+          
+        cp -r ${S}/mddata/plmn/* ${D}/vendor/etc/md/plmn/
+
+        install -d ${D}/vendor/etc/md/apncfg
+        install ${S}/mddata/apncfg/* ${D}/vendor/etc/md/apncfg/
+    fi
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/ltg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/ltg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/ltg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwctg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwctg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwctg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/files/lwg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/md-filter_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/md-filter_1.0.0.bb
new file mode 100644
index 0000000..52250de
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-filter/md-filter_1.0.0.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Modem filter file"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+SRC_URI = "file://LICENSE"
+SRC_URI += "file://lwg"
+SRC_URI += "file://ltg"
+SRC_URI += "file://lwctg"
+
+S = "${WORKDIR}"
+
+FILES_${PN} = "${datadir}/modem/filter/*"
+
+#provide shell connmand rename
+DEPENDS = "util-linux-native"
+
+do_compile[noexec] = "1"
+
+ALLOW_EMPTY_${PN} = "1"
+
+
+do_install_append() {
+
+    if [ -s ${S}/lwg/catcher_filter.bin ]; then
+    install -d ${D}${datadir}/modem/filter
+    install lwg/catcher_filter.bin ${D}${datadir}/modem/filter/catcher_filter_lwg.bin
+    fi
+
+    if [ -s ${S}/ltg/catcher_filter.bin ]; then
+    install -d ${D}${datadir}/modem/filter
+    install ltg/catcher_filter.bin ${D}${datadir}/modem/filter/catcher_filter_ltg.bin
+    fi
+
+    if [ -s ${S}/lwctg/catcher_filter.bin ]; then
+    install -d ${D}${datadir}/modem/filter
+    install lwctg/catcher_filter_*.bin ${D}${datadir}/modem/filter/
+    rename catcher_filter catcher_filter_1_ulwctg_n ${D}${datadir}/modem/filter/catcher_filter_*.bin
+    install lwctg/catcher_filter.bin ${D}${datadir}/modem/filter/catcher_filter_lwctg.bin
+    fi
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/LICENSE b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/ltg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/ltg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/ltg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwctg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwctg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwctg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwg/README b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwg/README
new file mode 100644
index 0000000..5c7f39f
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/files/lwg/README
@@ -0,0 +1,10 @@
+This module is the files of MODEM
+
+
+WHAT IT DOES?
+=============
+It handles the file of modem
+
+HOW IT WAS BUILT?
+==================
+This module would be installed into rootfs.
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/md-images_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/md-images_1.0.0.bb
new file mode 100644
index 0000000..05285f9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/md-images/md-images_1.0.0.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "Modem images"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+SRC_URI = "file://LICENSE"
+SRC_URI += "file://lwg"
+SRC_URI += "file://ltg"
+SRC_URI += "file://lwctg"
+
+S = "${WORKDIR}"
+
+FILES_${PN} = "${datadir}/modem/images/*"
+
+do_compile[noexec] = "1"
+
+ALLOW_EMPTY_${PN} = "1"
+
+do_install_append() {
+    if [ -s ${S}/lwg/modem.img ] && [ -e ${S}/lwg/dsp.bin ]; then
+    install -d ${D}${datadir}/modem/images
+    install lwg/modem.img ${D}${datadir}/modem/images/modem_lwg.img
+    install lwg/dsp.bin ${D}${datadir}/modem/images/dsp_lwg.bin
+    fi
+
+    if [ -s ${S}/ltg/modem.img ] && [ -e ${S}/ltg/dsp.bin ]; then
+    install -d ${D}${datadir}/modem/images
+    install ltg/modem.img ${D}${datadir}/modem/images/modem_ltg.img
+    install ltg/dsp.bin ${D}${datadir}/modem/images/dsp_ltg.bin
+    fi
+
+    if [ -s ${S}/lwctg/modem.img ] && [ -e ${S}/lwctg/dsp.bin ]; then
+    install -d ${D}${datadir}/modem/images
+    install lwctg/modem.img ${D}${datadir}/modem/images/modem_lwctg.img
+    install lwctg/dsp.bin ${D}${datadir}/modem/images/dsp_lwctg.bin
+    fi
+
+    if [ -s ${S}/lwg/modem.xml ]; then
+    install -d ${D}${datadir}/modem/images
+    install lwg/modem.xml ${D}${datadir}/modem/images/modem_lwg.xml
+    fi
+
+    if [ -s ${S}/ltg/modem.xml ]; then
+    install -d ${D}${datadir}/modem/images
+    install ltg/modem.xml ${D}${datadir}/modem/images/modem_ltg.xml
+    fi
+
+    if [ -s ${S}/lwctg/modem.xml ]; then
+    install -d ${D}${datadir}/modem/images
+    install lwctg/modem.xml ${D}${datadir}/modem/images/modem_lwctg.xml
+    fi
+}
+
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/modem/modem_1.0.0.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/modem/modem_1.0.0.bb
new file mode 100644
index 0000000..bcfec01
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/modem/modem_1.0.0.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "Modem images"
+LICENSE = "MediaTekProprietary"
+LIC_FILES_CHKSUM = "file://${MTK_LICENSE_DIR}/MediaTekProprietary;md5=c5d17c6905715d0948a3d6087602d12d"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS += "u-boot-mkimage-native bc-native dtc-native"
+
+inherit workonsrc deploy nopackages
+inherit md-fitimage mddsp-fitimage hsm-sign-env staging-copyfile
+
+WORKONSRC = "${MODEM_DIR}"
+
+do_compile[noexec] = "1"
+do_install[noexec] = "1"
+
+MD_IMAGE = "md1img.img"
+MDDSP_IMAGE = "md1dsp.img"
+
+MD_OUT = "${WORKDIR}"
+
+do_deploy () {
+    install -d ${DEPLOYDIR}
+    find . -type d -exec install -d ${DEPLOYDIR}/{} \;
+    find . -type f -exec install -m 755 {} ${DEPLOYDIR}/{} \;
+
+    if [ "${SECURE_BOOT_ENABLE}" = "yes" ] ; then
+        cp ${DEPLOYDIR}/dsp.bin ${WORKDIR}/dsp-org.bin
+        cp ${DEPLOYDIR}/modem.img ${WORKDIR}/modem-org.img
+
+        do_assemble_fitimage
+        do_assemble_mdfitimage
+
+    else
+        cp ${DEPLOYDIR}/dsp.bin ${MD_OUT}/${MDDSP_IMAGE}
+        cp ${DEPLOYDIR}/modem.img ${MD_OUT}/${MD_IMAGE}
+    fi
+    install ${MD_OUT}/${MD_IMAGE} ${DEPLOYDIR}/${MD_IMAGE}
+    install ${MD_OUT}/${MDDSP_IMAGE} ${DEPLOYDIR}/${MDDSP_IMAGE}
+}
+
+addtask deploy after do_configure
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/packagegroups/packagegroup-modem-ivt.bb b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/packagegroups/packagegroup-modem-ivt.bb
new file mode 100644
index 0000000..c262ea9
--- /dev/null
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-modem/packagegroups/packagegroup-modem-ivt.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Modem Package Group - IVT Common"
+LICENSE = "MediaTekProprietary"
+
+inherit packagegroup
+
+RDEPENDS_packagegroup-modem-ivt = "\
+    md-images \
+    md-filter \
+    md-db \
+    "