1*626f048bSMateusz Kulikowski# 2*626f048bSMateusz Kulikowski# (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com> 3*626f048bSMateusz Kulikowski# 4*626f048bSMateusz Kulikowski# SPDX-License-Identifier: GPL-2.0+ 5*626f048bSMateusz Kulikowski# 6*626f048bSMateusz Kulikowski 7*626f048bSMateusz KulikowskiBuild & Run instructions: 8*626f048bSMateusz Kulikowski 9*626f048bSMateusz Kulikowski1) Install mkbootimg and dtbTool from 10*626f048bSMateusz Kulikowski git://codeaurora.org/quic/kernel/skales (15ece94f09 worked for me) 11*626f048bSMateusz Kulikowski2) Setup CROSS_COMPILE to aarch64 compiler 12*626f048bSMateusz Kulikowski3) make dragonboard410c_config 13*626f048bSMateusz Kulikowski4) make 14*626f048bSMateusz Kulikowski5) generate fake, empty ramdisk (can have 0 bytes) 15*626f048bSMateusz Kulikowski$ touch rd 16*626f048bSMateusz Kulikowski 17*626f048bSMateusz Kulikowski6) Generate qualcomm device tree table with dtbTool [1] 18*626f048bSMateusz Kulikowski$ dtbTool -o dt.img arch/arm/dts 19*626f048bSMateusz Kulikowski 20*626f048bSMateusz Kulikowski7) Generate Android boot image with mkbootimg [2]: 21*626f048bSMateusz Kulikowski$ mkbootimg --kernel=u-boot-dtb.bin --output=u-boot.img --dt=dt.img \ 22*626f048bSMateusz Kulikowski --pagesize 2048 --base 0x80000000 --ramdisk=rd --cmdline="" 23*626f048bSMateusz Kulikowski 24*626f048bSMateusz Kulikowski8) Enter fastboot (reboot board with vol- button pressed) 25*626f048bSMateusz Kulikowski 26*626f048bSMateusz Kulikowski9) Boot it: 27*626f048bSMateusz Kulikowski$ fastboot boot u-boot.img 28*626f048bSMateusz Kulikowskior flash as kernel: 29*626f048bSMateusz Kulikowski$ fastboot flash boot u-boot.img 30*626f048bSMateusz Kulikowski$ fastboot reboot 31*626f048bSMateusz Kulikowski 32*626f048bSMateusz Kulikowski 33*626f048bSMateusz KulikowskiWhat is working: 34*626f048bSMateusz Kulikowski- UART 35*626f048bSMateusz Kulikowski- GPIO (SoC) 36*626f048bSMateusz Kulikowski- SD 37*626f048bSMateusz Kulikowski- eMMC 38*626f048bSMateusz Kulikowski- Reset 39*626f048bSMateusz Kulikowski- USB in EHCI mode (usb starts does switch device->host, usb stop does the opposite) 40*626f048bSMateusz Kulikowski- PMIC GPIOS (but not in generic subsystem) 41*626f048bSMateusz Kulikowski- PMIC "special" buttons (power, vol-) 42*626f048bSMateusz Kulikowski 43*626f048bSMateusz KulikowskiWhat is not working / known bugs: 44*626f048bSMateusz Kulikowski- SDHCI is slow (~2.5MiB/s for SD and eMMC) 45*626f048bSMateusz Kulikowski 46*626f048bSMateusz Kulikowski[1] To boot any kernel image, Little Kernel requires valid device tree for the 47*626f048bSMateusz Kulikowskiplatform it runs on. dtbTool creates device tree table that Little Kernel scans. 48*626f048bSMateusz KulikowskiLater on proper device tree is passed to next boot stage. 49*626f048bSMateusz KulikowskiFull device tree is not required to boot u-boot. Enough would be: 50*626f048bSMateusz Kulikowski/dts-v1/; 51*626f048bSMateusz Kulikowski 52*626f048bSMateusz Kulikowski/ { 53*626f048bSMateusz Kulikowski model = "Qualcomm Technologies, Inc. Dragonboard 410c"; 54*626f048bSMateusz Kulikowski compatible = "qcom,dragonboard", "qcom,apq8016-sbc"; 55*626f048bSMateusz Kulikowski qcom,msm-id = <0xce 0x0 0xf8 0x0 0xf9 0x0 0xfa 0x0 0xf7 0x0>; 56*626f048bSMateusz Kulikowski qcom,board-id = <0x10018 0x0>; 57*626f048bSMateusz Kulikowski #address-cells = <0x2>; 58*626f048bSMateusz Kulikowski #size-cells = <0x2>; 59*626f048bSMateusz Kulikowski chosen { }; 60*626f048bSMateusz Kulikowski aliases { }; 61*626f048bSMateusz Kulikowski 62*626f048bSMateusz Kulikowski memory { 63*626f048bSMateusz Kulikowski device_type = "memory"; 64*626f048bSMateusz Kulikowski reg = <0 0x80000000 0 0x3da00000>; 65*626f048bSMateusz Kulikowski }; 66*626f048bSMateusz Kulikowski}; 67*626f048bSMateusz Kulikowski 68*626f048bSMateusz Kulikowskibut for simplicity (and because size of image is not that critical) we use 69*626f048bSMateusz Kulikowskiexisting Qualcomm device trees. 70*626f048bSMateusz Kulikowski 71*626f048bSMateusz Kulikowski[2] Note that ramdisk is required, even if it is unused. 72