[U-Boot] [PATCH v2 11/11] riscv: Add SiFive FU540 board support

Auer, Lukas lukas.auer at aisec.fraunhofer.de
Mon Jan 21 12:57:51 UTC 2019


On Sun, 2019-01-20 at 17:22 -0800, Atish Patra wrote:
> On 1/20/19 12:26 PM, Auer, Lukas wrote:
> > Hi Anup,
> > 
> > On Fri, 2019-01-18 at 11:19 +0000, Anup Patel wrote:
> > > This patch adds SiFive FU540 board support. For now, only
> > > SiFive serial, SiFive PRCI, and Cadance MACB drivers are
> > > only enabled. The SiFive FU540 defconfig by default builds
> > > U-Boot for S-Mode because U-Boot on SiFive FU540 will run
> > > in S-Mode as payload of BBL or OpenSBI.
> > > 
> > > Signed-off-by: Atish Patra <atish.patra at wdc.com>
> > > Signed-off-by: Anup Patel <anup.patel at wdc.com>
> > > Reviewed-by: Alexander Graf <agraf at suse.de>
> > > ---
> > >   arch/riscv/Kconfig             |  4 ++++
> > >   board/sifive/fu540/Kconfig     | 42
> > > +++++++++++++++++++++++++++++++++
> > >   board/sifive/fu540/MAINTAINERS |  9 +++++++
> > >   board/sifive/fu540/Makefile    |  5 ++++
> > >   board/sifive/fu540/fu540.c     | 17 ++++++++++++++
> > >   configs/sifive_fu540_defconfig | 11 +++++++++
> > >   include/configs/sifive-fu540.h | 43
> > > ++++++++++++++++++++++++++++++++++
> > >   7 files changed, 131 insertions(+)
> > >   create mode 100644 board/sifive/fu540/Kconfig
> > >   create mode 100644 board/sifive/fu540/MAINTAINERS
> > >   create mode 100644 board/sifive/fu540/Makefile
> > >   create mode 100644 board/sifive/fu540/fu540.c
> > >   create mode 100644 configs/sifive_fu540_defconfig
> > >   create mode 100644 include/configs/sifive-fu540.h
> > > 
> > 
> > Reviewed-by: Lukas Auer <lukas.auer at aisec.fraunhofer.de>
> > 
> > Can you add a short README on how to flash and use U-Boot on the
> > HiFive
> > Unleashed?
> > 
> 
> Thanks for the review. Sure. We will add a README document.
> 
> > Please also see one more comment below.
> > 
> > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> > > index 6879047ff7..36512a8995 100644
> > > --- a/arch/riscv/Kconfig
> > > +++ b/arch/riscv/Kconfig
> > > @@ -14,11 +14,15 @@ config TARGET_AX25_AE350
> > >   config TARGET_QEMU_VIRT
> > >   	bool "Support QEMU Virt Board"
> > >   
> > > +config TARGET_SIFIVE_FU540
> > > +	bool "Support SiFive FU540 Board"
> > > +
> > >   endchoice
> > >   
> > >   # board-specific options below
> > >   source "board/AndesTech/ax25-ae350/Kconfig"
> > >   source "board/emulation/qemu-riscv/Kconfig"
> > > +source "board/sifive/fu540/Kconfig"
> > >   
> > >   # platform-specific options below
> > >   source "arch/riscv/cpu/ax25/Kconfig"
> > > diff --git a/board/sifive/fu540/Kconfig
> > > b/board/sifive/fu540/Kconfig
> > > new file mode 100644
> > > index 0000000000..6be3d88144
> > > --- /dev/null
> > > +++ b/board/sifive/fu540/Kconfig
> > > @@ -0,0 +1,42 @@
> > > +if TARGET_SIFIVE_FU540
> > > +
> > > +config SYS_BOARD
> > > +	default "fu540"
> > > +
> > > +config SYS_VENDOR
> > > +	default "sifive"
> > > +
> > > +config SYS_CPU
> > > +	default "generic"
> > > +
> > > +config SYS_CONFIG_NAME
> > > +	default "sifive-fu540"
> > > +
> > > +config SYS_TEXT_BASE
> > > +	default 0x80000000 if !RISCV_SMODE
> > > +	default 0x80200000 if RISCV_SMODE
> > > +
> > > +config BOARD_SPECIFIC_OPTIONS # dummy
> > > +	def_bool y
> > > +	select GENERIC_RISCV
> > > +	imply CMD_DHCP
> > > +	imply CMD_EXT2
> > > +	imply CMD_EXT4
> > > +	imply CMD_FAT
> > > +	imply CMD_FS_GENERIC
> > > +	imply CMD_NET
> > > +	imply CMD_PING
> > > +	imply CLK_SIFIVE
> > > +	imply CLK_SIFIVE_FU540_PRCI
> > > +	imply DOS_PARTITION
> > > +	imply EFI_PARTITION
> > > +	imply IP_DYN
> > > +	imply ISO_PARTITION
> > > +	imply MACB
> > > +	imply MII
> > > +	imply NET_RANDOM_ETHADDR
> > > +	imply PHY_LIB
> > > +	imply PHY_MSCC
> > > +	imply SIFIVE_SERIAL
> > > +
> > > +endif
> > > diff --git a/board/sifive/fu540/MAINTAINERS
> > > b/board/sifive/fu540/MAINTAINERS
> > > new file mode 100644
> > > index 0000000000..702d803ad8
> > > --- /dev/null
> > > +++ b/board/sifive/fu540/MAINTAINERS
> > > @@ -0,0 +1,9 @@
> > > +SiFive FU540 BOARD
> > > +M:	Paul Walmsley <paul.walmsley at sifive.com>
> > > +M:	Palmer Dabbelt <palmer at sifive.com>
> > > +M:	Anup Patel <anup.patel at wdc.com>
> > > +M:	Atish Patra <atish.patra at wdc.com>
> > > +S:	Maintained
> > > +F:	board/sifive/fu540/
> > > +F:	include/configs/sifive-fu540.h
> > > +F:	configs/sifive_fu540_defconfig
> > > diff --git a/board/sifive/fu540/Makefile
> > > b/board/sifive/fu540/Makefile
> > > new file mode 100644
> > > index 0000000000..6e1862c475
> > > --- /dev/null
> > > +++ b/board/sifive/fu540/Makefile
> > > @@ -0,0 +1,5 @@
> > > +# SPDX-License-Identifier: GPL-2.0+
> > > +#
> > > +# Copyright (c) 2019 Western Digital Corporation or its
> > > affiliates.
> > > +
> > > +obj-y	+= fu540.o
> > > diff --git a/board/sifive/fu540/fu540.c
> > > b/board/sifive/fu540/fu540.c
> > > new file mode 100644
> > > index 0000000000..5adc4a3d4a
> > > --- /dev/null
> > > +++ b/board/sifive/fu540/fu540.c
> > > @@ -0,0 +1,17 @@
> > > +// SPDX-License-Identifier: GPL-2.0+
> > > +/*
> > > + * Copyright (c) 2019 Western Digital Corporation or its
> > > affiliates.
> > > + *
> > > + * Authors:
> > > + *   Anup Patel <anup.patel at wdc.com>
> > > + */
> > > +
> > > +#include <common.h>
> > > +#include <dm.h>
> > > +
> > > +int board_init(void)
> > > +{
> > > +	/* For now nothing to do here. */
> > > +
> > > +	return 0;
> > > +}
> > > diff --git a/configs/sifive_fu540_defconfig
> > > b/configs/sifive_fu540_defconfig
> > > new file mode 100644
> > > index 0000000000..2f8cca9de0
> > > --- /dev/null
> > > +++ b/configs/sifive_fu540_defconfig
> > > @@ -0,0 +1,11 @@
> > > +CONFIG_RISCV=y
> > > +CONFIG_TARGET_SIFIVE_FU540=y
> > > +CONFIG_RISCV_SMODE=y
> > > +CONFIG_ARCH_RV64I=y
> > > +CONFIG_DISTRO_DEFAULTS=y
> > > +CONFIG_NR_DRAM_BANKS=1
> > > +CONFIG_FIT=y
> > > +CONFIG_DISPLAY_CPUINFO=y
> > > +CONFIG_DISPLAY_BOARDINFO=y
> > > +CONFIG_CMD_MII=y
> > > +CONFIG_OF_PRIOR_STAGE=y
> > > diff --git a/include/configs/sifive-fu540.h
> > > b/include/configs/sifive-
> > > fu540.h
> > > new file mode 100644
> > > index 0000000000..7007b5f6af
> > > --- /dev/null
> > > +++ b/include/configs/sifive-fu540.h
> > > @@ -0,0 +1,43 @@
> > > +/* SPDX-License-Identifier: GPL-2.0+ */
> > > +/*
> > > + * Copyright (c) 2019 Western Digital Corporation or its
> > > affiliates.
> > > + *
> > > + * Authors:
> > > + *   Anup Patel <anup.patel at wdc.com>
> > > + */
> > > +
> > > +#ifndef __CONFIG_H
> > > +#define __CONFIG_H
> > > +
> > > +#include <linux/sizes.h>
> > > +
> > > +#define CONFIG_SYS_SDRAM_BASE		0x80000000
> > > +#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE
> > > + SZ_2M)
> > > +
> > > +#define CONFIG_SYS_LOAD_ADDR		(CONFIG_SYS_SDRAM_BASE
> > > + SZ_2M)
> > > +
> > > +#define CONFIG_SYS_MALLOC_LEN		SZ_8M
> > > +
> > > +#define CONFIG_SYS_BOOTM_LEN		SZ_16M
> > > +
> > > +#define CONFIG_STANDALONE_LOAD_ADDR	0x80200000
> > > +
> > > +/* Environment options */
> > > +#define CONFIG_ENV_SIZE			SZ_4K
> > > +
> > > +#define BOOT_TARGET_DEVICES(func) \
> > > +	func(DHCP, dhcp, na)
> > > +
> > > +#include <config_distro_bootcmd.h>
> > > +
> > > +#define CONFIG_EXTRA_ENV_SETTINGS \
> > > +	"fdt_high=0xffffffffffffffff\0" \
> > > +	"initrd_high=0xffffffffffffffff\0" \
> > > +	"kernel_addr_r=0x80600000\0" \
> > > +	"fdt_addr_r=0x82200000\0" \
> > > +	"scriptaddr=0x82300000\0" \
> > > +	"pxefile_addr_r=0x82400000\0" \
> > > +	"ramdisk_addr_r=0x82500000\0" \
> > > +	BOOTENV
> > 
> > I think it would be helpful to define the kernel command line using
> > the
> > bootargs environment variable here. For testing I used
> > "bootargs=console=ttySI0 earlyprintk root=/dev/mmcblk0p2 rootwait"
> > locally.
> > 
> The root partition might be different in different setup. For
> example, 
> if expansion board is connected, root partition might be on sata or
> nvme 
> drive. Should we add a fixed root partition to the bootargs ?
> 

Hm, good point. It's probably better to leave it as is and document it
as part of the boot flow in the board README.

Thanks,
Lukas


More information about the U-Boot mailing list