1*d754254fSJorge Ramirez-Ortiz================================================================================ 2*d754254fSJorge Ramirez-Ortiz Board Information 3*d754254fSJorge Ramirez-Ortiz================================================================================ 4*d754254fSJorge Ramirez-Ortiz 5*d754254fSJorge Ramirez-OrtizDeveloped by HiSilicon, the board features the Hi3798C V200 with an 6*d754254fSJorge Ramirez-Ortizintegrated quad-core 64-bit ARM Cortex A53 processor and high 7*d754254fSJorge Ramirez-Ortizperformance Mali T720 GPU, making it capable of running any commercial 8*d754254fSJorge Ramirez-Ortizset-top solution based on Linux or Android. Its high performance 9*d754254fSJorge Ramirez-Ortizspecification also supports a premium user experience with up to H.265 10*d754254fSJorge Ramirez-OrtizHEVC decoding of 4K video at 60 frames per second. 11*d754254fSJorge Ramirez-Ortiz 12*d754254fSJorge Ramirez-OrtizSOC Hisilicon Hi3798CV200 13*d754254fSJorge Ramirez-OrtizCPU Quad-core ARM Cortex-A53 64 bit 14*d754254fSJorge Ramirez-OrtizDRAM DDR3/3L/4 SDRAM interface, maximum 32-bit data width 2 GB 15*d754254fSJorge Ramirez-OrtizUSB Two USB 2.0 ports One USB 3.0 ports 16*d754254fSJorge Ramirez-OrtizCONSOLE USB-micro port for console support 17*d754254fSJorge Ramirez-OrtizETHERNET 1 GBe Ethernet 18*d754254fSJorge Ramirez-OrtizPCIE One PCIe 2.0 interfaces 19*d754254fSJorge Ramirez-OrtizJTAG 8-Pin JTAG 20*d754254fSJorge Ramirez-OrtizEXPANSION INTERFACE Linaro 96Boards Low Speed Expansion slot 21*d754254fSJorge Ramirez-OrtizDIMENSION Standard 160×120 mm 96Boards Enterprice Edition form factor 22*d754254fSJorge Ramirez-OrtizWIFI 802.11AC 2*2 with Bluetooth 23*d754254fSJorge Ramirez-OrtizCONNECTORS One connector for Smart Card One connector for TSI 24*d754254fSJorge Ramirez-Ortiz 25*d754254fSJorge Ramirez-Ortiz 26*d754254fSJorge Ramirez-Ortiz================================================================================ 27*d754254fSJorge Ramirez-Ortiz BUILD INSTRUCTIONS 28*d754254fSJorge Ramirez-Ortiz================================================================================ 29*d754254fSJorge Ramirez-Ortiz 30*d754254fSJorge Ramirez-OrtizNote of warning: 31*d754254fSJorge Ramirez-Ortiz================ 32*d754254fSJorge Ramirez-Ortiz 33*d754254fSJorge Ramirez-OrtizU-boot has a *strong* dependency with the l-loader and the arm trusted firmware 34*d754254fSJorge Ramirez-Ortizrepositories. 35*d754254fSJorge Ramirez-Ortiz 36*d754254fSJorge Ramirez-OrtizThe boot sequence is: 37*d754254fSJorge Ramirez-Ortiz l-loader --> arm_trusted_firmware --> u-boot 38*d754254fSJorge Ramirez-Ortiz 39*d754254fSJorge Ramirez-OrtizU-Boot needs to be aware of the BL31 runtime location and size to avoid writing 40*d754254fSJorge Ramirez-Ortizover it. Currently, BL31 is being placed below the kernel text offset (check 41*d754254fSJorge Ramirez-Ortizpoplar.c) but this could change in the future. 42*d754254fSJorge Ramirez-Ortiz 43*d754254fSJorge Ramirez-OrtizThe current version of u-boot has been tested with: 44*d754254fSJorge Ramirez-Ortiz - https://github.com/Linaro/poplar-l-loader.git 45*d754254fSJorge Ramirez-Ortiz 46*d754254fSJorge Ramirez-Ortiz commit f0988698dcc5c08bd0a8f50aa0457e138a5f438c 47*d754254fSJorge Ramirez-Ortiz Author: Alex Elder <elder@linaro.org> 48*d754254fSJorge Ramirez-Ortiz Date: Fri Jun 16 08:57:59 2017 -0500 49*d754254fSJorge Ramirez-Ortiz 50*d754254fSJorge Ramirez-Ortiz l-loader: use external memory region definitions 51*d754254fSJorge Ramirez-Ortiz 52*d754254fSJorge Ramirez-Ortiz The ARM Trusted Firmware code now has a header file that collects 53*d754254fSJorge Ramirez-Ortiz all the definitions for the memory regions used for its boot stages. 54*d754254fSJorge Ramirez-Ortiz Include that file where needed, and use the definitions found therein 55*d754254fSJorge Ramirez-Ortiz 56*d754254fSJorge Ramirez-Ortiz Signed-off-by: Alex Elder <elder@linaro.org> 57*d754254fSJorge Ramirez-Ortiz 58*d754254fSJorge Ramirez-Ortiz 59*d754254fSJorge Ramirez-Ortiz - https://github.com/Linaro/poplar-arm-trusted-firmware.git 60*d754254fSJorge Ramirez-Ortiz 61*d754254fSJorge Ramirez-Ortiz commit 6ac42dd3be13c99aa8ce29a15073e2f19d935f68 62*d754254fSJorge Ramirez-Ortiz Author: Alex Elder <elder@linaro.org> 63*d754254fSJorge Ramirez-Ortiz Date: Fri Jun 16 09:24:50 2017 -0500 64*d754254fSJorge Ramirez-Ortiz 65*d754254fSJorge Ramirez-Ortiz poplar: define memory regions in a separate file 66*d754254fSJorge Ramirez-Ortiz 67*d754254fSJorge Ramirez-Ortiz Separate the definitions for memory regions used for the BL stage 68*d754254fSJorge Ramirez-Ortiz images and FIP into a new file. The "l-loader" image uses knowledge 69*d754254fSJorge Ramirez-Ortiz of the sizes and locations of these memory regions, and it can now 70*d754254fSJorge Ramirez-Ortiz include this (external) header to get these definitions, rather than 71*d754254fSJorge Ramirez-Ortiz having to make coordinated changes to both code bases. 72*d754254fSJorge Ramirez-Ortiz 73*d754254fSJorge Ramirez-Ortiz The new file has a complete set of definitions (more than may be 74*d754254fSJorge Ramirez-Ortiz required by one or the other user). It also includes a summary of 75*d754254fSJorge Ramirez-Ortiz how the boot process works, and how it uses these regions. 76*d754254fSJorge Ramirez-Ortiz 77*d754254fSJorge Ramirez-Ortiz It should now be relatively easy to adjust the sizes and locations 78*d754254fSJorge Ramirez-Ortiz of these memory regions, or to add to them (e.g. for TEE). 79*d754254fSJorge Ramirez-Ortiz 80*d754254fSJorge Ramirez-Ortiz Signed-off-by: Alex Elder <elder@linaro.org> 81*d754254fSJorge Ramirez-Ortiz 82*d754254fSJorge Ramirez-Ortiz 83*d754254fSJorge Ramirez-OrtizCompile from source: 84*d754254fSJorge Ramirez-Ortiz==================== 85*d754254fSJorge Ramirez-Ortiz 86*d754254fSJorge Ramirez-OrtizGet all the sources 87*d754254fSJorge Ramirez-Ortiz 88*d754254fSJorge Ramirez-Ortiz > mkdir -p ~/poplar/src ~/poplar/bin 89*d754254fSJorge Ramirez-Ortiz > cd ~/poplar/src 90*d754254fSJorge Ramirez-Ortiz > git clone https://github.com/Linaro/poplar-l-loader.git l-loader 91*d754254fSJorge Ramirez-Ortiz > git clone https://github.com/Linaro/poplar-arm-trusted-firmware.git atf 92*d754254fSJorge Ramirez-Ortiz > git clone https://github.com/Linaro/poplar-u-boot.git u-boot 93*d754254fSJorge Ramirez-Ortiz 94*d754254fSJorge Ramirez-OrtizMake sure you are using the correct branch on each one of these repositories. 95*d754254fSJorge Ramirez-OrtizThe definition of "correct" might change over time (at this moment in time this 96*d754254fSJorge Ramirez-Ortizwould be the "latest" branch). 97*d754254fSJorge Ramirez-Ortiz 98*d754254fSJorge Ramirez-OrtizCompile U-Boot: 99*d754254fSJorge Ramirez-Ortiz=============== 100*d754254fSJorge Ramirez-Ortiz 101*d754254fSJorge Ramirez-Ortiz Prerequisite: 102*d754254fSJorge Ramirez-Ortiz # sudo apt-get install device-tree-compiler 103*d754254fSJorge Ramirez-Ortiz 104*d754254fSJorge Ramirez-Ortiz > cd ~/poplar/src/u-boot 105*d754254fSJorge Ramirez-Ortiz > make CROSS_COMPILE=aarch64-linux-gnu- poplar_defconfig 106*d754254fSJorge Ramirez-Ortiz > make CROSS_COMPILE=aarch64-linux-gnu- 107*d754254fSJorge Ramirez-Ortiz > cp u-boot.bin ~/poplar/bin 108*d754254fSJorge Ramirez-Ortiz 109*d754254fSJorge Ramirez-OrtizCompile ARM Trusted Firmware (ATF): 110*d754254fSJorge Ramirez-Ortiz=================================== 111*d754254fSJorge Ramirez-Ortiz 112*d754254fSJorge Ramirez-Ortiz > cd ~/poplar/src/atf 113*d754254fSJorge Ramirez-Ortiz > make CROSS_COMPILE=aarch64-linux-gnu- all fip \ 114*d754254fSJorge Ramirez-Ortiz SPD=none BL33=~/poplar/bin/u-boot.bin DEBUG=1 PLAT=poplar 115*d754254fSJorge Ramirez-Ortiz 116*d754254fSJorge Ramirez-OrtizCopy resulting binaries 117*d754254fSJorge Ramirez-Ortiz > cp build/hi3798cv200/debug/bl1.bin ~/poplar/src/l-loader/atf/ 118*d754254fSJorge Ramirez-Ortiz > cp build/hi3798cv200/debug/fip.bin ~/poplar/src/l-loader/atf/ 119*d754254fSJorge Ramirez-Ortiz 120*d754254fSJorge Ramirez-OrtizCompile l-loader: 121*d754254fSJorge Ramirez-Ortiz================= 122*d754254fSJorge Ramirez-Ortiz 123*d754254fSJorge Ramirez-Ortiz > cd ~/poplar/src/l-loader 124*d754254fSJorge Ramirez-Ortiz > make clean 125*d754254fSJorge Ramirez-Ortiz > make CROSS_COMPILE=arm-linux-gnueabi- 126*d754254fSJorge Ramirez-Ortiz 127*d754254fSJorge Ramirez-Ortiz Due to BootROM requiremets, rename l-loader.bin to fastboot.bin: 128*d754254fSJorge Ramirez-Ortiz > cp l-loader.bin ~/poplar/bin/fastboot.bin 129*d754254fSJorge Ramirez-Ortiz 130*d754254fSJorge Ramirez-Ortiz 131*d754254fSJorge Ramirez-Ortiz================================================================================ 132*d754254fSJorge Ramirez-Ortiz FLASH INSTRUCTIONS 133*d754254fSJorge Ramirez-Ortiz================================================================================ 134*d754254fSJorge Ramirez-Ortiz 135*d754254fSJorge Ramirez-OrtizTwo methods: 136*d754254fSJorge Ramirez-Ortiz 137*d754254fSJorge Ramirez-OrtizUsing USB debrick support: 138*d754254fSJorge Ramirez-Ortiz Copy fastboot.bin to a FAT partition on the USB drive and reboot the 139*d754254fSJorge Ramirez-Ortiz poplar board while pressing S3(usb_boot). 140*d754254fSJorge Ramirez-Ortiz 141*d754254fSJorge Ramirez-Ortiz The system will execute the new u-boot and boot into a shell which you 142*d754254fSJorge Ramirez-Ortiz can then use to write to eMMC. 143*d754254fSJorge Ramirez-Ortiz 144*d754254fSJorge Ramirez-OrtizUsing U-BOOT from shell: 145*d754254fSJorge Ramirez-Ortiz 1) using AXIS usb ethernet dongle and tftp 146*d754254fSJorge Ramirez-Ortiz 2) using FAT formated USB drive 147*d754254fSJorge Ramirez-Ortiz 148*d754254fSJorge Ramirez-Ortiz 149*d754254fSJorge Ramirez-Ortiz1. TFTP (USB ethernet dongle) 150*d754254fSJorge Ramirez-Ortiz============================= 151*d754254fSJorge Ramirez-Ortiz 152*d754254fSJorge Ramirez-OrtizPlug a USB AXIS ethernet dongle on any of the USB2 ports on the Poplar board. 153*d754254fSJorge Ramirez-OrtizCopy fastboot.bin to your tftp server. 154*d754254fSJorge Ramirez-OrtizIn u-boot make sure your network is properly setup. 155*d754254fSJorge Ramirez-Ortiz 156*d754254fSJorge Ramirez-OrtizThen 157*d754254fSJorge Ramirez-Ortiz 158*d754254fSJorge Ramirez-Ortiz=> tftp 0x30000000 fastboot.bin 159*d754254fSJorge Ramirez-Ortizstarting USB... 160*d754254fSJorge Ramirez-OrtizUSB0: USB EHCI 1.00 161*d754254fSJorge Ramirez-Ortizscanning bus 0 for devices... 1 USB Device(s) found 162*d754254fSJorge Ramirez-OrtizUSB1: USB EHCI 1.00 163*d754254fSJorge Ramirez-Ortizscanning bus 1 for devices... 3 USB Device(s) found 164*d754254fSJorge Ramirez-Ortiz scanning usb for storage devices... 0 Storage Device(s) found 165*d754254fSJorge Ramirez-Ortiz scanning usb for ethernet devices... 1 Ethernet Device(s) found 166*d754254fSJorge Ramirez-OrtizWaiting for Ethernet connection... done. 167*d754254fSJorge Ramirez-OrtizUsing asx0 device 168*d754254fSJorge Ramirez-OrtizTFTP from server 192.168.1.4; our IP address is 192.168.1.10 169*d754254fSJorge Ramirez-OrtizFilename 'poplar/fastboot.bin'. 170*d754254fSJorge Ramirez-OrtizLoad address: 0x30000000 171*d754254fSJorge Ramirez-OrtizLoading: ################################################################# 172*d754254fSJorge Ramirez-Ortiz ################################################################# 173*d754254fSJorge Ramirez-Ortiz ############################################################### 174*d754254fSJorge Ramirez-Ortiz 2 MiB/s 175*d754254fSJorge Ramirez-Ortizdone 176*d754254fSJorge Ramirez-OrtizBytes transferred = 983040 (f0000 hex) 177*d754254fSJorge Ramirez-Ortiz 178*d754254fSJorge Ramirez-Ortiz=> mmc write 0x30000000 0 0x780 179*d754254fSJorge Ramirez-Ortiz 180*d754254fSJorge Ramirez-OrtizMMC write: dev # 0, block # 0, count 1920 ... 1920 blocks written: OK 181*d754254fSJorge Ramirez-Ortiz=> reset 182*d754254fSJorge Ramirez-Ortiz 183*d754254fSJorge Ramirez-Ortiz 184*d754254fSJorge Ramirez-Ortiz2. USING USB FAT DRIVE 185*d754254fSJorge Ramirez-Ortiz======================= 186*d754254fSJorge Ramirez-Ortiz 187*d754254fSJorge Ramirez-OrtizCopy fastboot.bin to any partition on a FAT32 formated usb flash drive. 188*d754254fSJorge Ramirez-OrtizEnter the uboot prompt 189*d754254fSJorge Ramirez-Ortiz 190*d754254fSJorge Ramirez-Ortiz=> fatls usb 0:2 191*d754254fSJorge Ramirez-Ortiz 983040 fastboot.bin 192*d754254fSJorge Ramirez-Ortiz 193*d754254fSJorge Ramirez-Ortiz1 file(s), 0 dir(s) 194*d754254fSJorge Ramirez-Ortiz 195*d754254fSJorge Ramirez-Ortiz=> fatload usb 0:2 0x30000000 fastboot.bin 196*d754254fSJorge Ramirez-Ortizreading fastboot.bin 197*d754254fSJorge Ramirez-Ortiz983040 bytes read in 44 ms (21.3 MiB/s) 198*d754254fSJorge Ramirez-Ortiz 199*d754254fSJorge Ramirez-Ortiz=> mmc write 0x30000000 0 0x780 200*d754254fSJorge Ramirez-Ortiz 201*d754254fSJorge Ramirez-OrtizMMC write: dev # 0, block # 0, count 1920 ... 1920 blocks written: OK 202*d754254fSJorge Ramirez-Ortiz 203*d754254fSJorge Ramirez-Ortiz 204*d754254fSJorge Ramirez-Ortiz================================================================================ 205*d754254fSJorge Ramirez-Ortiz BOOT TRACE 206*d754254fSJorge Ramirez-Ortiz================================================================================ 207*d754254fSJorge Ramirez-Ortiz 208*d754254fSJorge Ramirez-OrtizBootrom start 209*d754254fSJorge Ramirez-OrtizBoot Media: eMMC 210*d754254fSJorge Ramirez-OrtizDecrypt auxiliary code ...OK 211*d754254fSJorge Ramirez-Ortiz 212*d754254fSJorge Ramirez-Ortizlsadc voltage min: 000000FE, max: 000000FF, aver: 000000FE, index: 00000000 213*d754254fSJorge Ramirez-Ortiz 214*d754254fSJorge Ramirez-OrtizEntry boot auxiliary code 215*d754254fSJorge Ramirez-Ortiz 216*d754254fSJorge Ramirez-OrtizAuxiliary code - v1.00 217*d754254fSJorge Ramirez-OrtizDDR code - V1.1.2 20160205 218*d754254fSJorge Ramirez-OrtizBuild: Mar 24 2016 - 17:09:44 219*d754254fSJorge Ramirez-OrtizReg Version: v134 220*d754254fSJorge Ramirez-OrtizReg Time: 2016/03/18 09:44:55 221*d754254fSJorge Ramirez-OrtizReg Name: hi3798cv2dmb_hi3798cv200_ddr3_2gbyte_8bitx4_4layers.reg 222*d754254fSJorge Ramirez-Ortiz 223*d754254fSJorge Ramirez-OrtizBoot auxiliary code success 224*d754254fSJorge Ramirez-OrtizBootrom success 225*d754254fSJorge Ramirez-Ortiz 226*d754254fSJorge Ramirez-OrtizLOADER: Switched to aarch64 mode 227*d754254fSJorge Ramirez-OrtizLOADER: Entering ARM TRUSTED FIRMWARE 228*d754254fSJorge Ramirez-OrtizLOADER: CPU0 executes at 0x000ce000 229*d754254fSJorge Ramirez-Ortiz 230*d754254fSJorge Ramirez-OrtizINFO: BL1: 0xe1000 - 0xe7000 [size = 24576] 231*d754254fSJorge Ramirez-OrtizNOTICE: Booting Trusted Firmware 232*d754254fSJorge Ramirez-OrtizNOTICE: BL1: v1.3(debug):v1.3-372-g1ba9c60 233*d754254fSJorge Ramirez-OrtizNOTICE: BL1: Built : 17:51:33, Apr 30 2017 234*d754254fSJorge Ramirez-OrtizINFO: BL1: RAM 0xe1000 - 0xe7000 235*d754254fSJorge Ramirez-OrtizINFO: BL1: Loading BL2 236*d754254fSJorge Ramirez-OrtizINFO: Loading image id=1 at address 0xe9000 237*d754254fSJorge Ramirez-OrtizINFO: Image id=1 loaded at address 0xe9000, size = 0x5008 238*d754254fSJorge Ramirez-OrtizNOTICE: BL1: Booting BL2 239*d754254fSJorge Ramirez-OrtizINFO: Entry point address = 0xe9000 240*d754254fSJorge Ramirez-OrtizINFO: SPSR = 0x3c5 241*d754254fSJorge Ramirez-OrtizNOTICE: BL2: v1.3(debug):v1.3-372-g1ba9c60 242*d754254fSJorge Ramirez-OrtizNOTICE: BL2: Built : 17:51:33, Apr 30 2017 243*d754254fSJorge Ramirez-OrtizINFO: BL2: Loading BL31 244*d754254fSJorge Ramirez-OrtizINFO: Loading image id=3 at address 0x129000 245*d754254fSJorge Ramirez-OrtizINFO: Image id=3 loaded at address 0x129000, size = 0x8038 246*d754254fSJorge Ramirez-OrtizINFO: BL2: Loading BL33 247*d754254fSJorge Ramirez-OrtizINFO: Loading image id=5 at address 0x37000000 248*d754254fSJorge Ramirez-OrtizINFO: Image id=5 loaded at address 0x37000000, size = 0x58f17 249*d754254fSJorge Ramirez-OrtizNOTICE: BL1: Booting BL31 250*d754254fSJorge Ramirez-OrtizINFO: Entry point address = 0x129000 251*d754254fSJorge Ramirez-OrtizINFO: SPSR = 0x3cd 252*d754254fSJorge Ramirez-OrtizINFO: Boot bl33 from 0x37000000 for 364311 Bytes 253*d754254fSJorge Ramirez-OrtizNOTICE: BL31: v1.3(debug):v1.3-372-g1ba9c60 254*d754254fSJorge Ramirez-OrtizNOTICE: BL31: Built : 17:51:33, Apr 30 2017 255*d754254fSJorge Ramirez-OrtizINFO: BL31: Initializing runtime services 256*d754254fSJorge Ramirez-OrtizINFO: BL31: Preparing for EL3 exit to normal world 257*d754254fSJorge Ramirez-OrtizINFO: Entry point address = 0x37000000 258*d754254fSJorge Ramirez-OrtizINFO: SPSR = 0x3c9 259*d754254fSJorge Ramirez-Ortiz 260*d754254fSJorge Ramirez-Ortiz 261*d754254fSJorge Ramirez-OrtizU-Boot 2017.05-rc2-00130-gd2255b0 (Apr 30 2017 - 17:51:28 +0200)poplar 262*d754254fSJorge Ramirez-Ortiz 263*d754254fSJorge Ramirez-OrtizModel: HiSilicon Poplar Development Board 264*d754254fSJorge Ramirez-OrtizBOARD: Hisilicon HI3798cv200 Poplar 265*d754254fSJorge Ramirez-OrtizDRAM: 1 GiB 266*d754254fSJorge Ramirez-OrtizMMC: Hisilicon DWMMC: 0 267*d754254fSJorge Ramirez-OrtizIn: serial@f8b00000 268*d754254fSJorge Ramirez-OrtizOut: serial@f8b00000 269*d754254fSJorge Ramirez-OrtizErr: serial@f8b00000 270*d754254fSJorge Ramirez-OrtizNet: Net Initialization Skipped 271*d754254fSJorge Ramirez-OrtizNo ethernet found. 272*d754254fSJorge Ramirez-Ortiz 273*d754254fSJorge Ramirez-OrtizHit any key to stop autoboot: 0 274*d754254fSJorge Ramirez-Ortizstarting USB... 275*d754254fSJorge Ramirez-OrtizUSB0: USB EHCI 1.00 276*d754254fSJorge Ramirez-Ortizscanning bus 0 for devices... 1 USB Device(s) found 277*d754254fSJorge Ramirez-OrtizUSB1: USB EHCI 1.00 278*d754254fSJorge Ramirez-Ortizscanning bus 1 for devices... 4 USB Device(s) found 279*d754254fSJorge Ramirez-Ortiz scanning usb for storage devices... 1 Storage Device(s) found 280*d754254fSJorge Ramirez-Ortiz scanning usb for ethernet devices... 1 Ethernet Device(s) found 281*d754254fSJorge Ramirez-Ortiz 282*d754254fSJorge Ramirez-OrtizUSB device 0: 283*d754254fSJorge Ramirez-Ortiz Device 0: Vendor: SanDisk Rev: 1.00 Prod: Cruzer Blade 284*d754254fSJorge Ramirez-Ortiz Type: Removable Hard Disk 285*d754254fSJorge Ramirez-Ortiz Capacity: 7632.0 MB = 7.4 GB (15630336 x 512) 286*d754254fSJorge Ramirez-Ortiz... is now current device 287*d754254fSJorge Ramirez-OrtizScanning usb 0:1... 288*d754254fSJorge Ramirez-Ortiz=> 289