diff --git a/layers/meta-nwl-marvell-bsp/conf/layer.conf b/layers/meta-nwl-marvell-bsp/conf/layer.conf new file mode 100644 index 0000000..317793f --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/conf/layer.conf @@ -0,0 +1,18 @@ +# 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 += "nwl-marvell-bsp" +BBFILE_PATTERN_nwl-marvell-bsp = "^${LAYERDIR}/" +BBFILE_PRIORITY_nwl-marvell-bsp = "7" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_nwl-marvell-bsp = "1" + +LAYERDEPENDS_nwl-marvell-bsp = "core meta-belden-coreos" + +LAYERSERIES_COMPAT_nwl-marvell-bsp = "kirkstone" diff --git a/layers/meta-nwl-marvell-bsp/conf/machine/cn9131-nitroc.conf b/layers/meta-nwl-marvell-bsp/conf/machine/cn9131-nitroc.conf new file mode 100644 index 0000000..35d04c5 --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/conf/machine/cn9131-nitroc.conf @@ -0,0 +1,70 @@ +#@TYPE: Machine +#@NAME: cn9131-nitroc +#@DESCRIPTION: Belden NetModule CN9131 NITROC +# +# cn913x is from Marvell octeon tx2 family, but it's based on a cortex-A72 +# so we can't use the armv8-2a/tune-octeontx2.inc (armv8a vs arm8-2a) +# instead we can use the older octeontx family previously known as thunderx +require conf/machine/include/arm/armv8a/tune-thunderx.inc + +# SOC_FAMILY is added to MACHINE_OVERRIDES in the soc-family.inc file +SOC_FAMILY = "cn913x" +require conf/machine/include/soc-family.inc + +# Bootloader configuration +# ***************************************************************************** + +PREFERRED_PROVIDER_virtual/bootloader = "u-boot" +PREFERRED_VERSION_u-boot ?= "2020.10-marvell" + +# Set the configuration and device tree for Nitroc +UBOOT_MACHINE = "nitroc_defconfig" +UBOOT_BUILDENV_DEVICE_TREE ??= "cn9131-nitroc-v1" + +# Kernel configuration +# ****************************************************************************** + +PREFERRED_PROVIDER_virtual/kernel ?= "linux-nitroc" +PREFERRED_VERSION_linux-netmodule ?= "v6.6.y%" +PREFERRED_VERSION_trusted-firmware-a ?= "2.9" + +KERNEL_IMAGETYPE = "Image" +KERNEL_DEFCONFIG ?= "nitroc_defconfig" +KERNEL_DEVICETREE ?= "\ + marvell/cn9131-nitroc-v1.dtb \ + marvell/cn9131-nitroc-m12.dtb \ + marvell/cn9131-nitroc-rj45.dtb \ +" + +# getty configuration +# ****************************************************************************** + +SERIAL_CONSOLES = "115200;ttyS0" +SERIAL_CONSOLES_CHECK ?= "${SERIAL_CONSOLES}" +APPEND += "console=ttyS0,115200" + +# Image generation +# ****************************************************************************** + +# Ensure that both flash-image.bin and boot.scr are generated as they are needed +# for a wic image +do_image_wic[depends] += "trusted-firmware-a:do_deploy" +WKS_FILE = "cn913x-sdcard.wks.in" +COREOS_INSTALLER_WKS_FILE ?= "cn913x-sdcard-installer.wks" +IMAGE_FSTYPES += "wic.xz wic.bmap" + +COREOS_IMAGE_SWUPDATE_EXTRACLASSES += " coreos-image-swupdate-cn913x" + +# No watchdog available yet +EFIBOOTGUARD_TIMEOUT ?= "0" +require conf/machine/include/coreos-generic-features/efi.inc +require conf/machine/include/coreos-generic-features/partitions.inc + +### Device specific settings +# Kernel modules are not essential for booting but are needed for most things +MACHINE_EXTRA_RDEPENDS += "kernel-modules" +# Device trees are included in the unified kernel and not needed in the rootfs +# MACHINE_EXTRA_RDEPENDS += "kernel-devicetree" +# Needed for phy firmware +MACHINE_EXTRA_RDEPENDS += "linux-firmware-ath11k" +MACHINE_EXTRA_RDEPENDS += "linux-firmware-ath10k" diff --git a/layers/meta-nwl-marvell-bsp/recipes-bsp/binaries-marvell/binaries-marvell_git.bb b/layers/meta-nwl-marvell-bsp/recipes-bsp/binaries-marvell/binaries-marvell_git.bb new file mode 100644 index 0000000..9cfa1a4 --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/recipes-bsp/binaries-marvell/binaries-marvell_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "Marvell binaries like the system controller firmware" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://README.md;md5=bbdf038ac62317d3a12a067c50dadc61" + +SRC_URI = "git://git@bitbucket.gad.local:7999/nm-nsp/binaries-marvell.git;protocol=ssh;user=git;branch=nitroc" + +# Modify these as desired +PV = "11.23.08+git${SRCPV}" +SRCREV = "6765e4fa3eae4000a307bdb891fe8c03f3422f91" + +S = "${WORKDIR}/git" + +do_configure () { + : +} + +do_compile () { + : +} + +do_install () { + # The sources are needed by arm-trusted-firmware + install -d "${D}/usr/src/${PN}" + cp -r "${S}/mrvl_scp_bl2.img" "${D}/usr/src/${PN}/" +} + +FILES:${PN}-dev = "/usr/src/${PN}" +INSANE_SKIP:${PN}-dev += "file-rdeps" +SYSROOT_DIRS += " /usr/src/${PN} " diff --git a/layers/meta-nwl-marvell-bsp/recipes-bsp/mv-ddr-marvell/mv-ddr-marvell_git.bb b/layers/meta-nwl-marvell-bsp/recipes-bsp/mv-ddr-marvell/mv-ddr-marvell_git.bb new file mode 100644 index 0000000..b65ee7c --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/recipes-bsp/mv-ddr-marvell/mv-ddr-marvell_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "Marvell DDR training library" +LICENSE = "GPL-2.0-or-later" +LIC_FILES_CHKSUM = "file://Makefile;md5=9993156c815673120e02a7c8e00a8cc3" + +SRC_URI = "git://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git;protocol=https;branch=master" + +# Modify these as desired +PV = "devel+git${SRCPV}" +SRCREV = "bfcf62051be835f725005bb5137928f7c27b792e" + +S = "${WORKDIR}/git" + +do_configure () { + : +} + +do_compile () { + : +} + +do_install () { + # The sources are needed by arm-trusted-firmware + install -d "${D}/usr/src/${PN}" + cp -r "${S}/." "${D}/usr/src/${PN}/" +} + +FILES:${PN}-dev = "/usr/src/${PN}" +INSANE_SKIP:${PN}-dev += "file-rdeps" +SYSROOT_DIRS += " /usr/src/${PN} " diff --git a/layers/meta-nwl-marvell-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.bb b/layers/meta-nwl-marvell-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.bb new file mode 100644 index 0000000..f55e3ae --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.bb @@ -0,0 +1,21 @@ +require recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc + +DEPENDS += "mv-ddr-marvell binaries-marvell coreutils-native" + +COMPATIBLE_MACHINE = "cn913x" + +LIC_FILES_CHKSUM += "file://docs/license.rst;md5=b2c740efedc159745b9b31f88ff03dde" + +SRC_URI = "git://git@bitbucket.gad.local:7999/nm-nsp/trusted-firmware-a.git;protocol=ssh;user=git;branch=nitroc-v2.9.0" +SRCREV = "41911b0db0a07878a384e8358950b79e6df7d1be" + +EXTRA_OEMAKE += "MV_DDR_PATH=${PKG_CONFIG_SYSROOT_DIR}/usr/src/mv-ddr-marvell DDR_TOPOLOGY=2 SCP_BL2=${PKG_CONFIG_SYSROOT_DIR}/usr/src/binaries-marvell/mrvl_scp_bl2.img" + +TFA_PLATFORM = "t9130_nitroc" +TFA_BUILD_TARGET = "all mrvl_flash" +TFA_INSTALL_TARGET = "flash-image" +TFA_DEBUG = "1" +TFA_MBEDTLS = "0" +TFA_UBOOT = "1" +TFA_UEFI = "0" + diff --git a/layers/meta-nwl-marvell-bsp/recipes-bsp/u-boot/u-boot_2020.10-marvell.bb b/layers/meta-nwl-marvell-bsp/recipes-bsp/u-boot/u-boot_2020.10-marvell.bb new file mode 100644 index 0000000..ac4c533 --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/recipes-bsp/u-boot/u-boot_2020.10-marvell.bb @@ -0,0 +1,32 @@ +HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome" +DESCRIPTION = "U-Boot, a boot loader for Embedded boards based on PowerPC, \ +ARM, MIPS and several other processors, which can be installed in a boot \ +ROM and used to initialize and test the hardware or to download and run \ +application code." +SECTION = "bootloaders" +DEPENDS += "flex-native bison-native" + +COMPATIBLE_MACHINE = "cn913x" + +LICENSE = "GPL-2.0-or-later" +LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025" +PE = "1" + +SRCREV = "3534f6601c53362407bc6b3bf0af85908c38b81c" +SRC_URI = "git://git@bitbucket.gad.local:7999/nm-nsp/netmodule-u-boot.git;protocol=ssh;user=git;branch=sdk11.23.08-v2020.10-nitroc" + +S = "${WORKDIR}/git" + +require recipes-bsp/u-boot/u-boot.inc +require recipes-bsp/u-boot/u-boot-coreos.inc + +# Solidrun patches require to build out-of-the-tree +B = "${WORKDIR}/build" + +DEPENDS += "bc-native dtc-native u-boot-mkimage-native" + +do_compile:prepend() { + export DEVICE_TREE="${UBOOT_BUILDENV_DEVICE_TREE}" +} + +SYSROOT_DIRS += " /boot " diff --git a/layers/meta-nwl-marvell-bsp/recipes-kernel/linux/linux-nitroc_git.bb b/layers/meta-nwl-marvell-bsp/recipes-kernel/linux/linux-nitroc_git.bb new file mode 100644 index 0000000..9b9f452 --- /dev/null +++ b/layers/meta-nwl-marvell-bsp/recipes-kernel/linux/linux-nitroc_git.bb @@ -0,0 +1,71 @@ +DESCRIPTION = "Linux kernel for the Nitroc hardware" +COMPATIBLE_MACHINE = "cn9131-nitroc" + +inherit kernel + +SRC_URI = "git://git@bitbucket.gad.local:7999/nm-nsp/netmodule-linux.git;protocol=ssh;user=git;branch=nitroc-v6.6.y" +SRCREV ?= "0b8f8f81ab0ec015002357820f50bfc2924390fe" +PV = "v6.6.y+git${SRCPV}" + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" + +S = "${WORKDIR}/git" + +#If a KERNEL_DEFCONFIG is specified, the defconfig specified in SRC_URI will be overwritten! +do_configure:append(){ + if [ "${KERNEL_DEFCONFIG}" != "" ]; then + oe_runmake ${KERNEL_DEFCONFIG} + fi + configs="${@" ".join(find_cfgs(d))}" + if [ ! -z "${configs}" ]; then + ${S}/scripts/kconfig/merge_config.sh -m -O ${WORKDIR}/build ${WORKDIR}/build/.config ${WORKDIR}/*.cfg + fi +} + +# The default kenrel.bbclass expects it can remove the source symlink, +# newer kernels don't have this symlink so we need to override kernel_do_install +kernel_do_install() { + # + # First install the modules + # + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE + if (grep -q -i -e '^CONFIG_MODULES=y$' .config); then + oe_runmake DEPMOD=echo MODLIB=${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION} INSTALL_FW_PATH=${D}${nonarch_base_libdir}/firmware modules_install + rm "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/build" + # Remove empty module directories to prevent QA issues + find "${D}${nonarch_base_libdir}/modules/${KERNEL_VERSION}/kernel" -type d -empty -delete + else + bbnote "no modules to install" + fi + + # + # Install various kernel output (zImage, map file, config, module support files) + # + install -d ${D}/${KERNEL_IMAGEDEST} + + # + # When including an initramfs bundle inside a FIT image, the fitImage is created after the install task + # by do_assemble_fitimage_initramfs. + # This happens after the generation of the initramfs bundle (done by do_bundle_initramfs). + # So, at the level of the install task we should not try to install the fitImage. fitImage is still not + # generated yet. + # After the generation of the fitImage, the deploy task copies the fitImage from the build directory to + # the deploy folder. + # + + for imageType in ${KERNEL_IMAGETYPES} ; do + if [ $imageType != "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then + install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION} + fi + done + + install -m 0644 System.map ${D}/${KERNEL_IMAGEDEST}/System.map-${KERNEL_VERSION} + install -m 0644 .config ${D}/${KERNEL_IMAGEDEST}/config-${KERNEL_VERSION} + install -m 0644 vmlinux ${D}/${KERNEL_IMAGEDEST}/vmlinux-${KERNEL_VERSION} + [ -e Module.symvers ] && install -m 0644 Module.symvers ${D}/${KERNEL_IMAGEDEST}/Module.symvers-${KERNEL_VERSION} + install -d ${D}${sysconfdir}/modules-load.d + install -d ${D}${sysconfdir}/modprobe.d +} + +require recipes-kernel/linux/linux-yocto-coreos-efi.inc