All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 0/3] Add support for HiFive Unleashed board
@ 2019-04-28 14:49 Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 1/3] boot/riscv-pk: add generation of binary bbl file Mark Corbin
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Mark Corbin @ 2019-04-28 14:49 UTC (permalink / raw)
  To: buildroot

Hello

I've regenerated the patches to add support for the SiFive HiFive
Unleashed board. I tried to add support for a 5.0 series kernel, but
couldn't get the system to boot. This needs further investigation,
so I've gone with my original plan to use the 4.20.17 kernel. I've
created a new github repository for the patched kernel. This will
eventually be deprecated in favour of a 5.0 or 5.1 series kernel.

Changes v1 -> v2:
  - moved generation of bbl binary file in riscv-pk.mk from
    INSTALL_CMDS to BUILD_CMDS (Arnout)
  - added new patch to modify riscv-pk build scripts to remove
    hardcoding of ABI.
  - removed the large kernel patch and replaced it with a custom
    git repository (Arnout)
  - reduced the kernel config fragment to a minimum (Arnout)
  - use a separate root filesystem instead of a linked-in
    initramfs image (Arnout)
  - changed naming convention from sifive-u540* to
    sifive_hifive* (Arnout)
  - added post-image script to generate a complete SD card image
    file (Arnout)
  - updated the default configuration to make use of compressed
    instructions and the lp64d ABI for builds.
  - updated the DEVELOPERS file.


Regards

Mark



Mark Corbin (3):
  boot/riscv-pk: add generation of binary bbl file
  boot/riscv-pk: remove hardcoding of the ABI
  board/sifive: add support for the HiFive Unleashed board

 DEVELOPERS                                    |  1 +
 .../hifive-unleashed/linux.config.fragment    | 14 ++++
 board/sifive/hifive-unleashed/post-image.sh   | 37 ++++++++++
 board/sifive/hifive-unleashed/readme.txt      | 65 +++++++++++++++++
 ...-specify-ABI-or-use-compiler-default.patch | 72 +++++++++++++++++++
 boot/riscv-pk/riscv-pk.mk                     |  7 +-
 configs/sifive_hifive_unleashed_defconfig     | 31 ++++++++
 7 files changed, 225 insertions(+), 2 deletions(-)
 create mode 100644 board/sifive/hifive-unleashed/linux.config.fragment
 create mode 100755 board/sifive/hifive-unleashed/post-image.sh
 create mode 100644 board/sifive/hifive-unleashed/readme.txt
 create mode 100644 boot/riscv-pk/0001-Add-ability-to-specify-ABI-or-use-compiler-default.patch
 create mode 100644 configs/sifive_hifive_unleashed_defconfig

-- 
2.19.1

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v2 1/3] boot/riscv-pk: add generation of binary bbl file
  2019-04-28 14:49 [Buildroot] [PATCH v2 0/3] Add support for HiFive Unleashed board Mark Corbin
@ 2019-04-28 14:49 ` Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 2/3] boot/riscv-pk: remove hardcoding of the ABI Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 3/3] board/sifive: add support for the HiFive Unleashed board Mark Corbin
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Corbin @ 2019-04-28 14:49 UTC (permalink / raw)
  To: buildroot

In order to support the SiFive HiFive Unleashed board we need to
generate a binary bootloader file ready for writing to an SD card.

Signed-off-by: Mark Corbin <mark.corbin@embecosm.com>

---
Changes v1 -> v2:
  - moved generation of bbl binary file in riscv-pk.mk from
    INSTALL_CMDS to BUILD_CMDS (Arnout)
---
 boot/riscv-pk/riscv-pk.mk | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/boot/riscv-pk/riscv-pk.mk b/boot/riscv-pk/riscv-pk.mk
index 0ab5879ee4..8386dfe168 100644
--- a/boot/riscv-pk/riscv-pk.mk
+++ b/boot/riscv-pk/riscv-pk.mk
@@ -23,10 +23,12 @@ endef
 
 define RISCV_PK_BUILD_CMDS
 	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/build bbl
+	$(TARGET_OBJCOPY) -S -O binary $(@D)/build/bbl $(@D)/build/bbl.bin
 endef
 
 define RISCV_PK_INSTALL_IMAGES_CMDS
 	$(INSTALL) -D -m 0755 $(@D)/build/bbl $(BINARIES_DIR)/bbl
+	$(INSTALL) -D -m 0755 $(@D)/build/bbl.bin $(BINARIES_DIR)/bbl.bin
 endef
 
 $(eval $(generic-package))
-- 
2.19.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v2 2/3] boot/riscv-pk: remove hardcoding of the ABI
  2019-04-28 14:49 [Buildroot] [PATCH v2 0/3] Add support for HiFive Unleashed board Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 1/3] boot/riscv-pk: add generation of binary bbl file Mark Corbin
@ 2019-04-28 14:49 ` Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 3/3] board/sifive: add support for the HiFive Unleashed board Mark Corbin
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Corbin @ 2019-04-28 14:49 UTC (permalink / raw)
  To: buildroot

The riscv-pk package is currently hardcoded to always use the
softfloat ABI when compiling, i.e. ilp32 for 32-bit and lp64
for 64-bit. The SiFive HiFive Unleashed board has hardware floating
point support, so we need to be able to build riscv-pk with both
softfloat and hardfloat toolchains.

This patch adds the ability to specify the ABI via --with-abi when
configuring riscv-pk. If this option is not provided then the
compiler default ABI setting will be used instead.

Signed-off-by: Mark Corbin <mark.corbin@embecosm.com>
---
 ...-specify-ABI-or-use-compiler-default.patch | 72 +++++++++++++++++++
 boot/riscv-pk/riscv-pk.mk                     |  5 +-
 2 files changed, 75 insertions(+), 2 deletions(-)
 create mode 100644 boot/riscv-pk/0001-Add-ability-to-specify-ABI-or-use-compiler-default.patch

diff --git a/boot/riscv-pk/0001-Add-ability-to-specify-ABI-or-use-compiler-default.patch b/boot/riscv-pk/0001-Add-ability-to-specify-ABI-or-use-compiler-default.patch
new file mode 100644
index 0000000000..3cee9a4fd6
--- /dev/null
+++ b/boot/riscv-pk/0001-Add-ability-to-specify-ABI-or-use-compiler-default.patch
@@ -0,0 +1,72 @@
+From 0f7e2c2f61c6bb36a33733e89ec8d79f89d618ae Mon Sep 17 00:00:00 2001
+From: Mark Corbin <mark.corbin@embecosm.com>
+Date: Thu, 18 Apr 2019 12:07:02 +0100
+Subject: [PATCH] Add ability to specify ABI or use compiler default
+
+Allow the ABI to be defined using --with-abi. If this option is
+not provided then the compiler default ABI setting will be used.
+
+Signed-off-by: Mark Corbin <mark.corbin@embecosm.com>
+---
+ Makefile.in  | 15 +++++++++++----
+ configure.ac |  4 ++++
+ 2 files changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index aeabdc2..d6b988f 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -51,8 +51,7 @@ else
+ endif
+ 
+ # If --with-arch is not specified, it defaults to whatever the compiler's
+-# default is. The -with-abi is not necessary for this project. Unconditionally
+-# compile it with a no-float ABI. i.e., ilp32 for 32-bit and lp64 for 64-bit.
++# default is.
+ 
+ ifeq (@WITH_ARCH@,)
+   march := -march=$(shell @CC@ -v 2>&1 | \
+@@ -60,8 +59,16 @@ ifeq (@WITH_ARCH@,)
+ else
+   march := -march=@WITH_ARCH@
+ endif
+-is_32bit := $(findstring 32,$(march))
+-mabi := -mabi=$(if $(is_32bit),ilp32,lp64)
++
++# If --with-abi is not specified, it defaults to whatever the compiler's
++# default is.
++
++ifeq (@WITH_ABI@,)
++  mabi := -mabi=$(shell @CC@ -v 2>&1 | \
++                    sed 's/ /\n/g' | grep with-abi | awk -F= '{print $$2}')
++else
++  mabi := -mabi=@WITH_ABI@
++endif
+ 
+ # Installation directories
+ 
+diff --git a/configure.ac b/configure.ac
+index 917179f..180a8db 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -83,6 +83,9 @@ AC_ARG_VAR(RISCV, [top-level RISC-V install directory])
+ AC_ARG_WITH([arch], AS_HELP_STRING([--with-arch], [Set the RISC-V architecture]),
+   [AC_SUBST([WITH_ARCH], $with_arch, [Specify architecture to build the project])])
+ 
++AC_ARG_WITH([abi], AS_HELP_STRING([--with-abi], [Set the RISC-V ABI]),
++  [AC_SUBST([WITH_ABI], $with_abi, [Specify ABI to build the project])])
++
+ AC_ARG_ENABLE([print-device-tree], AS_HELP_STRING([--enable-print-device-tree], [Print DTS when booting]))
+ AS_IF([test "x$enable_print_device_tree" == "xyes"], [
+   AC_DEFINE([PK_PRINT_DEVICE_TREE],,[Define if the DTS is to be displayed])
+@@ -95,6 +98,7 @@ AC_SUBST(CFLAGS)
+ AC_SUBST(LDFLAGS)
+ AC_SUBST([LIBS], ["-lgcc"])
+ AC_SUBST(WITH_ARCH)
++AC_SUBST(WITH_ABI)
+ AC_SUBST(host_alias)
+ 
+ #-------------------------------------------------------------------------
+-- 
+2.19.1
+
diff --git a/boot/riscv-pk/riscv-pk.mk b/boot/riscv-pk/riscv-pk.mk
index 8386dfe168..f82520d221 100644
--- a/boot/riscv-pk/riscv-pk.mk
+++ b/boot/riscv-pk/riscv-pk.mk
@@ -9,8 +9,9 @@ RISCV_PK_SITE = git://github.com/riscv/riscv-pk.git
 RISCV_PK_LICENSE = BSD-3-Clause
 RISCV_PK_LICENSE_FILES = LICENSE
 RISCV_PK_DEPENDENCIES = linux
-RISCV_PK_SUBDIR = build
+RISCV_PK_INSTALL_TARGET = NO
 RISCV_PK_INSTALL_IMAGES = YES
+RISCV_PK_AUTORECONF = YES
 
 define RISCV_PK_CONFIGURE_CMDS
 	mkdir -p $(@D)/build
@@ -31,4 +32,4 @@ define RISCV_PK_INSTALL_IMAGES_CMDS
 	$(INSTALL) -D -m 0755 $(@D)/build/bbl.bin $(BINARIES_DIR)/bbl.bin
 endef
 
-$(eval $(generic-package))
+$(eval $(autotools-package))
-- 
2.19.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v2 3/3] board/sifive: add support for the HiFive Unleashed board
  2019-04-28 14:49 [Buildroot] [PATCH v2 0/3] Add support for HiFive Unleashed board Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 1/3] boot/riscv-pk: add generation of binary bbl file Mark Corbin
  2019-04-28 14:49 ` [Buildroot] [PATCH v2 2/3] boot/riscv-pk: remove hardcoding of the ABI Mark Corbin
@ 2019-04-28 14:49 ` Mark Corbin
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Corbin @ 2019-04-28 14:49 UTC (permalink / raw)
  To: buildroot

This patch adds basic support for the SiFive HiFive Unleashed
board.

Signed-off-by: Mark Corbin <mark.corbin@embecosm.com>

---
Changes v1 -> v2:
  - removed the large kernel patch and replaced it with a custom
    git repository (Arnout)
  - reduced the kernel config fragment to a minimum (Arnout)
  - use a separate root filesystem instead of a linked-in
    initramfs image (Arnout)
  - changed naming convention from sifive-u540* to
    sifive_hifive* (Arnout)
  - added post-image script to generate a complete SD card image
    file (Arnout)
  - updated the default configuration to make use of compressed
    instructions and the lp64d ABI for builds.
  - updated the DEVELOPERS file.
---
 DEVELOPERS                                    |  1 +
 .../hifive-unleashed/linux.config.fragment    | 14 ++++
 board/sifive/hifive-unleashed/post-image.sh   | 37 +++++++++++
 board/sifive/hifive-unleashed/readme.txt      | 65 +++++++++++++++++++
 configs/sifive_hifive_unleashed_defconfig     | 31 +++++++++
 5 files changed, 148 insertions(+)
 create mode 100644 board/sifive/hifive-unleashed/linux.config.fragment
 create mode 100755 board/sifive/hifive-unleashed/post-image.sh
 create mode 100644 board/sifive/hifive-unleashed/readme.txt
 create mode 100644 configs/sifive_hifive_unleashed_defconfig

diff --git a/DEVELOPERS b/DEVELOPERS
index 56556413aa..5f76b6951d 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1417,6 +1417,7 @@ F:	arch/arch.mk.riscv
 F:	arch/Config.in.riscv
 F:	board/qemu/riscv32-virt/
 F:	board/qemu/riscv64-virt/
+F:	board/sifive/
 F:	boot/riscv-pk/
 F:	configs/qemu_riscv32_virt_defconfig
 F:	configs/qemu_riscv64_virt_defconfig
diff --git a/board/sifive/hifive-unleashed/linux.config.fragment b/board/sifive/hifive-unleashed/linux.config.fragment
new file mode 100644
index 0000000000..8957eb5d36
--- /dev/null
+++ b/board/sifive/hifive-unleashed/linux.config.fragment
@@ -0,0 +1,14 @@
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="earlyprintk console=ttySIF0,115200 root=/dev/mmcblk0p2 rootwait"
+CONFIG_SERIAL_SIFIVE=y
+CONFIG_SERIAL_SIFIVE_CONSOLE=y
+# CONFIG_HVC_RISCV_SBI is not set
+CONFIG_SPI=y
+CONFIG_SPI_SIFIVE=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SIFIVE=y
+CONFIG_MMC=y
+CONFIG_MMC_SPI=y
+CONFIG_CLK_U54_PRCI=y
+CONFIG_CLK_GEMGXL_MGMT=y
+CONFIG_SIFIVE_PLIC=y
diff --git a/board/sifive/hifive-unleashed/post-image.sh b/board/sifive/hifive-unleashed/post-image.sh
new file mode 100755
index 0000000000..ed2461995b
--- /dev/null
+++ b/board/sifive/hifive-unleashed/post-image.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+set -e
+
+cd ${BINARIES_DIR}
+
+# GPT partition codes
+KERNEL=2E54B353-1271-4842-806F-E436D6AF6985
+ROOTFS=0FC63DAF-8483-4772-8E79-3D69D8477DE4
+
+# Partition offsets and sizes
+KERNEL_PART_START=2048
+KERNEL_PART_SIZE=65536
+KERNEL_PART_END=$(( KERNEL_PART_START + KERNEL_PART_SIZE - 1 ))
+ROOTFS_PART_START=$(( KERNEL_PART_END + 1 )) 
+ROOTFS_PART_SIZE=$(( $(stat -c %s rootfs.ext2) / 512 ))
+ROOTFS_PART_END=$(( ROOTFS_PART_START + ROOTFS_PART_SIZE - 1 ))
+GPT_SIZE=34
+
+# Disk image size
+IMAGE_SIZE=$(( GPT_SIZE + ROOTFS_PART_END + 1 ))
+
+# Create an empty SD image
+dd if=/dev/zero of=sdcard.img bs=512 count=0 seek=$IMAGE_SIZE
+
+sgdisk --clear \
+        --new=1:${KERNEL_PART_START}:${KERNEL_PART_END} \
+        --change-name=1:kernel \
+        --typecode=1:${KERNEL} \
+        --new=2:${ROOTFS_PART_START}:${ROOTFS_PART_END} \
+        --change-name=2:rootfs \
+        --typecode=2:${ROOTFS} \
+        sdcard.img
+
+dd if=bbl.bin of=sdcard.img bs=512 count=$KERNEL_PART_SIZE seek=$KERNEL_PART_START conv=notrunc
+dd if=rootfs.ext2 of=sdcard.img bs=512 count=$ROOTFS_PART_SIZE seek=$ROOTFS_PART_START conv=notrunc
+
diff --git a/board/sifive/hifive-unleashed/readme.txt b/board/sifive/hifive-unleashed/readme.txt
new file mode 100644
index 0000000000..842de5ee58
--- /dev/null
+++ b/board/sifive/hifive-unleashed/readme.txt
@@ -0,0 +1,65 @@
+SiFive HiFive Unleashed
+=======================
+
+This file describes how to use the pre-defined Buildroot
+configuration for the SiFive HiFive Unleashed board.
+
+Further information about the HiFive Unleashed board can be found
+at https://www.sifive.com/boards/hifive-unleashed
+
+Building
+========
+
+Configure Buildroot using the default board configuration:
+
+  $ make sifive_hifive_unleashed_defconfig
+
+Customise the build as necessary:
+
+  $ make menuconfig
+
+Start the build:
+
+  $ make
+
+Result of the build
+===================
+
+Once the build has finished you will have the following files:
+
+    output/images/
+    +-- bbl
+    +-- bbl.bin
+    +-- rootfs.ext2
+    +-- rootfs.ext4 -> rootfs.ext2
+    +-- rootfs.tar
+    +-- sdcard.img
+    +-- vmlinux
+    
+
+Creating a bootable SD card
+===========================
+
+WARNING! This will destroy the existing contents of the SD card.
+Use with caution - ensure that you select the correct block device!
+
+The sdcard.img file is a complete bootable image containing two
+partitions. The first partition contains the bootloader and
+kernel (bbl.bin) and the second partition contains the rootfs.
+
+Write the image to an SD card:
+
+    $ sudo dd if=output/images/sdcard.img of=/dev/mmcblk0
+
+Make sure that the all DIP switches are set to the off position for
+default boot mode (MSEL mode = 1111), insert the SD card and power
+up the board.
+
+Connect the USB cable and open minicom (/dev/ttyUSB1, 115200, 8N1).
+
+See the 'SiFive HiFive Unleashed Getting Started Guide' for
+more details (https://www.sifive.com/documentation).
+
+--
+
+Mark Corbin <mark.corbin@embecosm.com> April 2019
diff --git a/configs/sifive_hifive_unleashed_defconfig b/configs/sifive_hifive_unleashed_defconfig
new file mode 100644
index 0000000000..715402339f
--- /dev/null
+++ b/configs/sifive_hifive_unleashed_defconfig
@@ -0,0 +1,31 @@
+# Architecture
+BR2_riscv=y
+BR2_riscv_custom=y
+BR2_RISCV_ISA_CUSTOM_RVM=y
+BR2_RISCV_ISA_CUSTOM_RVF=y
+BR2_RISCV_ISA_CUSTOM_RVD=y
+BR2_RISCV_ISA_CUSTOM_RVC=y
+BR2_RISCV_64=y
+BR2_RISCV_ABI_LP64D=y
+
+# Linux headers same as kernel, a 4.20 series
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_20=y
+
+# System
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/sifive/hifive-unleashed/post-image.sh"
+
+# Kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/markcorbinuk/linux.git"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="hifive-4.20.17"
+BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/sifive/hifive-unleashed/linux.config.fragment"
+BR2_LINUX_KERNEL_VMLINUX=y
+
+# Bootloader
+BR2_TARGET_RISCV_PK=y
+
+# Filesystem
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
-- 
2.19.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-04-28 14:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-28 14:49 [Buildroot] [PATCH v2 0/3] Add support for HiFive Unleashed board Mark Corbin
2019-04-28 14:49 ` [Buildroot] [PATCH v2 1/3] boot/riscv-pk: add generation of binary bbl file Mark Corbin
2019-04-28 14:49 ` [Buildroot] [PATCH v2 2/3] boot/riscv-pk: remove hardcoding of the ABI Mark Corbin
2019-04-28 14:49 ` [Buildroot] [PATCH v2 3/3] board/sifive: add support for the HiFive Unleashed board Mark Corbin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.