xref: /openbmc/u-boot/doc/README.ae350 (revision 224f7452)
1Andes Technology SoC AE350
2===========================
3
4AE350 is the mainline SoC produced by Andes Technology using AX25 CPU core
5base on RISC-V architecture.
6
7AE350 has integrated both AHB and APB bus and many periphals for application
8and product development.
9
10AX25-AE350
11=========
12
13AX25-AE350 is the SoC with AE350 hardcore CPU.
14
15Configurations
16==============
17
18CONFIG_SKIP_LOWLEVEL_INIT:
19	If you want to boot this system from SPI ROM and bypass e-bios (the
20	other boot loader on ROM). You should undefine CONFIG_SKIP_LOWLEVEL_INIT
21	in "include/configs/ax25-ae350.h".
22
23Build and boot steps
24====================
25
26build:
271. Prepare the toolchains and make sure the $PATH to toolchains is correct.
282. Use `make ae350_rv[32|64]_defconfig` in u-boot root to build the image for 32 or 64 bit.
29
30Verification
31====================
32
33Target
34====================
351. startup
362. relocation
373. timer driver
384. uart driver
395. mac driver
406. mmc driver
417. spi driver
42
43Steps
44====================
451. Define CONFIG_SKIP_LOWLEVEL_INIT to build u-boot which is loaded via gdb from ram.
462. Undefine CONFIG_SKIP_LOWLEVEL_INIT to build u-boot which is booted from spi rom.
473. Ping a server by mac driver
484. Scan sd card and copy u-boot image which is booted from flash to ram by sd driver.
495. Burn this u-boot image to spi rom by spi driver
506. Re-boot u-boot from spi flash with power off and power on.
51
52Messages of U-Boot boot on AE350 board
53======================================
54U-Boot 2018.01-rc2-00033-g824f89a (Dec 21 2017 - 16:51:26 +0800)
55
56DRAM:  1 GiB
57MMC:   mmc@f0e00000: 0
58SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB
59In:    serial@f0300000
60Out:   serial@f0300000
61Err:   serial@f0300000
62Net:
63Warning: mac@e0100000 (eth0) using random MAC address - be:dd:d7:e4:e8:10
64eth0: mac@e0100000
65
66RISC-V # version
67U-Boot 2018.01-rc2-00033-gb265b91-dirty (Dec 22 2017 - 13:54:21 +0800)
68
69riscv32-unknown-linux-gnu-gcc (GCC) 7.2.0
70GNU ld (GNU Binutils) 2.29
71
72RISC-V # setenv ipaddr 10.0.4.200 ;
73RISC-V # setenv serverip 10.0.4.97 ;
74RISC-V # ping 10.0.4.97 ;
75Using mac@e0100000 device
76host 10.0.4.97 is alive
77
78RISC-V # mmc rescan
79RISC-V # fatls mmc 0:1
80   318907   u-boot-ae350-64.bin
81     1252   hello_world_ae350_32.bin
82   328787   u-boot-ae350-32.bin
83
843 file(s), 0 dir(s)
85
86RISC-V # sf probe 0:0 50000000 0
87SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB
88
89RISC-V # sf test 0x100000 0x1000
90SPI flash test:
910 erase: 36 ticks, 111 KiB/s 0.888 Mbps
921 check: 29 ticks, 137 KiB/s 1.096 Mbps
932 write: 40 ticks, 100 KiB/s 0.800 Mbps
943 read: 20 ticks, 200 KiB/s 1.600 Mbps
95Test passed
960 erase: 36 ticks, 111 KiB/s 0.888 Mbps
971 check: 29 ticks, 137 KiB/s 1.096 Mbps
982 write: 40 ticks, 100 KiB/s 0.800 Mbps
993 read: 20 ticks, 200 KiB/s 1.600 Mbps
100
101RISC-V # fatload mmc 0:1 0x600000 u-boot-ae350-32.bin
102reading u-boot-ae350-32.bin
103328787 bytes read in 324 ms (990.2 KiB/s)
104
105RISC-V # sf erase 0x0 0x51000
106SF: 331776 bytes @ 0x0 Erased: OK
107
108RISC-V # sf write 0x600000 0x0 0x50453
109device 0 offset 0x0, size 0x50453
110SF: 328787 bytes @ 0x0 Written: OK
111
112RISC-V # crc32 0x600000 0x50453
113crc32 for 00600000 ... 00650452 ==> 692dc44a
114
115RISC-V # crc32 0x80000000 0x50453
116crc32 for 80000000 ... 80050452 ==> 692dc44a
117RISC-V #
118
119*** power-off and power-on, this U-Boot is booted from spi flash 	***
120
121U-Boot 2018.01-rc2-00032-gf67dd47-dirty (Dec 21 2017 - 13:56:03 +0800)
122
123DRAM:  1 GiB
124MMC:   mmc@f0e00000: 0
125SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB
126In:    serial@f0300000
127Out:   serial@f0300000
128Err:   serial@f0300000
129Net:
130Warning: mac@e0100000 (eth0) using random MAC address - ee:4c:58:29:32:f5
131eth0: mac@e0100000
132RISC-V #
133
134
135Boot bbl and riscv-linux via U-Boot on QEMU
136===========================================
1371. Build riscv-linux
1382. Build bbl and riscv-linux with --with-payload
1393. Prepare ae350.dtb
1404. Creating OS-kernel images
141	./mkimage -A riscv -O linux -T kernel -C none -a 0x0000 -e 0x0000 -d bbl.bin bootmImage-bbl.bin
142	Image Name:
143	Created:      Tue Mar 13 10:06:42 2018
144	Image Type:   RISC-V Linux Kernel Image (uncompressed)
145	Data Size:    17901204 Bytes = 17481.64 KiB = 17.07 MiB
146	Load Address: 00000000
147	Entry Point:  00000000
148
1494. Copy bootmImage-bbl.bin and ae350.dtb to qemu sd card image
1505. Message of booting riscv-linux from bbl via u-boot on qemu
151
152U-Boot 2018.03-rc4-00031-g2631273 (Mar 13 2018 - 15:02:55 +0800)
153
154DRAM:  1 GiB
155main-loop: WARNING: I/O thread spun for 1000 iterations
156MMC:   mmc@f0e00000: 0
157Loading Environment from SPI Flash... *** Warning - spi_flash_probe_bus_cs() failed, using default environment
158
159Failed (-22)
160In:    serial@f0300000
161Out:   serial@f0300000
162Err:   serial@f0300000
163Net:
164Warning: mac@e0100000 (eth0) using random MAC address - 02:00:00:00:00:00
165eth0: mac@e0100000
166RISC-V # mmc rescan
167RISC-V # mmc part
168
169Partition Map for MMC device 0  --   Partition Type: DOS
170
171Part    Start Sector    Num Sectors     UUID            Type
172RISC-V # fatls mmc 0:0
173 17901268   bootmImage-bbl.bin
174     1954   ae2xx.dtb
175
1762 file(s), 0 dir(s)
177
178RISC-V # fatload mmc 0:0 0x00600000 bootmImage-bbl.bin
17917901268 bytes read in 4642 ms (3.7 MiB/s)
180RISC-V # fatload mmc 0:0 0x2000000 ae350.dtb
1811954 bytes read in 1 ms (1.9 MiB/s)
182RISC-V # setenv bootm_size 0x2000000
183RISC-V # setenv fdt_high 0x1f00000
184RISC-V # bootm 0x00600000 - 0x2000000
185## Booting kernel from Legacy Image at 00600000 ...
186   Image Name:
187   Image Type:   RISC-V Linux Kernel Image (uncompressed)
188   Data Size:    17901204 Bytes = 17.1 MiB
189   Load Address: 00000000
190   Entry Point:  00000000
191   Verifying Checksum ... OK
192## Flattened Device Tree blob at 02000000
193   Booting using the fdt blob at 0x2000000
194   Loading Kernel Image ... OK
195   Loading Device Tree to 0000000001efc000, end 0000000001eff7a1 ... OK
196[    0.000000] OF: fdt: Ignoring memory range 0x0 - 0x200000
197[    0.000000] Linux version 4.14.0-00046-gf3e439f-dirty (rick@atcsqa06) (gcc version 7.1.1 20170509 (GCC)) #1 Tue Jan 9 16:34:25 CST 2018
198[    0.000000] bootconsole [early0] enabled
199[    0.000000] Initial ramdisk at: 0xffffffe000016a98 (12267008 bytes)
200[    0.000000] Zone ranges:
201[    0.000000]   DMA      [mem 0x0000000000200000-0x000000007fffffff]
202[    0.000000]   Normal   empty
203[    0.000000] Movable zone start for each node
204[    0.000000] Early memory node ranges
205[    0.000000]   node   0: [mem 0x0000000000200000-0x000000007fffffff]
206[    0.000000] Initmem setup node 0 [mem 0x0000000000200000-0x000000007fffffff]
207[    0.000000] elf_hwcap is 0x112d
208[    0.000000] random: fast init done
209[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 516615
210[    0.000000] Kernel command line: console=ttyS0,38400n8 earlyprintk=uart8250-32bit,0xf0300000 debug loglevel=7
211[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
212[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
213[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
214[    0.000000] Sorting __ex_table...
215[    0.000000] Memory: 2047832K/2095104K available (1856K kernel code, 204K rwdata, 532K rodata, 12076K init, 756K bss, 47272K reserved, 0K cma-reserved)
216[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
217[    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
218[    0.000000] riscv,cpu_intc,0: 64 local interrupts mapped
219[    0.000000] riscv,plic0,e4000000: mapped 31 interrupts to 1/2 handlers
220[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns
221[    0.000000] Calibrating delay loop (skipped), value calculated using timer frequency.. 20.00 BogoMIPS (lpj=40000)
222[    0.000000] pid_max: default: 32768 minimum: 301
223[    0.004000] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
224[    0.004000] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes)
225[    0.056000] devtmpfs: initialized
226[    0.060000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
227[    0.064000] futex hash table entries: 256 (order: 0, 6144 bytes)
228[    0.068000] NET: Registered protocol family 16
229[    0.080000] vgaarb: loaded
230[    0.084000] clocksource: Switched to clocksource riscv_clocksource
231[    0.088000] NET: Registered protocol family 2
232[    0.092000] TCP established hash table entries: 16384 (order: 5, 131072 bytes)
233[    0.096000] TCP bind hash table entries: 16384 (order: 5, 131072 bytes)
234[    0.096000] TCP: Hash tables configured (established 16384 bind 16384)
235[    0.100000] UDP hash table entries: 1024 (order: 3, 32768 bytes)
236[    0.100000] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
237[    0.104000] NET: Registered protocol family 1
238[    0.616000] Unpacking initramfs...
239[    1.220000] workingset: timestamp_bits=62 max_order=19 bucket_order=0
240[    1.244000] io scheduler noop registered
241[    1.244000] io scheduler cfq registered (default)
242[    1.244000] io scheduler mq-deadline registered
243[    1.248000] io scheduler kyber registered
244[    1.360000] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
245[    1.368000] console [ttyS0] disabled
246[    1.372000] f0300000.serial: ttyS0 at MMIO 0xf0300020 (irq = 10, base_baud = 1228800) is a 16550A
247[    1.392000] console [ttyS0] enabled
248[    1.392000] ftmac100: Loading version 0.2 ...
249[    1.396000] ftmac100 e0100000.mac eth0: irq 8, mapped at ffffffd002005000
250[    1.400000] ftmac100 e0100000.mac eth0: generated random MAC address 6e:ac:c3:92:36:c0
251[    1.404000] IR NEC protocol handler initialized
252[    1.404000] IR RC5(x/sz) protocol handler initialized
253[    1.404000] IR RC6 protocol handler initialized
254[    1.404000] IR JVC protocol handler initialized
255[    1.408000] IR Sony protocol handler initialized
256[    1.408000] IR SANYO protocol handler initialized
257[    1.408000] IR Sharp protocol handler initialized
258[    1.408000] IR MCE Keyboard/mouse protocol handler initialized
259[    1.412000] IR XMP protocol handler initialized
260[    1.456000] ftsdc010 f0e00000.mmc: mmc0 - using hw SDIO IRQ
261[    1.464000] bootconsole [early0] uses init memory and must be disabled even before the real one is ready
262[    1.464000] bootconsole [early0] disabled
263[    1.508000] Freeing unused kernel memory: 12076K
264[    1.512000] This architecture does not have kernel memory protection.
265[    1.520000] mmc0: new SD card at address 4567
266[    1.524000] mmcblk0: mmc0:4567 QEMU! 20.0 MiB
267[    1.844000]  mmcblk0:
268Wed Dec  1 10:00:00 CST 2010
269/ #
270
271
272
273TODO
274==================================================
275Boot bbl and riscv-linux via U-Boot on AE350 board
276