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