summaryrefslogtreecommitdiff
path: root/alt-rootfs-installer/socs.d/SiFive-riscv64.sh
blob: dd42613a880df2883bf54a7706d9572b986e5426 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
# vim:sw=8:noet

BBL=2E54B353-1271-4842-806F-E436D6AF6985
FSBL=5B193300-FC78-40CD-8002-E86C45580B47
SPL=$FSBL
UBOOT_CODE=$BBL

MEDIATABLE=gpt
ROOTPART_NUM=1
# ~1 MiB for U-Boot SPL
# ~4 MiB for OpenSBI + U-Boot
# + some overhead for future usage
START_SECTOR=34 # MiB
[ -n "$EFI" ] || BOOTFLAG=legacy_boot
[ -n "$VNC" ] ||
	case "$TARGET" in
		sifive_unleashed) VNC=1;;
		*) VNC=0;;
	esac
CONSOLE=1
[ -n "$SYSCON" ] || SYSCON=ttySIF0,115200n8

soc_write_bootloader() {
	unmount_partition
	[ -n "$ROOTFS" ] || clear_riscv64_bootloader_partition

	print_message "Creating partitions for U-Boot SPL and OpenSBI + U-Boot..."
	LASTPART_NUM=$(sgdisk -p "$MEDIA" | tail -n1 | tr -s ' ' | cut -f 2 -d ' ')
	let 'SPLPART_NUM = LASTPART_NUM + 1'
	let 'UBOOTPART_NUM = LASTPART_NUM + 2'
	sgdisk -a 1 \
		--new=$SPLPART_NUM:34:2081 --change-name=$SPLPART_NUM:spl \
		--typecode=$SPLPART_NUM:"$SPL" \
		--new=$UBOOTPART_NUM:2082:10273 --change-name=$UBOOTPART_NUM:uboot \
		--typecode=$UBOOTPART_NUM:"$UBOOT_CODE" \
		"$MEDIA" ||
		fatal_error "failed to create U-Boot SPL and OpenSBI + U-Boot partitions"
	print_done

	sync_partitions
	mount_partition

	set_path_to_uboot
	print_message "Writing U-Boot SPL for ${TARGET-}..."
	SPL_BLOB="$(readlink -e "$UBOOT/u-boot-spl.bin")"
	[ -f "${SPL_BLOB-}" ] || fatal_error "${SPL_BLOB-} was not found"
	SPLPART="${MEDIA}${partsuffix-}${SPLPART_NUM}"
	[ -b "${SPLPART-}" ] || fatal_error "${SPLPART-} is not a block device or does not exist"
	dd if="$SPL_BLOB" of="$SPLPART" bs=4M status=none || fatal_error "failed to write U-Boot SPL"
	print_done

	print_message "Writing OpenSBI + U-Boot for ${TARGET-}..."
	UBOOT_BLOB="$(readlink -e "$UBOOT/u-boot.itb")"
	[ -f "${UBOOT_BLOB-}" ] || fatal_error "${UBOOT_BLOB-}} was not found"
	UBOOTPART="${MEDIA}${partsuffix-}${UBOOTPART_NUM}"
	[ -b "${UBOOTPART-}" ] || fatal_error "${UBOOTPART-} is not a block device or does not exist"
	dd if="$UBOOT_BLOB" of="$UBOOTPART" bs=4M status=none || fatal_error "failed to write OpenSBI+U-Boot"
	sync
	print_done
}