# 
 | 
# (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com> 
 | 
# 
 | 
# SPDX-License-Identifier:    GPL-2.0+ 
 | 
# 
 | 
  
 | 
Build & Run instructions: 
 | 
  
 | 
1) Install mkbootimg and dtbTool from 
 | 
   git://codeaurora.org/quic/kernel/skales (15ece94f09 worked for me) 
 | 
2) Setup CROSS_COMPILE to aarch64 compiler 
 | 
3) make dragonboard410c_config 
 | 
4) make 
 | 
5) generate fake, empty ramdisk (can have 0 bytes) 
 | 
$ touch rd 
 | 
  
 | 
6) Generate qualcomm device tree table with dtbTool [1] 
 | 
$ dtbTool -o dt.img arch/arm/dts 
 | 
  
 | 
7) Generate Android boot image with mkbootimg [2]: 
 | 
$ mkbootimg --kernel=u-boot-dtb.bin --output=u-boot.img --dt=dt.img  \ 
 | 
  --pagesize 2048 --base 0x80000000 --ramdisk=rd --cmdline="" 
 | 
  
 | 
8) Enter fastboot (reboot board with vol- button pressed) 
 | 
  
 | 
9) Boot it: 
 | 
$ fastboot boot u-boot.img 
 | 
or flash as kernel: 
 | 
$ fastboot flash boot u-boot.img 
 | 
$ fastboot reboot 
 | 
  
 | 
  
 | 
What is working: 
 | 
- UART 
 | 
- GPIO (SoC) 
 | 
- SD 
 | 
- eMMC 
 | 
- Reset 
 | 
- USB in EHCI mode (usb starts does switch device->host, usb stop does the opposite) 
 | 
- PMIC GPIOS (but not in generic subsystem) 
 | 
- PMIC "special" buttons (power, vol-) 
 | 
  
 | 
What is not working / known bugs: 
 | 
- SDHCI is slow (~2.5MiB/s for SD and eMMC) 
 | 
  
 | 
[1] To boot any kernel image, Little Kernel requires valid device tree for the 
 | 
platform it runs on. dtbTool creates device tree table that Little Kernel scans. 
 | 
Later on proper device tree is passed to next boot stage. 
 | 
Full device tree is not required to boot u-boot. Enough would be: 
 | 
/dts-v1/; 
 | 
  
 | 
/ { 
 | 
    model = "Qualcomm Technologies, Inc. Dragonboard 410c"; 
 | 
    compatible = "qcom,dragonboard", "qcom,apq8016-sbc"; 
 | 
    qcom,msm-id = <0xce 0x0 0xf8 0x0 0xf9 0x0 0xfa 0x0 0xf7 0x0>; 
 | 
    qcom,board-id = <0x10018 0x0>; 
 | 
    #address-cells = <0x2>; 
 | 
    #size-cells = <0x2>; 
 | 
    chosen { }; 
 | 
    aliases { }; 
 | 
  
 | 
    memory { 
 | 
        device_type = "memory"; 
 | 
        reg = <0 0x80000000 0 0x3da00000>; 
 | 
    }; 
 | 
}; 
 | 
  
 | 
but for simplicity (and because size of image is not that critical) we use 
 | 
existing Qualcomm device trees. 
 | 
  
 | 
[2] Note that ramdisk is required, even if it is unused. 
 |