blob: 594f1fed9db74b43cac5154304b8f7d32d5df52f [file] [log] [blame]
Bin Menga719a622019-07-18 00:34:20 -07001.. SPDX-License-Identifier: GPL-2.0+
2
3HiFive Unleashed
4================
5
6FU540-C000 RISC-V SoC
7---------------------
8The FU540-C000 is the worlds first 4+1 64-bit RISC-V SoC from SiFive.
9
10The HiFive Unleashed development platform is based on FU540-C000 and capable
11of running Linux.
12
13Mainline support
14----------------
15The support for following drivers are already enabled:
16
171. SiFive UART Driver.
182. SiFive PRCI Driver for clock.
193. Cadence MACB ethernet driver for networking support.
20
21TODO:
22
231. U-Boot expects the serial console device entry to be present under /chosen
24 DT node. Without a serial console U-Boot will panic. Example:
25
26.. code-block:: none
27
28 chosen {
29 stdout-path = "/soc/serial@10010000:115200";
30 };
31
32Building
33--------
34
351. Add the RISC-V toolchain to your PATH.
362. Setup ARCH & cross compilation enviornment variable:
37
38.. code-block:: none
39
40 export ARCH=riscv
41 export CROSS_COMPILE=<riscv64 toolchain prefix>
42
433. make sifive_fu540_defconfig
444. make
45
46Flashing
47--------
48
49The current U-Boot port is supported in S-mode only and loaded from DRAM.
50
51A prior stage (M-mode) firmware/bootloader (e.g OpenSBI or BBL) is required to
52load the u-boot.bin into memory and provide runtime services. The u-boot.bin
53can be given as a payload to the prior stage (M-mode) firmware/bootloader.
54
55The description of steps required to build the firmware is beyond the scope of
56this document. Please refer OpenSBI or BBL documenation.
57(Note: OpenSBI git repo is at https://github.com/riscv/opensbi.git)
58(Note: BBL git repo is at https://github.com/riscv/riscv-pk.git)
59
60Once the prior stage firmware/bootloader binary is generated, it should be
61copied to the first partition of the sdcard.
62
63.. code-block:: none
64
65 sudo dd if=<prior_stage_firmware_binary> of=/dev/disk2s1 bs=1024
66
67Booting
68-------
69Once you plugin the sdcard and power up, you should see the U-Boot prompt.
70
71Sample boot log from HiFive Unleashed board
72-------------------------------------------
73
74.. code-block:: none
75
76 U-Boot 2019.01-00019-gc7953536-dirty (Jan 22 2019 - 11:05:40 -0800)
77
78 CPU: rv64imafdc
79 Model: sifive,hifive-unleashed-a00
80 DRAM: 8 GiB
81 In: serial@10010000
82 Out: serial@10010000
83 Err: serial@10010000
84 Net:
85 Warning: ethernet@10090000 (eth0) using random MAC address - b6:75:4d:48:50:94
86 eth0: ethernet@10090000
87 Hit any key to stop autoboot: 0
88 => version
89 U-Boot 2019.01-00019-gc7953536-dirty (Jan 22 2019 - 11:05:40 -0800)
90
91 riscv64-linux-gcc.br_real (Buildroot 2018.11-rc2-00003-ga0787e9) 8.2.0
92 GNU ld (GNU Binutils) 2.31.1
93
94Now you can configure your networking, tftp server and use tftp boot method to
95load uImage.
96
97.. code-block:: none
98
99 => setenv ethaddr 70:B3:D5:92:F0:C2
100 => setenv ipaddr 10.196.157.189
101 => setenv serverip 10.11.143.218
102 => setenv gatewayip 10.196.156.1
103 => setenv netmask 255.255.252.0
104 => bdinfo
105 boot_params = 0x0000000000000000
106 DRAM bank = 0x0000000000000000
107 -> start = 0x0000000080000000
108 -> size = 0x0000000200000000
109 relocaddr = 0x00000000fff90000
110 reloc off = 0x000000007fd90000
111 ethaddr = 70:B3:D5:92:F0:C2
112 IP addr = 10.196.157.189
113 baudrate = 115200 bps
114 => tftpboot uImage
115 ethernet@10090000: PHY present at 0
116 ethernet@10090000: Starting autonegotiation...
117 ethernet@10090000: Autonegotiation complete
118 ethernet@10090000: link up, 1000Mbps full-duplex (lpa: 0x3800)
119 Using ethernet@10090000 device
120 TFTP from server 10.11.143.218; our IP address is 10.196.157.189; sending through gateway 10.196.156.1
121 Filename 'uImage'.
122 Load address: 0x80200000
123 Loading: #################################################################
124 #################################################################
125 #################################################################
126 #################################################################
127 #################################################################
128 #################################################################
129 #################################################################
130 #################################################################
131 #################################################################
132 #################################################################
133 #################################################################
134 #################################################################
135 #################################################################
136 #################################################################
137 #################################################################
138 #################################################################
139 #################################################################
140 #################################################################
141 #################################################################
142 #################################################################
143 #################################################################
144 #################################################################
145 #################################################################
146 #################################################################
147 #################################################################
148 #################################################################
149 #################################################################
150 #################################################################
151 #################################################################
152 #################################################################
153 #################################################################
154 #################################################################
155 #################################################################
156 #################################################################
157 #################################################################
158 #################################################################
159 #################################################################
160 #################################################################
161 #################################################################
162 #################################################################
163 #################################################################
164 #################################################################
165 #################################################################
166 #################################################################
167 ##########################################################
168 2.5 MiB/s
169 done
170 Bytes transferred = 14939132 (e3f3fc hex)
171 => bootm 0x80200000 - 0x82200000
172 ## Booting kernel from Legacy Image at 80200000 ...
173 Image Name: Linux
174 Image Type: RISC-V Linux Kernel Image (uncompressed)
175 Data Size: 14939068 Bytes = 14.2 MiB
176 Load Address: 80200000
177 Entry Point: 80200000
178 Verifying Checksum ... OK
179 ## Flattened Device Tree blob at 82200000
180 Booting using the fdt blob at 0x82200000
181 Loading Kernel Image ... OK
182 Using Device Tree in place at 0000000082200000, end 0000000082205c69
183
184 Starting kernel ...
185
186 [ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
187 [ 0.000000] Linux version 5.0.0-rc1-00020-g4b51f736 (atish@jedi-01) (gcc version 7.2.0 (GCC)) #262 SMP Mon Jan 21 17:39:27 PST 2019
188 [ 0.000000] initrd not found or empty - disabling initrd
189 [ 0.000000] Zone ranges:
190 [ 0.000000] DMA32 [mem 0x0000000080200000-0x00000000ffffffff]
191 [ 0.000000] Normal [mem 0x0000000100000000-0x000027ffffffffff]
192 [ 0.000000] Movable zone start for each node
193 [ 0.000000] Early memory node ranges
194 [ 0.000000] node 0: [mem 0x0000000080200000-0x000000027fffffff]
195 [ 0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x000000027fffffff]
196 [ 0.000000] software IO TLB: mapped [mem 0xfbfff000-0xfffff000] (64MB)
197 [ 0.000000] CPU with hartid=0 has a non-okay status of "masked"
198 [ 0.000000] CPU with hartid=0 has a non-okay status of "masked"
199 [ 0.000000] elf_hwcap is 0x112d
200 [ 0.000000] percpu: Embedded 15 pages/cpu @(____ptrval____) s29720 r0 d31720 u61440
201 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 2067975
202 [ 0.000000] Kernel command line: earlyprintk
203 [ 0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes)
204 [ 0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes)
205 [ 0.000000] Sorting __ex_table...
206 [ 0.000000] Memory: 8178760K/8386560K available (3309K kernel code, 248K rwdata, 872K rodata, 9381K init, 763K bss, 207800K reserved, 0K cma-reserved)
207 [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
208 [ 0.000000] rcu: Hierarchical RCU implementation.
209 [ 0.000000] rcu: RCU event tracing is enabled.
210 [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
211 [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
212 [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
213 [ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
214 [ 0.000000] plic: mapped 53 interrupts to 4 (out of 9) handlers.
215 [ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [1]
216 [ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns
217 [ 0.000008] sched_clock: 64 bits at 1000kHz, resolution 1000ns, wraps every 2199023255500ns
218 [ 0.000221] Console: colour dummy device 80x25
219 [ 0.000902] printk: console [tty0] enabled
220 [ 0.000963] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=10000)
221 [ 0.001034] pid_max: default: 32768 minimum: 301
222 [ 0.001541] Mount-cache hash table entries: 16384 (order: 5, 131072 bytes)
223 [ 0.001912] Mountpoint-cache hash table entries: 16384 (order: 5, 131072 bytes)
224 [ 0.003542] rcu: Hierarchical SRCU implementation.
225 [ 0.004347] smp: Bringing up secondary CPUs ...
226 [ 1.040259] CPU1: failed to come online
227 [ 2.080483] CPU2: failed to come online
228 [ 3.120699] CPU3: failed to come online
229 [ 3.120765] smp: Brought up 1 node, 1 CPU
230 [ 3.121923] devtmpfs: initialized
231 [ 3.124649] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
232 [ 3.124727] futex hash table entries: 1024 (order: 4, 65536 bytes)
233 [ 3.125346] random: get_random_u32 called from bucket_table_alloc+0x72/0x172 with crng_init=0
234 [ 3.125578] NET: Registered protocol family 16
235 [ 3.126400] sifive-u54-prci 10000000.prci: Registered U54 core clocks
236 [ 3.126649] sifive-gemgxl-mgmt 100a0000.cadence-gemgxl-mgmt: Registered clock switch 'cadence-gemgxl-mgmt'
237 [ 3.135572] vgaarb: loaded
238 [ 3.135858] SCSI subsystem initialized
239 [ 3.136193] usbcore: registered new interface driver usbfs
240 [ 3.136266] usbcore: registered new interface driver hub
241 [ 3.136348] usbcore: registered new device driver usb
242 [ 3.136446] pps_core: LinuxPPS API ver. 1 registered
243 [ 3.136484] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
244 [ 3.136575] PTP clock support registered
245 [ 3.137256] clocksource: Switched to clocksource riscv_clocksource
246 [ 3.142711] NET: Registered protocol family 2
247 [ 3.143322] tcp_listen_portaddr_hash hash table entries: 4096 (order: 4, 65536 bytes)
248 [ 3.143634] TCP established hash table entries: 65536 (order: 7, 524288 bytes)
249 [ 3.145799] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)
250 [ 3.149121] TCP: Hash tables configured (established 65536 bind 65536)
251 [ 3.149591] UDP hash table entries: 4096 (order: 5, 131072 bytes)
252 [ 3.150094] UDP-Lite hash table entries: 4096 (order: 5, 131072 bytes)
253 [ 3.150781] NET: Registered protocol family 1
254 [ 3.230693] workingset: timestamp_bits=62 max_order=21 bucket_order=0
255 [ 3.241224] io scheduler mq-deadline registered
256 [ 3.241269] io scheduler kyber registered
257 [ 3.242143] sifive_gpio 10060000.gpio: SiFive GPIO chip registered 16 GPIOs
258 [ 3.242357] pwm-sifivem 10020000.pwm: Unable to find controller clock
259 [ 3.242439] pwm-sifivem 10021000.pwm: Unable to find controller clock
260 [ 3.243228] xilinx-pcie 2000000000.pci: PCIe Link is DOWN
261 [ 3.243289] xilinx-pcie 2000000000.pci: host bridge /soc/pci@2000000000 ranges:
262 [ 3.243360] xilinx-pcie 2000000000.pci: No bus range found for /soc/pci@2000000000, using [bus 00-ff]
263 [ 3.243447] xilinx-pcie 2000000000.pci: MEM 0x40000000..0x5fffffff -> 0x40000000
264 [ 3.243591] xilinx-pcie 2000000000.pci: PCI host bridge to bus 0000:00
265 [ 3.243636] pci_bus 0000:00: root bus resource [bus 00-ff]
266 [ 3.243676] pci_bus 0000:00: root bus resource [mem 0x40000000-0x5fffffff]
267 [ 3.276547] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
268 [ 3.277689] 10010000.serial: ttySIF0 at MMIO 0x10010000 (irq = 39, base_baud = 0) is a SiFive UART v0
269 [ 3.786963] printk: console [ttySIF0] enabled
270 [ 3.791504] 10011000.serial: ttySIF1 at MMIO 0x10011000 (irq = 40, base_baud = 0) is a SiFive UART v0
271 [ 3.801251] sifive_spi 10040000.spi: mapped; irq=41, cs=1
272 [ 3.806362] m25p80 spi0.0: unrecognized JEDEC id bytes: 9d, 70, 19
273 [ 3.812084] m25p80: probe of spi0.0 failed with error -2
274 [ 3.817453] sifive_spi 10041000.spi: mapped; irq=42, cs=4
275 [ 3.823027] sifive_spi 10050000.spi: mapped; irq=43, cs=1
276 [ 3.828604] libphy: Fixed MDIO Bus: probed
277 [ 3.832623] macb: GEM doesn't support hardware ptp.
278 [ 3.837196] libphy: MACB_mii_bus: probed
279 [ 4.041156] Microsemi VSC8541 SyncE 10090000.ethernet-ffffffff:00: attached PHY driver [Microsemi VSC8541 SyncE] (mii_bus:phy_addr=10090000.ethernet-ffffffff:00, irq=POLL)
280 [ 4.055779] macb 10090000.ethernet eth0: Cadence GEM rev 0x10070109 at 0x10090000 irq 12 (70:b3:d5:92:f0:c2)
281 [ 4.065780] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
282 [ 4.072033] ehci-pci: EHCI PCI platform driver
283 [ 4.076521] usbcore: registered new interface driver usb-storage
284 [ 4.082843] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0 (nowayout=0)
285 [ 4.127465] mmc_spi spi2.0: SD/MMC host mmc0, no DMA, no WP, no poweroff
286 [ 4.133645] usbcore: registered new interface driver usbhid
287 [ 4.138980] usbhid: USB HID core driver
288 [ 4.143017] NET: Registered protocol family 17
289 [ 4.147885] pwm-sifivem 10020000.pwm: SiFive PWM chip registered 4 PWMs
290 [ 4.153945] pwm-sifivem 10021000.pwm: SiFive PWM chip registered 4 PWMs
291 [ 4.186407] Freeing unused kernel memory: 9380K
292 [ 4.190224] This architecture does not have kernel memory protection.
293 [ 4.196609] Run /init as init process
294 Starting logging: OK
295 Starting mdev...
296 [ 4.303785] mmc0: host does not support reading read-only switch, assuming write-enable
297 [ 4.311109] mmc0: new SDHC card on SPI
298 [ 4.317103] mmcblk0: mmc0:0000 SS08G 7.40 GiB
299 [ 4.386471] mmcblk0: p1 p2
300 sort: /sys/devices/platform/Fixed: No such file or directory
301 modprobe: can't change directory to '/lib/modules': No such file or directory
302 Initializing random[ 4.759075] random: dd: uninitialized urandom read (512 bytes read)
303 number generator... done.
304 Starting network...
305 udhcpc (v1.24.2) started
306 Sending discover...
307 Sending discover...
308 [ 7.927510] macb 10090000.ethernet eth0: link up (1000/Full)
309 Sending discover...
310 Sending select for 10.196.157.190...
311 Lease of 10.196.157.190 obtained, lease time 499743
312 deleting routers
313 adding dns 10.86.1.1
314 adding dns 10.86.2.1
315 /etc/init.d/S50dropbear
316 Starting dropbear sshd: [ 12.772393] random: dropbear: uninitialized urandom read (32 bytes read)
317 OK
318
319 Welcome to Buildroot
320 buildroot login: