mirror of
https://github.com/Fishwaldo/opensbi.git
synced 2025-03-15 19:31:32 +00:00
docs: Update unleashed platform guide.
Following updates to fu540 platform guide. 1. Update a section about flashing the firmware binary to sdcard with correct partition identifier. 2. Refer the individual payload section. 3. Update uboot booting section. Signed-off-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
parent
0db43770b3
commit
d046974cf6
1 changed files with 118 additions and 37 deletions
|
@ -13,59 +13,47 @@ Platform Options
|
|||
As hart0 in the FU540 doesn't have an MMU, only harts 1-4 boot by default.
|
||||
A hart mask i.e. *FU540_ENABLED_HART_MASK* compile time option is provided to
|
||||
select any other hart for booting. Please keep in mind that this is not
|
||||
platform wide option. It can only be specificd for FU540 platform in following way.
|
||||
platform wide option. It can only be specified for FU540 platform in following way.
|
||||
|
||||
```
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=Image FU540_ENABLED_HART_MASK=0x02
|
||||
```
|
||||
This will let the board boot only hart1 instead of default 1-4.
|
||||
|
||||
Booting SiFive Fu540 Platform
|
||||
Building SiFive Fu540 Platform
|
||||
-----------------------------
|
||||
|
||||
As of this writing, the required Linux kernel and U-Boot patches are not
|
||||
accepted in mainline. Please follow the below instructions to cherry-pick
|
||||
them into your repository.
|
||||
|
||||
[U-Boot patches](../firmware/payload_uboot.md)
|
||||
|
||||
[Linux kernel patches](../firmware/payload_linux.md)
|
||||
|
||||
**Linux Kernel Payload**
|
||||
|
||||
Build:
|
||||
|
||||
```
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image
|
||||
```
|
||||
|
||||
Flash:
|
||||
The generated firmware binary should be copied to the first partition of the sdcard.
|
||||
|
||||
```
|
||||
dd if=build/platform/sifive/fu540/firmware/fw_payload.bin of=/dev/disk2s1 bs=1024
|
||||
```
|
||||
|
||||
**U-Boot Payload**
|
||||
|
||||
Note: U-Boot doesn't have SMP support. So you can only boot single cpu with non-smp
|
||||
kernel configuration using U-Boot.
|
||||
|
||||
Build:
|
||||
The command-line example here assumes that U-Boot was compiled using sifive_fu540_defconfig configuration.
|
||||
|
||||
The commandline example here assumes that U-Boot was compiled using sifive_fu540_defconfig configuration.
|
||||
With SMP support enabled in U-Boot:
|
||||
|
||||
```
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=<u-boot_build_dir>/u-boot.bin
|
||||
```
|
||||
|
||||
Without SMP support enabled in U-Boot:
|
||||
```
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=<u-boot_build_dir>/u-boot.bin FU540_ENABLED_HART_MASK=0x02
|
||||
```
|
||||
|
||||
Flash:
|
||||
The generated firmware binary should be copied to the first partition of the sdcard.
|
||||
|
||||
```
|
||||
dd if=build/platform/sifive/fu540/firmware/fw_payload.bin of=/dev/disk2s1 bs=1024
|
||||
```
|
||||
U-Boot tftp boot method can be used to load kernel image in U-Boot prompt.
|
||||
|
||||
Note: As the U-Boot & Linux kernel patches are not in upstream it, you can cherry-pick from here.
|
||||
|
||||
U-Boot patchset:
|
||||
https://lists.denx.de/pipermail/u-boot/2019-January/355941.html
|
||||
|
||||
Linux kernel patchset:
|
||||
https://lkml.org/lkml/2019/1/8/192
|
||||
|
||||
**U-Boot & Linux Kernel as a single payload**
|
||||
|
||||
A single monolithic image containing both U-Boot & Linux can also be used if network boot setup is
|
||||
|
@ -78,8 +66,9 @@ mkimage -A riscv -O linux -T kernel -C none -a 0x80200000 -e 0x80200000 -n Linux
|
|||
<linux_build_directory>/arch/riscv/boot/uImage
|
||||
```
|
||||
|
||||
2. Create a temporary image with u-boot.bin as the first payload. The commandline example here assumes
|
||||
that U-Boot was compiled using sifive_fu540_defconfig configuration.
|
||||
2. Create a temporary image with u-boot.bin as the first payload. The command-line
|
||||
example here assumes that U-Boot was compiled using sifive_fu540_defconfig
|
||||
configuration.
|
||||
```
|
||||
dd if=~/workspace/u-boot-riscv/u-boot.bin of=/tmp/temp.bin bs=1M
|
||||
```
|
||||
|
@ -87,20 +76,112 @@ dd if=~/workspace/u-boot-riscv/u-boot.bin of=/tmp/temp.bin bs=1M
|
|||
```
|
||||
dd if=<linux_build_directory>/arch/riscv/boot/uImage of=/tmp/temp.bin bs=1M seek=4
|
||||
```
|
||||
4. Compile OpenSBI with temp.bin (generated in step 3) as payload and single hart enabled.
|
||||
4. Compile OpenSBI with temp.bin (generated in step 3) as payload.
|
||||
```
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=/tmp/temp.bin FU540_ENABLED_HART_MASK=0x02
|
||||
make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=/tmp/temp.bin
|
||||
```
|
||||
5. The generated firmware binary should be copied to the first partition of the sdcard.
|
||||
|
||||
Flashing the OpenSBI firmware binary to storage media:
|
||||
-----------------------------------------------------
|
||||
The first stage boot loader([FSBL](https://github.com/sifive/freedom-u540-c000-bootloader))
|
||||
expects the storage media to have a GPT partition table. It tries to look for a
|
||||
partition with following GUID to load the next stage boot loader (OpenSBI in this case).
|
||||
|
||||
```
|
||||
2E54B353-1271-4842-806F-E436D6AF6985
|
||||
```
|
||||
|
||||
That's why the generated firmware binary in above steps should be copied to the
|
||||
partition of the sdcard with above GUID.
|
||||
|
||||
```
|
||||
dd if=build/platform/sifive/fu540/firmware/fw_payload.bin of=/dev/disk2s1 bs=1024
|
||||
```
|
||||
6. At U-Boot prompt execute following boot command to boot non-SMP linux.
|
||||
|
||||
In my case, it is the first partition is **disk2s1** that has been formatted with the
|
||||
above specified GUID.
|
||||
|
||||
In case of a brand new sdcard, it should be formatted with below partition
|
||||
tables as described here.
|
||||
|
||||
```
|
||||
bootm 0x80600000 - 0x82200000
|
||||
sgdisk --clear \
|
||||
--new=1:2048:67583 --change-name=1:bootloader --typecode=1:2E54B353-1271-4842-806F-E436D6AF6985 \
|
||||
--new=2:264192: --change-name=2:root --typecode=2:0FC63DAF-8483-4772-8E79-3D69D8477DE4 \
|
||||
$(DISK)
|
||||
```
|
||||
|
||||
Booting SiFive Fu540 Platform
|
||||
-----------------------------
|
||||
|
||||
**Linux Kernel Payload**
|
||||
|
||||
As Linux kernel image is embedded in the OpenSBI firmware binary, HiFive Unleashed will directly
|
||||
boot into Linux directly after powered on.
|
||||
|
||||
**U-Boot Payload**
|
||||
|
||||
As U-Boot image is used as payload, HiFive Unleashed will boot into a U-Boot prompt.
|
||||
U-Boot tftp boot method can be used to load kernel image in U-Boot prompt.
|
||||
Here are the steps do a tftpboot.
|
||||
|
||||
1. Set the mac address of the board.
|
||||
|
||||
```
|
||||
setenv ethaddr <mac address of the board>
|
||||
```
|
||||
2. Set the ip address of the board.
|
||||
|
||||
```
|
||||
setenv ipaddr <ipaddr of the board>
|
||||
```
|
||||
3. Set the tftpboot server IP.
|
||||
|
||||
```
|
||||
setenv serverip <ipaddr of the tftp server>
|
||||
```
|
||||
4. Set the network gateway address.
|
||||
|
||||
```
|
||||
setenv gatewayip <ipaddress of the network gateway>
|
||||
```
|
||||
5. Load the Linux kernel image from the tftp server.
|
||||
|
||||
```
|
||||
tftpboot ${kernel_addr_r} /sifive/fu540/uImage
|
||||
```
|
||||
|
||||
6. Load the ramdisk image from the tftp server. This is only required if ramdisk
|
||||
is loaded from tftp server. This step is optional, if rootfs is already part
|
||||
of the kernel or loaded from an external storage by kernel.
|
||||
|
||||
```
|
||||
tftpboot ${ramdisk_addr_r} /sifive/fu540/uRamdisk
|
||||
```
|
||||
7. Set the boot command-line arguments.
|
||||
|
||||
```
|
||||
setenv bootargs "root=/dev/ram rw console=ttySIF0 earlycon=sbi"
|
||||
```
|
||||
|
||||
8. Now boot into Linux.
|
||||
|
||||
```
|
||||
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdtcontroladdr}
|
||||
|
||||
```
|
||||
or (if ramdisk is not loaded from network)
|
||||
```
|
||||
bootm ${kernel_addr_r} - ${fdtcontroladdr}
|
||||
```
|
||||
|
||||
**U-Boot & Linux Kernel as a single payload**
|
||||
|
||||
At U-Boot prompt execute the following boot command to boot Linux.
|
||||
|
||||
```
|
||||
bootm ${kernel_addr_r} - ${fdtcontroladdr}
|
||||
```
|
||||
Booting SiFive Fu540 Platform with Microsemi Expansion board
|
||||
------------------------------------------------------------
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue