diff mbox

board: add support for Freescale i.MX6UL Evaluation Kit

Message ID 1453300220-29113-1-git-send-email-julien.boibessot@free.fr
State Changes Requested
Headers show

Commit Message

Julien Boibessot Jan. 20, 2016, 2:30 p.m. UTC
From: Julien BOIBESSOT <julien.boibessot@armadeus.com>

Signed-off-by: Julien BOIBESSOT <julien.boibessot@armadeus.com>
---
 board/freescale/imx6ulevk/create-boot-sd.sh | 92 +++++++++++++++++++++++++++++
 board/freescale/imx6ulevk/readme.txt        | 58 ++++++++++++++++++
 configs/freescale_imx6ulevk_defconfig       | 31 ++++++++++
 3 files changed, 181 insertions(+)
 create mode 100755 board/freescale/imx6ulevk/create-boot-sd.sh
 create mode 100644 board/freescale/imx6ulevk/readme.txt
 create mode 100644 configs/freescale_imx6ulevk_defconfig

Comments

Thomas Petazzoni Jan. 20, 2016, 8:10 p.m. UTC | #1
Julien,

Thanks for this contribution!

On Wed, 20 Jan 2016 15:30:20 +0100, julien.boibessot@free.fr wrote:

> diff --git a/board/freescale/imx6ulevk/create-boot-sd.sh b/board/freescale/imx6ulevk/create-boot-sd.sh
> new file mode 100755
> index 0000000..b3c47ae
> --- /dev/null
> +++ b/board/freescale/imx6ulevk/create-boot-sd.sh

Could you instead use genimage rather than providing a script to create
the SD card contents ?

You can look at the following examples:

board/cubietech/cubieboard2/genimage.cfg
board/via/imx6_vab820/genimage.cfg
board/intel/galileo/genimage.cfg
board/raspberrypi/genimage-raspberrypi.cfg
board/raspberrypi/genimage-raspberrypi2.cfg
board/orangepi/orangepipc/genimage.cfg
board/wandboard/genimage.cfg

The wandboard one should be particularly useful, since it's also an i.MX6 board.


> diff --git a/configs/freescale_imx6ulevk_defconfig b/configs/freescale_imx6ulevk_defconfig
> new file mode 100644
> index 0000000..7ba5e7b
> --- /dev/null
> +++ b/configs/freescale_imx6ulevk_defconfig
> @@ -0,0 +1,31 @@
> +# architecture
> +BR2_arm=y
> +BR2_cortex_a7=y
> +BR2_ARM_EABI=y

Why ? Any reason to use EABI over EABIhf, which is now the default in
Buildroot for Cortex-A processors ?

> +BR2_ARM_FPU_NEON=y
> +
> +# toolchain
> +BR2_KERNEL_HEADERS_VERSION=y
> +BR2_DEFAULT_KERNEL_VERSION="3.14.28"
> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_14=y
> +
> +# system
> +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0"
> +
> +# kernel
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_GIT=y
> +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://git.freescale.com/imx/linux-2.6-imx.git"
> +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="imx_3.14.38_6ul_ga"
> +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7"
> +BR2_LINUX_KERNEL_ZIMAGE=y
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-14x14-evk"
> +
> +# bootloader
> +BR2_TARGET_UBOOT=y
> +BR2_TARGET_UBOOT_BOARDNAME="mx6ul_14x14_evk"
> +BR2_TARGET_UBOOT_CUSTOM_GIT=y
> +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="git://git.freescale.com/imx/uboot-imx.git"
> +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="imx_v2015.04_3.14.38_6ul_ga"
> +BR2_TARGET_UBOOT_FORMAT_IMX=y

The rest looks good to me. Thanks a lot!

Thomas
Julien Boibessot Jan. 21, 2016, 11:40 a.m. UTC | #2
Hello Thomas,

On 20/01/2016 21:10, Thomas Petazzoni wrote:
> Julien,
>
> Thanks for this contribution!

you're welcome ;-)

>
> On Wed, 20 Jan 2016 15:30:20 +0100, julien.boibessot@free.fr wrote:
>
>> diff --git a/board/freescale/imx6ulevk/create-boot-sd.sh b/board/freescale/imx6ulevk/create-boot-sd.sh
>> new file mode 100755
>> index 0000000..b3c47ae
>> --- /dev/null
>> +++ b/board/freescale/imx6ulevk/create-boot-sd.sh
> Could you instead use genimage rather than providing a script to create
> the SD card contents ?
>
> You can look at the following examples:
>
> board/cubietech/cubieboard2/genimage.cfg
> board/via/imx6_vab820/genimage.cfg
> board/intel/galileo/genimage.cfg
> board/raspberrypi/genimage-raspberrypi.cfg
> board/raspberrypi/genimage-raspberrypi2.cfg
> board/orangepi/orangepipc/genimage.cfg
> board/wandboard/genimage.cfg
>
> The wandboard one should be particularly useful, since it's also an i.MX6 board.

I first started to use genimage, yes, but as I wanted to mimic Freescale
microSD partitionning I was stucked by the fact that genimage
(apparently) doesn't handle VFAT partitions. Indeed i.MX6UL microSD
Freescale's format is:
* 1MB free
* U-Boot
* VFAT partition starting at offset 8M to store kernel and dtbs (size 16MB)
* EXT2 rootfs on the remaining space.

So I ended up in using i.XM28EVK way of doing
(board/freescale/imx28evk/create-boot-sd.sh).
Do you agree ?

>
>
>> diff --git a/configs/freescale_imx6ulevk_defconfig b/configs/freescale_imx6ulevk_defconfig
>> new file mode 100644
>> index 0000000..7ba5e7b
>> --- /dev/null
>> +++ b/configs/freescale_imx6ulevk_defconfig
>> @@ -0,0 +1,31 @@
>> +# architecture
>> +BR2_arm=y
>> +BR2_cortex_a7=y
>> +BR2_ARM_EABI=y
> Why ? Any reason to use EABI over EABIhf, which is now the default in
> Buildroot for Cortex-A processors ?

Well i.MX6UL has no VFPU, only a NEON, so I thought it was a good idea,
no ? :-)

Regards,
Julien


>
>> +BR2_ARM_FPU_NEON=y
>> +
>> +# toolchain
>> +BR2_KERNEL_HEADERS_VERSION=y
>> +BR2_DEFAULT_KERNEL_VERSION="3.14.28"
>> +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_14=y
>> +
>> +# system
>> +BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0"
>> +
>> +# kernel
>> +BR2_LINUX_KERNEL=y
>> +BR2_LINUX_KERNEL_CUSTOM_GIT=y
>> +BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://git.freescale.com/imx/linux-2.6-imx.git"
>> +BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="imx_3.14.38_6ul_ga"
>> +BR2_LINUX_KERNEL_DEFCONFIG="imx_v7"
>> +BR2_LINUX_KERNEL_ZIMAGE=y
>> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
>> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-14x14-evk"
>> +
>> +# bootloader
>> +BR2_TARGET_UBOOT=y
>> +BR2_TARGET_UBOOT_BOARDNAME="mx6ul_14x14_evk"
>> +BR2_TARGET_UBOOT_CUSTOM_GIT=y
>> +BR2_TARGET_UBOOT_CUSTOM_REPO_URL="git://git.freescale.com/imx/uboot-imx.git"
>> +BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="imx_v2015.04_3.14.38_6ul_ga"
>> +BR2_TARGET_UBOOT_FORMAT_IMX=y
> The rest looks good to me. Thanks a lot!
>
> Thomas
Thomas Petazzoni Jan. 21, 2016, 12:32 p.m. UTC | #3
Julien,

On Thu, 21 Jan 2016 12:40:39 +0100, Julien Boibessot wrote:

> 
> I first started to use genimage, yes, but as I wanted to mimic Freescale
> microSD partitionning I was stucked by the fact that genimage
> (apparently) doesn't handle VFAT partitions. Indeed i.MX6UL microSD
> Freescale's format is:
> * 1MB free
> * U-Boot
> * VFAT partition starting at offset 8M to store kernel and dtbs (size 16MB)
> * EXT2 rootfs on the remaining space.
> 
> So I ended up in using i.XM28EVK way of doing
> (board/freescale/imx28evk/create-boot-sd.sh).
> Do you agree ?

genimage is perfectly capable of creating a vfat partition, see
board/raspberrypi/genimage-raspberrypi.cfg for an example.

> > Why ? Any reason to use EABI over EABIhf, which is now the default in
> > Buildroot for Cortex-A processors ?
> 
> Well i.MX6UL has no VFPU, only a NEON, so I thought it was a good idea,
> no ? :-)

What is your source for this information, because it seems to be wrong.
According to ARM
(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0463f/index.html):

"""
The Cortex-A7 MPCore processor implements the ARMv7-A architecture with
the following architecture extensions:
[...]
 - Vector Floating-Point version 4 (VFPv4) architecture extension for
   floating-point computation that is fully compliant with the IEEE 754
   standard.
"""

So, the Cortex-A7 (which is the core used in the i.MX6UL) has a
mandatory VFPv4 unit.

Also, according to Freescale
(http://cache.nxp.com/files/32bit/doc/fact_sheet/IMX6SRSFS.pdf), in
the column for i.MX6UL:

"""
128 KB L2 cache, NEON™, VFP, TrustZone®
"""

So, please use BR2_EABIHF, and improve your systems by using hard-float
instead of soft-float :-)

Best regards,

Thomas
Julien Boibessot Jan. 21, 2016, 2:02 p.m. UTC | #4
Thomas,

On 21/01/2016 13:32, Thomas Petazzoni wrote:
> Julien,
>
> On Thu, 21 Jan 2016 12:40:39 +0100, Julien Boibessot wrote:
>
>> I first started to use genimage, yes, but as I wanted to mimic Freescale
>> microSD partitionning I was stucked by the fact that genimage
>> (apparently) doesn't handle VFAT partitions. Indeed i.MX6UL microSD
>> Freescale's format is:
>> * 1MB free
>> * U-Boot
>> * VFAT partition starting at offset 8M to store kernel and dtbs (size 16MB)
>> * EXT2 rootfs on the remaining space.
>>
>> So I ended up in using i.XM28EVK way of doing
>> (board/freescale/imx28evk/create-boot-sd.sh).
>> Do you agree ?
> genimage is perfectly capable of creating a vfat partition, see
> board/raspberrypi/genimage-raspberrypi.cfg for an example.

cool ! Is that new ?
I will adapt my patch accordingly.

>
>>> Why ? Any reason to use EABI over EABIhf, which is now the default in
>>> Buildroot for Cortex-A processors ?
>> Well i.MX6UL has no VFPU, only a NEON, so I thought it was a good idea,
>> no ? :-)
> What is your source for this information, because it seems to be wrong.

Well I was relying on Freescale/NXP fact sheets at:
   
http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/i.mx-applications-processors-based-on-arm-cores/i.mx-6-processors/i.mx6qp/i.mx-6ultralite-processor-low-power-secure-arm-cortex-a7-core:i.MX6UL

and didn't dig more than that. My fault !

> According to ARM
> (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0463f/index.html):
>
> """
> The Cortex-A7 MPCore processor implements the ARMv7-A architecture with
> the following architecture extensions:
> [...]
>  - Vector Floating-Point version 4 (VFPv4) architecture extension for
>    floating-point computation that is fully compliant with the IEEE 754
>    standard.
> """
>
> So, the Cortex-A7 (which is the core used in the i.MX6UL) has a
> mandatory VFPv4 unit.
>
> Also, according to Freescale
> (http://cache.nxp.com/files/32bit/doc/fact_sheet/IMX6SRSFS.pdf), in
> the column for i.MX6UL:
>
> """
> 128 KB L2 cache, NEON™, VFP, TrustZone®
> """
>
> So, please use BR2_EABIHF, and improve your systems by using hard-float
> instead of soft-float :-)

No problemo ! Can you recommend a test tool to evaluate Floating point
performances inside BR ?

Thanks for your review.

Best regards,
Julien
Thomas Petazzoni Jan. 21, 2016, 2:09 p.m. UTC | #5
Hello,

On Thu, 21 Jan 2016 15:02:50 +0100, Julien Boibessot wrote:

> >> So I ended up in using i.XM28EVK way of doing
> >> (board/freescale/imx28evk/create-boot-sd.sh).
> >> Do you agree ?
> > genimage is perfectly capable of creating a vfat partition, see
> > board/raspberrypi/genimage-raspberrypi.cfg for an example.
> 
> cool ! Is that new ?

No, I don't think this genimage capability is new. However, what is
rather new is this raspberrypi.cfg configuration in Buildroot.

> No problemo ! Can you recommend a test tool to evaluate Floating point
> performances inside BR ?

Maybe whetstone, but I'm not sure as I've never used it.

Best regards,

Thomas
diff mbox

Patch

diff --git a/board/freescale/imx6ulevk/create-boot-sd.sh b/board/freescale/imx6ulevk/create-boot-sd.sh
new file mode 100755
index 0000000..b3c47ae
--- /dev/null
+++ b/board/freescale/imx6ulevk/create-boot-sd.sh
@@ -0,0 +1,92 @@ 
+#!/bin/sh
+
+set -u
+set -e
+
+PROGNAME=$(basename $0)
+
+usage()
+{
+    echo "Create an SD card that boots on an i.MX6UL EVK board."
+    echo
+    echo "Note: all data on the the card will be completely deleted!"
+    echo "Use with care!"
+    echo "Superuser permissions may be required to write to the device."
+    echo
+    echo "Usage: ${PROGNAME} <sd_block_device>"
+    echo "Arguments:"
+    echo "  <sd_block_device>     The device to be written to"
+    echo
+    echo "Example: ${PROGNAME} /dev/mmcblk0"
+    echo
+}
+
+if [ $# -ne 1 ]; then
+    usage
+    exit 1
+fi
+
+if [ $(id -u) -ne 0 ]; then
+    echo "${PROGNAME} must be run as root"
+    exit 1
+fi
+
+DEV=${1}
+
+# The partition name prefix depends on the device name:
+# - /dev/sde -> /dev/sde1
+# - /dev/mmcblk0 -> /dev/mmcblk0p1
+if echo ${DEV}|grep -q mmcblk ; then
+    PART="p"
+else
+    PART=""
+fi
+
+PART1=${DEV}${PART}1
+PART2=${DEV}${PART}2
+
+# Unmount the partitions if mounted
+umount ${PART1} || true
+umount ${PART2} || true
+
+# First, clear the card
+dd if=/dev/zero of=${DEV} bs=1M count=20
+
+sync
+
+# Partition the card.
+# SD layout for i.MX6UL boot (mimic Freescale's .sdcard):
+# - FAT partition at offset 8192 containing zImage and dtbs
+# - ext2/3 partition formatted as ext2 or ext3, containing the root filesystem.
+sfdisk --force -u S ${DEV} <<EOF
+8192,16384,c
+24576,1703936,83
+EOF
+
+sync
+
+# Copy the bootloader at offset 1024
+dd if=output/images/u-boot.imx of=${DEV} obs=512 seek=2
+
+# Prepare a temp dir for mounting partitions
+TMPDIR=$(mktemp -d)
+ 
+# FAT partition: kernel
+mkfs.vfat ${PART1}
+mount ${PART1} ${TMPDIR}
+cp output/images/zImage ${TMPDIR}/
+cp output/images/*.dtb  ${TMPDIR}/ || true
+sync
+umount ${TMPDIR}
+
+# ext2 partition: root filesystem
+mkfs.ext2 ${PART2}
+mount ${PART2} ${TMPDIR}
+tar -C ${TMPDIR}/ -xf output/images/rootfs.tar
+sync
+umount ${TMPDIR}
+
+# Cleanup
+rmdir ${TMPDIR}
+sync
+echo Done
diff --git a/board/freescale/imx6ulevk/readme.txt b/board/freescale/imx6ulevk/readme.txt
new file mode 100644
index 0000000..024b9b9
--- /dev/null
+++ b/board/freescale/imx6ulevk/readme.txt
@@ -0,0 +1,58 @@ 
+***************************
+Freescale i.MX6UL EVK board
+***************************
+
+This file documents the Buildroot support for the Freescale i.MX6UL EVK board.
+
+Please read the i.MX6UL Evaluation Kit Quick Start Guide [1] for an
+introduction to the board.
+
+Build
+=====
+
+First, configure Buildroot for your i.MX6UL EVK board:
+
+  make freescale_imx6ulevk_defconfig
+
+Build all components:
+
+  make
+
+You will find in ./output/images/ the following files:
+  - imx6ul-14x14-evk.dtb
+  - rootfs.tar
+  - u-boot.imx
+  - zImage
+
+Create a bootable microSD card
+==============================
+
+To determine the device associated to the microSD card have a look in the
+/proc/partitions file:
+
+  cat /proc/partitions
+
+Run the following script as root on your microSD card. This will partition the
+card and copy the bootloader, kernel and root filesystem as needed.
+
+*** WARNING! The script will destroy all the card content. Use with care! ***
+
+  ./board/freescale/imx6ulevk/create-boot-sd.sh <your-microsd-device>
+
+Boot the i.MX6UL EVK board
+=========================
+
+To boot your newly created system (refer to the i.MX6UL EVK Quick Start Guide
+[1] for guidance):
+- insert the microSD card in the microSD slot of the board;
+- verify that your i.MX6UL EVK board jumpers and switches are set as mentioned
+  in the i.MX6UL EVK Quick Start Guide [1];
+- put a micro USB cable into the Debug USB Port and connect using a terminal
+  emulator at 115200 bps, 8n1;
+- power on the board.
+
+Enjoy!
+
+References
+==========
+[1] http://cache.freescale.com/files/32bit/doc/quick_start_guide/IMX6ULTRALITEQSG.pdf
diff --git a/configs/freescale_imx6ulevk_defconfig b/configs/freescale_imx6ulevk_defconfig
new file mode 100644
index 0000000..7ba5e7b
--- /dev/null
+++ b/configs/freescale_imx6ulevk_defconfig
@@ -0,0 +1,31 @@ 
+# architecture
+BR2_arm=y
+BR2_cortex_a7=y
+BR2_ARM_EABI=y
+BR2_ARM_FPU_NEON=y
+
+# toolchain
+BR2_KERNEL_HEADERS_VERSION=y
+BR2_DEFAULT_KERNEL_VERSION="3.14.28"
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_14=y
+
+# system
+BR2_TARGET_GENERIC_GETTY_PORT="ttymxc0"
+
+# kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://git.freescale.com/imx/linux-2.6-imx.git"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="imx_3.14.38_6ul_ga"
+BR2_LINUX_KERNEL_DEFCONFIG="imx_v7"
+BR2_LINUX_KERNEL_ZIMAGE=y
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="imx6ul-14x14-evk"
+
+# bootloader
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BOARDNAME="mx6ul_14x14_evk"
+BR2_TARGET_UBOOT_CUSTOM_GIT=y
+BR2_TARGET_UBOOT_CUSTOM_REPO_URL="git://git.freescale.com/imx/uboot-imx.git"
+BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION="imx_v2015.04_3.14.38_6ul_ga"
+BR2_TARGET_UBOOT_FORMAT_IMX=y