Title: Mainline Linux on the IFC6410

This is a blog post that describes how to run a functional and up to date Linux kernel on the IFC6410. See my previous blog post for more details on the actual device and setup/install.

Almost mainline

While it is possible to run Linux 3.18 on the IFC6410, it stills lacks functionality that you likely want to have. Linaro maintains a branch that is the Linux kernel with some patches on top:

https://git.linaro.org/landing-teams/working/qualcomm/kernel.git

So, clone it and checkout the proper branch (as of today, at least):

git clone https://git.linaro.org/landing-teams/working/qualcomm/kernel.git
git checkout -t origin/integration-linux-qcomlt

Compile the kernel (if you compile from the IFC, omit the CROSS_COMPILE and INSTALL_MOD_PATH) options:

CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make qcom_defconfig

CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make menuconfig

CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm make zImage modules qcom-apq8064-ifc6410.dtb
CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- ARCH=arm INSTALL_MOD_PATH=../modules make modules_install

cat fixup.bin arch/arm/boot/zImage arch/arm/boot/dts/qcom-apq8064-ifc6410.dtb > ../zImage

Now, get the following files from Linaro to create the boot image:

wget http://releases.linaro.org/14.05/ubuntu/ifc6410/bootimg.cfg
wget -O initrd.img http://releases.linaro.org/14.05/ubuntu/ifc6410/initrd.img-3.4.0-linaro-ifc6410

Modify the bootimg.cfg to something like the following:

loglevel=10 earlyprintk=serial,ttyMSM0,115200,n8 console=ttyMSM0,115200,n8 console=/dev/console root=/dev/mmcblk1p1 rootwait rw

Of course, change the root parameter (and others) as necessary.

Now you can create the boot image with the following command:

abootimg --create ifc6410-boot.img -f bootimg.cfg -k zImage -r initrd.img

If you don't have abootimg, see the previous blog post.

Do not forget to change the serial in /etc/inittab to ttyMSM0 from ttyHSL0!

Caveats

As of writing, the IFC6410 will not clock at the full 1.7 Ghz frequency, but at a lower frequency, around 900 Mhz. This is because the kernel does not yet support raising the voltage (as I understood), so running it at a higher frequency currently runs the risk of undervolting.

Credits

Big thanks to all the people in #freedreno on Freenode; as well as John Peel (aka Dgby714) who provided me with these literal instructions.