1# SPDX-License-Identifier: GPL-2.0+ 2# 3# (C) Copyright 2017 Jorge Ramirez-Ortiz <jorge.ramirez-ortiz@linaro.org> 4 5================================================================================ 6 What is working (enough to boot a distro from SD card) 7================================================================================ 8 - UART 9 - SD card 10 - PSCI reset 11 - Environment in EXT4 partition 1 in SD card (check defconfig for details) 12 dont forget to insert the card in the SD slot before booting if you 13 are going to make mods to the environment 14 15================================================================================ 16 Build & Run instructions 17================================================================================ 18 191) Install mkbootimg and dtbTool from Codeaurora: 20 21 git://codeaurora.org/quic/kernel/skales 22 commit 8492547e404e969262d9070dee9bdd15668bb70f worked for me. 23 242) Setup CROSS_COMPILE to aarch64 compiler or if you use ccache just do 25 CROSS_COMPILE="ccache aarch64-linux-gnu-" 26 273) cd to the u-boot tree 28 29 $ make dragonboard820c_config 30 $ make -j `nproc` 31 324) generate fake, empty ramdisk (can have 0 bytes) 33 34 $ touch rd 35 365) Generate qualcomm device tree table with dtbTool 37 38 $ dtbTool -o dt.img arch/arm/dts 39 406) Generate Android boot image with mkbootimg: 41 42 $ mkbootimg --kernel=u-boot-dtb.bin \ 43 --output=u-boot.img \ 44 --dt=dt.img \ 45 --pagesize 4096 \ 46 --base 0x80000000 \ 47 --ramdisk=rd \ 48 --cmdline="" 49 507) Reboot the board into fastboot mode 51 - plug the board micro-usb to your laptop usb host. 52 - reboot the board with vol- button pressed 53 548) Boot the uboot image using fastboot 55 56 $ fastboot boot u-boot.img 57 58 or flash it to the UFS drive boot partition: 59 60 $ fastboot flash boot u-boot.img 61 $ fastboot reboot 62 63 64================================================================================ 65 To boot a linux kernel from SDHCI with the ROOTFS on an NFS share: 66================================================================================ 67 681) create an EXT4 partition on the SD card (must be partition #1) 69 702) build the kernel image and dtb (documented extensively somewhere else) 71 723) copy the drivers to the NFS partition (ie: 192.168.1.2 /exports/db820c-rootfs) 73 744) add the u-boot headers to the image: 75 76 $ mkimage -A arm64 \ 77 -O linux \ 78 -C none \ 79 -T kernel \ 80 -a 0x80080000 \ 81 -e 0x80080000 \ 82 -n Dragonboard820c \ 83 -d $kernel/arch/arm64/boot/Image \ 84 uImage 85 865) copy the generated uImage and the device tree binary to the SD card EXT4 87 partition 88 89 $ cp uImage /mnt/boot/ 90 $ cp apq8096-db820c.dtb /mnt/boot/ 91 926) on the SD card create /extlinux/extlinux.conf as follows: 93 94 default nfs 95 prompt 1 96 timeout 10 97 98 LABEL nfs 99 MENU NFS entry 100 LINUX /uImage 101 FDT /apq8096-db820c.dtb 102 APPEND root=/dev/nfs rw \ 103 nfsroot=192.168.1.2:/exports/db829c-rootfs,v3,tcp \ 104 rootwait \ 105 ip=dhcp consoleblank=0 \ 106 console=tty0 \ 107 console=ttyMSM0,115200n8 \ 108 earlyprintk earlycon=msm_serial_dm,0x75b0000 \ 109 androidboot.bootdevice=624000.ufshc \ 110 androidboot.verifiedbootstate=orange \ 111 androidboot.ver0 112 1137) remove the SD card from the laptop and insert it back to the db820 board. 114 the SD card EXT4 partition#1 should contain: 115 /uImage 116 /apq8096-db820c.dtb 117 /extlinux/extlinux.conf 118 1198) reboot the db820 board 120 121================================================================================ 122 Successful boot sequence 123================================================================================ 124 125Format: Log Type - Time(microsec) - Message - Optional Info 126Log Type: B - Since Boot(Power On Reset), D - Delta, S - Statistic 127S - QC_IMAGE_VERSION_STRING=BOOT.XF.1.0-00301 128S - IMAGE_VARIANT_STRING=M8996LAB 129S - OEM_IMAGE_VERSION_STRING=crm-ubuntu68 130S - Boot Interface: UFS 131S - Secure Boot: Off 132S - Boot Config @ 0x00076044 = 0x000001c9 133S - JTAG ID @ 0x000760f4 = 0x4003e0e1 134S - OEM ID @ 0x000760f8 = 0x00000000 135S - Serial Number @ 0x00074138 = 0x2e8844ce 136S - OEM Config Row 0 @ 0x00074188 = 0x0000000000000000 137S - OEM Config Row 1 @ 0x00074190 = 0x0000000000000000 138S - Feature Config Row 0 @ 0x000741a0 = 0x0050000010000100 139S - Feature Config Row 1 @ 0x000741a8 = 0x00fff00001ffffff 140S - Core 0 Frequency, 1228 MHz 141B - 0 - PBL, Start 142B - 10412 - bootable_media_detect_entry, Start 143B - 47480 - bootable_media_detect_success, Start 144B - 47481 - elf_loader_entry, Start 145B - 49027 - auth_hash_seg_entry, Start 146B - 49129 - auth_hash_seg_exit, Start 147B - 82403 - elf_segs_hash_verify_entry, Start 148B - 84905 - PBL, End 149B - 86955 - SBL1, Start 150B - 182969 - usb: hs_phy_nondrive_start 151B - 183305 - usb: PLL lock success - 0x3 152B - 186294 - usb: hs_phy_nondrive_finish 153B - 190442 - boot_flash_init, Start 154D - 30 - boot_flash_init, Delta 155B - 197548 - sbl1_ddr_set_default_params, Start 156D - 30 - sbl1_ddr_set_default_params, Delta 157B - 205509 - boot_config_data_table_init, Start 158D - 200659 - boot_config_data_table_init, Delta - (60 Bytes) 159B - 410713 - CDT Version:3,Platform ID:24,Major ID:1,Minor ID:0,Subtype:0 160B - 415410 - Image Load, Start 161D - 22570 - PMIC Image Loaded, Delta - (37272 Bytes) 162B - 437980 - pm_device_init, Start 163B - 443744 - PON REASON:PM0:0x200000061 PM1:0x200000021 164B - 480161 - PM_SET_VAL:Skip 165D - 40016 - pm_device_init, Delta 166B - 482083 - pm_driver_init, Start 167D - 2928 - pm_driver_init, Delta 168B - 488671 - pm_sbl_chg_init, Start 169D - 91 - pm_sbl_chg_init, Delta 170B - 495442 - vsense_init, Start 171D - 0 - vsense_init, Delta 172B - 505171 - Pre_DDR_clock_init, Start 173D - 396 - Pre_DDR_clock_init, Delta 174B - 509045 - ddr_initialize_device, Start 175B - 512766 - 8996 v3.x detected, Max frequency = 1.8 GHz 176B - 522373 - ddr_initialize_device, Delta 177B - 522404 - DDR ID, Rank 0, Rank 1, 0x6, 0x300, 0x300 178B - 526247 - Basic DDR tests done 179B - 594994 - clock_init, Start 180D - 274 - clock_init, Delta 181B - 598349 - Image Load, Start 182D - 4331 - QSEE Dev Config Image Loaded, Delta - (46008 Bytes) 183B - 603808 - Image Load, Start 184D - 5338 - APDP Image Loaded, Delta - (0 Bytes) 185B - 612409 - usb: UFS Serial - 2f490ecf 186B - 616801 - usb: fedl, vbus_low 187B - 620431 - Image Load, Start 188D - 55418 - QSEE Image Loaded, Delta - (1640572 Bytes) 189B - 675849 - Image Load, Start 190D - 2013 - SEC Image Loaded, Delta - (4096 Bytes) 191B - 683413 - sbl1_efs_handle_cookies, Start 192D - 457 - sbl1_efs_handle_cookies, Delta 193B - 691892 - Image Load, Start 194D - 14396 - QHEE Image Loaded, Delta - (254184 Bytes) 195B - 706319 - Image Load, Start 196D - 14061 - RPM Image Loaded, Delta - (223900 Bytes) 197B - 721111 - Image Load, Start 198D - 3233 - STI Image Loaded, Delta - (0 Bytes) 199B - 727913 - Image Load, Start 200D - 34709 - APPSBL Image Loaded, Delta - (748716 Bytes) 201B - 762713 - SBL1, End 202D - 680028 - SBL1, Delta 203S - Flash Throughput, 94000 KB/s (2959024 Bytes, 31250 us) 204S - DDR Frequency, 1017 MHz 205Android Bootloader - UART_DM Initialized!!! 206 207[0] BUILD_VERSION= 208[0] BUILD_DATE=16:07:51 - Nov 17 2017 209[0] welcome to lk 210[10] platform_init() 211[10] target_init() 212[10] RPM GLink Init 213[10] Opening RPM Glink Port success 214[10] Opening SSR Glink Port success 215[20] Glink Connection between APPS and RPM established 216[20] Glink Connection between APPS and RPM established 217[40] UFS init success 218[80] Qseecom Init Done in Appsbl 219[80] secure app region addr=0x86600000 size=0x2200000[90] TZ App region notif returned with status:0 addr:86600000 size:35651584 220[100] TZ App log region register returned with status:0 addr:916d4000 size:4096 221[100] Qseecom TZ Init Done in Appsbl 222[120] Loading cmnlib done 223[120] qseecom_start_app: Loading app keymaster for the first time 224[150] <8>keymaster: "\"KEYMASTER Init \"" 225[160] Selected panel: none 226Skip panel configuration 227[160] pm8x41_get_is_cold_boot: cold boot 228[170] boot_verifier: Device is in ORANGE boot state. 229[180] Device is unlocked! Skipping verification... 230[180] Loading (boot) image (348160): start 231[190] Loading (boot) image (348160): done 232[190] use_signed_kernel=1, is_unlocked=1, is_tampered=0. 233[200] Your device has been unlocked and cant be trusted. 234Wait for 5 seconds before proceeding 235 236[5200] mdtp: mdtp_img loaded 237[5210] mdtp: is_test_mode: test mode is set to 1 238[5210] mdtp: read_metadata: SUCCESS 239[5230] LK SEC APP Handle: 0x1 240[5230] Return value from recv_data: 14 241[5240] Return value from recv_data: 14 242[5250] Return value from recv_data: 14 243[5260] DTB Total entry: 1, DTB version: 3 244[5260] Using DTB entry 0x00000123/00000000/0x00000018/0 for device 0x00000123/00030001/0x00010018/0 245[5270] cmdline: androidboot.bootdevice=624000.ufshc androidboot.verifiedbootstate=orange androidboot.veritymode=enforcing androidboot.serialno=2f490ecf androidboot.baseband=apq mdss_mdp.panel=0 246[5290] Updating device tree: start 247[5290] Updating device tree: done 248[5290] Return value from recv_data: 14 249[5300] RPM GLINK UnInit 250[5300] Qseecom De-Init Done in Appsbl 251[5300] booting linux @ 0x80080000, ramdisk @ 0x82200000 (0), tags/device tree @ 0x82000000 252[5310] Jumping to kernel via monitor 253 254U-Boot 2017.11-00145-ge895117 (Nov 29 2017 - 10:04:06 +0100) 255Qualcomm-DragonBoard 820C 256 257DRAM: 3 GiB 258PSCI: v1.0 259MMC: sdhci@74a4900: 0 260In: serial@75b0000 261Out: serial@75b0000 262Err: serial@75b0000 263Net: Net Initialization Skipped 264No ethernet found. 265Hit any key to stop autoboot: 0 266switch to partitions #0, OK 267mmc0 is current device 268Scanning mmc 0:1... 269Found /extlinux/extlinux.conf 270Retrieving file: /extlinux/extlinux.conf 271433 bytes read in 71 ms (5.9 KiB/s) 2721: nfs root 273 274Retrieving file: /uImage 27519397184 bytes read in 2024 ms (9.1 MiB/s) 276append: root=/dev/nfs rw nfsroot=192.168.1.2:/db820c/rootfs,v3,tcp rootwait ip=dhcp consoleblank=0 console=tty0 console=ttyMSM0,115200n8 earlyprintk earlycon=msm_serial_dm,0x75b0000 androidboot.bootdevice=624000.ufshc androidboot.verifiedbootstate=orange androidboot.ver0 277 278Retrieving file: /apq8096-db820c.dtb 27938134 bytes read in 37 ms (1005.9 KiB/s) 280 281## Booting kernel from Legacy Image at 95000000 ... 282 Image Name: Dragonboard820c 283 Image Type: AArch64 Linux Kernel Image (uncompressed) 284 Data Size: 19397120 Bytes = 18.5 MiB 285 Load Address: 80080000 286 Entry Point: 80080000 287 Verifying Checksum ... OK 288## Flattened Device Tree blob at 93000000 289 Booting using the fdt blob at 0x93000000 290 Loading Kernel Image ... OK 291 Using Device Tree in place at 0000000093000000, end 000000009300c4f5 292 293Starting kernel ... 294 295[ 0.000000] Booting Linux on physical CPU 0x0 296[ 0.000000] Linux version 4.11.3-30039-g5a922a1 (jramirez@igloo) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) ) #1 SMP PREEMPT Wed Oct 18 10:21:11 CEST 2017 297[ 0.000000] Boot CPU: AArch64 Processor [511f2112] 298[ 0.000000] earlycon: msm_serial_dm0 at MMIO 0x00000000075b0000 (options '') 299[ 0.000000] bootconsole [msm_serial_dm0] enabled 300[ 0.000000] efi: Getting EFI parameters from FDT: 301[ 0.000000] efi: UEFI not found. 302[ 0.000000] OF: reserved mem: OVERLAP DETECTED! 303[ 0.000000] adsp@8ea00000 (0x000000008ea00000--0x0000000090400000) overlaps with gpu@8f200000 (0x000000008f200000--0x000000008f300000) 304[ 0.000000] Reserved memory: created DMA memory pool at 0x000000008f200000, size 1 MiB 305[ 0.000000] OF: reserved mem: initialized node gpu@8f200000, compatible id shared-dma-pool 306[ 0.000000] Reserved memory: created DMA memory pool at 0x0000000090400000, size 8 MiB 307[ 0.000000] OF: reserved mem: initialized node venus@90400000, compatible id shared-dma-pool 308[ 0.000000] cma: Reserved 128 MiB at 0x00000000b8000000 309[ 0.000000] NUMA: No NUMA configuration found 310[ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x00000000bfffffff] 311[ 0.000000] NUMA: Adding memblock [0x80000000 - 0x857fffff] on node 0 312[ 0.000000] NUMA: Adding memblock [0x91800000 - 0xbfffffff] on node 0 313[ 0.000000] NUMA: Initmem setup node 0 [mem 0x80000000-0xbfffffff] 314[ 0.000000] NUMA: NODE_DATA [mem 0xb7fb6680-0xb7fb817f] 315[ 0.000000] Zone ranges: 316[ 0.000000] DMA [mem 0x0000000080000000-0x00000000bfffffff] 317[ 0.000000] Normal empty 318[ 0.000000] Movable zone start for each node 319[ 0.000000] Early memory node ranges 320[ 0.000000] node 0: [mem 0x0000000080000000-0x00000000857fffff] 321[ 0.000000] node 0: [mem 0x0000000091800000-0x00000000bfffffff] 322[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000bfffffff] 323[ 0.000000] psci: probing for conduit method from DT. 324[ 0.000000] psci: PSCIv1.0 detected in firmware. 325[ 0.000000] psci: Using standard PSCI v0.2 function IDs 326[ 0.000000] psci: MIGRATE_INFO_TYPE not supported. 327[ 0.000000] percpu: Embedded 23 pages/cpu @ffff8000de9a3000 s57240 r8192 d28776 u94208 328[ 0.000000] pcpu-alloc: s57240 r8192 d28776 u94208 alloc=23*4096 329[ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 330[ 0.000000] Detected PIPT I-cache on CPU0 331[ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 720293 332[ 0.000000] Policy zone: Normal 333[ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.1.2:/db820c/rootfs,v3,tcp rootwait ip=dhcp consoleblank=0 334console=tty0 console=ttyMSM0,115200n8 earlyprintk earlycon=msm_serial_dm,0x75b0000 androidboot.bootdevice=624000.ufshc androidboot.verifiedbootstate=orange a 335ndroidboot.ver0 336[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes) 337[ 0.000000] software IO TLB [mem 0xd3fff000-0xd7fff000] (64MB) mapped at [ffff800053fff000-ffff800057ffefff] 338[ 0.000000] Memory: 2644172K/2926908K available (11196K kernel code, 1470K rwdata, 5132K rodata, 1088K init, 449K bss, 151664K reserved, 131072K cma-reser 339ved) 340[ 0.000000] Virtual kernel memory layout: 341[ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB) 342[ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB) 343[ 0.000000] .text : 0xffff000008080000 - 0xffff000008b70000 ( 11200 KB) 344[ 0.000000] .rodata : 0xffff000008b70000 - 0xffff000009080000 ( 5184 KB) 345[ 0.000000] .init : 0xffff000009080000 - 0xffff000009190000 ( 1088 KB) 346[ 0.000000] .data : 0xffff000009190000 - 0xffff0000092ffa00 ( 1471 KB) 347[ 0.000000] .bss : 0xffff0000092ffa00 - 0xffff00000937014c ( 450 KB) 348[ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB) 349[ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB) 350[ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum) 351[ 0.000000] 0xffff7e0000000000 - 0xffff7e00037a93c0 ( 55 MB actual) 352[ 0.000000] memory : 0xffff800000000000 - 0xffff8000dea4f000 ( 3562 MB) 353[ 0.000000] SLUB: HWalign=128, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 354[ 0.000000] Preemptible hierarchical RCU implementation. 355[ 0.000000] Build-time adjustment of leaf fanout to 64. 356[ 0.000000] RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=4. 357[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=4 358[ 0.000000] NR_IRQS:64 nr_irqs:64 0 359[ 0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000009c00000 360[ 0.000000] GICv2m: range[mem 0x09bd0000-0x09bd0fff], SPI[544:639] 361[ 0.000000] arm_arch_timer: Architected cp15 and mmio timer(s) running at 19.20MHz (virt/virt). 362[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x46d987e47, max_idle_ns: 440795202767 ns 363[ 0.000002] sched_clock: 56 bits at 19MHz, resolution 52ns, wraps every 4398046511078ns 364 365[....] 366 367 368Some kernel information: 369 370root@linaro-developer:~# cat /proc/cpuinfo 371processor : 0 372BogoMIPS : 38.40 373Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid 374CPU implementer : 0x51 375CPU architecture: 8 376CPU variant : 0x1 377CPU part : 0x211 378CPU revision : 2 379 380processor : 1 381BogoMIPS : 38.40 382Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid 383CPU implementer : 0x51 384CPU architecture: 8 385CPU variant : 0x1 386CPU part : 0x211 387CPU revision : 2 388 389processor : 2 390BogoMIPS : 38.40 391Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid 392CPU implementer : 0x51 393CPU architecture: 8 394CPU variant : 0x1 395CPU part : 0x205 396CPU revision : 2 397 398processor : 3 399BogoMIPS : 38.40 400Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid 401CPU implementer : 0x51 402CPU architecture: 8 403CPU variant : 0x1 404CPU part : 0x205 405CPU revision : 2 406 407root@linaro-developer:~# uname -a 408Linux linaro-developer 4.11.3-30039-g5a922a1 #1 SMP PREEMPT Wed Oct 18 10:21:11 CEST 2017 aarch64 GNU/Linux 409 410root@linaro-developer:~# cat /proc/cmdline 411root=/dev/nfs rw nfsroot=192.168.1.2:/db820c/rootfs,v3,tcp rootwait ip=dhcp consoleblank=0 console=tty0 console=ttyMSM0,115200n8 earlyprintk earlycon=msm_serial_dm,0x75b0000 androidboot.bootdevice=624000.ufshc androidboot.verifiedbootstate=orange androidboot.ver0 412 413root@linaro-developer:~# cat /proc/meminfo 414MemTotal: 2776332 kB 415MemFree: 2593696 kB 416MemAvailable: 2561432 kB 417Buffers: 0 kB 418Cached: 94744 kB 419SwapCached: 0 kB 420Active: 43888 kB 421Inactive: 72972 kB 422Active(anon): 22968 kB 423Inactive(anon): 24616 kB 424Active(file): 20920 kB 425Inactive(file): 48356 kB 426Unevictable: 0 kB 427Mlocked: 0 kB 428SwapTotal: 0 kB 429SwapFree: 0 kB 430Dirty: 0 kB 431Writeback: 0 kB 432AnonPages: 22120 kB 433Mapped: 29284 kB 434Shmem: 25468 kB 435Slab: 32876 kB 436SReclaimable: 12924 kB 437SUnreclaim: 19952 kB 438KernelStack: 2144 kB 439PageTables: 928 kB 440NFS_Unstable: 0 kB 441Bounce: 0 kB 442WritebackTmp: 0 kB 443CommitLimit: 1388164 kB 444Committed_AS: 204192 kB 445VmallocTotal: 135290290112 kB 446VmallocUsed: 0 kB 447VmallocChunk: 0 kB 448AnonHugePages: 2048 kB 449ShmemHugePages: 0 kB 450ShmemPmdMapped: 0 kB 451CmaTotal: 131072 kB 452CmaFree: 130356 kB 453HugePages_Total: 0 454HugePages_Free: 0 455HugePages_Rsvd: 0 456HugePages_Surp: 0 457Hugepagesize: 2048 kB 458