[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",®State,&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,®State,&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,®State,&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 = <ðsysrst 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 = <<epa_ntc_target>;
+ cooling-device = <&mutt_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ map1 {
+ trip = <<epa_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 = <ðsys>;
+ 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 \
+ "