[PATCH V4 2/2] riscv: board: Support OpenPiton SoC

Sean Anderson seanga2 at gmail.com
Fri May 7 04:32:17 CEST 2021


On 5/5/21 11:42 PM, Tianrui Wei wrote:
> From: Tianrui Wei <tianrui-wei at outlook.com>
> Date: Thu, 6 May 2021 11:30:20 +0800
> Subject: [PATCH V4 2/2] riscv: board: Support OpenPiton SoC
> 
> This patch add board support for OpenPiton.

Please add some information to the commit message describing the board.

> 
> Signed-off-by: Tianrui Wei <tianrui-wei at outlook.com>
> Signed-off-by: Jonathan Balkind <jbalkind at ucsb.edu>
> ---
> 
>   arch/riscv/Kconfig                      |   4 +
>   arch/riscv/dts/Makefile                 |   1 +
>   arch/riscv/dts/openpiton-riscv64.dts    | 159 +++++
>   board/openpiton/riscv/Kconfig           |  42 ++
>   board/openpiton/riscv/MAINTAINERS       |   6 +
>   board/openpiton/riscv/Makefile          |   5 +
>   board/openpiton/riscv/openpiton-riscv.c |  41 ++
>   configs/openpiton_riscv64_defconfig     | 132 ++++
>   doc/board/index.rst                     |   1 +
>   doc/board/openpiton/index.rst           |   9 +
>   doc/board/openpiton/riscv64.rst         | 885 ++++++++++++++++++++++++
>   include/configs/openpiton-riscv.h       |  58 ++
>   12 files changed, 1343 insertions(+)
>   create mode 100644 arch/riscv/dts/openpiton-riscv64.dts
>   create mode 100644 board/openpiton/riscv/Kconfig
>   create mode 100644 board/openpiton/riscv/MAINTAINERS
>   create mode 100644 board/openpiton/riscv/Makefile
>   create mode 100644 board/openpiton/riscv/openpiton-riscv.c
>   create mode 100644 configs/openpiton_riscv64_defconfig
>   create mode 100644 doc/board/openpiton/index.rst
>   create mode 100644 doc/board/openpiton/riscv64.rst
>   create mode 100644 include/configs/openpiton-riscv.h
> 
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 30b05408..9e7deb34 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -23,6 +23,9 @@ config TARGET_SIFIVE_FU540
>   config TARGET_SIPEED_MAIX
>   	bool "Support Sipeed Maix Board"
>   
> +config TARGET_OPENPITON_RISCV
> +  bool "Support riscv cores on openpiton SoC"
> +
>   endchoice
>   
>   config SYS_ICACHE_OFF
> @@ -55,6 +58,7 @@ config SPL_SYS_DCACHE_OFF
>   source "board/AndesTech/ax25-ae350/Kconfig"
>   source "board/emulation/qemu-riscv/Kconfig"
>   source "board/microchip/mpfs_icicle/Kconfig"
> +source "board/openpiton/riscv/Kconfig"

Fix indentation.

>   source "board/sifive/fu540/Kconfig"
>   source "board/sipeed/maix/Kconfig"
>   
> diff --git a/arch/riscv/dts/Makefile b/arch/riscv/dts/Makefile
> index 3a6f96c6..b511cd74 100644
> --- a/arch/riscv/dts/Makefile
> +++ b/arch/riscv/dts/Makefile
> @@ -1,6 +1,7 @@
>   # SPDX-License-Identifier: GPL-2.0+
>   
>   dtb-$(CONFIG_TARGET_AX25_AE350) += ae350_32.dtb ae350_64.dtb
> +dtb-$(CONFIG_TARGET_OPENPITON_RISCV) += openpiton-riscv64.dtb
>   dtb-$(CONFIG_TARGET_SIFIVE_FU540) += hifive-unleashed-a00.dtb
>   dtb-$(CONFIG_TARGET_SIPEED_MAIX) += k210-maix-bit.dtb
>   
> diff --git a/arch/riscv/dts/openpiton-riscv64.dts b/arch/riscv/dts/openpiton-riscv64.dts
> new file mode 100644
> index 00000000..ce732b92
> --- /dev/null
> +++ b/arch/riscv/dts/openpiton-riscv64.dts
> @@ -0,0 +1,159 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +/* Copyright (c) 2021 Tianrui Wei <tianrui-wei at outlook.com> */
> +
> +/*
> + * This dts is for a dual core instance of OpenPiton+Ariane built
> + * to run on a Digilent Genesys 2 FPGA at 66.67MHz. These files
> + * are automatically generated by the OpenPiton build system and
> + * this configuration may not be what you need if your configuration
> + * is different from the below.
> + */
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <2>;
> +	#size-cells = <2>;
> +	u-boot,dm-pre-reloc;
> +	compatible = "openpiton,ariane";
> +
> +	chosen {
> +	   stdout-path = "uart0:115200";
> +	};
> +
> +	aliases {
> +		console = &uart0;
> +		serial0 = &uart0;
> +	};
> +
> +	cpus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		u-boot,dm-pre-reloc;

This is unnecessary since riscv_cpu has DM_FLAG_PRE_RELOC.

> +		timebase-frequency = <520835>;
> +
> +		CPU0: cpu at 0 {
> +			clock-frequency = <66667000>;

Please add a clocks node. If you just have one clock for the whole soc,
you can always use a fixed-clock binding.

> +			u-boot,dm-pre-reloc;
> +			device_type = "cpu";
> +			reg = <0>;
> +			status = "okay";
> +			compatible = "eth, ariane", "riscv";

There should be no space after the comma. And what is "eth"? Should this
be lowrisc?

> +			riscv,isa = "rv64imafdc";
> +			mmu-type = "riscv,sv39";
> +			tlb-split;
> +			// HLIC - hart local interrupt controller
> +			CPU0_intc: interrupt-controller {
> +				#interrupt-cells = <1>;
> +				interrupt-controller;
> +				compatible = "riscv,cpu-intc";
> +			};
> +		};
> +
> +		CPU1: cpu at 1 {

Same comments as above.

> +			clock-frequency = <66667000>;
> +			u-boot,dm-pre-reloc;
> +			device_type = "cpu";
> +			reg = <1>;
> +			status = "okay";
> +			compatible = "eth, ariane", "riscv";
> +			riscv,isa = "rv64imafdc";
> +			mmu-type = "riscv,sv39";
> +			tlb-split;
> +			// HLIC - hart local interrupt controller
> +			CPU1_intc: interrupt-controller {
> +				#interrupt-cells = <1>;
> +				interrupt-controller;
> +				compatible = "riscv,cpu-intc";
> +			};
> +		};
> +
> +	};
> +
> +	memory at 80000000 {
> +		u-boot,dm-pre-reloc;
> +		device_type = "memory";
> +		reg = < 0x00000000 0x80000000 0x00000000 0x40000000 >;
> +	};
> +

Everything below this line should be under a soc node.

> +	uart0: uart at fff0c2c000 {
> +		u-boot,dm-pre-reloc;

This is unnecessary. ns16550_serial has DM_FLAG_PRE_RELOC.

> +		compatible = "ns16550";
> +		reg = < 0x000000ff 0xf0c2c000 0x00000000 0x000d4000 >;
> +		clock-frequency = <66667000>;

Please add a clocks node.Documentation/devicetree/bindings/serial/serial.yaml

> +		current-speed = <115200>;

This is only necessary if the baud rate cannot otherwise be determined.
Please remove this.

> +		interrupt-parent = <&PLIC0>;

Please specify this under /soc.

> +		interrupts = <1>;
> +		reg-shift = <0>;
> +		// regs are spaced on 8 bit boundary
> +	};
> +
> +	eth: ethernet at fff0d00000 {
> +		compatible = "xlnx,xps-ethernetlite-1.00.a";
> +		device_type = "network";
> +		reg = < 0x000000ff 0xf0d00000 0x00000000 0x00100000 >;
> +		interrupt-parent = <&PLIC0>;
> +		interrupts = <2>;
> +		local-mac-address = [ 00 18 3E 02 E3 E5 ];
> +		phy-handle = <&phy0>;
> +		xlnx,duplex = <0x1>;
> +		xlnx,include-global-buffers = <0x1>;
> +		xlnx,include-internal-loopback = <0x0>;
> +		xlnx,include-mdio = <0x1>;
> +		xlnx,rx-ping-pong = <0x1>;
> +		xlnx,s-axi-id-width = <0x1>;
> +		xlnx,tx-ping-pong = <0x1>;
> +		xlnx,use-internal = <0x0>;
> +		axi_ethernetlite_0_mdio: mdio {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +			phy0: phy at 1 {
> +				compatible = "ethernet-phy-id001C.C915";
> +				device_type = "ethernet-phy";
> +				reg = <1>;
> +			};
> +		};
> +	};
> +
> +	debug-controller at fff1000000 {
> +		compatible = "riscv,debug-013";

Is this binding needed? Will U-Boot/Linux/whoever need to initialize
this device?

> +		interrupts-extended = < &CPU0_intc 65535
> +								&CPU1_intc 65535 >;

Please align these.

> +		reg = < 0x000000ff 0xf1000000 0x00000000 0x00001000 >;
> +		reg-names = "control";
> +	};
> +
> +	sdhci_0: sdhci at 0xf000000000 {

No 0x prefix please.

> +		u-boot,dm-pre-reloc;

Why does this need to be pre-reloc?

> +		status = "okay";
> +		compatible = "openpiton,piton-mmc";
> +		reg = < 0x000000f0 0x00000000 0x00000000 0x00300000 >;
> +	};

Missing newline.

> +	clint at fff1020000 {
> +		u-boot,dm-pre-reloc;

Again, unnecessary since the driver has the flag set.

> +		compatible = "sifive,clint0";
> +		interrupts-extended = < &CPU0_intc 3
> +								&CPU0_intc 7
> +								&CPU1_intc 3
> +								&CPU1_intc 7 >;

Please align this.

> +		reg = < 0x000000ff 0xf1020000 0x00000000 0x000c0000 >;
> +		reg-names = "control";

Please add a clocks property.

> +	};
> +
> +	PLIC0: plic at fff1100000 {
> +		u-boot,dm-pre-reloc;

Again, unnecessary.

> +		#address-cells = <0>;

Remove this.

> +		#interrupt-cells = <1>;
> +		compatible = "sifive,plic-1.0.0";
> +		interrupt-controller;
> +		interrupts-extended = < &CPU0_intc 11
> +								&CPU0_intc 9
> +								&CPU1_intc 11
> +								&CPU1_intc 9 >;

Align these please.

> +		reg = < 0x000000ff 0xf1100000 0x00000000 0x04000000 >;
> +		riscv,max-priority = <7>;
> +		riscv,ndev = <2>;
> +	};

In general, please add soc-specific compatible strings (e.g.
"openpiton,ns16550") to allow for forward compatibility.

> +
> +};
> +
> diff --git a/board/openpiton/riscv/Kconfig b/board/openpiton/riscv/Kconfig
> new file mode 100644
> index 00000000..31ae44d5
> --- /dev/null
> +++ b/board/openpiton/riscv/Kconfig
> @@ -0,0 +1,42 @@
> +if TARGET_OPENPITON_RISCV
> +
> +config SYS_BOARD
> +	default "riscv"
> +
> +config SYS_VENDOR
> +	default "openpiton"
> +
> +config SYS_CPU
> +	default "generic"
> +
> +config SYS_CONFIG_NAME
> +	default "openpiton-riscv"
> +
> +config SYS_TEXT_BASE
> +	default 0x81000000 if SPL
> +	default 0x80000000 if !RISCV_SMODE
> +	default 0x81000000 if RISCV_SMODE
> +
> +config SPL_TEXT_BASE
> +	default 0x80000000
> +
> +config SPL_OPENSBI_LOAD_ADDR
> +	default 0x81000000
> +
> +config BOARD_SPECIFIC_OPTIONS # dummy
> +	def_bool y
> +	select ARCH_EARLY_INIT_R
> +	select SUPPORT_SPL
> +	imply CPU_RISCV
> +	imply RISCV_TIMER if (RISCV_SMODE || SPL_RISCV_SMODE)
> +	imply SIFIVE_CLINT if (RISCV_MMODE || SPL_RISCV_MMODE)
> +	imply CMD_CPU
> +	imply SPL_CPU_SUPPORT
> +	imply SPL_OPENSBI
> +	imply SPL_LOAD_FIT
> +    imply SPL_SMP
> +    imply SPL_MMC

Fix indentation please. Did you run checkpatch?

> +	imply SMP
> +    imply SPL_RISCV_MMODE
> +
> +endif
> diff --git a/board/openpiton/riscv/MAINTAINERS b/board/openpiton/riscv/MAINTAINERS
> new file mode 100644
> index 00000000..1db6fb60
> --- /dev/null
> +++ b/board/openpiton/riscv/MAINTAINERS
> @@ -0,0 +1,6 @@
> +Openpiton Riscv Bootloader

OpenPiton BOARD

> +M:	Tianrui Wei<tianrui-wei at outlook.com>
> +S:	Maintained
> +F:	board/openpiton/riscv/

Will there be non-riscv openpiton boards?

In general, the directory layout here is

board/manufacturer/board_name

So who manufactures OpenPiton?

> +F:	include/configs/openpiton-riscv.h
> +F:	configs/openpiton_riscv_defconfig
> diff --git a/board/openpiton/riscv/Makefile b/board/openpiton/riscv/Makefile
> new file mode 100644
> index 00000000..8cc20e7c
> --- /dev/null
> +++ b/board/openpiton/riscv/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (C) 2021 Tianrui Wei
> +# Tianrui Wei <tianrui-wei at outlook.com>
> +obj-y += openpiton-riscv.o
> diff --git a/board/openpiton/riscv/openpiton-riscv.c b/board/openpiton/riscv/openpiton-riscv.c
> new file mode 100644
> index 00000000..5be407e7
> --- /dev/null
> +++ b/board/openpiton/riscv/openpiton-riscv.c
> @@ -0,0 +1,41 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (c) 2019 SiFive, Inc
> + * Copyright (c) 2021 Tianrui Wei
> + *
> + *
> + * Authors:
> + *   Pragnesh Patel <pragnesh.patel at sifive.com>
> + *   Tianrui Wei <tianrui-wei at outlook.com>
> + */
> +#include <common.h>
> +#include <init.h>
> +#include <configs/openpiton-riscv.h>
> +#include <dm.h>
> +#include <spl.h>
> +
> +#ifdef CONFIG_SPL
> +void board_boot_order(u32 *spl_boot_list)
> +{
> +	u8 i;
> +	u32 boot_devices[] = {
> +		BOOT_DEVICE_MMC1,
> +	};
> +
> +	for (i = 0; i < ARRAY_SIZE(boot_devices); i++)
> +		spl_boot_list[i] = boot_devices[i];
> +}
> +#endif
> +
> +#ifdef CONFIG_SPL_LOAD_FIT
> +int board_fit_config_name_match(const char *name)
> +{
> +	/* boot using first FIT config */
> +	return 0;
> +}
> +#endif
> +
> +int board_init(void)
> +{
> +		return 0;
> +}

Do you need get_effective_memsize?

> diff --git a/configs/openpiton_riscv64_defconfig b/configs/openpiton_riscv64_defconfig
> new file mode 100644
> index 00000000..37aa3c80
> --- /dev/null
> +++ b/configs/openpiton_riscv64_defconfig
> @@ -0,0 +1,132 @@
> +CONFIG_RISCV=y
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_SPL=y
> +CONFIG_SPL_MMC_SUPPORT=y
> +CONFIG_DEFAULT_DEVICE_TREE="openpiton-riscv64"
> +CONFIG_TARGET_OPENPITON_RISCV=y
> +CONFIG_ARCH_RV64I=y
> +CONFIG_RISCV_SMODE=y
> +CONFIG_MISC_INIT_R=n
> +CONFIG_SYS_MALLOC_F_LEN=0x1000
> +CONFIG_SPL_SYS_MALLOC_F_LEN=0x100000
> +CONFIG_SPL_PAYLOAD=""
> +CONFIG_LIBDISK_SUPPORT=y
> +CONFIG_NR_CPUS=32
> +CONFIG_CMODEL_MEDANY=y
> +CONFIG_EXPORT=n
> +CONFIG_HASH=n
> +CONFIG_SPL_SYS_MALLOC_SIMPLE=y
> +CONFIG_SPL_BANNER_PRINT=n
> +CONFIG_SPL_CRC32_SUPPORT=n
> +CONFIG_GENERATE_SMBIOS_TABLE=n
> +CONFIG_EFI_LOADER=n
> +CONFIG_LIB_DATA=y
> +CONFIG_SPL_USE_TINY_PRINTF=y
> +CONFIG_SPL_TINY_MEMSET=y
> +CONFIG_FS_EXT4=y
> +CONFIG_DM_RTC=y
> +CONFIG_SYS_NS16550=y
> +CONFIG_SPL_OPENSBI=n
> +CONFIG_SPL_RTC_SUPPORT=y
> +CONFIG_SPL_FS_EXT4=y
> +CONFIG_SPL_LEGACY_IMAGE_SUPPORT=n
> +CONFIG_CMD_NET=n
> +CONFIG_EFI_PARTITION=y
> +CONFIG_EFI_PARTITION_ENTRIES_NUMBERS=128
> +CONFIG_EFI_PARTITION_ENTRIES_OFF=0
> +CONFIG_SPL_EFI_PARTITION=y
> +CONFIG_PARTITION_UUIDS=y
> +CONFIG_OF_EMBED=y
> +CONFIG_HAVE_BLOCK_DEVICE=y
> +CONFIG_CPU=y
> +CONFIG_CPU_RISCV=y
> +CONFIG_MMC=y
> +CONFIG_DM_MMC=y
> +CONFIG_SPL_DM_MMC=y
> +CONFIG_MMC_PITON=y
> +CONFIG_MMC_QUIRKS=y
> +CONFIG_DEBUG_UART=y
> +CONFIG_DEBUG_UART_NS16550=y
> +CONFIG_DEBUG_UART_SHIFT=0
> +CONFIG_DEBUG_UART_ANNOUNCE=y
> +CONFIG_DEBUG_UART_SKIP_INIT=y
> +CONFIG_DEBUG_UART_BASE=0xfff0c2c000
> +CONFIG_DEBUG_UART_CLOCK=66667000
> +CONFIG_SPL_LIBDISK_SUPPORT=y
> +CONFIG_MMC_VERBOSE=n
> +CONFIG_MMC_WRITE=n
> +CONFIG_MMC_HW_PARTITIONING=n
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=n
> +CONFIG_SAVEENV=n
> +CONFIG_NET=n
> +CONFIG_SPL_PARTITION_UUIDS=n
> +CONFIG_CMD_EXT4=y
> +CONFIG_CMD_FS_GENERIC=y
> +CONFIG_CMD_READ=y
> +CONFIG_CMD_LSBLK=y
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_MEMINFO=y
> +CONFIG_EXPERT=n
> +CONFIG_ENV_VARS_UBOOT_CONFIG=y
> +CONFIG_LEGACY_IMAGE_FORMAT=n
> +CONFIG_ARCH_FIXUP_FDT_MEMORY=n
> +CONFIG_MENU=y
> +CONFIG_CMD_BOOTZ=y
> +CONFIG_CMD_PART=y
> +CONFIG_SHOW_REGS=y
> +CONFIG_LOG=y
> +CONFIG_LOGLEVEL=9
> +CONFIG_SPL_LOGLEVEL=9
> +CONFIG_TPL_LOGLEVEL=9
> +CONFIG_SPL_LOG=y
> +CONFIG_SPL_LOG_MAX_LEVEL=9
> +CONFIG_SPL_LOG_CONSOLE=y
> +CONFIG_LOG_ERROR_RETURN=y
> +CONFIG_CMD_CPU=n
> +CONFIG_BOOTM_NETBSD=n
> +CONFIG_BOOTM_PLAN9=n
> +CONFIG_BOOTM_RTEMS=n
> +CONFIG_BOOTM_VXWORKS=n
> +CONFIG_CMD_RUN=n
> +CONFIG_CMD_IMI=n
> +CONFIG_CMD_XIMG=n
> +CONFIG_CMD_EXPORTENV=n
> +CONFIG_CMD_IMPORTENV=n
> +CONFIG_CMD_EDITENV=n
> +CONFIG_CMD_SAVEENV=n
> +CONFIG_CMD_CRC32=n
> +CONFIG_CMD_RANDOM=n
> +CONFIG_CMD_LZMADEC=n
> +CONFIG_CMD_UNLZ4=n
> +CONFIG_CMD_UNZIP=n
> +CONFIG_CMD_FLASH=n
> +CONFIG_RANDOM_UUID=n
> +CONFIG_CMD_LOADB=n
> +CONFIG_CMD_LOADS=n
> +CONFIG_CMD_ECHO=n
> +CONFIG_CMD_ITEST=n
> +CONFIG_CMD_SOURCE=n
> +CONFIG_CMD_SETEXPR=n
> +CONFIG_CMD_BLOCK_CACHE=n
> +CONFIG_CMD_DATE=n
> +CONFIG_CMD_SLEEP=n
> +CONFIG_CMD_SYSBOOT=y
> +CONFIG_CMD_FAT=y
> +CONFIG_DOS_PARTITION=y
> +CONFIG_ISO_PARTITION=y
> +CONFIG_DM_ETH=y
> +CONFIG_RAM=y
> +CONFIG_SPL_RAM=y
> +CONFIG_FS_FAT=y
> +CONFIG_FS_FAT_MAX_CLUSTSIZE=65536
> +CONFIG_FS_SQUASHFS=y
> +CONFIG_SHA1=y
> +CONFIG_SHA256=y
> +CONFIG_MD5=y
> +CONFIG_ZLIB_UNCOMPRESS=y
> +CONFIG_SPL_GZIP=y
> +CONFIG_SPL_ZLIB=y
> +CONFIG_GETOPT=y
> +CONFIG_OF_LIBFDT_OVERLAY=y
> +CONFIG_RAM_SIFIVE=n

Did you generate this with "make savedefconfig"?

> diff --git a/doc/board/index.rst b/doc/board/index.rst
> index 915f1be8..51e60ac4 100644
> --- a/doc/board/index.rst
> +++ b/doc/board/index.rst
> @@ -17,6 +17,7 @@ Board-specific doc
>      google/index
>      intel/index
>      kontron/index
> +   openpiton/index

Fix indentation

>      renesas/index
>      rockchip/index
>      sifive/index
> diff --git a/doc/board/openpiton/index.rst b/doc/board/openpiton/index.rst
> new file mode 100644
> index 00000000..c469102c
> --- /dev/null
> +++ b/doc/board/openpiton/index.rst
> @@ -0,0 +1,9 @@
> +.. SPDX-License-Identifier: GPL-2.0+
> +
> +OpenPiton
> +=========
> +
> +.. toctree::
> +   :maxdepth: 2
> +
> +   riscv64
> diff --git a/doc/board/openpiton/riscv64.rst b/doc/board/openpiton/riscv64.rst
> new file mode 100644
> index 00000000..dc934bb4
> --- /dev/null
> +++ b/doc/board/openpiton/riscv64.rst
> @@ -0,0 +1,885 @@
> +.. SPDX-License-Identifier: GPL-2.0+
> +
> +Openpiton RISC-V SoC
> +====================
> +
> +OpenPiton RISC-V SoC
> +--------------------
> +OpenPiton is an open source, manycore processor and research platform. It is a tiled manycore framework scalable from
> one to 1/2 billion cores. It supports a number of ISAs including RISC-V with its P-Mesh cache coherence protocol and
> networks on chip. It is highly configurable in both core and uncore components. OpenPiton has been verified in both ASIC
> and multiple Xilinx FPGA prototypes running full-stack Debian linux.
> +
> +RISCV-V Standard Bootflow
> +-------------------------
> +Currently, OpenPiton implements RISC-V standard bootflow in the following steps
> +mover.S -> u-boot-spl -> opensbi -> u-boot -> Linux
> +This board supports S-mode u-boot as well as M-mode SPL
> +
> +Building OpenPition
> +---------------------
> +If you'd like to build OpenPiton, please go to OpenPiton github repo to build from the latest changes

Please link to the github.

> +
> +Building Images
> +---------------------------
> +
> +SPL
> +---
> +
> +1. Add the RISC-V toolchain to your PATH.
> +2. Setup ARCH & cross compilation environment variable:
> +
> +.. code-block:: none
> +
> +   export CROSS_COMPILE=<riscv64 toolchain prefix>
> +   export ARCH=riscv
> +
> +3. make openpiton_riscv64_defconfig
> +4. make
> +
> +U-Boot
> +------
> +
> +1. Add the RISC-V toolchain to your PATH.
> +2. Setup ARCH & cross compilation environment variable:
> +
> +.. code-block:: none
> +
> +   export CROSS_COMPILE=<riscv64 toolchain prefix>
> +   export ARCH=riscv
> +
> +3. make openpiton_riscv64_defconfig
> +4. make menuconfig, then change CONFIG_SYS_TEXT_BASE to 0x81020000

Why isn't this the default?

> +5. make
> +
> +
> +opensbi
> +-------
> +
> +1. Add the RISC-V toolchain to your PATH.
> +2. Setup ARCH & cross compilation environment variable:
> +
> +.. code-block:: none
> +
> +   export CROSS_COMPILE=<riscv64 toolchain prefix>
> +   export ARCH=riscv
> +
> +3. Go to OpenSBI directory
> +4. Edit platform/fpga/openpiton/config.mk, and change FW_TEXT_START to 0x81000000
> +5. make PLATFORM=fpga/openpiton FW_PAYLOAD_PATH=<path to u-boot-nodtb.bin>
> +
> +
> +Using fw_payload.bin with linux
> +-------------------------------
> +Put the generated fw_payload.bin into the /boot directory on the root filesystem, plug in the SD card, then flash the
> bitstream. Linux will boot automatically.
> +
> +Booting
> +-------
> +Once you plugin the sdcard and power up, you should see the U-Boot prompt.
> +
> +Sample Dual-core Debian boot log from OpenPiton
> +-----------------------------------------------
> +
> +.. code-block:: none
> +
> +  <debug_uart>

Please use a log without debug uart.

> +  spl_early_init
> +  Bound device uart at fff0c2c000 to root_driver
> +  Bound device sdhci at 0xf000000000.blk to sdhci at 0xf000000000
> +  Bound device sdhci at 0xf000000000 to root_driver
> +  Bound device clint at fff1020000 to root_driver
> +  ofnode_read_u32_array: ranges: fdtdec_get_int_array: ranges
> +  get_prop_check_min_len: ranges
> +  fdtdec_get_addr_size_auto_parent: na=1, ns=0, fdtdec_get_addr_size_fixed: reg: addr=00000000x
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: x (520835)
> +  Bound device riscv_timer to cpu at 0
> +  Bound device cpu at 0 to cpus
> +  fdtdec_get_addr_size_auto_parent: na=1, ns=0, fdtdec_get_addr_size_fixed: reg: addr=00000000x
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: x (520835)
> +  Bound device cpu at 1 to cpus
> +  Bound device cpus to root_driver
> +  ofnode_read_prop: riscv,isa: rv64imafdc
> +  ofnode_read_prop: riscv,isa: rv64imafdc
> +  ofnode_read_u32_index: clock-frequency: (not found)
> +  fdtdec_get_addr_size_auto_parent: na=2, ns=2, fdtdec_get_addr_size_fixed: reg: addr=00000000x
> +  sifive_clint clint at fff1020000: missing clocks or clock-frequency property; falling back on timebase-frequency
> +  fdtdec_get_addr_size_auto_parent: na=2, ns=2, fdtdec_get_addr_size_fixed: reg: addr=00000000x
> +  ofnode_read_u32_index: reg: x (0)
> +  ofnode_read_u32_index: reg: x (1)
> +  fdtdec_get_addr_size_auto_parent: na=2, ns=2, fdtdec_get_addr_size_fixed: reg: addr=00000000x
> +  ofnode_read_u32_index: reg-offset: (not found)
> +  ofnode_read_u32_index: reg-shift: x (0)
> +  ofnode_read_u32_index: reg-io-width: (not found)
> +  ofnode_read_u32_index: clock-frequency: x (66667000)
> +  hello world from uboot spl
> +   Class     Index  Probed  Driver                Name
> +  -----------------------------------------------------------
> +             10s  -2147434144  [  ]                       20s  root_driver
> +             10s  -2147433712  [  ]                       20s  |-- uart at fff0c2c000
> +             10s  -2147433776  [  ]                       20s  |-- sdhci at 0xf000000000
> +             10s  -2147433528  [  ]                       20s  |   `-- sdhci at 0xf000000000.blk
> +             10s  -2147433608  [  ]                       20s  |-- clint at fff1020000
> +             10s  -2147434112  [  ]                       20s  `-- cpus
> +             10s  -2147433552  [  ]                       20s      |-- cpu at 0
> +             10s  -2147433608  [  ]                       20s      |   `-- riscv_timer
> +             10s  -2147433552  [  ]                       20s      `-- cpu at 1
> +  >>SPL: board_init_r()
> +  using memory lx-lx for malloc()
> +  spl_init
> +  Trying to boot from MMC1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  spl: mmc boot mode: fs
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  GPT: first_usable_lba: X last_usable_lba: X last lba: 22
> +  alloc_read_gpt_entries: count = 128 * 128 = 16384
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  part_get_info_efi: start 0x800, size 0x3b71800, name
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  EXT4 features COMPAT: 0000003c INCOMPAT: 00000242 RO_COMPAT: 0000007b
> +  EXT2 rev 1, inode_size 256, descriptor size 32
> +  ext4fs read 0 group descriptor (blkno 1 blkoff 0)
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  Iterate dir fw_payload.bin
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  iterate >.<
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  iterate >..<
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  iterate >lost+found<
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  iterate >fw_payload.bin<
> +  ext4fs read 1 group descriptor (blkno 1 blkoff 32)
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  mkimage signature not found - ih_magic = 50433
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  Jumping to U-Boot
> +  loaded - jumping to U-Boot...
> +  image entry point: 0x
> +  ofnode_read_u32_index: reg: x (0)
> +  ofnode_read_u32_index: reg: x (1)
> +
> +  OpenSBI v0.9-5-gd06cb61
> +     ____                    _____ ____ _____
> +    / __ \                  / ____|  _ \_   _|
> +   | |  | |_ __   ___ _ __ | (___ | |_) || |
> +   | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
> +   | |__| | |_) |  __/ | | |____) | |_) || |_
> +    \____/| .__/ \___|_| |_|_____/|____/_____|
> +          | |
> +          |_|
> +
> +  Platform Name             : OPENPITON RISC-V
> +  Platform Features         : timer,mfdeleg
> +  Platform HART Count       : 3
> +  Firmware Base             : 0x81000000
> +  Firmware Size             : 104 KB
> +  Runtime SBI Version       : 0.2
> +
> +  Domain0 Name              : root
> +  Domain0 Boot HART         : 0
> +  Domain0 HARTs             : 0*,1*,2*
> +  Domain0 Region00          : 0x0000000081000000-0x000000008101ffff ()
> +  Domain0 Region01          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
> +  Domain0 Next Address      : 0x0000000081200000
> +  Domain0 Next Arg1         : 0x0000000082200000
> +  Domain0 Next Mode         : S-mode
> +  Domain0 SysReset          : yes
> +
> +  Boot HART ID              : 0
> +  Boot HART Domain          : root
> +  Boot HART ISA             : rv64imafdcsu
> +  Boot HART Features        : scounteren,mcounteren
> +  Boot HART PMP Count       : 0
> +  Boot HART PMP Granularity : 0
> +  Boot HART PMP Address Bits: 0
> +  Boot HART MHPM Count      : 0
> +  Boot HART MHPM Count      : 0
> +  Boot HART MIDELEG         : 0x0000000000000222
> +  Boot HART MEDELEG         : 0x000000000000b109
> +  <debug_uart>
> +  initcall: 0000000081205cd0
> +  initcall: 000000008121f82c
> +  initcall: 000000008120992a
> +  initcall: 000000008120b2d4
> +  initcall: 0000000081205e92
> +  initcall: 0000000081205cea
> +  initcall: 0000000081205eda
> +  initcall: 0000000081205eaa
> +  initcall: 0000000081205eae
> +  initcall: 0000000081205e8c
> +  ofnode_read_bool: u-boot,dm-pre-reloc: true
> +  Looking for 'serial' at 1040, name uart at fff0c2c000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Found seq 0
> +  Bound device uart at fff0c2c000 to root_driver
> +  ofnode_read_bool: u-boot,dm-pre-reloc: true
> +  Looking for 'mmc' at 1872, name sdhci at 0xf000000000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  Looking for 'mmc' at 1872, name sdhci at 0xf000000000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  mmc_bind: alias ret=-2, devnum=-1
> +  Bound device sdhci at 0xf000000000.blk to sdhci at 0xf000000000
> +  Bound device sdhci at 0xf000000000 to root_driver
> +  ofnode_read_bool: u-boot,dm-pre-reloc: true
> +  Looking for 'timer' at 2008, name clint at fff1020000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  Bound device clint at fff1020000 to root_driver
> +  initcall: 000000008120028a
> +  ofnode_read_u32_array: ranges: fdtdec_get_int_array: ranges
> +  get_prop_check_min_len: ranges
> +  ofnode_read_bool: u-boot,dm-pre-reloc: true
> +  Looking for 'cpu' at 336, name cpu at 0
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: 0x7f283 (520835)
> +  Bound device riscv_timer to cpu at 0
> +  Bound device cpu at 0 to cpus
> +  ofnode_read_bool: u-boot,dm-pre-reloc: true
> +  Looking for 'cpu' at 644, name cpu at 1
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: 0x7f283 (520835)
> +  Bound device cpu at 1 to cpus
> +  Bound device cpus to root_driver
> +  Looking for highest alias id for 'cpu'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_get_by_index_tail: Node 'cpu at 0', property 'clocks', failed to request CLK index 0: -2
> +  Looking for highest alias id for 'cpu'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_get_by_index_tail: Node 'cpu at 1', property 'clocks', failed to request CLK index 0: -2
> +  ofnode_read_prop: riscv,isa: rv64imafdc
> +  initcall: 0000000081221336
> +  initcall: 0000000081213d8c
> +  env_init: Environment <NULL> init done (ret=0)
> +  initcall: 0000000081205e68
> +  initcall: 00000000812132fe
> +  OF: ** translation for device uart at fff0c2c000 **
> +  OF: bus is default (na=2, ns=2) on
> +  OF: translating address: ff000000 00c0c2f0
> +  OF: reached root node
> +  ofnode_read_u32_index: reg-offset: (not found)
> +  ofnode_read_u32_index: reg-shift: 0x0 (0)
> +  ofnode_read_u32_index: reg-io-width: (not found)
> +  clk_get_by_index_tail: Node 'uart at fff0c2c000', property 'clocks', failed to request CLK index 0: -2
> +  ofnode_read_u32_index: clock-frequency: 0x3f941f8 (66667000)
> +  initcall: 0000000081220592
> +
> +
> +  U-Boot 2021.01-g17d45f5d-dirty (Mar 14 2021 - 20:31:58 +0800)
> +
> +  initcall: 0000000081205db8
> +  U-Boot code: 81200000 -> 8123F0C0  BSS: -> 81241D10
> +  initcall: 0000000081205cfe
> +  initcall: 0000000081205e50
> +  DRAM:  initcall: 0000000081200318
> +  fdtdec_setup_mem_size_base: Initial DRAM size 40000000
> +  initcall: 0000000081205fca
> +  Monitor len: 00041D10
> +  Ram size: 40000000
> +  Ram top: C0000000
> +  initcall: 0000000081205cee
> +  initcall: 0000000081205eb2
> +  initcall: 0000000081205eb6
> +  initcall: 0000000081205eba
> +  initcall: 0000000081205d6e
> +  Reserving 263k for U-Boot at: bffbe000
> +  initcall: 0000000081205f2a
> +  Reserving 8316k for malloc() at: bf79f000
> +  initcall: 0000000081205ee2
> +  Reserving 112 Bytes for Board Info at: bf79ef90
> +  initcall: 0000000081205ebe
> +  initcall: 0000000081205d40
> +  Reserving 384 Bytes for Global Data at: bf79ee10
> +  initcall: 0000000081205ec2
> +  initcall: 0000000081205ec6
> +  initcall: 0000000081205eca
> +  initcall: 0000000081205ede
> +  initcall: 000000008120603a
> +  initcall: 000000008120031c
> +  fdtdec_setup_memory_banksize: DRAM Bank #0: start = 0x80000000, size = 0x40000000
> +  initcall: 0000000081205f5a
> +
> +  RAM Configuration:
> +  Bank #0: 80000000 1 GiB
> +
> +  DRAM:  1 GiB
> +  initcall: 0000000081206054
> +  initcall: 0000000081205d24
> +  New Stack Pointer is: bf79ee00
> +  initcall: 0000000081205ece
> +  initcall: 0000000081205ed2
> +  initcall: 0000000081205ed6
> +  initcall: 0000000081205de6
> +  Relocation Offset is: 3edbe000
> +  Relocating to bffbe000, new gd at bf79ee10, sp at bf79ee00
> +  initcall: 0000000081205ea6
> +  initcall: 0000000081205d02
> +  initcall: 00000000bffc40da
> +  initcall: 00000000bffc40de
> +  initcall: 00000000812060ee (relocated to 00000000bffc40ee)
> +  initcall: 0000000081206228 (relocated to 00000000bffc4228)
> +  initcall: 00000000812061f6 (relocated to 00000000bffc41f6)
> +  Pre-reloc malloc() used 0x990 bytes (2 KB)
> +  using memory 0xbf79f000-0xbffbe000 for malloc()
> +  initcall: 000000008120b2d4 (relocated to 00000000bffc92d4)
> +  initcall: 00000000812061e2 (relocated to 00000000bffc41e2)
> +  initcall: 000000008120622c (relocated to 00000000bffc422c)
> +  initcall: 0000000081206230 (relocated to 00000000bffc4230)
> +  initcall: 00000000812061cc (relocated to 00000000bffc41cc)
> +  clk_set_defaults()
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f090
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  Looking for 'serial' at 1040, name uart at fff0c2c000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Found seq 0
> +  Bound device uart at fff0c2c000 to root_driver
> +  Looking for 'mmc' at 1872, name sdhci at 0xf000000000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  Looking for 'mmc' at 1872, name sdhci at 0xf000000000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  mmc_bind: alias ret=-2, devnum=-1
> +  Bound device sdhci at 0xf000000000.blk to sdhci at 0xf000000000
> +  Bound device sdhci at 0xf000000000 to root_driver
> +  Looking for 'timer' at 2008, name clint at fff1020000
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  Bound device clint at fff1020000 to root_driver
> +  initcall: 00000000812008b4 (relocated to 00000000bffbe8b4)
> +  initcall: 000000008120623c (relocated to 00000000bffc423c)
> +  initcall: 0000000081206234 (relocated to 00000000bffc4234)
> +  initcall: 000000008120a64e (relocated to 00000000bffc864e)
> +  initcall: 0000000081213400 (relocated to 00000000bffd1400)
> +  OF: ** translation for device uart at fff0c2c000 **
> +  OF: bus is default (na=2, ns=2) on
> +  OF: translating address: ff000000 00c0c2f0
> +  OF: reached root node
> +  ofnode_read_u32_index: reg-offset: (not found)
> +  ofnode_read_u32_index: reg-shift: 0x0 (0)
> +  ofnode_read_u32_index: reg-io-width: (not found)
> +  clk_get_by_index_tail: Node 'uart at fff0c2c000', property 'clocks', failed to request CLK index 0: -2
> +  ofnode_read_u32_index: clock-frequency: 0x3f941f8 (66667000)
> +  clk_set_defaults(uart at fff0c2c000)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f180
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  initcall: 00000000812061b0 (relocated to 00000000bffc41b0)
> +  Now running in RAM - U-Boot at: bffbe000
> +  initcall: 0000000081200316 (relocated to 00000000bffbe316)
> +  ofnode_read_u32_array: ranges: fdtdec_get_int_array: ranges
> +  get_prop_check_min_len: ranges
> +  Looking for 'cpu' at 336, name cpu at 0
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: 0x7f283 (520835)
> +  Bound device riscv_timer to cpu at 0
> +  Bound device cpu at 0 to cpus
> +  Looking for 'cpu' at 644, name cpu at 1
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  Not found
> +  ofnode_read_u32_index: timebase-frequency: (not found)
> +  ofnode_read_u32_index: timebase-frequency: 0x7f283 (520835)
> +  Bound device cpu at 1 to cpus
> +  Bound device cpus to root_driver
> +  clk_set_defaults(cpus)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f860
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  Looking for highest alias id for 'cpu'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_set_defaults(cpu at 0)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f930
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  clk_get_by_index_tail: Node 'cpu at 0', property 'clocks', failed to request CLK index 0: -2
> +  Looking for highest alias id for 'cpu'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_set_defaults(cpu at 1)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79fac0
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  clk_get_by_index_tail: Node 'cpu at 1', property 'clocks', failed to request CLK index 0: -2
> +  initcall: 0000000081206238 (relocated to 00000000bffc4238)
> +  initcall: 0000000081206190 (relocated to 00000000bffc4190)
> +  MMC:   Looking for highest alias id for 'mmc'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_set_defaults(sdhci at 0xf000000000)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f2a0
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  sdhci at 0xf000000000: 0 (eMMC)
> +  initcall: 0000000081206136 (relocated to 00000000bffc4136)
> +  fdtdec_get_config_int: load-environment
> +  Using default environment
> +  Initial value for argc=3
> +  Final value for argc=3
> +  initcall: 0000000081206242 (relocated to 00000000bffc4242)
> +  initcall: 000000008120a666 (relocated to 00000000bffc8666)
> +  initcall: 0000000081206126 (relocated to 00000000bffc4126)
> +  initcall: 0000000081208990 (relocated to 00000000bffc6990)
> +  In:    uart at fff0c2c000
> +  Out:   uart at fff0c2c000
> +  Err:   uart at fff0c2c000
> +  Initial value for argc=3
> +  Final value for argc=3
> +  Initial value for argc=3
> +  Final value for argc=3
> +  Initial value for argc=3
> +  Final value for argc=3
> +  initcall: 0000000081200640 (relocated to 00000000bffbe640)
> +  initcall: 000000008120611c (relocated to 00000000bffc411c)
> +  fdtdec_get_config_int: bootdelay
> +  ### main_loop entered: bootdelay=-2
> +
> +  fdtdec_get_config_int: kernel-offset
> +  fdtdec_get_config_int: rootdisk-offset
> +  fdtdec_get_config_string: bootcmd
> +  fdtdec_get_config_int: bootsecure
> +  ### main_loop: bootcmd="fdt addr ${fdtcontroladdr}; fdt move ${fdtcontroladdr} 0x86000000; ext4load mmc 0:1
> 0x80200000 Image; booti 0x80200000 - 0x86000000; "
> +  Initial value for argc=3
> +  Final value for argc=3
> +  Initial value for argc=3
> +  Final value for argc=3
> +  blk_get_devnum_by_typename: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  miss: start 0, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 0, count 1
> +  part_init: try 'EFI': ret=0
> +  blk_get_devnum_by_typename: Device desc 00000000bf79f590
> +  miss: start 0, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 0, count 1
> +  part_init: try 'EFI': ret=0
> +  hit: start 0, count 1
> +  miss: start 1, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 1, count 1
> +  GPT: first_usable_lba: 22 last_usable_lba: 3B723DE last lba: 10000000
> +  alloc_read_gpt_entries: count = 128 * 128 = 16384
> +  miss: start 2, count 32
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  part_get_info_efi: start 0x800, size 0x3b71800, name
> +  miss: start 802, count 2
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 802, count 2
> +  EXT4 features COMPAT: 0000003c INCOMPAT: 00000242 RO_COMPAT: 0000007b
> +  EXT2 rev 1, inode_size 256, descriptor size 32
> +  ext4fs read 0 group descriptor (blkno 1 blkoff 0)
> +  miss: start 808, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 808, count 1
> +  miss: start bc8, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start bc8, count 1
> +  ofnode_read_prop: tick-timer: <not found>
> +  Looking for highest alias id for 'timer'
> +     - u-boot,dm-pre-reloc,
> +     - console, /uart at fff0c2c000
> +     - serial0, /uart at fff0c2c000
> +  clk_get_by_index_tail: Node 'clint at fff1020000', property 'clocks', failed to request CLK index 0: -2
> +  ofnode_read_u32_index: clock-frequency: (not found)
> +  clk_set_defaults(clint at fff1020000)
> +  clk_set_default_parents: could not read assigned-clock-parents for 00000000bf79f660
> +  ofnode_read_prop: assigned-clock-rates: <not found>
> +  OF: ** translation for device clint at fff1020000 **
> +  OF: bus is default (na=2, ns=2) on
> +  OF: translating address: ff000000 000002f1
> +  OF: reached root node
> +  sifive_clint clint at fff1020000: missing clocks or clock-frequency property; falling back on timebase-frequency
> +  Iterate dir Image
> +  miss: start cbc8, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >.<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >..<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >lost+found<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >fw_payload.bin<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >Image<
> +  ext4fs read 1 group descriptor (blkno 1 blkoff 32)
> +  hit: start 808, count 1
> +  miss: start 2081, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start 2081, count 1
> +  lmb_dump_all:
> +      memory.cnt             = 0x1
> +      memory.size            = 0x0
> +      memory.reg[0x0].base   = 0x80000000
> +                     .size   = 0x40000000
> +
> +      reserved.cnt           = 0x0
> +      reserved.size          = 0x0
> +  Iterate dir Image
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >.<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >..<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >lost+found<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >fw_payload.bin<
> +  hit: start cbc8, count 1
> +  hit: start cbc8, count 1
> +  iterate >Image<
> +  ext4fs read 1 group descriptor (blkno 1 blkoff 32)
> +  hit: start 808, count 1
> +  hit: start 2081, count 1
> +  miss: start bc800, count 12048
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  miss: start bf978, count 17
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  miss: start bf989, count 1
> +  blk_find_device: if_type=6, devnum=0: sdhci at 0xf000000000.blk, 6, 0
> +  fill: start bf989, count 1
> +  6492992 bytes read in 5329 ms (1.2 MiB/s)
> +  Initial value for argc=3
> +  Final value for argc=3
> +  Initial value for argc=3
> +  Final value for argc=3
> +  *  kernel: cmdline image address = 0x80200000
> +  ## Skipping init Ramdisk
> +  ## No init Ramdisk
> +     ramdisk start = 0x00000000, ramdisk end = 0x00000000
> +  *  fdt: cmdline image address = 0x86000000
> +  ## Checking for 'FDT'/'FDT Image' at 86000000
> +  *  fdt: raw FDT blob
> +  ## Flattened Device Tree blob at 86000000
> +     Booting using the fdt blob at 0x86000000
> +     of_flat_tree at 0x86000000 size 0x00001dbb
> +  Initial value for argc=3
> +  Final value for argc=3
> +  ## initrd_high = 0xc0000000, copy_to_ram = 1
> +     ramdisk load start = 0x00000000, ramdisk load end = 0x00000000
> +  Initial value for argc=3
> +  Final value for argc=3
> +  Initial value for argc=3
> +  Final value for argc=3
> +  using: FDT
> +  ## device tree at 0000000086000000 ... 0000000086001dba (len=19899 [0x4DBB])
> +     Loading Device Tree to 00000000bfffb000, end 00000000bffffdba ... OK
> +  Initial value for argc=3
> +  Final value for argc=3
> +  ## Transferring control to kernel (at address 80200000) ...
> +
> +  Starting kernel ...
> +
> +  [    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
> +  [    0.000000] Linux version 5.6.0-rc4-gb9d34f7e294d-dirty (eva at eva-virtual-machine) (gcc version 7.5.0 (Ubuntu
> 7.5.0-3ubuntu1~18.04)) #27 SMP Mon Mar 1 23:47:04 CST 2021
> +  [    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
> +  [    0.000000] printk: bootconsole [sbi0] enabled
> +  [    0.000000] Zone ranges:
> +  [    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
> +  [    0.000000]   Normal   empty
> +  [    0.000000] Movable zone start for each node
> +  [    0.000000] Early memory node ranges
> +  [    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
> +  [    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
> +  [    0.000000] On node 0 totalpages: 261632
> +  [    0.000000]   DMA32 zone: 4088 pages used for memmap
> +  [    0.000000]   DMA32 zone: 0 pages reserved
> +  [    0.000000]   DMA32 zone: 261632 pages, LIFO batch:63
> +  [    0.000000] software IO TLB: mapped [mem 0xbaff7000-0xbeff7000] (64MB)
> +  [    0.000000] SBI specification v0.2 detected
> +  [    0.000000] SBI implementation ID=0x1 Version=0x9
> +  [    0.000000] SBI v0.2 TIME extension detected
> +  [    0.000000] SBI v0.2 IPI extension detected
> +  [    0.000000] SBI v0.2 RFENCE extension detected
> +  [    0.000000] SBI v0.2 HSM extension detected
> +  [    0.000000] elf_hwcap is 0x112d
> +  [    0.000000] percpu: Embedded 16 pages/cpu s25368 r8192 d31976 u65536
> +  [    0.000000] pcpu-alloc: s25368 r8192 d31976 u65536 alloc=16*4096
> +  [    0.000000] pcpu-alloc: [0] 0 [0] 1
> +  [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 257544
> +  [    0.000000] Kernel command line: earlycon=sbi root=/dev/piton_sd1
> +  [    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
> +  [    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
> +  [    0.000000] Sorting __ex_table...
> +  [    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
> +  [    0.000000] Memory: 956188K/1046528K available (4357K kernel code, 286K rwdata, 1200K rodata, 168K init, 311K bss,
> 90340K reserved, 0K cma-reserved)
> +  [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
> +  [    0.000000] rcu: Hierarchical RCU implementation.
> +  [    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=2.
> +  [    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
> +  [    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
> +  [    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
> +  [    0.000000] plic: mapped 2 interrupts with 2 handlers for 4 contexts.
> +  [    0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
> +  [    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1ec037a6a, max_idle_ns:
> 7052723236599 ns
> +  [    0.000147] sched_clock: 64 bits at 520kHz, resolution 1919ns, wraps every 4398046510738ns
> +  [    0.009642] printk: console [hvc0] enabled
> +  [    0.009642] printk: console [hvc0] enabled
> +  [    0.018055] printk: bootconsole [sbi0] disabled
> +  [    0.018055] printk: bootconsole [sbi0] disabled
> +  [    0.028266] Calibrating delay loop (skipped), value calculated using timer frequency.. 1.04 BogoMIPS (lpj=5208)
> +  [    0.038993] pid_max: default: 32768 minimum: 301
> +  [    0.049869] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
> +  [    0.058262] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
> +  [    0.069225] *** VALIDATE tmpfs ***
> +  [    0.089356] *** VALIDATE proc ***
> +  [    0.101548] *** VALIDATE cgroup ***
> +  [    0.105423] *** VALIDATE cgroup2 ***
> +  [    0.144623] rcu: Hierarchical SRCU implementation.
> +  [    0.164975] smp: Bringing up secondary CPUs ...
> +  [    0.194931] smp: Brought up 1 node, 2 CPUs
> +  [    0.216819] devtmpfs: initialized
> +  [    0.247264] random: get_random_u32 called from bucket_table_alloc.isra.25+0x4e/0x15c with crng_init=0
> +  [    0.267593] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
> +  [    0.278485] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
> +  [    0.300550] NET: Registered protocol family 16
> +  [    0.834379] clocksource: Switched to clocksource riscv_clocksource
> +  [    0.842324] *** VALIDATE bpf ***
> +  [    0.856050] *** VALIDATE ramfs ***
> +  [    0.910981] NET: Registered protocol family 2
> +  [    0.937371] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)
> +  [    0.947904] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)
> +  [    0.959472] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)
> +  [    0.972158] TCP: Hash tables configured (established 8192 bind 8192)
> +  [    0.986974] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
> +  [    0.995658] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
> +  [    1.010319] NET: Registered protocol family 1
> +  [    1.038492] RPC: Registered named UNIX socket transport module.
> +  [    1.045494] RPC: Registered udp transport module.
> +  [    1.050417] RPC: Registered tcp transport module.
> +  [    1.055833] RPC: Registered tcp NFSv4.1 backchannel transport module.
> +  [    1.079432] Initialise system trusted keyrings
> +  [    1.090919] workingset: timestamp_bits=46 max_order=18 bucket_order=0
> +  [    1.442287] *** VALIDATE nfs ***
> +  [    1.447483] *** VALIDATE nfs4 ***
> +  [    1.452686] NFS: Registering the id_resolver key type
> +  [    1.458989] Key type id_resolver registered
> +  [    1.464122] Key type id_legacy registered
> +  [    1.468760] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
> +  [    1.476542] Installing knfsd (copyright (C) 1996 okir at monad.swb.de).
> +  [    1.979131] Key type asymmetric registered
> +  [    1.984371] Asymmetric key parser 'x509' registered
> +  [    1.990770] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
> +  [    1.999112] io scheduler mq-deadline registered
> +  [    2.004492] io scheduler kyber registered
> +  [    4.260627] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
> +  [    4.312162] fff0c2c000.uart: ttyS0 at MMIO 0xfff0c2c000 (irq = 1, base_baud = 4166687) is a 16550
> +  [    4.659782] loop: module loaded
> +  [    4.663995] piton_sd:v1.0 Apr 26, 2019
> +  [    4.663995]
> +  [    4.670302] gpt partition table header:
> +  [    4.670398] signature: 5452415020494645
> +  [    4.674979] revision: 10000
> +  [    4.678967] size: 5c
> +  [    4.681839] crc_header: 680c3ba9
> +  [    4.684662] reserved: 0
> +  [    4.688037] current lba: 1
> +  [    4.690560] backup lda: 3b723ff
> +  [    4.693880] partition entries lba: 2
> +  [    4.697190] number partition entries: 80
> +  [    4.700843] size partition entries: 80
> +  [   10.126082]  piton_sd: piton_sd1
> +  [   10.786268] libphy: Fixed MDIO Bus: probed
> +  [   10.837802] NET: Registered protocol family 10
> +  [   10.874758] Segment Routing with IPv6
> +  [   10.880578] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
> +  [   10.905701] NET: Registered protocol family 17
> +  [   10.918150] Key type dns_resolver registered
> +  [   10.932005] Loading compiled-in X.509 certificates
> +  [   11.147948] EXT4-fs (piton_sd1): mounted filesystem with ordered data mode. Opts: (null)
> +  [   11.158370] VFS: Mounted root (ext4 filesystem) readonly on device 254:1.
> +  [   11.233225] devtmpfs: mounted
> +  [   11.245265] Freeing unused kernel memory: 168K
> +  [   11.249963] This architecture does not have kernel memory protection.
> +  [   11.257188] Run /sbin/init as init process
> +  [   11.261430]   with arguments:
> +  [   11.265087]     /sbin/init
> +  [   11.267950]   with environment:
> +  [   11.271162]     HOME=/
> +  [   11.274453]     TERM=linux
> +  [   18.961333] systemd[1]: System time before build time, advancing clock.
> +  [   19.340844] systemd[1]: systemd 238 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT
> +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 defaul
> +  t-hierarchy=hybrid)
> +  [   19.370409] systemd[1]: Detected architecture riscv64.
> +
> +  Welcome to Debian GNU/Linux buster/sid!
> +
> +  [   19.587454] systemd[1]: Set hostname to <openpiton>.
> +  [   29.215526] random: systemd: uninitialized urandom read (16 bytes read)
> +  [   29.234429] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
> +  [  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
> +  [   29.272633] random: systemd: uninitialized urandom read (16 bytes read)
> +  [   29.392391] systemd[1]: Created slice system-serial\x2dgetty.slice.
> +  [  OK  ] Created slice system-serial\x2dgetty.slice.
> +  [   29.423151] random: systemd: uninitialized urandom read (16 bytes read)
> +  [   29.441241] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
> +  [  OK  ] Started Dispatch Password Requests to Console Directory Watch.
> +  [   29.526093] systemd[1]: Created slice system-getty.slice.
> +  [  OK  ] Created slice system-getty.slice.
> +  [   29.555742] systemd[1]: Reached target Swap.
> +  [  OK  ] Reached target Swap.
> +  [   29.593093] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
> +  [  OK  ] Started Forward Password Requests to Wall Directory Watch.
> +  [   29.628869] systemd[1]: Reached target Local Encrypted Volumes.
> +  [  OK  ] Reached target Local Encrypted Volumes.
> +  [   29.677206] systemd[1]: Listening on Journal Socket.
> +  [  OK  ] Listening on Journal Socket.
> +  [   29.861203] systemd[1]: Starting Remount Root and Kernel File Systems...
> +           Starting Remount Root and Kernel File Systems...
> +  [   29.987658] systemd[1]: Listening on Journal Socket (/dev/log).
> +  [  OK  ] Listening on Journal Socket (/dev/log).
> +           Starting Load Kernel Modules...
> +           Mounting Kernel Debug File System...
> +  [  OK  ] Listening on udev Kernel Socket.
> +  [  OK  ] Reached target Paths.
> +           Starting Journal Service...
> +           Starting Create Static Device Nodes in /dev...
> +  [  OK  ] Reached target Remote File Systems.
> +  [  OK  ] Reached target Slices.
> +  [  OK  ] Listening on udev Control Socket.
> +           Starting udev Coldplug all Devices...
> +  [  OK  ] Reached target Sockets.
> +  [   34.481282] systemd[1]: Started Remount Root and Kernel File Systems.
> +  [  OK  ] Started Remount Root and Kernel File Systems.
> +  [   35.320761] systemd[1]: Started Load Kernel Modules.
> +  [  OK  ] Started Load Kernel Modules.
> +  [   35.438044] systemd[1]: Mounted Kernel Debug File System.
> +  [  OK  ] Mounted Kernel Debug File System.
> +  [   35.771088] systemd[1]: Started Create Static Device Nodes in /dev.
> +  [  OK  ] Started Create Static Device Nodes in /dev.
> +  [   36.367663] systemd[1]: Starting Apply Kernel Variables...
> +           Starting Apply Kernel Variables...
> +  [   39.671147] systemd[1]: Starting Load/Save Random Seed...
> +           Starting Load/Save Random Seed...
> +  [   39.737905] systemd[1]: Reached target Local File Systems (Pre).
> +  [  OK  ] Reached target Local File Systems (Pre).
> +  [   39.830756] systemd[1]: Reached target Local File Systems.
> +  [  OK  ] Reached target Local File Systems.
> +  [   40.432728] systemd[1]: Starting udev Kernel Device Manager...
> +           Starting udev Kernel Device Manager...
> +  [   40.551781] systemd[1]: Started Journal Service.
> +  [  OK  ] Started Journal Service.
> +  [  OK  ] Started Apply Kernel Variables.
> +           Starting Raise network interfaces...
> +           Starting Flush Journal to Persistent Storage...
> +  [  OK  ] Started Load/Save Random Seed.
> +  [  OK  ] Started udev Kernel Device Manager.
> +  [*     ] (1 of 4) A start job is running for&ersistent Storage (23s / 1min 44s)[   53.102639] systemd-journald[93]:
> Received request to flush runtime journal from PID 1
> +  [  OK  ] Started Flush Journal to Persistent Storage.
> +           Starting Create Volatile Files and Directories...
> +  [  OK  ] Started Raise network interfaces.
> +  [  OK  ] Reached target Network.
> +  [FAILED] Failed to start Create Volatile Files and Directories.
> +  See 'systemctl status systemd-tmpfiles-setup.service' for details.
> +           Starting Update UTMP about System Boot/Shutdown...
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [  OK  ] Reached target System Time Synchronized.
> +  [  OK  ] Stopped Network Time Synchronization.
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [  OK  ] Stopped Network Time Synchronization.
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [  OK  ] Stopped Network Time Synchronization.
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [  OK  ] Stopped Network Time Synchronization.
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [FAILED] Failed to start Update UTMP about System Boot/Shutdown.
> +  See 'systemctl status systemd-update-utmp.service' for details.
> +  [DEPEND] Dependency failed for Update UTMP about System Runlevel Changes.
> +  [  OK  ] Stopped Network Time Synchronization.
> +  [FAILED] Failed to start Network Time Synchronization.
> +  See 'systemctl status systemd-timesyncd.service' for details.
> +  [*     ] (2 of 2) A start job is running for&v-hvc0.device (2min 6s / 4min 33s)
> +  [  OK  ] Found device /dev/hvc0.
> +  [  OK  ] Started udev Coldplug all Devices.
> +  [  OK  ] Reached target System Initialization.
> +  [  OK  ] Started Daily apt download activities.
> +  [  OK  ] Reached target Basic System.
> +           Starting Permit User Sessions...
> +  [  OK  ] Started Daily apt upgrade and clean activities.
> +  [  OK  ] Started Daily Cleanup of Temporary Directories.
> +  [  OK  ] Reached target Timers.
> +  [  OK  ] Started Regular background program processing daemon.
> +  [  OK  ] Started Permit User Sessions.
> +  [  OK  ] Started Serial Getty on hvc0.
> +  [  OK  ] Reached target Login Prompts.
> +  [  OK  ] Reached target Multi-User System.
> +  [  OK  ] Reached target Graphical Interface.
> +
> +  Debian GNU/Linux buster/sid openpiton hvc0
> +
> +  openpiton login: openpiton
> +  Password:
> +  Linux openpiton 5.6.0-rc4-gb9d34f7e294d-dirty #27 SMP Mon Mar 1 23:47:04 CST 2021 riscv64
> +
> +  The programs included with the Debian GNU/Linux system are free software;
> +  the exact distribution terms for each program are described in the
> +  individual files in /usr/share/doc/*/copyright.
> +
> +  Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
> +  permitted by applicable law.
> +  openpiton at openpiton:~$ lscpu
> +  Architecture:        riscv64
> +  Byte Order:          Little Endian
> +  CPU(s):              2
> +  On-line CPU(s) list: 0,1
> +  Thread(s) per core:  2
> +  Core(s) per socket:  1
> +  Socket(s):           1
> +  openpiton at openpiton:~$
> +  openpiton at openpiton:~$
> diff --git a/include/configs/openpiton-riscv.h b/include/configs/openpiton-riscv.h
> new file mode 100644
> index 00000000..0f30609b
> --- /dev/null
> +++ b/include/configs/openpiton-riscv.h
> @@ -0,0 +1,58 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (c) 2019 Western Digital Corporation or its affiliates.
> + * Copyright (c) 2021 Tianrui Wei
> + *
> + * Authors:
> + *   Anup Patel <anup.patel at wdc.com>
> + *   Tianrui Wei <tianrui-wei at outlook.com>
> + */
> +
> +#ifndef __OPENPITON_RISCV_CONFIG_H
> +#define __OPENPITON_RISCV_CONFIG_H
> +
> +#include <linux/sizes.h>
> +#define DEBUG
> +#ifdef CONFIG_SPL
> +#define CONFIG_SPL_MAX_SIZE     0x00100000
> +#define CONFIG_SPL_BSS_START_ADDR   0x82000000
> +#define CONFIG_SPL_BSS_MAX_SIZE     0x00100000
> +#define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SPL_BSS_START_ADDR + \
> +		CONFIG_SPL_BSS_MAX_SIZE)
> +#define CONFIG_SYS_SPL_MALLOC_SIZE  0x0100000
> +#define CONFIG_SPL_STACK    (0x80000000 + 0x04000000 - \

Please use SZ_64M here, or just use an absolute address.

> +		GENERATED_GBL_DATA_SIZE)
> +
> +#define CONFIG_SPL_FS_LOAD_PAYLOAD_NAME "boot/fw_payload.bin"
> +#define CONFIG_SPL_GD_ADDR 0x85000000
> +#endif
> +
> +/* Environment options */
> +#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_256M
> +#define CONFIG_SYS_BOOTM_LEN        SZ_256M
> +
> +/* -------------------------------------------------
> + * Environment
> + */
> +//Disable persistent environment variable storage
> +#define CONFIG_ENV_IS_NOWHERE   1
> +
> +/* ---------------------------------------------------------------------
> + * Board boot configuration
> + */
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS "\0"

Please define some of the raw addresses used below to make modifying the
boot process easier. For example,

	fdt_addr_r=0x86000000
	kernel_addr_r=0x80200000
	image=Image
	mmcdev=0
	mmcpart=1

> +
> +#define CONFIG_USE_BOOTCOMMAND
> +#define CONFIG_BOOTCOMMAND \
> +	"fdt addr ${fdtcontroladdr}; " \
> +	"fdt move ${fdtcontroladdr} 0x86000000; " \
> +	"ext4load mmc 0:1 0x80200000 boot/Image; " \

Can you use "load" from CONFIG_CMD_FS_GENERIC?

> +	"booti 0x80200000 - 0x86000000; "

Is there a bootm flow?

> +
> +#define CONFIG_TIMESTAMP	/* Print image info with timestamp */
> +
> +#endif/* __CONFIG_H */
> 

--Sean


More information about the U-Boot mailing list