[1/5] sifive: fu540: Add Booting from SPI
Commit Message
U-Boot SPL 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
Trying to boot from MMC1
U-Boot 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
CPU: rv64imafdc
Model: SiFive HiFive Unleashed A00
DRAM: 8 GiB
MMC: spi@10050000:mmc@0: 0
Loading Environment from SPI Flash... SF: Detected is25wp256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
*** Warning - bad CRC, using default environment
In: serial@10010000
Out: serial@10010000
Err: serial@10010000
Net: eth0: ethernet@10090000
Hit any key to stop autoboot: 0
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
.../dts/hifive-unleashed-a00-u-boot.dtsi | 12 ++++++
board/sifive/fu540/fu540.c | 3 ++
configs/sifive_fu540_spi_defconfig | 26 +++++++++++
doc/board/sifive/fu540.rst | 43 +++++++++++++++++++
4 files changed, 84 insertions(+)
create mode 100644 configs/sifive_fu540_spi_defconfig
Comments
Hi Jagan,
On Mon, Apr 20, 2020 at 10:05 PM Jagan Teki <jagan@amarulasolutions.com> wrote:
>
> U-Boot SPL 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
> Trying to boot from MMC1
This log seems to be SD boot, not SPI boot
>
> U-Boot 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
>
> CPU: rv64imafdc
> Model: SiFive HiFive Unleashed A00
> DRAM: 8 GiB
> MMC: spi@10050000:mmc@0: 0
> Loading Environment from SPI Flash... SF: Detected is25wp256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
> *** Warning - bad CRC, using default environment
>
> In: serial@10010000
> Out: serial@10010000
> Err: serial@10010000
> Net: eth0: ethernet@10090000
> Hit any key to stop autoboot: 0
>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> .../dts/hifive-unleashed-a00-u-boot.dtsi | 12 ++++++
> board/sifive/fu540/fu540.c | 3 ++
> configs/sifive_fu540_spi_defconfig | 26 +++++++++++
> doc/board/sifive/fu540.rst | 43 +++++++++++++++++++
> 4 files changed, 84 insertions(+)
> create mode 100644 configs/sifive_fu540_spi_defconfig
>
> diff --git a/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi b/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> index 0162f59f60..f5a208398f 100644
> --- a/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> +++ b/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> @@ -12,6 +12,10 @@
> spi2 = &qspi2;
> };
>
> + config {
> + u-boot,spl-payload-offset = <0x105000>; /* @ 1044KB */
Can we add some comments about how this is chosen?
> + };
> +
> hfclk {
> u-boot,dm-spl;
> };
> @@ -21,6 +25,14 @@
> };
> };
>
> +&qspi0 {
> + u-boot,dm-spl;
> +
> + flash@0 {
> + u-boot,dm-spl;
> + };
> +};
> +
> &qspi2 {
> mmc@0 {
> u-boot,dm-spl;
> diff --git a/board/sifive/fu540/fu540.c b/board/sifive/fu540/fu540.c
> index 131fee8898..84dd20e29d 100644
> --- a/board/sifive/fu540/fu540.c
> +++ b/board/sifive/fu540/fu540.c
> @@ -129,6 +129,9 @@ void board_boot_order(u32 *spl_boot_list)
> u32 boot_devices[] = {
> #ifdef CONFIG_SPL_MMC_SUPPORT
> BOOT_DEVICE_MMC1,
> +#endif
> +#ifdef CONFIG_SPL_SPI_LOAD
> + BOOT_DEVICE_SPI,
> #endif
> };
>
> diff --git a/configs/sifive_fu540_spi_defconfig b/configs/sifive_fu540_spi_defconfig
> new file mode 100644
> index 0000000000..24d0a9338e
> --- /dev/null
> +++ b/configs/sifive_fu540_spi_defconfig
> @@ -0,0 +1,26 @@
> +CONFIG_RISCV=y
> +CONFIG_ENV_SIZE=0x20000
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_TARGET_SIFIVE_FU540=y
> +CONFIG_ARCH_RV64I=y
> +CONFIG_RISCV_SMODE=y
> +CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_FIT=y
> +CONFIG_MISC_INIT_R=y
> +CONFIG_DISPLAY_CPUINFO=y
> +CONFIG_DISPLAY_BOARDINFO=y
> +CONFIG_DEFAULT_DEVICE_TREE="hifive-unleashed-a00"
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> +CONFIG_DM_MTD=y
> +CONFIG_SPL_SEPARATE_BSS=y
> +CONFIG_SPL=y
> +CONFIG_SPL_DM_SEQ_ALIAS=y
> +CONFIG_SPL_DM_SPI=y
> +CONFIG_SPL_SPI_FLASH_SUPPORT=y
> +CONFIG_SPL_SPI_SUPPORT=y
> +CONFIG_SPL_SPI_LOAD=y
> +CONFIG_SPL_YMODEM_SUPPORT=y
> +CONFIG_SPL_CLK=y
> +CONFIG_SPL_GPIO_SUPPORT=y
> +CONFIG_SYS_MALLOC_F_LEN=0x3000
> +CONFIG_SIFIVE_FU540_DDR=y
These config options should be ordered by "make savedefconfg"
> diff --git a/doc/board/sifive/fu540.rst b/doc/board/sifive/fu540.rst
> index 691ef232e2..14323e0985 100644
> --- a/doc/board/sifive/fu540.rst
> +++ b/doc/board/sifive/fu540.rst
> @@ -391,3 +391,46 @@ Program the SD card
> Change DIP switches MSEL[3:0] are set to 1011
>
> Insert the SD card and power up the board.
> +
> +Booting from SPI
> +----------------
> +
> +Use steps from "Building" section for building the U-Boot
> +
> +.. code-block:: none
> +
> + export ARCH=riscv
> + export CROSS_COMPILE=<riscv64 toolchain prefix>
> + make sifive_fu540_spi_defconfig
> + make
> +
> +Partition the SPI in Linux via mtdblock. (Require to boot
> +the board in SD boot mode by enabling MTD block in Linux)
> +
> +.. code-block:: none
> +
> + # sgdisk --clear \
> + > --set-alignment=2 \
> + > --new=1:40:2087 --change-name=1:loader1 --typecode=1:5B193300-FC78-40CD-8002-E86C45580B47 \
> + > --new=2:2088:10279 --change-name=2:loader2 --typecode=2:2E54B353-1271-4842-806F-E436D6AF6985 \
> + > --new=3:10536:65494 --change-name=3:rootfs --typecode=3:0FC63DAF-8483-4772-8E79-3D69D8477DE4 \
> + > /dev/mtdblock0
> +
> +Program the SPI (Require to boot the board in SD boot mode)
> +on U-Boot proper.
> +
> +.. code-block:: none
> +
> + sf erase 0x5000 0x100000
> + tftpboot $kernel_addr_r u-boot-spl.bin
> + sf write $kernel_addr_r 0x5000 $filesize
> +
> + sf erase 0x105000 0x100000
> + tftpboot $kernel_addr_r u-boot.itb
> + sf write $kernel_addr_r 0x105000 $filesize
> +
> +Power off the board
> +
> +Change DIP switches MSEL[3:0] are set to 0110
> +
> +Power up the board.
> --
Looks good otherwise:
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Regards,
Bin
On Mon, Apr 20, 2020 at 7:54 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> Hi Jagan,
>
> On Mon, Apr 20, 2020 at 10:05 PM Jagan Teki <jagan@amarulasolutions.com> wrote:
> >
> > U-Boot SPL 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
> > Trying to boot from MMC1
>
> This log seems to be SD boot, not SPI boot
Wrong log added, my bad.
>
> >
> > U-Boot 2020.04-rc4-g0b8ed9b8b6 (Apr 20 2020 - 18:31:50 +0530)
> >
> > CPU: rv64imafdc
> > Model: SiFive HiFive Unleashed A00
> > DRAM: 8 GiB
> > MMC: spi@10050000:mmc@0: 0
> > Loading Environment from SPI Flash... SF: Detected is25wp256 with page size 256 Bytes, erase size 4 KiB, total 32 MiB
> > *** Warning - bad CRC, using default environment
> >
> > In: serial@10010000
> > Out: serial@10010000
> > Err: serial@10010000
> > Net: eth0: ethernet@10090000
> > Hit any key to stop autoboot: 0
> >
> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> > ---
> > .../dts/hifive-unleashed-a00-u-boot.dtsi | 12 ++++++
> > board/sifive/fu540/fu540.c | 3 ++
> > configs/sifive_fu540_spi_defconfig | 26 +++++++++++
> > doc/board/sifive/fu540.rst | 43 +++++++++++++++++++
> > 4 files changed, 84 insertions(+)
> > create mode 100644 configs/sifive_fu540_spi_defconfig
> >
> > diff --git a/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi b/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> > index 0162f59f60..f5a208398f 100644
> > --- a/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> > +++ b/arch/riscv/dts/hifive-unleashed-a00-u-boot.dtsi
> > @@ -12,6 +12,10 @@
> > spi2 = &qspi2;
> > };
> >
> > + config {
> > + u-boot,spl-payload-offset = <0x105000>; /* @ 1044KB */
>
> Can we add some comments about how this is chosen?
Yes on the doc file of loader2 sector start. Yes will make it more
verbose if it isn't sufficient.
>
> > + };
> > +
> > hfclk {
> > u-boot,dm-spl;
> > };
> > @@ -21,6 +25,14 @@
> > };
> > };
> >
> > +&qspi0 {
> > + u-boot,dm-spl;
> > +
> > + flash@0 {
> > + u-boot,dm-spl;
> > + };
> > +};
> > +
> > &qspi2 {
> > mmc@0 {
> > u-boot,dm-spl;
> > diff --git a/board/sifive/fu540/fu540.c b/board/sifive/fu540/fu540.c
> > index 131fee8898..84dd20e29d 100644
> > --- a/board/sifive/fu540/fu540.c
> > +++ b/board/sifive/fu540/fu540.c
> > @@ -129,6 +129,9 @@ void board_boot_order(u32 *spl_boot_list)
> > u32 boot_devices[] = {
> > #ifdef CONFIG_SPL_MMC_SUPPORT
> > BOOT_DEVICE_MMC1,
> > +#endif
> > +#ifdef CONFIG_SPL_SPI_LOAD
> > + BOOT_DEVICE_SPI,
> > #endif
> > };
> >
> > diff --git a/configs/sifive_fu540_spi_defconfig b/configs/sifive_fu540_spi_defconfig
> > new file mode 100644
> > index 0000000000..24d0a9338e
> > --- /dev/null
> > +++ b/configs/sifive_fu540_spi_defconfig
> > @@ -0,0 +1,26 @@
> > +CONFIG_RISCV=y
> > +CONFIG_ENV_SIZE=0x20000
> > +CONFIG_NR_DRAM_BANKS=1
> > +CONFIG_TARGET_SIFIVE_FU540=y
> > +CONFIG_ARCH_RV64I=y
> > +CONFIG_RISCV_SMODE=y
> > +CONFIG_DISTRO_DEFAULTS=y
> > +CONFIG_FIT=y
> > +CONFIG_MISC_INIT_R=y
> > +CONFIG_DISPLAY_CPUINFO=y
> > +CONFIG_DISPLAY_BOARDINFO=y
> > +CONFIG_DEFAULT_DEVICE_TREE="hifive-unleashed-a00"
> > +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> > +CONFIG_DM_MTD=y
> > +CONFIG_SPL_SEPARATE_BSS=y
> > +CONFIG_SPL=y
> > +CONFIG_SPL_DM_SEQ_ALIAS=y
> > +CONFIG_SPL_DM_SPI=y
> > +CONFIG_SPL_SPI_FLASH_SUPPORT=y
> > +CONFIG_SPL_SPI_SUPPORT=y
> > +CONFIG_SPL_SPI_LOAD=y
> > +CONFIG_SPL_YMODEM_SUPPORT=y
> > +CONFIG_SPL_CLK=y
> > +CONFIG_SPL_GPIO_SUPPORT=y
> > +CONFIG_SYS_MALLOC_F_LEN=0x3000
> > +CONFIG_SIFIVE_FU540_DDR=y
>
> These config options should be ordered by "make savedefconfg"
Yes, I just sent it as the first series. Hoping to reuse existing
defconfig if we have any way to detect the boot mode at runtime like
reading MSEL.
Jagan.
@@ -12,6 +12,10 @@
spi2 = &qspi2;
};
+ config {
+ u-boot,spl-payload-offset = <0x105000>; /* @ 1044KB */
+ };
+
hfclk {
u-boot,dm-spl;
};
@@ -21,6 +25,14 @@
};
};
+&qspi0 {
+ u-boot,dm-spl;
+
+ flash@0 {
+ u-boot,dm-spl;
+ };
+};
+
&qspi2 {
mmc@0 {
u-boot,dm-spl;
@@ -129,6 +129,9 @@ void board_boot_order(u32 *spl_boot_list)
u32 boot_devices[] = {
#ifdef CONFIG_SPL_MMC_SUPPORT
BOOT_DEVICE_MMC1,
+#endif
+#ifdef CONFIG_SPL_SPI_LOAD
+ BOOT_DEVICE_SPI,
#endif
};
new file mode 100644
@@ -0,0 +1,26 @@
+CONFIG_RISCV=y
+CONFIG_ENV_SIZE=0x20000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_TARGET_SIFIVE_FU540=y
+CONFIG_ARCH_RV64I=y
+CONFIG_RISCV_SMODE=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
+CONFIG_MISC_INIT_R=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_DISPLAY_BOARDINFO=y
+CONFIG_DEFAULT_DEVICE_TREE="hifive-unleashed-a00"
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_DM_MTD=y
+CONFIG_SPL_SEPARATE_BSS=y
+CONFIG_SPL=y
+CONFIG_SPL_DM_SEQ_ALIAS=y
+CONFIG_SPL_DM_SPI=y
+CONFIG_SPL_SPI_FLASH_SUPPORT=y
+CONFIG_SPL_SPI_SUPPORT=y
+CONFIG_SPL_SPI_LOAD=y
+CONFIG_SPL_YMODEM_SUPPORT=y
+CONFIG_SPL_CLK=y
+CONFIG_SPL_GPIO_SUPPORT=y
+CONFIG_SYS_MALLOC_F_LEN=0x3000
+CONFIG_SIFIVE_FU540_DDR=y
@@ -391,3 +391,46 @@ Program the SD card
Change DIP switches MSEL[3:0] are set to 1011
Insert the SD card and power up the board.
+
+Booting from SPI
+----------------
+
+Use steps from "Building" section for building the U-Boot
+
+.. code-block:: none
+
+ export ARCH=riscv
+ export CROSS_COMPILE=<riscv64 toolchain prefix>
+ make sifive_fu540_spi_defconfig
+ make
+
+Partition the SPI in Linux via mtdblock. (Require to boot
+the board in SD boot mode by enabling MTD block in Linux)
+
+.. code-block:: none
+
+ # sgdisk --clear \
+ > --set-alignment=2 \
+ > --new=1:40:2087 --change-name=1:loader1 --typecode=1:5B193300-FC78-40CD-8002-E86C45580B47 \
+ > --new=2:2088:10279 --change-name=2:loader2 --typecode=2:2E54B353-1271-4842-806F-E436D6AF6985 \
+ > --new=3:10536:65494 --change-name=3:rootfs --typecode=3:0FC63DAF-8483-4772-8E79-3D69D8477DE4 \
+ > /dev/mtdblock0
+
+Program the SPI (Require to boot the board in SD boot mode)
+on U-Boot proper.
+
+.. code-block:: none
+
+ sf erase 0x5000 0x100000
+ tftpboot $kernel_addr_r u-boot-spl.bin
+ sf write $kernel_addr_r 0x5000 $filesize
+
+ sf erase 0x105000 0x100000
+ tftpboot $kernel_addr_r u-boot.itb
+ sf write $kernel_addr_r 0x105000 $filesize
+
+Power off the board
+
+Change DIP switches MSEL[3:0] are set to 0110
+
+Power up the board.