diff mbox series

[v2] configs/kontron_bl_imx8mm_defconfig: new defconfig

Message ID 20220114211525.2697606-1-heiko.thiery@gmail.com
State Superseded
Headers show
Series [v2] configs/kontron_bl_imx8mm_defconfig: new defconfig | expand

Commit Message

Heiko Thiery Jan. 14, 2022, 9:15 p.m. UTC
The BL i.MX8M Mini is a baseboard that includes the SoM SL i.MX8M Mini.

https://www.kontron.com/produkte/baseboard-bl-i.mx8m-mini/p158549

Cc: Frieder Schrempf <frieder.schrempf@kontron.de>
Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
---
v2:
 - switch to extlinux
 - directly call genimage.sh
  - remove post-image.sh
 - remove BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT
 - add BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME


 DEVELOPERS                                    |   2 +
 board/kontron/bl-imx8mm/extlinux.conf         |   4 +
 board/kontron/bl-imx8mm/genimage.cfg          |  18 ++
 ...m-kontron-n801x-s-convert-options-to.patch |  28 ++
 ...m-kontron-n801x-s-add-common-board-u.patch | 302 ++++++++++++++++++
 board/kontron/bl-imx8mm/post-build.sh         |   7 +
 board/kontron/bl-imx8mm/readme.txt            |  85 +++++
 configs/kontron_bl_imx8mm_defconfig           |  59 ++++
 8 files changed, 505 insertions(+)
 create mode 100644 board/kontron/bl-imx8mm/extlinux.conf
 create mode 100644 board/kontron/bl-imx8mm/genimage.cfg
 create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
 create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
 create mode 100755 board/kontron/bl-imx8mm/post-build.sh
 create mode 100644 board/kontron/bl-imx8mm/readme.txt
 create mode 100644 configs/kontron_bl_imx8mm_defconfig

Comments

Giulio Benetti Jan. 14, 2022, 9:37 p.m. UTC | #1
Hi Heiko,

> Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <heiko.thiery@gmail.com> ha scritto:
> 
> The BL i.MX8M Mini is a baseboard that includes the SoM SL i.MX8M Mini.
> 
> https://www.kontron.com/produkte/baseboard-bl-i.mx8m-mini/p158549
> 
> Cc: Frieder Schrempf <frieder.schrempf@kontron.de>
> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> ---
> v2:
> - switch to extlinux
> - directly call genimage.sh
>  - remove post-image.sh
> - remove BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT
> - add BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME
> 
> 
> DEVELOPERS                                    |   2 +
> board/kontron/bl-imx8mm/extlinux.conf         |   4 +
> board/kontron/bl-imx8mm/genimage.cfg          |  18 ++
> ...m-kontron-n801x-s-convert-options-to.patch |  28 ++
> ...m-kontron-n801x-s-add-common-board-u.patch | 302 ++++++++++++++++++
> board/kontron/bl-imx8mm/post-build.sh         |   7 +
> board/kontron/bl-imx8mm/readme.txt            |  85 +++++
> configs/kontron_bl_imx8mm_defconfig           |  59 ++++
> 8 files changed, 505 insertions(+)
> create mode 100644 board/kontron/bl-imx8mm/extlinux.conf
> create mode 100644 board/kontron/bl-imx8mm/genimage.cfg
> create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
> create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
> create mode 100755 board/kontron/bl-imx8mm/post-build.sh
> create mode 100644 board/kontron/bl-imx8mm/readme.txt
> create mode 100644 configs/kontron_bl_imx8mm_defconfig
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index c0bfde69da..93c5760489 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1179,7 +1179,9 @@ F:    package/python-sip/
> F:    package/uhd/
> 
> N:    Heiko Thiery <heiko.thiery@gmail.com>
> +F:    board/kontron/bl-imx8mm/
> F:    board/kontron/pitx-imx8m/
> +F:    configs/kontron_bl_imx8mm_defconfig
> F:    configs/kontron_pitx_imx8m_defconfig
> F:    package/altera-stapl/
> F:    package/ipmitool/
> diff --git a/board/kontron/bl-imx8mm/extlinux.conf b/board/kontron/bl-imx8mm/extlinux.conf
> new file mode 100644
> index 0000000000..d38f7f81b7
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/extlinux.conf
> @@ -0,0 +1,4 @@
> +label buildroot
> +  kernel /boot/Image
> +  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
> +  append root=PARTUUID=%PARTUUID% rootwait rw
> diff --git a/board/kontron/bl-imx8mm/genimage.cfg b/board/kontron/bl-imx8mm/genimage.cfg
> new file mode 100644
> index 0000000000..6c0ef69591
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/genimage.cfg
> @@ -0,0 +1,18 @@
> +image sdcard.img {
> +    hdimage {
> +        partition-table-type = "gpt"
> +        gpt-location = 16K
> +    }
> +
> +    partition imx-boot {
> +        in-partition-table = "no"
> +        image = "flash.bin"
> +        offset = 33k

I’ve missed V1 patch, here ^^^ please use capitol K letter.
I still have to write the linter for genimage.cfg files :-/

> +    }
> +
> +    partition rootfs {
> +        image = "rootfs.ext4"
> +        offset = 8M
> +        partition-uuid = %PARTUUID%
> +    }
> +}
> diff --git a/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch b/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
> new file mode 100644
> index 0000000000..ed088dd0f8
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
> @@ -0,0 +1,28 @@
> +From 95a311af81cd47c44d3d6e3f717f06a06d8f3dfd Mon Sep 17 00:00:00 2001
> +From: Heiko Thiery <heiko.thiery@gmail.com>
> +Date: Mon, 10 Jan 2022 14:13:02 +0100
> +Subject: [PATCH 1/2] imx: imx8mm: imx8mm-kontron-n801x-s: convert options to Kconfig
> +
> +CONFIG_SPL_MMC and CONFIG_SPL_SERIAL
> +
> +Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> +---
> + configs/kontron-sl-mx8mm_defconfig | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/configs/kontron-sl-mx8mm_defconfig b/configs/kontron-sl-mx8mm_defconfig
> +index 35d12fca32..940bf07a92 100644
> +--- a/configs/kontron-sl-mx8mm_defconfig
> ++++ b/configs/kontron-sl-mx8mm_defconfig
> +@@ -15,6 +15,8 @@ CONFIG_SPL_DM_SPI=y
> + CONFIG_DEFAULT_DEVICE_TREE="imx8mm-kontron-n801x-s"
> + CONFIG_SPL_TEXT_BASE=0x7E1000
> + CONFIG_TARGET_KONTRON_MX8MM=y
> ++CONFIG_SPL_MMC=y
> ++CONFIG_SPL_SERIAL=y
> + CONFIG_BOOTCOUNT_BOOTLIMIT=3
> + CONFIG_SPL=y
> + CONFIG_DISTRO_DEFAULTS=y
> +-- 
> +2.30.2
> +
> diff --git a/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch b/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
> new file mode 100644
> index 0000000000..3bc71325c6
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
> @@ -0,0 +1,302 @@
> +From ef694c19c074333fd16589ec6ffef3e7ca895186 Mon Sep 17 00:00:00 2001
> +From: Heiko Thiery <heiko.thiery@gmail.com>
> +Date: Wed, 12 Jan 2022 08:44:36 +0100
> +Subject: [PATCH 2/2] imx: imx8mm: imx8mm-kontron-n801x-s: add common board
> + u-boot.dtsi
> +
> +When using a board variant that selects the lvds specific dtb the
> +*.u-boot.dtsi file will not be included. To have a lvds dtb specific
> +u-boot.dtsi file move this part to a common board u-boot.dtsi file and
> +include this in the board base u-boot.dtsi and create an additional one
> +for the lvds variant.
> +
> +Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> +---
> + .../imx8mm-kontron-n801x-s-lvds-u-boot.dtsi   |   6 +
> + .../dts/imx8mm-kontron-n801x-s-u-boot.dtsi    | 124 +----------------
> + arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi | 128 ++++++++++++++++++
> + 3 files changed, 135 insertions(+), 123 deletions(-)
> + create mode 100644 arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
> + create mode 100644 arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
> +
> +diff --git a/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
> +new file mode 100644
> +index 0000000000..4bf75722bf
> +--- /dev/null
> ++++ b/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
> +@@ -0,0 +1,6 @@
> ++// SPDX-License-Identifier: GPL-2.0+
> ++/*
> ++ * Copyright (C) 2019 Kontron Electronics GmbH
> ++ */
> ++
> ++#include "imx8mm-kontron-n801x-u-boot.dtsi"
> +diff --git a/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
> +index 22d18e6f1c..4bf75722bf 100644
> +--- a/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
> ++++ b/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
> +@@ -3,126 +3,4 @@
> +  * Copyright (C) 2019 Kontron Electronics GmbH
> +  */
> + 
> +-#include "imx8mm-u-boot.dtsi"
> +-
> +-/ {
> +-    aliases {
> +-        usb0 = &usbotg1;
> +-        usb1 = &usbotg2;
> +-    };
> +-
> +-    wdt-reboot {
> +-        compatible = "wdt-reboot";
> +-        wdt = <&wdog1>;
> +-        u-boot,dm-spl;
> +-    };
> +-
> +-    firmware {
> +-        optee {
> +-            compatible = "linaro,optee-tz";
> +-            method = "smc";
> +-        };
> +-    };
> +-};
> +-
> +-&fec1 {
> +-    phy-mode = "rgmii-rxid";
> +-};
> +-
> +-&i2c1 {
> +-    u-boot,dm-spl;
> +-    u-boot,dm-pre-reloc;
> +-};
> +-
> +-&i2c2 {
> +-    status = "okay";
> +-    u-boot,dm-spl;
> +-    u-boot,dm-pre-reloc;
> +-};
> +-
> +-&pinctrl_ecspi1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pinctrl_i2c1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pinctrl_pmic {
> +-    u-boot,dm-spl;
> +-    fsl,pins = <
> +-        MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0        0x141
> +-        /* Disable Pullup for SD_VSEL */
> +-        MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4        0x41
> +-    >;
> +-};
> +-
> +-&pinctrl_uart3 {
> +-    u-boot,dm-spl;
> +-    u-boot,dm-pre-reloc;
> +-};
> +-
> +-&pinctrl_usdhc1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pinctrl_usdhc1_100mhz {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pinctrl_usdhc1_200mhz {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pinctrl_usdhc2 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&pca9450 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&{/soc@0/bus@30800000/i2c@30a20000/pmic@25/regulators} {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&ecspi1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&gpio1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&gpio2 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&gpio3 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&gpio4 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&gpio5 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&uart3 {
> +-    u-boot,dm-spl;
> +-    u-boot,dm-pre-reloc;
> +-};
> +-
> +-&usdhc1 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&usdhc2 {
> +-    u-boot,dm-spl;
> +-};
> +-
> +-&wdog1 {
> +-    u-boot,dm-spl;
> +-};
> ++#include "imx8mm-kontron-n801x-u-boot.dtsi"
> +diff --git a/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
> +new file mode 100644
> +index 0000000000..22d18e6f1c
> +--- /dev/null
> ++++ b/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
> +@@ -0,0 +1,128 @@
> ++// SPDX-License-Identifier: GPL-2.0+
> ++/*
> ++ * Copyright (C) 2019 Kontron Electronics GmbH
> ++ */
> ++
> ++#include "imx8mm-u-boot.dtsi"
> ++
> ++/ {
> ++    aliases {
> ++        usb0 = &usbotg1;
> ++        usb1 = &usbotg2;
> ++    };
> ++
> ++    wdt-reboot {
> ++        compatible = "wdt-reboot";
> ++        wdt = <&wdog1>;
> ++        u-boot,dm-spl;
> ++    };
> ++
> ++    firmware {
> ++        optee {
> ++            compatible = "linaro,optee-tz";
> ++            method = "smc";
> ++        };
> ++    };
> ++};
> ++
> ++&fec1 {
> ++    phy-mode = "rgmii-rxid";
> ++};
> ++
> ++&i2c1 {
> ++    u-boot,dm-spl;
> ++    u-boot,dm-pre-reloc;
> ++};
> ++
> ++&i2c2 {
> ++    status = "okay";
> ++    u-boot,dm-spl;
> ++    u-boot,dm-pre-reloc;
> ++};

I don’t know the hardware of the board and it’s a bit off-topic,
but do you really need 2 i2c channels before relocating uboot?

Best regards
Giulio

> ++
> ++&pinctrl_ecspi1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pinctrl_i2c1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pinctrl_pmic {
> ++    u-boot,dm-spl;
> ++    fsl,pins = <
> ++        MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0        0x141
> ++        /* Disable Pullup for SD_VSEL */
> ++        MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4        0x41
> ++    >;
> ++};
> ++
> ++&pinctrl_uart3 {
> ++    u-boot,dm-spl;
> ++    u-boot,dm-pre-reloc;
> ++};
> ++
> ++&pinctrl_usdhc1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pinctrl_usdhc1_100mhz {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pinctrl_usdhc1_200mhz {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pinctrl_usdhc2 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&pca9450 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&{/soc@0/bus@30800000/i2c@30a20000/pmic@25/regulators} {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&ecspi1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&gpio1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&gpio2 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&gpio3 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&gpio4 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&gpio5 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&uart3 {
> ++    u-boot,dm-spl;
> ++    u-boot,dm-pre-reloc;
> ++};
> ++
> ++&usdhc1 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&usdhc2 {
> ++    u-boot,dm-spl;
> ++};
> ++
> ++&wdog1 {
> ++    u-boot,dm-spl;
> ++};
> +-- 
> +2.30.2
> +
> diff --git a/board/kontron/bl-imx8mm/post-build.sh b/board/kontron/bl-imx8mm/post-build.sh
> new file mode 100755
> index 0000000000..bf8861f6a9
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/post-build.sh
> @@ -0,0 +1,7 @@
> +#!/bin/sh
> +BOARD_DIR="$(dirname $0)"
> +PARTUUID="$($HOST_DIR/bin/uuidgen)"
> +
> +install -d "$TARGET_DIR/boot/extlinux/"
> +sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/extlinux.conf" > "$TARGET_DIR/boot/extlinux/extlinux.conf"
> +sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/genimage.cfg" > "$BINARIES_DIR/genimage.cfg"
> diff --git a/board/kontron/bl-imx8mm/readme.txt b/board/kontron/bl-imx8mm/readme.txt
> new file mode 100644
> index 0000000000..df47ba5174
> --- /dev/null
> +++ b/board/kontron/bl-imx8mm/readme.txt
> @@ -0,0 +1,85 @@
> +Kontron BL i.MX8M Mini
> +======================
> +
> +https://www.kontron.com/produkte/baseboard-bl-i.mx8m-mini/p158549
> +
> +
> +How to build it
> +===============
> +
> +Configure buildroot:
> +
> +  $ make kontron_bl_imx8mm_defconfig
> +
> +Change settings to fit your needs (optional):
> +
> +  $ make menuconfig
> +
> +Compile everything and build the rootfs image:
> +
> +  $ make
> +
> +
> +Result of the build
> +===================
> +
> +After building, the output/images directory contains:
> +
> +  output/images/
> +    ├── bl31.bin
> +    ├── boot.scr
> +    ├── ddr_fw.bin
> +    ├── flash.bin
> +    ├── Image
> +    ├── imx8mm-kontron-n801x-s.dtb
> +    ├── lpddr4_pmu_train_1d_dmem_201904.bin
> +    ├── lpddr4_pmu_train_1d_dmem_202006.bin
> +    ├── lpddr4_pmu_train_1d_dmem.bin
> +    ├── lpddr4_pmu_train_1d_dmem_pad.bin
> +    ├── lpddr4_pmu_train_1d_fw.bin
> +    ├── lpddr4_pmu_train_1d_imem_201904.bin
> +    ├── lpddr4_pmu_train_1d_imem_202006.bin
> +    ├── lpddr4_pmu_train_1d_imem.bin
> +    ├── lpddr4_pmu_train_1d_imem_pad.bin
> +    ├── lpddr4_pmu_train_2d_dmem_201904.bin
> +    ├── lpddr4_pmu_train_2d_dmem_202006.bin
> +    ├── lpddr4_pmu_train_2d_dmem.bin
> +    ├── lpddr4_pmu_train_2d_dmem_pad.bin
> +    ├── lpddr4_pmu_train_2d_fw.bin
> +    ├── lpddr4_pmu_train_2d_imem_201904.bin
> +    ├── lpddr4_pmu_train_2d_imem_202006.bin
> +    ├── lpddr4_pmu_train_2d_imem.bin
> +    ├── lpddr4_pmu_train_2d_imem_pad.bin
> +    ├── lpddr4_pmu_train_fw.bin
> +    ├── rootfs.ext2
> +    ├── rootfs.ext4 -> rootfs.ext2
> +    ├── rootfs.tar
> +    ├── sdcard.img
> +    ├── u-boot.bin
> +    └── u-boot-spl.bin
> +
> +
> +Flashing the SD card image
> +==========================
> +
> +To install the image on a SDCard simply copy sdcard.img to the storage (e.g. SD, eMMC)
> +
> +  $ sudo dd if=output/images/sdcard.img of=<your-sd-device>
> +
> +
> +Preparing the board
> +===================
> +
> + * Connect a serial line to the board
> + * Insert the SD card
> + * Power-up the board
> +
> +
> +Booting the board
> +=================
> +
> +By default the bootloader will search for the first valid image, starting
> +with the internal eMMC. To make sure the bootloader loads bootscript from
> +the correct location (SD card) set the boot_targets environment variable:
> +
> +  $ setenv boot_targets mmc1
> diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
> new file mode 100644
> index 0000000000..5b5648cc14
> --- /dev/null
> +++ b/configs/kontron_bl_imx8mm_defconfig
> @@ -0,0 +1,59 @@
> +# Architecture
> +BR2_aarch64=y
> +BR2_ARM_FPU_VFPV3=y
> +
> +BR2_GLOBAL_PATCH_DIR="board/kontron/bl-imx8mm/patches"
> +
> +# System
> +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc2"
> +
> +# Kernel
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.16"
> +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mm-kontron-n801x-s"
> +BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y
> +BR2_LINUX_KERNEL_INSTALL_TARGET=y
> +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> +
> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_16=y
> +
> +BR2_PACKAGE_FREESCALE_IMX=y
> +BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y
> +BR2_PACKAGE_FIRMWARE_IMX=y
> +
> +# Filesystem / image
> +BR2_TARGET_ROOTFS_EXT2=y
> +BR2_TARGET_ROOTFS_EXT2_4=y
> +BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
> +
> +# Bootloader
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.6"
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mm"
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y
> +BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="IMX_BOOT_UART_BASE=0x30880000"
> +BR2_TARGET_UBOOT=y
> +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
> +BR2_TARGET_UBOOT_CUSTOM_VERSION=y
> +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2022.01"
> +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="kontron-sl-mx8mm"
> +BR2_TARGET_UBOOT_NEEDS_DTC=y
> +BR2_TARGET_UBOOT_NEEDS_PYTHON3=y
> +BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
> +BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y
> +BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN=y
> +BR2_TARGET_UBOOT_NEEDS_IMX_FIRMWARE=y
> +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
> +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="flash.bin"
> +BR2_TARGET_UBOOT_SPL=y
> +
> +# Required host tools to create the SD/eMMC image
> +BR2_ROOTFS_POST_BUILD_SCRIPT="board/kontron/bl-imx8mm/post-build.sh"
> +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
> +BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BINARIES_DIR)/genimage.cfg"
> +BR2_PACKAGE_HOST_GENIMAGE=y
> +BR2_PACKAGE_HOST_UBOOT_TOOLS=y
> -- 
> 2.30.2
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
Heiko Thiery Jan. 14, 2022, 9:54 p.m. UTC | #2
Hi Giulio,

Am Fr., 14. Jan. 2022 um 22:37 Uhr schrieb Giulio Benetti
<giulio.benetti@benettiengineering.com>:
>
> Hi Heiko,
>
> > Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <heiko.thiery@gmail.com> ha scritto:
> >
> > The BL i.MX8M Mini is a baseboard that includes the SoM SL i.MX8M Mini.
> >
> > https://www.kontron.com/produkte/baseboard-bl-i.mx8m-mini/p158549
> >
> > Cc: Frieder Schrempf <frieder.schrempf@kontron.de>
> > Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> > ---
> > v2:
> > - switch to extlinux
> > - directly call genimage.sh
> >  - remove post-image.sh
> > - remove BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT
> > - add BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME
> >
> >
> > DEVELOPERS                                    |   2 +
> > board/kontron/bl-imx8mm/extlinux.conf         |   4 +
> > board/kontron/bl-imx8mm/genimage.cfg          |  18 ++
> > ...m-kontron-n801x-s-convert-options-to.patch |  28 ++
> > ...m-kontron-n801x-s-add-common-board-u.patch | 302 ++++++++++++++++++
> > board/kontron/bl-imx8mm/post-build.sh         |   7 +
> > board/kontron/bl-imx8mm/readme.txt            |  85 +++++
> > configs/kontron_bl_imx8mm_defconfig           |  59 ++++
> > 8 files changed, 505 insertions(+)
> > create mode 100644 board/kontron/bl-imx8mm/extlinux.conf
> > create mode 100644 board/kontron/bl-imx8mm/genimage.cfg
> > create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
> > create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
> > create mode 100755 board/kontron/bl-imx8mm/post-build.sh
> > create mode 100644 board/kontron/bl-imx8mm/readme.txt
> > create mode 100644 configs/kontron_bl_imx8mm_defconfig
> >
> > diff --git a/DEVELOPERS b/DEVELOPERS
> > index c0bfde69da..93c5760489 100644
> > --- a/DEVELOPERS
> > +++ b/DEVELOPERS
> > @@ -1179,7 +1179,9 @@ F:    package/python-sip/
> > F:    package/uhd/
> >
> > N:    Heiko Thiery <heiko.thiery@gmail.com>
> > +F:    board/kontron/bl-imx8mm/
> > F:    board/kontron/pitx-imx8m/
> > +F:    configs/kontron_bl_imx8mm_defconfig
> > F:    configs/kontron_pitx_imx8m_defconfig
> > F:    package/altera-stapl/
> > F:    package/ipmitool/
> > diff --git a/board/kontron/bl-imx8mm/extlinux.conf b/board/kontron/bl-imx8mm/extlinux.conf
> > new file mode 100644
> > index 0000000000..d38f7f81b7
> > --- /dev/null
> > +++ b/board/kontron/bl-imx8mm/extlinux.conf
> > @@ -0,0 +1,4 @@
> > +label buildroot
> > +  kernel /boot/Image
> > +  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
> > +  append root=PARTUUID=%PARTUUID% rootwait rw
> > diff --git a/board/kontron/bl-imx8mm/genimage.cfg b/board/kontron/bl-imx8mm/genimage.cfg
> > new file mode 100644
> > index 0000000000..6c0ef69591
> > --- /dev/null
> > +++ b/board/kontron/bl-imx8mm/genimage.cfg
> > @@ -0,0 +1,18 @@
> > +image sdcard.img {
> > +    hdimage {
> > +        partition-table-type = "gpt"
> > +        gpt-location = 16K
> > +    }
> > +
> > +    partition imx-boot {
> > +        in-partition-table = "no"
> > +        image = "flash.bin"
> > +        offset = 33k
>
> I’ve missed V1 patch, here ^^^ please use capitol K letter.
> I still have to write the linter for genimage.cfg files :-/

Indeed .. missed that. I will wait for some more comments and do a v3
with that fixed later.

[snip]

> > ++&i2c1 {
> > ++    u-boot,dm-spl;
> > ++    u-boot,dm-pre-reloc;
> > ++};
> > ++
> > ++&i2c2 {
> > ++    status = "okay";
> > ++    u-boot,dm-spl;
> > ++    u-boot,dm-pre-reloc;
> > ++};
>
> I don’t know the hardware of the board and it’s a bit off-topic,
> but do you really need 2 i2c channels before relocating uboot?

Good catch.

@Frieder: can you say something to that?
Giulio Benetti Jan. 17, 2022, 7:58 p.m. UTC | #3
Hi Heiko,

I've missed one thing below,

On 14/01/22 22:15, Heiko Thiery wrote:

[SNIP]

> diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
> new file mode 100644
> index 0000000000..5b5648cc14
> --- /dev/null
> +++ b/configs/kontron_bl_imx8mm_defconfig
> @@ -0,0 +1,59 @@
> +# Architecture
> +BR2_aarch64=y
> +BR2_ARM_FPU_VFPV3=y

i.MX8MM supports VFPv4-D16, so I would substitute this ^^^ with:
BR2_ARM_FPU_VFPV4D16

This is to achieve the maximum performance.

Kind regards!
Thomas Petazzoni Jan. 17, 2022, 11:04 p.m. UTC | #4
On Mon, 17 Jan 2022 20:58:52 +0100
Giulio Benetti <giulio.benetti@benettiengineering.com> wrote:

> > diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
> > new file mode 100644
> > index 0000000000..5b5648cc14
> > --- /dev/null
> > +++ b/configs/kontron_bl_imx8mm_defconfig
> > @@ -0,0 +1,59 @@
> > +# Architecture
> > +BR2_aarch64=y
> > +BR2_ARM_FPU_VFPV3=y  
> 
> i.MX8MM supports VFPv4-D16, so I would substitute this ^^^ with:
> BR2_ARM_FPU_VFPV4D16
> 
> This is to achieve the maximum performance.

Nope, that's not really how it works. VFPv3 is better than VFPv3-D16.
Indeed VFPv3 means that the the FPU has 32 double precision registers,
while VFPv3-D16 means that it has "only" 16 double precision registers.

So, if the i.MX8MM has only the VFPv3-D16, then indeed it should be
chosen, because code compiled with VFPv3 may not work, as it might use
too many double precision registers.

On the other hand, if the i.MX8MM has the full VFPv3, then
BR2_ARM_FPU_VFPV3=y should be used.

That being said, the gcc man page only documents vfpv3, vfpv3-d16-fp16,
vfpv3-fp16 as extension for armv7-a. Interesting, would need to look
into this.

Best regards,

Thomas
Giulio Benetti Jan. 18, 2022, 6:58 a.m. UTC | #5
Hi Thomas,

On 18/01/22 00:04, Thomas Petazzoni wrote:
> On Mon, 17 Jan 2022 20:58:52 +0100
> Giulio Benetti <giulio.benetti@benettiengineering.com> wrote:
> 
>>> diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
>>> new file mode 100644
>>> index 0000000000..5b5648cc14
>>> --- /dev/null
>>> +++ b/configs/kontron_bl_imx8mm_defconfig
>>> @@ -0,0 +1,59 @@
>>> +# Architecture
>>> +BR2_aarch64=y
>>> +BR2_ARM_FPU_VFPV3=y
>>
>> i.MX8MM supports VFPv4-D16, so I would substitute this ^^^ with:
>> BR2_ARM_FPU_VFPV4D16
>>
>> This is to achieve the maximum performance.
> 
> Nope, that's not really how it works. VFPv3 is better than VFPv3-D16.
> Indeed VFPv3 means that the the FPU has 32 double precision registers,
> while VFPv3-D16 means that it has "only" 16 double precision registers.

I'm a bit confused. The datasheet[1] states at 1.4.1:
```
• Media Processing Engine (MPE) with NEON technology supporting the
Advanced Single Instruction Multiple Data architecture
• Floating Point Unit (FPU) with support of the VFPv4-D16 architecture
```
[1]: https://www.nxp.com/docs/en/data-sheet/IMX8MMCEC.pdf

So I expect it to only have VFPv4-D16. And also NEON, but we can't mix 
them up in Aarch64 as I know.

> So, if the i.MX8MM has only the VFPv3-D16, then indeed it should be
> chosen, because code compiled with VFPv3 may not work, as it might use
> too many double precision registers.
> 
> On the other hand, if the i.MX8MM has the full VFPv3, then
> BR2_ARM_FPU_VFPV3=y should be used.

It only has VFPv4-D16. I think I've explained myself bad. This is not to 
achieve maximum performance, simply datasheet states it only supports 
VFPv4-D16[1] and judging from this:
https://developer.arm.com/documentation/dui0472/h/CJADDCIF#:~:text=VFPv3%20has%2032%20double%2Dprecision,VFPv3%20with%20half%2Dprecision%20extensions.&text=VFPv4%20has%2032%20double%2Dprecision,to%20the%20features%20of%20VFPv3.

VFPv4 is retro-compatible with VFPv3, and I'd expect VFP4v4-D16 to be 
like that too. Is it possible that at the moment, by mistake, it worked 
without using more than 16 registers as VFPv3 that is retro-compatible 
with VFPv4-D16(maybe?).

> That being said, the gcc man page only documents vfpv3, vfpv3-d16-fp16,
> vfpv3-fp16 as extension for armv7-a. Interesting, would need to look
> into this.

Yes, but i.MX8MM is a cortex-A53, so armv8-a:
https://developer.arm.com/ip-products/processors/cortex-a/cortex-a53

that then is retro-compatible to armv7-a if in Aarch32.
But here we use it as BR2_aarch64, so armv8-a:
https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

and it lists:
```
-mfpu=name
This specifies what floating-point hardware (or hardware emulation) is 
available on the target. Permissible names are: ‘auto’, ‘vfpv2’, 
‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’, ‘vfpv3xd’, 
‘vfpv3xd-fp16’, ‘neon-vfpv3’, ‘neon-fp16’, ‘vfpv4’, ‘vfpv4-d16’, 
‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’, ‘fpv5-sp-d16’, ‘fp-armv8’, 
‘neon-fp-armv8’ and ‘crypto-neon-fp-armv8’. Note that ‘neon’ is an alias 
for ‘neon-vfpv3’ and ‘vfp’ is an alias for ‘vfpv2’.
```

So "vfpv4-d16" is possible.

Here I think we need vfpv4-d16 and not vfpv3 because of both DS and RM 
of i.MX8MM.

Does it sound good to you?

Thank you
Best regards
Heiko Thiery Jan. 18, 2022, 7:57 p.m. UTC | #6
Hi Giulio, Hi Thomas,


Am Di., 18. Jan. 2022 um 07:58 Uhr schrieb Giulio Benetti
<giulio.benetti@benettiengineering.com>:
>
> Hi Thomas,
>
> On 18/01/22 00:04, Thomas Petazzoni wrote:
> > On Mon, 17 Jan 2022 20:58:52 +0100
> > Giulio Benetti <giulio.benetti@benettiengineering.com> wrote:
> >
> >>> diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
> >>> new file mode 100644
> >>> index 0000000000..5b5648cc14
> >>> --- /dev/null
> >>> +++ b/configs/kontron_bl_imx8mm_defconfig
> >>> @@ -0,0 +1,59 @@
> >>> +# Architecture
> >>> +BR2_aarch64=y
> >>> +BR2_ARM_FPU_VFPV3=y
> >>
> >> i.MX8MM supports VFPv4-D16, so I would substitute this ^^^ with:
> >> BR2_ARM_FPU_VFPV4D16
> >>
> >> This is to achieve the maximum performance.
> >
> > Nope, that's not really how it works. VFPv3 is better than VFPv3-D16.
> > Indeed VFPv3 means that the the FPU has 32 double precision registers,
> > while VFPv3-D16 means that it has "only" 16 double precision registers.
>
> I'm a bit confused. The datasheet[1] states at 1.4.1:
> ```
> • Media Processing Engine (MPE) with NEON technology supporting the
> Advanced Single Instruction Multiple Data architecture
> • Floating Point Unit (FPU) with support of the VFPv4-D16 architecture
> ```
> [1]: https://www.nxp.com/docs/en/data-sheet/IMX8MMCEC.pdf
>
> So I expect it to only have VFPv4-D16. And also NEON, but we can't mix
> them up in Aarch64 as I know.
>
> > So, if the i.MX8MM has only the VFPv3-D16, then indeed it should be
> > chosen, because code compiled with VFPv3 may not work, as it might use
> > too many double precision registers.
> >
> > On the other hand, if the i.MX8MM has the full VFPv3, then
> > BR2_ARM_FPU_VFPV3=y should be used.
>
> It only has VFPv4-D16. I think I've explained myself bad. This is not to
> achieve maximum performance, simply datasheet states it only supports
> VFPv4-D16[1] and judging from this:
> https://developer.arm.com/documentation/dui0472/h/CJADDCIF#:~:text=VFPv3%20has%2032%20double%2Dprecision,VFPv3%20with%20half%2Dprecision%20extensions.&text=VFPv4%20has%2032%20double%2Dprecision,to%20the%20features%20of%20VFPv3.
>
> VFPv4 is retro-compatible with VFPv3, and I'd expect VFP4v4-D16 to be
> like that too. Is it possible that at the moment, by mistake, it worked
> without using more than 16 registers as VFPv3 that is retro-compatible
> with VFPv4-D16(maybe?).
>
> > That being said, the gcc man page only documents vfpv3, vfpv3-d16-fp16,
> > vfpv3-fp16 as extension for armv7-a. Interesting, would need to look
> > into this.
>
> Yes, but i.MX8MM is a cortex-A53, so armv8-a:
> https://developer.arm.com/ip-products/processors/cortex-a/cortex-a53
>
> that then is retro-compatible to armv7-a if in Aarch32.
> But here we use it as BR2_aarch64, so armv8-a:
> https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
>
> and it lists:
> ```
> -mfpu=name
> This specifies what floating-point hardware (or hardware emulation) is
> available on the target. Permissible names are: ‘auto’, ‘vfpv2’,
> ‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’, ‘vfpv3xd’,
> ‘vfpv3xd-fp16’, ‘neon-vfpv3’, ‘neon-fp16’, ‘vfpv4’, ‘vfpv4-d16’,
> ‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’, ‘fpv5-sp-d16’, ‘fp-armv8’,
> ‘neon-fp-armv8’ and ‘crypto-neon-fp-armv8’. Note that ‘neon’ is an alias
> for ‘neon-vfpv3’ and ‘vfp’ is an alias for ‘vfpv2’.
> ```
>
> So "vfpv4-d16" is possible.
>
> Here I think we need vfpv4-d16 and not vfpv3 because of both DS and RM
> of i.MX8MM.
>
> Does it sound good to you?

After following the discussion in IRC between Yann and Michael I am
sure that this setting cannot be used for the aarch64/cortex-A53 CPU.
The settings BR2_ARM_CPU_HAS_FPU, BR2_ARM_CPU_HAS_VFPV2,
BR2_ARM_CPU_HAS_VFPV3, BR2_ARM_CPU_HAS_VFPV4 and
BR2_ARM_CPU_HAS_FP_ARMV8 are set implicitly.

I probably took the setting from the freescale_imx8mmevk_defconfig,
which is then also not correct.

I then looked further at the other aarch64 defconfigs and saw that
there are more that set the FPU settings.

  #  grep aarch64 -A50 configs/* | grep FPU | wc -l
  28

I will remove this setting from the defconfig in this patch and also
for the other kontron defconfig.
Giulio Benetti Jan. 18, 2022, 8:40 p.m. UTC | #7
Hi Heiko, Thomas,

> Il giorno 18 gen 2022, alle ore 20:58, Heiko Thiery <heiko.thiery@gmail.com> ha scritto:
> 
> Hi Giulio, Hi Thomas,
> 
> 
>> Am Di., 18. Jan. 2022 um 07:58 Uhr schrieb Giulio Benetti
>> <giulio.benetti@benettiengineering.com>:
>> 
>> Hi Thomas,
>> 
>>> On 18/01/22 00:04, Thomas Petazzoni wrote:
>>> On Mon, 17 Jan 2022 20:58:52 +0100
>>> Giulio Benetti <giulio.benetti@benettiengineering.com> wrote:
>>> 
>>>>> diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
>>>>> new file mode 100644
>>>>> index 0000000000..5b5648cc14
>>>>> --- /dev/null
>>>>> +++ b/configs/kontron_bl_imx8mm_defconfig
>>>>> @@ -0,0 +1,59 @@
>>>>> +# Architecture
>>>>> +BR2_aarch64=y
>>>>> +BR2_ARM_FPU_VFPV3=y
>>>> 
>>>> i.MX8MM supports VFPv4-D16, so I would substitute this ^^^ with:
>>>> BR2_ARM_FPU_VFPV4D16
>>>> 
>>>> This is to achieve the maximum performance.
>>> 
>>> Nope, that's not really how it works. VFPv3 is better than VFPv3-D16.
>>> Indeed VFPv3 means that the the FPU has 32 double precision registers,
>>> while VFPv3-D16 means that it has "only" 16 double precision registers.
>> 
>> I'm a bit confused. The datasheet[1] states at 1.4.1:
>> ```
>> • Media Processing Engine (MPE) with NEON technology supporting the
>> Advanced Single Instruction Multiple Data architecture
>> • Floating Point Unit (FPU) with support of the VFPv4-D16 architecture
>> ```
>> [1]: https://www.nxp.com/docs/en/data-sheet/IMX8MMCEC.pdf
>> 
>> So I expect it to only have VFPv4-D16. And also NEON, but we can't mix
>> them up in Aarch64 as I know.
>> 
>>> So, if the i.MX8MM has only the VFPv3-D16, then indeed it should be
>>> chosen, because code compiled with VFPv3 may not work, as it might use
>>> too many double precision registers.
>>> 
>>> On the other hand, if the i.MX8MM has the full VFPv3, then
>>> BR2_ARM_FPU_VFPV3=y should be used.
>> 
>> It only has VFPv4-D16. I think I've explained myself bad. This is not to
>> achieve maximum performance, simply datasheet states it only supports
>> VFPv4-D16[1] and judging from this:
>> https://developer.arm.com/documentation/dui0472/h/CJADDCIF#:~:text=VFPv3%20has%2032%20double%2Dprecision,VFPv3%20with%20half%2Dprecision%20extensions.&text=VFPv4%20has%2032%20double%2Dprecision,to%20the%20features%20of%20VFPv3.
>> 
>> VFPv4 is retro-compatible with VFPv3, and I'd expect VFP4v4-D16 to be
>> like that too. Is it possible that at the moment, by mistake, it worked
>> without using more than 16 registers as VFPv3 that is retro-compatible
>> with VFPv4-D16(maybe?).
>> 
>>> That being said, the gcc man page only documents vfpv3, vfpv3-d16-fp16,
>>> vfpv3-fp16 as extension for armv7-a. Interesting, would need to look
>>> into this.
>> 
>> Yes, but i.MX8MM is a cortex-A53, so armv8-a:
>> https://developer.arm.com/ip-products/processors/cortex-a/cortex-a53
>> 
>> that then is retro-compatible to armv7-a if in Aarch32.
>> But here we use it as BR2_aarch64, so armv8-a:
>> https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
>> 
>> and it lists:
>> ```
>> -mfpu=name
>> This specifies what floating-point hardware (or hardware emulation) is
>> available on the target. Permissible names are: ‘auto’, ‘vfpv2’,
>> ‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’, ‘vfpv3xd’,
>> ‘vfpv3xd-fp16’, ‘neon-vfpv3’, ‘neon-fp16’, ‘vfpv4’, ‘vfpv4-d16’,
>> ‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’, ‘fpv5-sp-d16’, ‘fp-armv8’,
>> ‘neon-fp-armv8’ and ‘crypto-neon-fp-armv8’. Note that ‘neon’ is an alias
>> for ‘neon-vfpv3’ and ‘vfp’ is an alias for ‘vfpv2’.
>> ```
>> 
>> So "vfpv4-d16" is possible.
>> 
>> Here I think we need vfpv4-d16 and not vfpv3 because of both DS and RM
>> of i.MX8MM.
>> 
>> Does it sound good to you?
> 
> After following the discussion in IRC between Yann and Michael I am
> sure that this setting cannot be used for the aarch64/cortex-A53 CPU.
> The settings BR2_ARM_CPU_HAS_FPU, BR2_ARM_CPU_HAS_VFPV2,
> BR2_ARM_CPU_HAS_VFPV3, BR2_ARM_CPU_HAS_VFPV4 and
> BR2_ARM_CPU_HAS_FP_ARMV8 are set implicitly.

Yes, I was wrong and you point that fpu strategy falls back to BR2_ARM_FPU_FP_ARMV8 and it’s ok. 
But i.MX8MM supports NEON too, so I would go for setting BR2_ARM_FPU_NEON_FP_ARMV8,
because as pointed here[1] the armv8 neon now supports IEEE 754 floating point standard.

BUT I’ve found that gcc[2] points that:
‘’’

If the selected floating-point hardware includes the NEON extension (e.g. -mfpu=neon), note that floating-point operations are not generated by GCC’s auto-vectorization pass unless -funsafe-math-optimizations is also specified. This is because NEON hardware does not fully implement the IEEE 754 standard for floating-point arithmetic (in particular denormal values are treated as zero), so the use of NEON instructions may lead to a loss of precision.
‘’’

So I still can’t understand if it’s something core related or something gcc related. Does anyone have any more in-depth explanation?

Anyway I agree with Heiko to remove the fpu strategy in this defconfig.

Best regards
—-
Giulio Benetti
Benetti Engineering sas

[1]: https://developer.arm.com/architectures/instruction-sets/floating-point
[2]: https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

> 
> I probably took the setting from the freescale_imx8mmevk_defconfig,
> which is then also not correct.
> 
> I then looked further at the other aarch64 defconfigs and saw that
> there are more that set the FPU settings.
> 
>  #  grep aarch64 -A50 configs/* | grep FPU | wc -l
>  28
> 
> I will remove this setting from the defconfig in this patch and also
> for the other kontron defconfig.
> 
> -- 
> Heiko
Michael Walle Jan. 19, 2022, 9:01 a.m. UTC | #8
[please don't use html mails]

Am 2022-01-18 21:40, schrieb Giulio Benetti:

> After following the discussion in IRC between Yann and Michael I am
> sure that this setting cannot be used for the aarch64/cortex-A53 CPU.
> The settings BR2_ARM_CPU_HAS_FPU, BR2_ARM_CPU_HAS_VFPV2,
> BR2_ARM_CPU_HAS_VFPV3, BR2_ARM_CPU_HAS_VFPV4 and
> BR2_ARM_CPU_HAS_FP_ARMV8 are set implicitly.
> 
> Yes, I was wrong and you point that fpu strategy falls back to
> BR2_ARM_FPU_FP_ARMV8 and it’s ok.
> But i.MX8MM supports NEON too, so I would go for setting
> BR2_ARM_FPU_NEON_FP_ARMV8,
> because as pointed here[1] the armv8 neon now supports IEEE 754
> floating point standard.
> 
> BUT I’ve found that gcc[2] points that:
> ‘’’
> 
> If the selected floating-point hardware includes the NEON extension
> (e.g. -mfpu=neon), note that floating-point operations are not
> generated by GCC’s auto-vectorization pass unless
> -funsafe-math-optimizations is also specified. This is because NEON
> hardware does not fully implement the IEEE 754 standard for
> floating-point arithmetic (in particular denormal values are treated
> as zero), so the use of NEON instructions may lead to a loss of
> precision.
> ‘’’

That is for aarch32 mode. aarch64 doesn't have the -mfpu switch.
Instead the FPU support is either derived automatically or
through modifiers of the -mcpu switch.

-michael
Giulio Benetti Jan. 19, 2022, 9:05 a.m. UTC | #9
Hi Michael,

On 19/01/22 10:01, Michael Walle wrote:
> [please don't use html mails]

I know, sometimes I write from mobile and I can't use plain-text :-/

> Am 2022-01-18 21:40, schrieb Giulio Benetti:
> 
>> After following the discussion in IRC between Yann and Michael I am
>> sure that this setting cannot be used for the aarch64/cortex-A53 CPU.
>> The settings BR2_ARM_CPU_HAS_FPU, BR2_ARM_CPU_HAS_VFPV2,
>> BR2_ARM_CPU_HAS_VFPV3, BR2_ARM_CPU_HAS_VFPV4 and
>> BR2_ARM_CPU_HAS_FP_ARMV8 are set implicitly.
>>
>> Yes, I was wrong and you point that fpu strategy falls back to
>> BR2_ARM_FPU_FP_ARMV8 and it’s ok.
>> But i.MX8MM supports NEON too, so I would go for setting
>> BR2_ARM_FPU_NEON_FP_ARMV8,
>> because as pointed here[1] the armv8 neon now supports IEEE 754
>> floating point standard.
>>
>> BUT I’ve found that gcc[2] points that:
>> ‘’’
>>
>> If the selected floating-point hardware includes the NEON extension
>> (e.g. -mfpu=neon), note that floating-point operations are not
>> generated by GCC’s auto-vectorization pass unless
>> -funsafe-math-optimizations is also specified. This is because NEON
>> hardware does not fully implement the IEEE 754 standard for
>> floating-point arithmetic (in particular denormal values are treated
>> as zero), so the use of NEON instructions may lead to a loss of
>> precision.
>> ‘’’
> 
> That is for aarch32 mode. aarch64 doesn't have the -mfpu switch.
> Instead the FPU support is either derived automatically or
> through modifiers of the -mcpu switch.

Thank you for the explanation, indeed as talked in IRC I've found that 
under armv8-a there are only options for +simd or +crypto. This explains 
everything to me.

Kind regards!
Giulio Benetti Jan. 19, 2022, 6:23 p.m. UTC | #10
Hi Frieder, Heiko,

On 19/01/22 16:38, Frieder Schrempf wrote:
> Am 14.01.22 um 22:54 schrieb Heiko Thiery:
>> Hi Giulio,
>>
>> Am Fr., 14. Jan. 2022 um 22:37 Uhr schrieb Giulio Benetti
>> <giulio.benetti@benettiengineering.com>:
>>>
>>> Hi Heiko,
>>>
>>>> Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <heiko.thiery@gmail.com> ha scritto:
>>>>
>>>> The BL i.MX8M Mini is a baseboard that includes the SoM SL i.MX8M Mini.
>>>>
>>>> https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.kontron.com%2Fprodukte%2Fbaseboard-bl-i.mx8m-mini%2Fp158549&amp;data=04%7C01%7Cfrieder.schrempf%40kontron.de%7Cd7a266bb1dac478d7c4108d9d7a8795f%7C8c9d3c973fd941c8a2b1646f3942daf1%7C0%7C0%7C637777940856116418%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=0wA9otr%2FwIIm37TL3VoW3lj8Ef%2Fcr2L5Dtyr0rqbK%2BI%3D&amp;reserved=0
>>>>
>>>> Cc: Frieder Schrempf <frieder.schrempf@kontron.de>
>>>> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
>>>> ---
>>>> v2:
>>>> - switch to extlinux
>>>> - directly call genimage.sh
>>>>   - remove post-image.sh
>>>> - remove BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT
>>>> - add BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME
>>>>
>>>>
>>>> DEVELOPERS                                    |   2 +
>>>> board/kontron/bl-imx8mm/extlinux.conf         |   4 +
>>>> board/kontron/bl-imx8mm/genimage.cfg          |  18 ++
>>>> ...m-kontron-n801x-s-convert-options-to.patch |  28 ++
>>>> ...m-kontron-n801x-s-add-common-board-u.patch | 302 ++++++++++++++++++
>>>> board/kontron/bl-imx8mm/post-build.sh         |   7 +
>>>> board/kontron/bl-imx8mm/readme.txt            |  85 +++++
>>>> configs/kontron_bl_imx8mm_defconfig           |  59 ++++
>>>> 8 files changed, 505 insertions(+)
>>>> create mode 100644 board/kontron/bl-imx8mm/extlinux.conf
>>>> create mode 100644 board/kontron/bl-imx8mm/genimage.cfg
>>>> create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
>>>> create mode 100644 board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
>>>> create mode 100755 board/kontron/bl-imx8mm/post-build.sh
>>>> create mode 100644 board/kontron/bl-imx8mm/readme.txt
>>>> create mode 100644 configs/kontron_bl_imx8mm_defconfig
>>>>
>>>> diff --git a/DEVELOPERS b/DEVELOPERS
>>>> index c0bfde69da..93c5760489 100644
>>>> --- a/DEVELOPERS
>>>> +++ b/DEVELOPERS
>>>> @@ -1179,7 +1179,9 @@ F:    package/python-sip/
>>>> F:    package/uhd/
>>>>
>>>> N:    Heiko Thiery <heiko.thiery@gmail.com>
>>>> +F:    board/kontron/bl-imx8mm/
>>>> F:    board/kontron/pitx-imx8m/
>>>> +F:    configs/kontron_bl_imx8mm_defconfig
>>>> F:    configs/kontron_pitx_imx8m_defconfig
>>>> F:    package/altera-stapl/
>>>> F:    package/ipmitool/
>>>> diff --git a/board/kontron/bl-imx8mm/extlinux.conf b/board/kontron/bl-imx8mm/extlinux.conf
>>>> new file mode 100644
>>>> index 0000000000..d38f7f81b7
>>>> --- /dev/null
>>>> +++ b/board/kontron/bl-imx8mm/extlinux.conf
>>>> @@ -0,0 +1,4 @@
>>>> +label buildroot
>>>> +  kernel /boot/Image
>>>> +  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
>>>> +  append root=PARTUUID=%PARTUUID% rootwait rw
>>>> diff --git a/board/kontron/bl-imx8mm/genimage.cfg b/board/kontron/bl-imx8mm/genimage.cfg
>>>> new file mode 100644
>>>> index 0000000000..6c0ef69591
>>>> --- /dev/null
>>>> +++ b/board/kontron/bl-imx8mm/genimage.cfg
>>>> @@ -0,0 +1,18 @@
>>>> +image sdcard.img {
>>>> +    hdimage {
>>>> +        partition-table-type = "gpt"
>>>> +        gpt-location = 16K
>>>> +    }
>>>> +
>>>> +    partition imx-boot {
>>>> +        in-partition-table = "no"
>>>> +        image = "flash.bin"
>>>> +        offset = 33k
>>>
>>> I’ve missed V1 patch, here ^^^ please use capitol K letter.
>>> I still have to write the linter for genimage.cfg files :-/
>>
>> Indeed .. missed that. I will wait for some more comments and do a v3
>> with that fixed later.
>>
>> [snip]
>>
>>>> ++&i2c1 {
>>>> ++    u-boot,dm-spl;
>>>> ++    u-boot,dm-pre-reloc;
>>>> ++};
>>>> ++
>>>> ++&i2c2 {
>>>> ++    status = "okay";
>>>> ++    u-boot,dm-spl;
>>>> ++    u-boot,dm-pre-reloc;
>>>> ++};
>>>
>>> I don’t know the hardware of the board and it’s a bit off-topic,
>>> but do you really need 2 i2c channels before relocating uboot?
>>
>> Good catch.
>>
>> @Frieder: can you say something to that?
> 
> Hm, the I2C buses are used in SPL for configuring the PMIC and detecting
> the display, so the "u-boot,dm-spl" is correct. I'm not really sure at
> what time U-Boot proper probes the devices and if "u-boot,dm-pre-reloc"
> is needed or not.
> 

CONFIG_SPL_DM_PMIC_PCA9450 and CONFIG_DM_PMIC_PCA9450 are both enabled 
and you add uboot,dm-spl and uboot,dm-pre-reloc. What I expect is that 
PMIC is initialized in SPL and in u-boot pre-reloc. So I think that for 
i2c1 node uboot,dm-pre-reloc is useless but you need to keep uboot,dm-spl.

Same goes for i2c2 if you use it with ush(uboot shell) since you have 
CONFIG_CMD_I2C enabled. Most of all, i2c2, if it's only used with 
CMD_I2C you can remove both uboot,dm-spl and uboot,dm-pre-reloc because 
the CMD_I2C will be available only after u-boot is relocated, for 
example when ush console is sent out.

Of course this deserves a test.

Do you have any kind of jtag-debugger to check this? Or can you enable 
uboot log debugging? That way you will be sure of what is going on.

Anyway you could check if PMIC changed its default voltages to what 
you've programmed and you can also check if i2c2 is probed with i2c ush 
command.

Best regards
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index c0bfde69da..93c5760489 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1179,7 +1179,9 @@  F:	package/python-sip/
 F:	package/uhd/
 
 N:	Heiko Thiery <heiko.thiery@gmail.com>
+F:	board/kontron/bl-imx8mm/
 F:	board/kontron/pitx-imx8m/
+F:	configs/kontron_bl_imx8mm_defconfig
 F:	configs/kontron_pitx_imx8m_defconfig
 F:	package/altera-stapl/
 F:	package/ipmitool/
diff --git a/board/kontron/bl-imx8mm/extlinux.conf b/board/kontron/bl-imx8mm/extlinux.conf
new file mode 100644
index 0000000000..d38f7f81b7
--- /dev/null
+++ b/board/kontron/bl-imx8mm/extlinux.conf
@@ -0,0 +1,4 @@ 
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
diff --git a/board/kontron/bl-imx8mm/genimage.cfg b/board/kontron/bl-imx8mm/genimage.cfg
new file mode 100644
index 0000000000..6c0ef69591
--- /dev/null
+++ b/board/kontron/bl-imx8mm/genimage.cfg
@@ -0,0 +1,18 @@ 
+image sdcard.img {
+	hdimage {
+		partition-table-type = "gpt"
+		gpt-location = 16K
+	}
+
+	partition imx-boot {
+		in-partition-table = "no"
+		image = "flash.bin"
+		offset = 33k
+	}
+
+	partition rootfs {
+		image = "rootfs.ext4"
+		offset = 8M
+		partition-uuid = %PARTUUID%
+	}
+}
diff --git a/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch b/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
new file mode 100644
index 0000000000..ed088dd0f8
--- /dev/null
+++ b/board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch
@@ -0,0 +1,28 @@ 
+From 95a311af81cd47c44d3d6e3f717f06a06d8f3dfd Mon Sep 17 00:00:00 2001
+From: Heiko Thiery <heiko.thiery@gmail.com>
+Date: Mon, 10 Jan 2022 14:13:02 +0100
+Subject: [PATCH 1/2] imx: imx8mm: imx8mm-kontron-n801x-s: convert options to Kconfig
+
+CONFIG_SPL_MMC and CONFIG_SPL_SERIAL
+
+Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
+---
+ configs/kontron-sl-mx8mm_defconfig | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configs/kontron-sl-mx8mm_defconfig b/configs/kontron-sl-mx8mm_defconfig
+index 35d12fca32..940bf07a92 100644
+--- a/configs/kontron-sl-mx8mm_defconfig
++++ b/configs/kontron-sl-mx8mm_defconfig
+@@ -15,6 +15,8 @@ CONFIG_SPL_DM_SPI=y
+ CONFIG_DEFAULT_DEVICE_TREE="imx8mm-kontron-n801x-s"
+ CONFIG_SPL_TEXT_BASE=0x7E1000
+ CONFIG_TARGET_KONTRON_MX8MM=y
++CONFIG_SPL_MMC=y
++CONFIG_SPL_SERIAL=y
+ CONFIG_BOOTCOUNT_BOOTLIMIT=3
+ CONFIG_SPL=y
+ CONFIG_DISTRO_DEFAULTS=y
+-- 
+2.30.2
+
diff --git a/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch b/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
new file mode 100644
index 0000000000..3bc71325c6
--- /dev/null
+++ b/board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch
@@ -0,0 +1,302 @@ 
+From ef694c19c074333fd16589ec6ffef3e7ca895186 Mon Sep 17 00:00:00 2001
+From: Heiko Thiery <heiko.thiery@gmail.com>
+Date: Wed, 12 Jan 2022 08:44:36 +0100
+Subject: [PATCH 2/2] imx: imx8mm: imx8mm-kontron-n801x-s: add common board
+ u-boot.dtsi
+
+When using a board variant that selects the lvds specific dtb the
+*.u-boot.dtsi file will not be included. To have a lvds dtb specific
+u-boot.dtsi file move this part to a common board u-boot.dtsi file and
+include this in the board base u-boot.dtsi and create an additional one
+for the lvds variant.
+
+Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
+---
+ .../imx8mm-kontron-n801x-s-lvds-u-boot.dtsi   |   6 +
+ .../dts/imx8mm-kontron-n801x-s-u-boot.dtsi    | 124 +----------------
+ arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi | 128 ++++++++++++++++++
+ 3 files changed, 135 insertions(+), 123 deletions(-)
+ create mode 100644 arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
+ create mode 100644 arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
+
+diff --git a/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
+new file mode 100644
+index 0000000000..4bf75722bf
+--- /dev/null
++++ b/arch/arm/dts/imx8mm-kontron-n801x-s-lvds-u-boot.dtsi
+@@ -0,0 +1,6 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Copyright (C) 2019 Kontron Electronics GmbH
++ */
++
++#include "imx8mm-kontron-n801x-u-boot.dtsi"
+diff --git a/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
+index 22d18e6f1c..4bf75722bf 100644
+--- a/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
++++ b/arch/arm/dts/imx8mm-kontron-n801x-s-u-boot.dtsi
+@@ -3,126 +3,4 @@
+  * Copyright (C) 2019 Kontron Electronics GmbH
+  */
+ 
+-#include "imx8mm-u-boot.dtsi"
+-
+-/ {
+-	aliases {
+-		usb0 = &usbotg1;
+-		usb1 = &usbotg2;
+-	};
+-
+-	wdt-reboot {
+-		compatible = "wdt-reboot";
+-		wdt = <&wdog1>;
+-		u-boot,dm-spl;
+-	};
+-
+-	firmware {
+-		optee {
+-			compatible = "linaro,optee-tz";
+-			method = "smc";
+-		};
+-	};
+-};
+-
+-&fec1 {
+-	phy-mode = "rgmii-rxid";
+-};
+-
+-&i2c1 {
+-	u-boot,dm-spl;
+-	u-boot,dm-pre-reloc;
+-};
+-
+-&i2c2 {
+-	status = "okay";
+-	u-boot,dm-spl;
+-	u-boot,dm-pre-reloc;
+-};
+-
+-&pinctrl_ecspi1 {
+-	u-boot,dm-spl;
+-};
+-
+-&pinctrl_i2c1 {
+-	u-boot,dm-spl;
+-};
+-
+-&pinctrl_pmic {
+-	u-boot,dm-spl;
+-	fsl,pins = <
+-		MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0		0x141
+-		/* Disable Pullup for SD_VSEL */
+-		MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4		0x41
+-	>;
+-};
+-
+-&pinctrl_uart3 {
+-	u-boot,dm-spl;
+-	u-boot,dm-pre-reloc;
+-};
+-
+-&pinctrl_usdhc1 {
+-	u-boot,dm-spl;
+-};
+-
+-&pinctrl_usdhc1_100mhz {
+-	u-boot,dm-spl;
+-};
+-
+-&pinctrl_usdhc1_200mhz {
+-	u-boot,dm-spl;
+-};
+-
+-&pinctrl_usdhc2 {
+-	u-boot,dm-spl;
+-};
+-
+-&pca9450 {
+-	u-boot,dm-spl;
+-};
+-
+-&{/soc@0/bus@30800000/i2c@30a20000/pmic@25/regulators} {
+-	u-boot,dm-spl;
+-};
+-
+-&ecspi1 {
+-	u-boot,dm-spl;
+-};
+-
+-&gpio1 {
+-	u-boot,dm-spl;
+-};
+-
+-&gpio2 {
+-	u-boot,dm-spl;
+-};
+-
+-&gpio3 {
+-	u-boot,dm-spl;
+-};
+-
+-&gpio4 {
+-	u-boot,dm-spl;
+-};
+-
+-&gpio5 {
+-	u-boot,dm-spl;
+-};
+-
+-&uart3 {
+-	u-boot,dm-spl;
+-	u-boot,dm-pre-reloc;
+-};
+-
+-&usdhc1 {
+-	u-boot,dm-spl;
+-};
+-
+-&usdhc2 {
+-	u-boot,dm-spl;
+-};
+-
+-&wdog1 {
+-	u-boot,dm-spl;
+-};
++#include "imx8mm-kontron-n801x-u-boot.dtsi"
+diff --git a/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi b/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
+new file mode 100644
+index 0000000000..22d18e6f1c
+--- /dev/null
++++ b/arch/arm/dts/imx8mm-kontron-n801x-u-boot.dtsi
+@@ -0,0 +1,128 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Copyright (C) 2019 Kontron Electronics GmbH
++ */
++
++#include "imx8mm-u-boot.dtsi"
++
++/ {
++	aliases {
++		usb0 = &usbotg1;
++		usb1 = &usbotg2;
++	};
++
++	wdt-reboot {
++		compatible = "wdt-reboot";
++		wdt = <&wdog1>;
++		u-boot,dm-spl;
++	};
++
++	firmware {
++		optee {
++			compatible = "linaro,optee-tz";
++			method = "smc";
++		};
++	};
++};
++
++&fec1 {
++	phy-mode = "rgmii-rxid";
++};
++
++&i2c1 {
++	u-boot,dm-spl;
++	u-boot,dm-pre-reloc;
++};
++
++&i2c2 {
++	status = "okay";
++	u-boot,dm-spl;
++	u-boot,dm-pre-reloc;
++};
++
++&pinctrl_ecspi1 {
++	u-boot,dm-spl;
++};
++
++&pinctrl_i2c1 {
++	u-boot,dm-spl;
++};
++
++&pinctrl_pmic {
++	u-boot,dm-spl;
++	fsl,pins = <
++		MX8MM_IOMUXC_GPIO1_IO00_GPIO1_IO0		0x141
++		/* Disable Pullup for SD_VSEL */
++		MX8MM_IOMUXC_GPIO1_IO04_GPIO1_IO4		0x41
++	>;
++};
++
++&pinctrl_uart3 {
++	u-boot,dm-spl;
++	u-boot,dm-pre-reloc;
++};
++
++&pinctrl_usdhc1 {
++	u-boot,dm-spl;
++};
++
++&pinctrl_usdhc1_100mhz {
++	u-boot,dm-spl;
++};
++
++&pinctrl_usdhc1_200mhz {
++	u-boot,dm-spl;
++};
++
++&pinctrl_usdhc2 {
++	u-boot,dm-spl;
++};
++
++&pca9450 {
++	u-boot,dm-spl;
++};
++
++&{/soc@0/bus@30800000/i2c@30a20000/pmic@25/regulators} {
++	u-boot,dm-spl;
++};
++
++&ecspi1 {
++	u-boot,dm-spl;
++};
++
++&gpio1 {
++	u-boot,dm-spl;
++};
++
++&gpio2 {
++	u-boot,dm-spl;
++};
++
++&gpio3 {
++	u-boot,dm-spl;
++};
++
++&gpio4 {
++	u-boot,dm-spl;
++};
++
++&gpio5 {
++	u-boot,dm-spl;
++};
++
++&uart3 {
++	u-boot,dm-spl;
++	u-boot,dm-pre-reloc;
++};
++
++&usdhc1 {
++	u-boot,dm-spl;
++};
++
++&usdhc2 {
++	u-boot,dm-spl;
++};
++
++&wdog1 {
++	u-boot,dm-spl;
++};
+-- 
+2.30.2
+
diff --git a/board/kontron/bl-imx8mm/post-build.sh b/board/kontron/bl-imx8mm/post-build.sh
new file mode 100755
index 0000000000..bf8861f6a9
--- /dev/null
+++ b/board/kontron/bl-imx8mm/post-build.sh
@@ -0,0 +1,7 @@ 
+#!/bin/sh
+BOARD_DIR="$(dirname $0)"
+PARTUUID="$($HOST_DIR/bin/uuidgen)"
+
+install -d "$TARGET_DIR/boot/extlinux/"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/extlinux.conf" > "$TARGET_DIR/boot/extlinux/extlinux.conf"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/genimage.cfg" > "$BINARIES_DIR/genimage.cfg"
diff --git a/board/kontron/bl-imx8mm/readme.txt b/board/kontron/bl-imx8mm/readme.txt
new file mode 100644
index 0000000000..df47ba5174
--- /dev/null
+++ b/board/kontron/bl-imx8mm/readme.txt
@@ -0,0 +1,85 @@ 
+Kontron BL i.MX8M Mini
+======================
+
+https://www.kontron.com/produkte/baseboard-bl-i.mx8m-mini/p158549
+
+
+How to build it
+===============
+
+Configure buildroot:
+
+  $ make kontron_bl_imx8mm_defconfig
+
+Change settings to fit your needs (optional):
+
+  $ make menuconfig
+
+Compile everything and build the rootfs image:
+
+  $ make
+
+
+Result of the build
+===================
+
+After building, the output/images directory contains:
+
+  output/images/
+    ├── bl31.bin
+    ├── boot.scr
+    ├── ddr_fw.bin
+    ├── flash.bin
+    ├── Image
+    ├── imx8mm-kontron-n801x-s.dtb
+    ├── lpddr4_pmu_train_1d_dmem_201904.bin
+    ├── lpddr4_pmu_train_1d_dmem_202006.bin
+    ├── lpddr4_pmu_train_1d_dmem.bin
+    ├── lpddr4_pmu_train_1d_dmem_pad.bin
+    ├── lpddr4_pmu_train_1d_fw.bin
+    ├── lpddr4_pmu_train_1d_imem_201904.bin
+    ├── lpddr4_pmu_train_1d_imem_202006.bin
+    ├── lpddr4_pmu_train_1d_imem.bin
+    ├── lpddr4_pmu_train_1d_imem_pad.bin
+    ├── lpddr4_pmu_train_2d_dmem_201904.bin
+    ├── lpddr4_pmu_train_2d_dmem_202006.bin
+    ├── lpddr4_pmu_train_2d_dmem.bin
+    ├── lpddr4_pmu_train_2d_dmem_pad.bin
+    ├── lpddr4_pmu_train_2d_fw.bin
+    ├── lpddr4_pmu_train_2d_imem_201904.bin
+    ├── lpddr4_pmu_train_2d_imem_202006.bin
+    ├── lpddr4_pmu_train_2d_imem.bin
+    ├── lpddr4_pmu_train_2d_imem_pad.bin
+    ├── lpddr4_pmu_train_fw.bin
+    ├── rootfs.ext2
+    ├── rootfs.ext4 -> rootfs.ext2
+    ├── rootfs.tar
+    ├── sdcard.img
+    ├── u-boot.bin
+    └── u-boot-spl.bin
+
+
+Flashing the SD card image
+==========================
+
+To install the image on a SDCard simply copy sdcard.img to the storage (e.g. SD, eMMC)
+
+  $ sudo dd if=output/images/sdcard.img of=<your-sd-device>
+
+
+Preparing the board
+===================
+
+ * Connect a serial line to the board
+ * Insert the SD card
+ * Power-up the board
+
+
+Booting the board
+=================
+
+By default the bootloader will search for the first valid image, starting
+with the internal eMMC. To make sure the bootloader loads bootscript from
+the correct location (SD card) set the boot_targets environment variable:
+
+  $ setenv boot_targets mmc1
diff --git a/configs/kontron_bl_imx8mm_defconfig b/configs/kontron_bl_imx8mm_defconfig
new file mode 100644
index 0000000000..5b5648cc14
--- /dev/null
+++ b/configs/kontron_bl_imx8mm_defconfig
@@ -0,0 +1,59 @@ 
+# Architecture
+BR2_aarch64=y
+BR2_ARM_FPU_VFPV3=y
+
+BR2_GLOBAL_PATCH_DIR="board/kontron/bl-imx8mm/patches"
+
+# System
+BR2_TARGET_GENERIC_GETTY_PORT="ttymxc2"
+
+# Kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.16"
+BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mm-kontron-n801x-s"
+BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_16=y
+
+BR2_PACKAGE_FREESCALE_IMX=y
+BR2_PACKAGE_FREESCALE_IMX_PLATFORM_IMX8MM=y
+BR2_PACKAGE_FIRMWARE_IMX=y
+
+# Filesystem / image
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
+
+# Bootloader
+BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.6"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="imx8mm"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES="IMX_BOOT_UART_BASE=0x30880000"
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2022.01"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="kontron-sl-mx8mm"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+BR2_TARGET_UBOOT_NEEDS_PYTHON3=y
+BR2_TARGET_UBOOT_NEEDS_PYLIBFDT=y
+BR2_TARGET_UBOOT_NEEDS_ATF_BL31=y
+BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN=y
+BR2_TARGET_UBOOT_NEEDS_IMX_FIRMWARE=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="flash.bin"
+BR2_TARGET_UBOOT_SPL=y
+
+# Required host tools to create the SD/eMMC image
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/kontron/bl-imx8mm/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BINARIES_DIR)/genimage.cfg"
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS=y