From 8506320178b909594ad69e14825ab23623083c63 Mon Sep 17 00:00:00 2001 From: Ramon Moesching Date: Wed, 12 Jun 2019 19:08:50 +0200 Subject: [PATCH] initial nmhw23 (imx8) bsp layer To apply: include meta-netmodule-bsp/recipes-bsp/imx8 to local bblayer Requires: offical meta-freescale layer linux kernel: use 4.14 kernel exclusive for imx8 BugzID: 57544 Signed-off-by: Ramon Moesching --- conf/layer.conf | 1 + conf/machine/include/utilities.inc | 17 ++ recipes-bsp/imx8/conf/bblayers.conf.sample | 27 +++ recipes-bsp/imx8/conf/layer.conf | 22 +++ recipes-bsp/imx8/conf/local.conf.sample | 52 +++++ .../imx8/conf}/machine/imx8-nmhw23.conf | 21 +- .../imx8/firmware-imx/firmware-imx-8.1.inc | 22 +++ .../imx8/firmware-imx/firmware-imx-8x_8.1.bb | 20 ++ ...D_STRING-to-be-set-in-.revision-file.patch | 29 +++ recipes-bsp/imx8/imx-atf/imx-atf_1.5.0.bb | 47 +++++ recipes-bsp/imx8/imx-mkimage/imx-boot_0.2.bb | 179 ++++++++++++++++++ .../imx8/imx-mkimage/imx-mkimage_git.bb | 35 ++++ .../imx8/imx-mkimage/imx-mkimage_git.inc | 12 ++ recipes-bsp/imx8/imx-sc-firmware/files/README | 2 + .../imx-sc-firmware/files/scfw_tcm_cfw.bin | Bin 0 -> 138368 bytes .../imx-sc-firmware/imx-sc-firmware_0.9.bb | 42 ++++ recipes-bsp/imx8/imx-uuc/imx-uuc_git.bb | 20 ++ .../imx8/u-boot/u-boot-imx8-nmhw23_git.bb | 55 ++++++ recipes-bsp/u-boot/u-boot-imx8-nmhw23_git.bb | 28 --- recipes-kernel/linux/linux-netmodule_git.bb | 5 + wic/sdimage-sota-nmhw23.wks | 2 +- 21 files changed, 603 insertions(+), 35 deletions(-) create mode 100644 conf/machine/include/utilities.inc create mode 100644 recipes-bsp/imx8/conf/bblayers.conf.sample create mode 100644 recipes-bsp/imx8/conf/layer.conf create mode 100644 recipes-bsp/imx8/conf/local.conf.sample rename {conf => recipes-bsp/imx8/conf}/machine/imx8-nmhw23.conf (56%) create mode 100644 recipes-bsp/imx8/firmware-imx/firmware-imx-8.1.inc create mode 100644 recipes-bsp/imx8/firmware-imx/firmware-imx-8x_8.1.bb create mode 100644 recipes-bsp/imx8/imx-atf/imx-atf/0001-Allow-BUILD_STRING-to-be-set-in-.revision-file.patch create mode 100644 recipes-bsp/imx8/imx-atf/imx-atf_1.5.0.bb create mode 100644 recipes-bsp/imx8/imx-mkimage/imx-boot_0.2.bb create mode 100644 recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.bb create mode 100644 recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.inc create mode 100644 recipes-bsp/imx8/imx-sc-firmware/files/README create mode 100755 recipes-bsp/imx8/imx-sc-firmware/files/scfw_tcm_cfw.bin create mode 100644 recipes-bsp/imx8/imx-sc-firmware/imx-sc-firmware_0.9.bb create mode 100644 recipes-bsp/imx8/imx-uuc/imx-uuc_git.bb create mode 100644 recipes-bsp/imx8/u-boot/u-boot-imx8-nmhw23_git.bb delete mode 100644 recipes-bsp/u-boot/u-boot-imx8-nmhw23_git.bb mode change 100755 => 100644 recipes-kernel/linux/linux-netmodule_git.bb diff --git a/conf/layer.conf b/conf/layer.conf index 0c447c0..79498db 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -5,6 +5,7 @@ BBPATH .= ":${LAYERDIR}" BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" + BBFILE_COLLECTIONS += "netmodule-bsp" BBFILE_PATTERN_netmodule-bsp = "^${LAYERDIR}/" BBFILE_PRIORITY_netmodule-bsp = "10" diff --git a/conf/machine/include/utilities.inc b/conf/machine/include/utilities.inc new file mode 100644 index 0000000..164d77f --- /dev/null +++ b/conf/machine/include/utilities.inc @@ -0,0 +1,17 @@ +### Machine definition file utilities + +def make_dtb_boot_files(d): + # Generate IMAGE_BOOT_FILES entries for device tree files listed in + # KERNEL_DEVICETREE. + # Use only the basename for dtb files: + alldtbs = d.getVar('KERNEL_DEVICETREE') + + def transform(dtb): + if not (dtb.endswith('dtb') or dtb.endswith('dtbo')): + # eg: whatever/bcm2708-rpi-b.dtb has: + # DEPLOYDIR file: bcm2708-rpi-b.dtb + # destination: bcm2708-rpi-b.dtb + bb.error("KERNEL_DEVICETREE entry %s is not a .dtb or .dtbo file." % (dtb) ) + return os.path.basename(dtb) + + return ' '.join([transform(dtb) for dtb in alldtbs.split() if dtb]) diff --git a/recipes-bsp/imx8/conf/bblayers.conf.sample b/recipes-bsp/imx8/conf/bblayers.conf.sample new file mode 100644 index 0000000..2a86c91 --- /dev/null +++ b/recipes-bsp/imx8/conf/bblayers.conf.sample @@ -0,0 +1,27 @@ +# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf +# changes incompatibly +LCONF_VERSION = "7" + +BBPATH = "${TOPDIR}" +BBFILES ?= "" + +YOCTOROOT = "${@os.path.abspath(os.path.join("${TOPDIR}", os.pardir))}" + +BBLAYERS ?= " \ + ${YOCTOROOT}/meta \ + ${YOCTOROOT}/meta-poky \ + ${YOCTOROOT}/meta-yocto-bsp \ + ${YOCTOROOT}/meta-netmodule-bsp \ + ${YOCTOROOT}/meta-netmodule-bsp/recipes-bsp/imx8 \ + ${YOCTOROOT}/meta-netmodule-distro \ + ${YOCTOROOT}/meta-openembedded/meta-python \ + ${YOCTOROOT}/meta-openembedded/meta-oe \ + ${YOCTOROOT}/meta-openembedded/meta-networking \ + ${YOCTOROOT}/meta-openembedded/meta-filesystems \ + ${YOCTOROOT}/meta-updater \ + ${YOCTOROOT}/meta-freescale\ + " +BBLAYERS_NON_REMOVABLE ?= " \ + ${YOCTOROOT}/meta \ + ${YOCTOROOT}/meta-yocto \ + " diff --git a/recipes-bsp/imx8/conf/layer.conf b/recipes-bsp/imx8/conf/layer.conf new file mode 100644 index 0000000..8a53f3f --- /dev/null +++ b/recipes-bsp/imx8/conf/layer.conf @@ -0,0 +1,22 @@ +# Layer configuration for meta-imx8bsp layer +# Copyright 2012 Intel Corporation + +# We have a conf and classes directory, add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have various recipe-* directories, add to BBFILES +BBFILES += "${LAYERDIR}/*/*.bb ${LAYERDIR}/*/*.bbappend" + +BBFILE_COLLECTIONS += "imx8bsp" +BBFILE_PATTERN_imx8bsp := "^${LAYERDIR}/" +BBFILE_PRIORITY_imx8bsp = "11" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_imx8bsp = "1" + +LAYERDEPENDS_imx8bsp = "core freescale-layer" + +LAYERSERIES_COMPAT_imx8bsp = "warrior" + +LICENSE_PATH += "${LAYERDIR}/licenses" diff --git a/recipes-bsp/imx8/conf/local.conf.sample b/recipes-bsp/imx8/conf/local.conf.sample new file mode 100644 index 0000000..0b3cdad --- /dev/null +++ b/recipes-bsp/imx8/conf/local.conf.sample @@ -0,0 +1,52 @@ +BB_NUMBER_THREADS ?= "4" +PARALLEL_MAKE ?= "-j 4" +PACKAGE_CLASSES ?= "package_rpm" +USER_CLASSES ?= "buildstats image-mklibs image-prelink" +PATCHRESOLVE = "noop" +BB_DISKMON_DIRS = "\ + STOPTASKS,${TMPDIR},1G,100K \ + STOPTASKS,${DL_DIR},1G,100K \ + STOPTASKS,${SSTATE_DIR},1G,100K \ + STOPTASKS,/tmp,100M,100K \ + ABORT,${TMPDIR},100M,1K \ + ABORT,${DL_DIR},100M,1K \ + ABORT,${SSTATE_DIR},100M,1K \ + ABORT,/tmp,10M,1K" +ASSUME_PROVIDED += "libsdl-native" +CONF_VERSION = "1" +IMAGE_FEATURES_append = " debug-tweaks" + +INHERIT += "rm_work" + +ERROR_QA_remove += "version-going-backwards" +WARN_QA_append += "version-going-backwards" + +INHERIT += "buildhistory" +BUILDHISTORY_COMMIT = "1" +BUILDHISTORY_COMMIT_AUTHOR = "Mr Jenkins " + +# Mirror GIT repo in download folders +BB_GENERATE_MIRROR_TARBALLS = "1" + +# Add licences file to the rootfs +COPY_LIC_MANIFEST = "1" +COPY_LIC_DIRS = "1" +LICENSE_CREATE_PACKAGE = "1" + +INHERIT += "buildstats-summary" + +YOCTOROOT = "${@os.path.abspath(os.path.join("${TOPDIR}", os.pardir))}" + +SSTATE_DIR ?= "${HOME}/yocto-share/sstate-cache" +DL_DIR ?= "${HOME}/yocto-share/downloads" +BUILDHISTORY_DIR = "${HOME}/yocto-share/buildhistory" + +TMPDIR = "${YOCTOROOT}/shared-build/tmp" +ACCEPT_FSL_EULA = "1" + + +### Environment variables needed to build +#MACHINE = "am335x-nmhw21" +#DISTRO = "netmodule-linux" / "netmodule-linux-ostree" +#OSTREE_BRANCHNAME = "${MACHINE}-vcu" +#OSTREE_OSNAME = "hancock-os" diff --git a/conf/machine/imx8-nmhw23.conf b/recipes-bsp/imx8/conf/machine/imx8-nmhw23.conf similarity index 56% rename from conf/machine/imx8-nmhw23.conf rename to recipes-bsp/imx8/conf/machine/imx8-nmhw23.conf index 2d7e951..dcefac2 100644 --- a/conf/machine/imx8-nmhw23.conf +++ b/recipes-bsp/imx8/conf/machine/imx8-nmhw23.conf @@ -2,8 +2,11 @@ #@NAME: NetModule HW 23 #@DESCRIPTION: Machine configuration for the nmhw23 mainboard +require conf/machine/include/imx-base.inc require conf/machine/include/arm/arch-arm64.inc +MACHINEOVERRIDES =. "mx8:mx8x:mx8qxp:" + IMAGE_FSTYPES += "tar.gz cpio cpio.gz.u-boot" IMAGE_CLASSES += "image_types" @@ -16,13 +19,19 @@ SOTA_MACHINE = "${MACHINE}" KERNEL_CLASSES_append = " kernel-fitimage" -KERNEL_IMAGETYPE = "Image" -KERNEL_IMAGETYPES = "fitImage Image" -KERNEL_IMAGETYPE_sota = "fitImage" -KERNEL_IMAGETYPES_sota = "fitImage" -UBOOT_ENTRYPOINT ?= "0x80020000" -UBOOT_MACHINE = "imx8_nmhw23_defconfig" +KERNEL_IMAGETYPE = "fitImage" +KERNEL_IMAGETYPE_aarch64 = "fitImage" +KERNEL_ALT_IMAGETYPE = "Image" +UBOOT_ENTRYPOINT = "0x80280000" +#UBOOT_MACHINE = "imx8_nmhw23_defconfig" IMAGE_BOOT_FILES = "flash.bin" PREFERRED_PROVIDER_virtual/kernel = "linux-netmodule" PREFERRED_PROVIDER_virtual/bootloader = "u-boot-imx8-nmhw23" +#PREFERRED_PROVIDER_virtual/bootloader = "u-boot-imx" + +UBOOT_MAKE_TARGET = "" +#UBOOT_MAKE_TARGET = "u-boot.bin" +UBOOT_SUFFIX = "bin" +UBOOT_CONFIG ??= "flash" +UBOOT_CONFIG[flash] = "imx8_nmhw23_defconfig" diff --git a/recipes-bsp/imx8/firmware-imx/firmware-imx-8.1.inc b/recipes-bsp/imx8/firmware-imx/firmware-imx-8.1.inc new file mode 100644 index 0000000..ad0f7fe --- /dev/null +++ b/recipes-bsp/imx8/firmware-imx/firmware-imx-8.1.inc @@ -0,0 +1,22 @@ +# Copyright (C) 2012-2016 Freescale Semiconductor +# Copyright 2017-2018 NXP +# Copyright (C) 2018 O.S. Systems Software LTDA. +SECTION = "base" +LICENSE = "Proprietary" +LIC_FILES_CHKSUM = "file://COPYING;md5=80c0478f4339af024519b3723023fe28" + +SRCBRANCH ?= "master" +SRC_URI = " \ + ${FSL_MIRROR}/firmware-imx-${PV}.bin;fsl-eula=true \ +" + +#SRC_URI[md5sum] = "0967aa59b3fd8d80fcb98146a9aac91b" +#SRC_URI[sha256sum] = "910fbf866f61185adfd60c1704b2da41030cb175901d06e40402b49f9240bdee" + +SRC_URI[md5sum] = "ff7e208761379890261b62f477b441ed" +SRC_URI[sha256sum] = "d6a1d8dc3ce8f2e928bc6b58c7d583126abfd14d8ab61a2d8ebd760a898b5195" + + +S = "${WORKDIR}/firmware-imx-${PV}" + +inherit fsl-eula-unpack diff --git a/recipes-bsp/imx8/firmware-imx/firmware-imx-8x_8.1.bb b/recipes-bsp/imx8/firmware-imx/firmware-imx-8x_8.1.bb new file mode 100644 index 0000000..85d394a --- /dev/null +++ b/recipes-bsp/imx8/firmware-imx/firmware-imx-8x_8.1.bb @@ -0,0 +1,20 @@ +# Copyright 2018 NXP +SUMMARY = "Freescale i.MX firmware for 8X family" +DESCRIPTION = "Freescale i.MX firmware for 8X family" + +require firmware-imx-${PV}.inc + +inherit deploy + +do_install[noexec] = "1" + +do_deploy() { + # SECO + install -m 0644 ${S}/firmware/seco/mx8qx-ahab-container.img ${DEPLOYDIR} +} + +addtask deploy after do_install before do_build + +PACKAGE_ARCH = "${MACHINE_SOCARCH}" + +COMPATIBLE_MACHINE = "(mx8x)" diff --git a/recipes-bsp/imx8/imx-atf/imx-atf/0001-Allow-BUILD_STRING-to-be-set-in-.revision-file.patch b/recipes-bsp/imx8/imx-atf/imx-atf/0001-Allow-BUILD_STRING-to-be-set-in-.revision-file.patch new file mode 100644 index 0000000..be74778 --- /dev/null +++ b/recipes-bsp/imx8/imx-atf/imx-atf/0001-Allow-BUILD_STRING-to-be-set-in-.revision-file.patch @@ -0,0 +1,29 @@ +From 4123893a8a4d93362a0a36f72134f75436fee457 Mon Sep 17 00:00:00 2001 +From: Tom Hochstein +Date: Thu, 18 Oct 2018 18:03:46 -0500 +Subject: [PATCH] Allow BUILD_STRING to be set in .revision file. + +Upstream-Status: Pending + +Signed-off-by: Tom Hochstein +--- + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/Makefile b/Makefile +index 57c4a90..ec49397 100644 +--- a/Makefile ++++ b/Makefile +@@ -97,6 +97,9 @@ endif + + # Default build string (git branch and commit) + ifeq (${BUILD_STRING},) ++ BUILD_STRING := $(shell cat .revision 2> /dev/null) ++endif ++ifeq (${BUILD_STRING},) + BUILD_STRING := $(shell git describe --long --always --dirty --tags 2> /dev/null) + endif + VERSION_STRING := v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING} +-- +2.7.4 + diff --git a/recipes-bsp/imx8/imx-atf/imx-atf_1.5.0.bb b/recipes-bsp/imx8/imx-atf/imx-atf_1.5.0.bb new file mode 100644 index 0000000..6408298 --- /dev/null +++ b/recipes-bsp/imx8/imx-atf/imx-atf_1.5.0.bb @@ -0,0 +1,47 @@ +# Copyright 2017-2018 NXP + +DESCRIPTION = "i.MX ARM Trusted Firmware" +SECTION = "BSP" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9" + +PV = "1.5.0+git${SRCPV}" + +SRCBRANCH = "imx_4.14.98_2.0.0_ga" +SRC_URI = "git://source.codeaurora.org/external/imx/imx-atf.git;protocol=https;branch=${SRCBRANCH} \ + file://0001-Allow-BUILD_STRING-to-be-set-in-.revision-file.patch \ +" +SRCREV ?= "${AUTOREV}" + +S = "${WORKDIR}/git" + +inherit deploy + +BOOT_TOOLS = "imx-boot-tools" + +PLATFORM ?= "INVALID" +PLATFORM_mx8qm = "imx8qm" +PLATFORM_mx8qxp = "imx8qx" +PLATFORM_mx8mq = "imx8mq" +PLATFORM_mx8mm = "imx8mm" + +EXTRA_OEMAKE += " \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + PLAT=imx8qx \ +" + +do_compile() { + # Clear LDFLAGS to avoid the option -Wl recognize issue + unset LDFLAGS + oe_runmake bl31 +} + +do_install[noexec] = "1" + +do_deploy() { + install -Dm 0644 ${S}/build/${PLATFORM}/release/bl31.bin ${DEPLOYDIR}/${BOOT_TOOLS}/bl31-${PLATFORM}p.bin +} +addtask deploy after do_compile + +PACKAGE_ARCH = "${MACHINE_SOCARCH}" +COMPATIBLE_MACHINE = "(mx8)" diff --git a/recipes-bsp/imx8/imx-mkimage/imx-boot_0.2.bb b/recipes-bsp/imx8/imx-mkimage/imx-boot_0.2.bb new file mode 100644 index 0000000..2bb0c2f --- /dev/null +++ b/recipes-bsp/imx8/imx-mkimage/imx-boot_0.2.bb @@ -0,0 +1,179 @@ +# Copyright 2017-2018 NXP + +require imx-mkimage_git.inc + +DESCRIPTION = "Generate Boot Loader for i.MX 8 device" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" +SECTION = "BSP" + +IMX_EXTRA_FIRMWARE = "firmware-imx-8 imx-sc-firmware" +IMX_EXTRA_FIRMWARE_mx8m = "firmware-imx-8m" +IMX_EXTRA_FIRMWARE_mx8x = "firmware-imx-8x imx-sc-firmware" +DEPENDS += " \ + u-boot \ + firmware-imx \ + ${IMX_EXTRA_FIRMWARE} \ + imx-atf \ +" +DEPENDS_append_mx8m = " dtc-native" +BOOT_NAME = "imx-boot" +PROVIDES = "${BOOT_NAME}" + +inherit deploy +# Add CFLAGS with native INCDIR & LIBDIR for imx-mkimage build +CFLAGS = "-O2 -Wall -std=c99 -I ${STAGING_INCDIR_NATIVE} -L ${STAGING_LIBDIR_NATIVE}" + +# This package aggregates output deployed by other packages, +# so set the appropriate dependencies +do_compile[depends] += " \ + virtual/bootloader:do_deploy \ + ${@' '.join('%s:do_deploy' % r for r in '${IMX_EXTRA_FIRMWARE}'.split() )} \ + imx-atf:do_deploy \ +" + +SC_FIRMWARE_NAME ?= "scfw_tcm_cfw.bin" + +ATF_MACHINE_NAME ?= "bl31-imx8qm.bin" +ATF_MACHINE_NAME_mx8qm = "bl31-imx8qm.bin" +ATF_MACHINE_NAME_mx8qxp = "bl31-imx8qxp.bin" +ATF_MACHINE_NAME_mx8mq = "bl31-imx8mq.bin" +ATF_MACHINE_NAME_mx8mm = "bl31-imx8mm.bin" +ATF_MACHINE_NAME_append = "${@bb.utils.contains('COMBINED_FEATURES', 'optee', '-optee', '', d)}" + +DCD_NAME ?= "imx8qm_dcd.cfg.tmp" +DCD_NAME_mx8qm = "imx8qm_dcd.cfg.tmp" +DCD_NAME_mx8qxp = "imx8qx_dcd.cfg.tmp" + +UBOOT_NAME = "u-boot-${MACHINE}.bin-${UBOOT_CONFIG}" +BOOT_CONFIG_MACHINE = "${BOOT_NAME}-${MACHINE}-${UBOOT_CONFIG}.bin" + +TOOLS_NAME ?= "mkimage_imx8" + +SOC_TARGET ?= "INVALID" +SOC_TARGET_mx8qm = "iMX8QM" +SOC_TARGET_mx8qxp = "iMX8QX" +SOC_TARGET_mx8mq = "iMX8M" +SOC_TARGET_mx8mm = "iMX8MM" + +IMXBOOT_TARGETS ?= \ + "${@bb.utils.contains('UBOOT_CONFIG', 'fspi', 'flash_flexspi', \ + bb.utils.contains('UBOOT_CONFIG', 'nand', 'flash_nand', \ + 'flash flash_dcd', d), d)}" +IMXBOOT_TARGETS_mx8qxp = \ + "${@bb.utils.contains('UBOOT_CONFIG', 'fspi', 'flash_flexspi', \ + bb.utils.contains('UBOOT_CONFIG', 'nand', 'flash_nand', \ + 'flash', d), d)}" +IMXBOOT_TARGETS_mx8qxpa0 = \ + "${@bb.utils.contains('UBOOT_CONFIG', 'fspi', 'flash_flexspi_a0', \ + bb.utils.contains('UBOOT_CONFIG', 'nand', 'flash_nand_a0', \ + 'flash_a0 flash_dcd_a0', d), d)}" + +BOOT_STAGING = "${S}/${SOC_TARGET}" +BOOT_STAGING_mx8mm = "${S}/iMX8M" + +SOC_FAMILY = "INVALID" +SOC_FAMILY_mx8 = "mx8" +SOC_FAMILY_mx8m = "mx8m" +SOC_FAMILY_mx8x = "mx8x" + +compile_mx8m() { + bbnote 8MQ/8MM boot binary build + for ddr_firmware in ${DDR_FIRMWARE_NAME}; do + bbnote "Copy ddr_firmware: ${ddr_firmware} from ${DEPLOY_DIR_IMAGE} -> ${BOOT_STAGING} " + cp ${DEPLOY_DIR_IMAGE}/${ddr_firmware} ${BOOT_STAGING} + done + cp ${DEPLOY_DIR_IMAGE}/signed_*_imx8m.bin ${BOOT_STAGING} + cp ${DEPLOY_DIR_IMAGE}/u-boot-spl.bin-${MACHINE}-${UBOOT_CONFIG} ${BOOT_STAGING}/u-boot-spl.bin + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${UBOOT_DTB_NAME} ${BOOT_STAGING} + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/u-boot-nodtb.bin ${BOOT_STAGING} + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/mkimage_uboot ${BOOT_STAGING} + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${ATF_MACHINE_NAME} ${BOOT_STAGING}/bl31.bin + cp ${DEPLOY_DIR_IMAGE}/${UBOOT_NAME} ${BOOT_STAGING}/u-boot.bin +} +compile_mx8() { + bbnote 8QM boot binary build + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${SC_FIRMWARE_NAME} ${BOOT_STAGING}/scfw_tcm.bin + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${ATF_MACHINE_NAME} ${BOOT_STAGING}/bl31.bin + cp ${DEPLOY_DIR_IMAGE}/${UBOOT_NAME} ${BOOT_STAGING}/u-boot.bin + cp ${DEPLOY_DIR_IMAGE}/mx8qm-ahab-container.img ${BOOT_STAGING} +} +compile_mx8x() { + bbnote 8QX boot binary build + cp ${DEPLOY_DIR_IMAGE}/mx8qx-ahab-container.img ${BOOT_STAGING} + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${SC_FIRMWARE_NAME} ${BOOT_STAGING}/scfw_tcm.bin + cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${ATF_MACHINE_NAME} ${BOOT_STAGING}/bl31.bin + cp ${DEPLOY_DIR_IMAGE}/${UBOOT_NAME} ${BOOT_STAGING}/u-boot.bin +} +do_compile() { + compile_${SOC_FAMILY} + # mkimage for i.MX8 + for target in ${IMXBOOT_TARGETS}; do + bbnote "building ${SOC_TARGET} - ${target}" + make SOC=${SOC_TARGET} ${target} + if [ -e "${BOOT_STAGING}/flash.bin" ]; then + cp ${BOOT_STAGING}/flash.bin ${S}/${BOOT_CONFIG_MACHINE}-${target} + dd if=${BOOT_STAGING}/flash.bin of=${S}/${BOOT_CONFIG_MACHINE}-${target}.sd bs=1k seek=32 conv=fsync + fi + done +} + +do_install () { + install -d ${D}/boot + for target in ${IMXBOOT_TARGETS}; do + install -m 0644 ${S}/${BOOT_CONFIG_MACHINE}-${target} ${D}/boot/ + install -m 0644 ${S}/${BOOT_CONFIG_MACHINE}-${target}.sd ${D}/boot/ + done +} + +deploy_mx8m() { + install -d ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0644 ${DEPLOY_DIR_IMAGE}/u-boot-spl.bin-${MACHINE}-${UBOOT_CONFIG} ${DEPLOYDIR}/${BOOT_TOOLS} + for ddr_firmware in ${DDR_FIRMWARE_NAME}; do + install -m 0644 ${DEPLOY_DIR_IMAGE}/${ddr_firmware} ${DEPLOYDIR}/${BOOT_TOOLS} + done + install -m 0644 ${DEPLOY_DIR_IMAGE}/signed_hdmi*.bin ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0755 ${BOOT_STAGING}/${TOOLS_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0755 ${BOOT_STAGING}/mkimage_fit_atf.sh ${DEPLOYDIR}/${BOOT_TOOLS} +} +deploy_mx8() { + install -d ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0644 ${BOOT_STAGING}/${DCD_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0644 ${BOOT_STAGING}/mx8qm-ahab-container.img ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0755 ${S}/${TOOLS_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} +} +deploy_mx8x() { + install -d ${DEPLOYDIR}/${BOOT_TOOLS} + if [ "${MACHINE}" = "imx8qxpa0mek" ]; then + install -m 0644 ${BOOT_STAGING}/${DCD_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + fi + install -m 0644 ${BOOT_STAGING}/mx8qx-ahab-container.img ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0755 ${S}/${TOOLS_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} +} +do_deploy() { + deploy_${SOC_FAMILY} + # copy the tool mkimage to deploy path and sc fw, dcd and uboot + install -m 0644 ${DEPLOY_DIR_IMAGE}/${UBOOT_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + # copy makefile (soc.mak) for reference + install -m 0644 ${BOOT_STAGING}/soc.mak ${DEPLOYDIR}/${BOOT_TOOLS} + # copy the generated boot image to deploy path + for target in ${IMXBOOT_TARGETS}; do + # Use first "target" as IMAGE_IMXBOOT_TARGET + if [ "$IMAGE_IMXBOOT_TARGET" = "" ]; then + IMAGE_IMXBOOT_TARGET="$target" + echo "Set boot target as $IMAGE_IMXBOOT_TARGET" + fi + install -m 0644 ${S}/${BOOT_CONFIG_MACHINE}-${target} ${DEPLOYDIR} + install -m 0644 ${S}/${BOOT_CONFIG_MACHINE}-${target}.sd ${DEPLOYDIR} + done + cd ${DEPLOYDIR} + ln -sf ${BOOT_CONFIG_MACHINE}-${IMAGE_IMXBOOT_TARGET} ${BOOT_NAME} + ln -sf ${BOOT_CONFIG_MACHINE}-${IMAGE_IMXBOOT_TARGET}.sd ${BOOT_NAME}.sd + cd - +} +addtask deploy before do_build after do_compile + +PACKAGE_ARCH = "${MACHINE_ARCH}" +FILES_${PN} = "/boot" + +COMPATIBLE_MACHINE = "(mx8)" diff --git a/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.bb b/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.bb new file mode 100644 index 0000000..5304ebf --- /dev/null +++ b/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.bb @@ -0,0 +1,35 @@ +# Copyright (C) 2016 Freescale Semiconductor +# Copyright 2017-2018 NXP + +require imx-mkimage_git.inc + +DESCRIPTION = "i.MX make image" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" +SECTION = "BSP" + +inherit native deploy + +CFLAGS = "-O2 -Wall -std=c99 -I ${STAGING_INCDIR} -L ${STAGING_LIBDIR}" + +do_compile () { + cd ${S} + oe_runmake clean + oe_runmake bin + oe_runmake -C iMX8M -f soc.mak mkimage_imx8 + oe_runmake -C iMX8QM -f soc.mak imx8qm_dcd.cfg.tmp + oe_runmake -C iMX8QX -f soc.mak imx8qx_dcd.cfg.tmp +} + +do_install () { + cd ${S} + install -d ${D}${bindir} + install -m 0755 iMX8M/mkimage_imx8 ${D}${bindir}/mkimage_imx8m + install -m 0755 mkimage_imx8 ${D}${bindir}/mkimage_imx8 +} + +do_deploy () { + install -m 0644 ${S}/iMX8QM/imx8qm_dcd.cfg.tmp ${DEPLOYDIR} + install -m 0644 ${S}/iMX8QX/imx8qx_dcd.cfg.tmp ${DEPLOYDIR} +} +addtask deploy before do_build after do_install diff --git a/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.inc b/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.inc new file mode 100644 index 0000000..15ab4cb --- /dev/null +++ b/recipes-bsp/imx8/imx-mkimage/imx-mkimage_git.inc @@ -0,0 +1,12 @@ +# Copyright 2017-2018 NXP + +DEPENDS = "zlib-native openssl-native" + + +SRCBRANCH = "imx_4.14.98_2.0.0_ga" +SRC_URI = "git://source.codeaurora.org/external/imx/imx-mkimage.git;protocol=https;branch=${SRCBRANCH}" +SRCREV ?= "${AUTOREV}" +S = "${WORKDIR}/git" + +BOOT_TOOLS = "imx-boot-tools" +SYSROOT_DIRS += "/boot" diff --git a/recipes-bsp/imx8/imx-sc-firmware/files/README b/recipes-bsp/imx8/imx-sc-firmware/files/README new file mode 100644 index 0000000..cbce7fd --- /dev/null +++ b/recipes-bsp/imx8/imx-sc-firmware/files/README @@ -0,0 +1,2 @@ +Custom build +TODO: Integrade https://git.netmodule.intranet/hancock/imx8-scfw as a recipe diff --git a/recipes-bsp/imx8/imx-sc-firmware/files/scfw_tcm_cfw.bin b/recipes-bsp/imx8/imx-sc-firmware/files/scfw_tcm_cfw.bin new file mode 100755 index 0000000000000000000000000000000000000000..6b85ac6b6315ea11891b97faa9b98a740e84fd0e GIT binary patch literal 138368 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 YU`g7ULo#*m`^0a|R2G|qzxsc_1e9NsH2?qr literal 0 HcmV?d00001 diff --git a/recipes-bsp/imx8/imx-sc-firmware/imx-sc-firmware_0.9.bb b/recipes-bsp/imx8/imx-sc-firmware/imx-sc-firmware_0.9.bb new file mode 100644 index 0000000..0f5cc0a --- /dev/null +++ b/recipes-bsp/imx8/imx-sc-firmware/imx-sc-firmware_0.9.bb @@ -0,0 +1,42 @@ +# Copyright (C) 2016 Freescale Semiconductor +# Copyright 2017-2018 NXP + +DESCRIPTION = "i.MX System Controller Firmware" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://COPYING;md5=5ab1a30d0cd181e3408077727ea5a2db" +SECTION = "BSP" + +inherit fsl-eula-unpack deploy + +SRC_URI = "${FSL_MIRROR}/${PN}-${PV}.bin;fsl-eula=true" + +SRC_URI[md5sum] = "3246a44a242b68fae601561a80d5925c" +SRC_URI[sha256sum] = "00024e0dd332b402df03b62eac9a515fabc903568d0ad7f30fabc7c98b494f15" + +SC_FIRMWARE_NAME_mx8qxp = "scfw_tcm_cfw.bin" +symlink_name = "scfw_tcm.bin" +SRC_URI += "file://scfw_tcm_cfw.bin" +SC_FIRMWARE_NAME = "scfw_tcm_cfw.bin" + +do_configure_prepend() { + cp ${WORKDIR}/scfw_tcm_cfw.bin ${B} +} + + +BOOT_TOOLS = "imx-boot-tools" + +do_compile[noexec] = "1" + +do_install[noexec] = "1" + +do_deploy() { + install -Dm 0644 ${S}/${SC_FIRMWARE_NAME} ${DEPLOYDIR}/${BOOT_TOOLS}/${SC_FIRMWARE_NAME} + ln -sf ${SC_FIRMWARE_NAME} ${DEPLOYDIR}/${BOOT_TOOLS}/${symlink_name} +} +addtask deploy after do_install + +INHIBIT_PACKAGE_STRIP = "1" +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" +PACKAGE_ARCH = "${MACHINE_ARCH}" + +COMPATIBLE_MACHINE = "(mx8qm|mx8qxp)" diff --git a/recipes-bsp/imx8/imx-uuc/imx-uuc_git.bb b/recipes-bsp/imx8/imx-uuc/imx-uuc_git.bb new file mode 100644 index 0000000..ddc55db --- /dev/null +++ b/recipes-bsp/imx8/imx-uuc/imx-uuc_git.bb @@ -0,0 +1,20 @@ +# Copyright (C) 2016 Freescale Semiconductor + +SUMMARY = "A Daemon wait for Freescale/NXP mfgtools host's command" +SECTION = "base" +DEPENDS = "dosfstools-native" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +inherit autotools-brokensep + +PV = "0.5.1+git${SRCPV}" + +SRC_URI = "git://github.com/NXPmicro/imx-uuc.git;protocol=https" +SRCREV = "e3fbdfef978abd150d9ea71c4d174daded9c8d33" + +S = "${WORKDIR}/git" + +FILES_${PN} += "/linuxrc /fat" + +COMPATIBLE_MACHINE = "(imx)" diff --git a/recipes-bsp/imx8/u-boot/u-boot-imx8-nmhw23_git.bb b/recipes-bsp/imx8/u-boot/u-boot-imx8-nmhw23_git.bb new file mode 100644 index 0000000..3a4c7f2 --- /dev/null +++ b/recipes-bsp/imx8/u-boot/u-boot-imx8-nmhw23_git.bb @@ -0,0 +1,55 @@ +# Copyright (C) 2013-2016 Freescale Semiconductor +# Copyright 2018 (C) O.S. Systems Software LTDA. +# Copyright 2017-2019 NXP + +DESCRIPTION = "i.MX U-Boot suppporting i.MX reference boards." +require recipes-bsp/u-boot/u-boot.inc + +PROVIDES += "u-boot" + +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://Licenses/gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +SRC_URI = "git://git.netmodule.intranet/nmrouter/u-boot;protocol=ssh;user=gitea;branch=2018.03/imx/imx8-nmhw23;destsuffix=git" +SRCREV ?= "${AUTOREV}" + +S = "${WORKDIR}/git" + + +inherit fsl-u-boot-localversion + +LOCALVERSION ?= "-${SRCBRANCH}" + +BOOT_TOOLS = "imx-boot-tools" + +do_configure_prepend() { + if [ ! -d ${S}/board/netmodule/common ]; then + mkdir -p ${S}/board/netmodule/ + ln -s ${S}/board/freescale/common ${S}/board/netmodule/common + fi +} + +do_deploy_append_mx8m() { + # Deploy the mkimage, u-boot-nodtb.bin and fsl-imx8m*-XX.dtb for mkimage to generate boot binary + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -d ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0777 ${B}/${config}/arch/arm/dts/${UBOOT_DTB_NAME} ${DEPLOYDIR}/${BOOT_TOOLS} + install -m 0777 ${B}/${config}/tools/mkimage ${DEPLOYDIR}/${BOOT_TOOLS}/mkimage_uboot + install -m 0777 ${B}/${config}/u-boot-nodtb.bin ${DEPLOYDIR}/${BOOT_TOOLS}/u-boot-nodtb.bin + fi + done + unset j + done + unset i + fi +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" +COMPATIBLE_MACHINE = "(mx6|mx7|mx8)" diff --git a/recipes-bsp/u-boot/u-boot-imx8-nmhw23_git.bb b/recipes-bsp/u-boot/u-boot-imx8-nmhw23_git.bb deleted file mode 100644 index 0fc318e..0000000 --- a/recipes-bsp/u-boot/u-boot-imx8-nmhw23_git.bb +++ /dev/null @@ -1,28 +0,0 @@ -require u-boot-nm.inc - -DEPENDS += "bc-native coreutils-native dtc-native" - -# Force machine configuration for this recipe -UBOOT_MACHINE = "imx8_nmhw23_defconfig" - -# Be aware github/netmodule git -SRC_URI = "git://git.netmodule.intranet/nmrouter/u-boot;protocol=ssh;user=gitea;branch=2018.03/imx/imx8-nmhw23" - -# License -LICENSE = "GPLv2+" -LIC_FILES_CHKSUM = "file://Licenses/README;md5=30503fd321432fc713238f582193b78e" - -# Should be updated when a new U-Boot Version is available -SRCREV ?= "${AUTOREV}" -PV = "v2018.03+git${SRCPV}" - -UBOOT_BINARY = "flash.bin" - -do_compile() { - sh ${B}build-imx8-nmhw23.sh -} - -do_deploy_append() { - cp ${S}/flash.bin ${DEPLOYDIR}/flash.bin - cp ${S}/flash.sd ${DEPLOYDIR}/flash.sd -} diff --git a/recipes-kernel/linux/linux-netmodule_git.bb b/recipes-kernel/linux/linux-netmodule_git.bb old mode 100755 new mode 100644 index 27a3531..437ae52 --- a/recipes-kernel/linux/linux-netmodule_git.bb +++ b/recipes-kernel/linux/linux-netmodule_git.bb @@ -11,6 +11,11 @@ SRC_URI = "git://git.netmodule.intranet/yoctoproject/linux-netmodule.git;protoco SRCREV ?= "${AUTOREV}" PV ?= "4.19.46-${SRCPV}" +SRC_URI_imx8-nmhw23 = "git://git.netmodule.intranet/yoctoproject/linux-netmodule.git;protocol=ssh;user=gitea;branch=4.14/develop/nmhw23" +SRCREV_imx8-nmhw23 ?= "${AUTOREV}" +PV_imx8-nmhw23 ?= "4.14.78-${SRCPV}" +LIC_FILES_CHKSUM_imx8-nmhw23 = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" + PR = "r0" S = "${WORKDIR}/git" diff --git a/wic/sdimage-sota-nmhw23.wks b/wic/sdimage-sota-nmhw23.wks index d9d4acf..9132342 100644 --- a/wic/sdimage-sota-nmhw23.wks +++ b/wic/sdimage-sota-nmhw23.wks @@ -1,5 +1,5 @@ # short-description: Create OTA-enabled SD card image # long-description: Creates a partitioned SD card image with OSTree -part u-boot --source rawcopy --sourceparams="file=flash.bin" --ondisk mmcblk --no-table --align 32 +part u-boot --source rawcopy --sourceparams="file=imx-boot" --ondisk mmcblk --no-table --align 32 part / --source otaimage --ondisk mmcblk --fstype=ext4 --align 4096