Skip to contentSkip to conversation

configs/kontron_bl_imx8mm_defconfig: new defconfig

PATCH Superseded Heiko Thiery 4 participants 11 messages Jan 14, 2022 – Jan 19, 2022 1 message not in the archive Arm i.MX and Layerscape

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 configs/kontron_bl_imx8mm_defconfig: new defconfig

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 <[email protected]>

---
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
DEVELOPERS +2 -0
index c0bfde69da..93c5760489 100644
@@ -1179,7 +1179,9 @@ F:	package/python-sip/
 F:	package/uhd/
 
 N:	Heiko Thiery <[email protected]>
+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/
board/kontron/bl-imx8mm/extlinux.conf new file +4 -0
new file mode 100644
index 0000000000..d38f7f81b7
@@ -0,0 +1,4 @@
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
board/kontron/bl-imx8mm/genimage.cfg new file +18 -0
new file mode 100644
index 0000000000..6c0ef69591
@@ -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%
+	}
+}
board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch new file +28 -0
new file mode 100644
index 0000000000..ed088dd0f8
@@ -0,0 +1,28 @@
+From 95a311af81cd47c44d3d6e3f717f06a06d8f3dfd Mon Sep 17 00:00:00 2001
+From: Heiko Thiery <[email protected]>
+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 <[email protected]>
+---
+ 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
+
board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch new file +302 -0

302 lines not on this page · raw message

board/kontron/bl-imx8mm/post-build.sh new file +7 -0
new file mode 100755
index 0000000000..bf8861f6a9
@@ -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"
board/kontron/bl-imx8mm/readme.txt new file +85 -0

85 lines not on this page · raw message

configs/kontron_bl_imx8mm_defconfig new file +59 -0

59 lines not on this page · raw message

Signature · 6 lines
2.30.2

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#1 lore raw

Hi Heiko,

Quoted 64 lines

Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <[email protected]> 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 <[email protected]>

---
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

DEVELOPERS +0 -0
index c0bfde69da..93c5760489 100644
@@ -1179,7 +1179,9 @@ F:    package/python-sip/

F: package/uhd/

N: Heiko Thiery <[email protected]>
+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/
board/kontron/bl-imx8mm/extlinux.conf new file +4 -0
new file mode 100644
index 0000000000..d38f7f81b7
@@ -0,0 +1,4 @@
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
board/kontron/bl-imx8mm/genimage.cfg new file +0 -0
new file mode 100644
index 0000000000..6c0ef69591

board/kontron/bl-imx8mm/genimage.cfg line 10

Quoted 10 lines
board/kontron/bl-imx8mm/genimage.cfg new file +10 -0
@@ -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 :-/

Quoted 250 lines
board/kontron/bl-imx8mm/genimage.cfg new file +8 -0
+    }
+
+    partition rootfs {
+        image = "rootfs.ext4"
+        offset = 8M
+        partition-uuid = %PARTUUID%
+    }
+}
board/kontron/bl-imx8mm/patches/uboot/0001-imx-imx8mm-imx8mm-kontron-n801x-s-convert-options-to.patch new file +28 -0
new file mode 100644
index 0000000000..ed088dd0f8
@@ -0,0 +1,28 @@
+From 95a311af81cd47c44d3d6e3f717f06a06d8f3dfd Mon Sep 17 00:00:00 2001
+From: Heiko Thiery <[email protected]>
+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 <[email protected]>
+---
+ 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
+
board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch new file +202 -0
new file mode 100644
index 0000000000..3bc71325c6
@@ -0,0 +1,302 @@
+From ef694c19c074333fd16589ec6ffef3e7ca895186 Mon Sep 17 00:00:00 2001
+From: Heiko Thiery <[email protected]>
+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 <[email protected]>
+---
+ .../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";
++};
++

board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch line 212

Quoted 10 lines
board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch new file +10 -0
++&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

Quoted 266 lines
board/kontron/bl-imx8mm/patches/uboot/0002-imx-imx8mm-imx8mm-kontron-n801x-s-add-common-board-u.patch new file +90 -0
++
++&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
+
board/kontron/bl-imx8mm/post-build.sh new file +7 -0
new file mode 100755
index 0000000000..bf8861f6a9
@@ -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"
board/kontron/bl-imx8mm/readme.txt new file +85 -0
new file mode 100644
index 0000000000..df47ba5174
@@ -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
configs/kontron_bl_imx8mm_defconfig new file +59 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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
Signature · 6 lines
2.30.2

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

#2 lore raw

Hi Giulio,

Am Fr., 14. Jan. 2022 um 22:37 Uhr schrieb Giulio Benetti <[email protected]>:

Quoted 72 lines

Hi Heiko,

Quoted 69 lines

Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <[email protected]> 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 <[email protected]>

---
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

DEVELOPERS +0 -0
index c0bfde69da..93c5760489 100644
@@ -1179,7 +1179,9 @@ F:    package/python-sip/

F: package/uhd/

N: Heiko Thiery <[email protected]>
+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/
board/kontron/bl-imx8mm/extlinux.conf new file +4 -0
new file mode 100644
index 0000000000..d38f7f81b7
@@ -0,0 +1,4 @@
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
board/kontron/bl-imx8mm/genimage.cfg new file +5 -0
new file mode 100644
index 0000000000..6c0ef69591
@@ -0,0 +1,18 @@
+image sdcard.img {
+    hdimage {
+        partition-table-type = "gpt"
+        gpt-location = 16K
+    }
Quoted 8 lines

board/kontron/bl-imx8mm/genimage.cfg line 10

Quoted 5 lines
board/kontron/bl-imx8mm/genimage.cfg new file +5 -0
+
+    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]

Quoted 11 lines

board/kontron/bl-imx8mm/genimage.cfg

Quoted 10 lines
board/kontron/bl-imx8mm/genimage.cfg new file +10 -0
++&i2c1 {
++    u-boot,dm-spl;
++    u-boot,dm-pre-reloc;
++};
++
++&i2c2 {
++    status = "okay";
++    u-boot,dm-spl;
++    u-boot,dm-pre-reloc;
++};
Quoted 2 lines

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?

Signature · 5 lines
Heiko
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw

Hi Frieder, Heiko,

Quoted 105 lines · Frieder Schrempf

Am 14.01.22 um 22:54 schrieb Heiko Thiery:

Quoted 104 lines

Hi Giulio,

Am Fr., 14. Jan. 2022 um 22:37 Uhr schrieb Giulio Benetti <[email protected]>:

Quoted 72 lines

Hi Heiko,

Quoted 69 lines

Il giorno 14 gen 2022, alle ore 22:17, Heiko Thiery <[email protected]> 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 <[email protected]>

---
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

DEVELOPERS +0 -0
index c0bfde69da..93c5760489 100644
@@ -1179,7 +1179,9 @@ F:    package/python-sip/

F: package/uhd/

N: Heiko Thiery <[email protected]>
+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/
board/kontron/bl-imx8mm/extlinux.conf new file +4 -0
new file mode 100644
index 0000000000..d38f7f81b7
@@ -0,0 +1,4 @@
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mm-kontron-n801x-s.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
board/kontron/bl-imx8mm/genimage.cfg new file +5 -0
new file mode 100644
index 0000000000..6c0ef69591
@@ -0,0 +1,18 @@
+image sdcard.img {
+    hdimage {
+        partition-table-type = "gpt"
+        gpt-location = 16K
+    }
Quoted 8 lines

board/kontron/bl-imx8mm/genimage.cfg line 10

Quoted 5 lines
board/kontron/bl-imx8mm/genimage.cfg new file +5 -0
+
+    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]

Quoted 13 lines

board/kontron/bl-imx8mm/genimage.cfg

Quoted 10 lines
board/kontron/bl-imx8mm/genimage.cfg new file +10 -0
++&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?

Quoted 9 lines
Quoted 3 lines

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

Signature · 6 lines
Giulio Benetti
Benetti Engineering sas
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#5 lore raw
In reply to Heiko Thiery

Hi Heiko,

I've missed one thing below,

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

[SNIP]

configs/kontron_bl_imx8mm_defconfig line 3

Quoted 9 lines
configs/kontron_bl_imx8mm_defconfig new file +3 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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!

Signature · 2 lines
Giulio Benetti
Benetti Engineering sas
Quoted 47 lines
configs/kontron_bl_imx8mm_defconfig new file +46 -0
+
+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

configs/kontron_bl_imx8mm_defconfig line 59

Quoted 10 lines
configs/kontron_bl_imx8mm_defconfig new file +10 -0
+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

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

#6 lore raw
Quoted 13 lines · On Mon, 17 Jan 2022 20:58:52 +0100 Giulio Benetti…

configs/kontron_bl_imx8mm_defconfig line 3

Quoted 9 lines
configs/kontron_bl_imx8mm_defconfig new file +3 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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

Quoted 1 line

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

Signature · 7 lines
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#7 lore raw

Hi Thomas,

Quoted 16 lines · Thomas Petazzoni
Quoted 13 lines · On Mon, 17 Jan 2022 20:58:52 +0100 Giulio Benetti…

configs/kontron_bl_imx8mm_defconfig line 3

Quoted 9 lines
configs/kontron_bl_imx8mm_defconfig new file +3 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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

Quoted 5 lines
Quoted 1 line

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.

Quoted 6 lines

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?).

Quoted 3 lines

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

Signature · 6 lines
Giulio Benetti
Benetti Engineering sas
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#8 lore raw

Hi Giulio, Hi Thomas,

Am Di., 18. Jan. 2022 um 07:58 Uhr schrieb Giulio Benetti <[email protected]>:

Quoted 77 lines

Hi Thomas,

Quoted 16 lines · Thomas Petazzoni
Quoted 13 lines · On Mon, 17 Jan 2022 20:58:52 +0100 Giulio Benetti…

configs/kontron_bl_imx8mm_defconfig line 3

Quoted 9 lines
configs/kontron_bl_imx8mm_defconfig new file +3 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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

Quoted 5 lines
Quoted 1 line

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.

Quoted 6 lines

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?).

Quoted 3 lines

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’.
```
Quoted 6 lines

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.

Signature · 5 lines
Heiko
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot
#9 lore raw

Hi Heiko, Thomas,

Quoted 89 lines

Il giorno 18 gen 2022, alle ore 20:58, Heiko Thiery <[email protected]> ha scritto:

Hi Giulio, Hi Thomas,

Quoted 84 lines

Am Di., 18. Jan. 2022 um 07:58 Uhr schrieb Giulio Benetti <[email protected]>:

Hi Thomas,

Quoted 17 lines · Thomas Petazzoni
Quoted 13 lines · On Mon, 17 Jan 2022 20:58:52 +0100 Giulio Benetti…

configs/kontron_bl_imx8mm_defconfig line 3

Quoted 9 lines
configs/kontron_bl_imx8mm_defconfig new file +3 -0
new file mode 100644
index 0000000000..5b5648cc14
@@ -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

Quoted 5 lines
Quoted 1 line

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.

Quoted 6 lines

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?).

Quoted 3 lines

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.

Quoted 7 lines
Quoted 1 line

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

Quoted 4 lines

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

Quoted 11 lines

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.

Signature · 1 line
Heiko

_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

#10 lore raw

[please don't use html mails]

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

Quoted 16 lines

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:
‘’’

Quoted 9 lines

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
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot

#11 lore raw

Hi Michael,

Quoted 1 line · Michael Walle

[please don't use html mails]

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

Quoted 28 lines

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

Quoted 16 lines

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:
‘’’

Quoted 9 lines

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.
‘’’

Quoted 3 lines

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!

Signature · 6 lines
Giulio Benetti
Benetti Engineering sas
_______________________________________________
buildroot mailing list
[email protected]
https://lists.buildroot.org/mailman/listinfo/buildroot