This page contains details about the latest kernel branch running on the CI20.
It will be periodically updated to keep up to speed with the latest.
The current branch tracking mainline 3.18.3
Status of Linux Kernel Drivers
The CI20 uses the Ingenic JZ4780 SoC.
Ingenic provided a 3.0.8 kernel with reasonably functioning support for most peripherals on the JZ4780.
Kernel.org development moves very quickly.
IMGTEC has reworked many drivers and forward ported others.
kernel.org already has support for JZ4740. However, JZ4740 has not been updated to use device-tree. JZ4780 and JZ4740 do share many features and peripherals. Hence, the best practice would be to augment the jz4740 drivers to work with the JZ4780.
3.16 branch was created to run the CI20 on a more recent kernel with that in mind. There was some work done on consolidation to use the existing jz4740 drivers. But the core SoC parts were still disjoint.
After collaboration with the kernel community working on jz4740, jz4770, jz4780. 3.18 was rewritten with heavy emphasis on consolidation of the core SoC driver.
Core patches are in-flight.
There is still lots of work to be done. Please do contribute to kernel development. We are very welcoming and friendly on #ci20 chatroom and the mailing list
In-flight patch series for jz4780 core support in kernel can be seen here
|Name||State||Path||Notes 3.0.8||Notes 3.16||Notes 3.18 +|
|Clocks||Works||drivers/clk/jz47xx||Could have common drivers/clk/ingenic for all SoCs with SoC specific binding using common components(?)||Uses common clock framework with jz4740. Intended for upstream|
|CPUfreq||4770 has , but clock infrastructure is different. Ingenic kernel had  for 4780. Not ported to 3.16 yet.|
|Device Tree||Mostly||N/A||Parsed on boot, but compiled into the kernel. Would be good to allow it to be passed from the bootloader.||DT for jz4740 as well|
|DMA||Mostly||drivers/dma/dma-jz4780.c||needs combining into dma-jz4740. Works, just missing priority support||See |
|GPIO||Works||drivers/pinctrl/pinctrl-jz4780.c||should perhaps be in drivers/gpio/ (?)|
|IRQ Controller||drivers/irqchip/irq-jz4780.c||Very similar between SoCs (4740 has one bank, 60,70,80 has two banks)||Consolidated work in 3.18 headed upstream|
|PinCtrl||Mostly||drivers/pinctrl/pinctrl-jz4780.c||N/A||Differs between SoCs. Functional, may need DT binding changes based on feedback from upstream. See also pinctrl-jz4770.c.|
|Power Controller (LPCR Register)|
|Power Off & Reset||Works|
|RTC||Works||drivers/rtc/rtc-jz4740.c||Consolidated with jz4740||Consolidated with jz4740|
|Watchdog||Works||Consolidated with jz4740|
|Name||State||Path||Notes 3.0.8||Notes 3.16||Notes 3.18+|
|ADC||WIP||Check branches on https://github.com/ZubairLK/CI20_linux|
|Audio (ALSA)||Works||Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev||Works. Uses jz4740 drivers with patches. i2s parts upstreamed. See  and |
|Efuse||Works||drivers/misc/jz_efuse.c||Works. Can read chip/serial id. Not linked with dm9000 for mac address. Upstream might face issues as yet another misc driver for eeprom. Efuse might need a subsystem talk etc|
|Ethernet||Works||drivers/net/ethernet/davicom/dm9000.c||Requires regulator and reset GPIO support, see .||Patch upstreamed. See |
|GPU||External Kernel Module||Works||WIP. Requires major overhaul as kernel layer changed significantly from 3.0.8 to 3.18 for jz4780. The way clocks, regulators enabled. The way registers handled etc.. LCD and HDMI drivers changed completely.|
|HDMI||WIP||Resolution requires kernel recompile||Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev||See . Needs atomic mode setting and universal plane update for upstreaming|
|I2C||Works||drivers/i2c/busses/i2c-jz4780.c||4740 has HW issue so uses gpio i2c instead. 4770 had  but unused so removed (also gave false positives on i2cdetect).||Works. Not 100% clear if gives spurious errors like 4770. Some i2x tx abrts etc. See |
|IPU||4770 has driver integrated with fbdev driver, see . Plans to move to DRM+KVM but may take time.|
|IR||Driver upstream||drivers/media/rc/gpio-ir-recv.c||GPIO, so use upstream GPIO driver|
|MMC||Works||drivers/mmc/host/jz4740_mmc.c||Various changes needed, see . Should not rename driver. Check whether affected by . See ||Works. Consolidation work needed before upstream. jz4740 has diverged. DMA driver differences block.|
|NAND||Works||Works. Reworked driver||See |
|PWM||drivers/pwm/pwm-jz4740.c||4770 uses same driver as 4740. Maybe applicable to 4780 too. See .||A modified jz4770 driver and an updated DT file are available here . Note: SMP may be using the PWM clock - so perhaps it will need to be disabled?|
|Regulator||Works||Works. Based on i2c driver.||Upstreamed. See |
|SPI (SSI)||None||SPIO GPIO should work, but a dedicated driver for the SSI hardware in drivers/spi/ would be better.|
|UART||Works||Quirks: see patches   See serial patches in series .||Works|
|USB(DWC)||Works||Upstream driver supports only host mode as of 3.15||Works with Ingenic hack to disable over current warnings|
|VPU||Driver aimed at 4770, see . For samples see . May be insecure (allows userland to do its own cache control and access TCSM banks). RemoteProc driver in progress, see .|
|Wifi||WIP||Check patches on https://groups.google.com/forum/#!forum/mips-creator-ci20-dev||Works. Uses some hacks to keep regulators on to enable the chip. Uses upstreamed driver and mmc/dma.|
|BT||WIP||Almost works. Uses some hacks to keep regulators on to enable the chip. Scans ok. File transfer presents a few issues. Possible not entirely kernel's fault and bluez etc.|
List of other possible issues when moving from 3.0.8 to 3.16+
Ethernet MAC Address
Due to the manufacturing process for the CI20, the ethernet's MAC address isn't burned into its EEPROM - it is instead burnt into EEPROM on the other side of the board. The move to 3.18 means the MAC address has to be set at boot time (otherwise a random MAC will be chosen).
This can be done using U-BOOT - add the following to your bootargs:
NOTE: Setting this bootarg for a kernel before 3.18 will cause a kernel panic.
The ci20_defconfig for 3.18 loads the firmware inside the kernel uImage. It should ideally not do that and load the firmware from user-space the way 3.0.8 does it.
WiFi on the CI20 is by a brcm4330 chip that requires closed source firmware. These files cannot be shipped as part of the kernel repository.
The required files can be found here or copied and renamed from the Debian NAND image
ci20:/lib/firmware/iw8103/fw_bcm4330b2.bin -> CI20_linux/firmware/brcm/brcmfmac4330-sdio.bin
ci20:/lib/firmware/iw8103/nv_4330b2.txt -> CI20_linux/firmware/brcm/brcmfmac4330-sdio.txt
Please note, the files have to be correctly named and in the correct directory for kernel compilation and for them to work.
If you are using the default debian rootfs on NAND and just update the kernel.
The NAND drivers between 3.0.8 and 3.16 are different. And detect different partition structures.
3.16 detects rootfs to be on mtd3.
While 3.0.8 detects rootfs to be on mtd1
So change the bootargs in uboot
setenv bootargs "console=ttyS4,115200 mem=256M@0x0 ubi.mtd=3 root=ubi0:root rootfstype=ubifs rw clock_ignore_unused" ^
Note: You might want to add another file in /boot instead of changing vmlinux.img
setenv bootcmd "mtdparts default; ubi part system; ubifsmount ubi:boot; ubifsload 0x88000000 uImage.3.18; bootm 0x88000000" ^
This way you can check your ci20 boots without messing the nand during a kernel upgrade.
will save the environment
- /etc/init.d/iw8103 is the startup script for the BT/Wifi firmware in the default rootfs.
If using 3.16/3.18, the script can cause the boot to hang unless the BT device is responding. Please move the script out of /etc/init.d or make sure the kernel is correct.
This is an issue with broadcoms patchram utility. It keeps trying. (Perhaps its some arguments passed to the script?)
Add "root=/dev/mmcblk0p1 rootwait" to bootargs in uboot if you wish to boot a rootfs from mmc.
GPU drivers rely on userland binaries and kernel module sources.
The work is on-going at IMG. Until the drivers are updated, using the GPU (openGL etc) will not be possible.
For normal usage, Xorg and framebuffer drivers do work.
The default xorg.conf is configured to load the powervr module. move that somewhere else/keep a copy. And use this xorg.conf
Note: Rename to xorg.conf. Don't leave it named xorg.conf.fbdev.
Place in /etc/X11/xorg.conf