Guido Günther

Guido Günther

Phone Developer
Guido Günther

Latest posts by Guido Günther (see all)

Following up on our report for Linux 5.2, here’s a list of Purism’s contributions for the 5.3 cycle Linux kernel. We contributed 12 patches, which include the Librem 5 devkit device tree and a driver for the i.MX8MQs D-PHY.

Librem 5 devkit device tree

Besides the kernel sources, the Linux git repository contains device tree files for all different kinds of hardware. These are not only used by the kernel itself, but also incorporated in other projects like U-Boot: they let the software know what the hardware looks like. We need it to bind the correct drivers, initialize clocks, assign the correct address ranges, interrupts, pin muxes, pad configs–and lots of other things. As of Linux 5.3, the Librem 5 devkit hardware description is supported in mainline Linux:

Device tree parts are usually only added to components that have working drivers. Since not all display subsystem drivers are merged yet (see below), the current device tree does not (yet) describe the display hardware; it will be added once the drivers are merged. However, the current device tree is enough to boot the board from eMMC or network and supports WiFi, modem and different kinds of sensors.

Following the initial merge, we enabled the power key in device tree:

Support the i.MX8MQ’s MIPI D-PHY

Getting a picture out of an LCD panel, on a modern smartphone like the Librem 5 using MIPI DSI, involves several components. The driver for the MIPI DSI LCD panel sits at the very bottom of the stack, and is panel-specific (it was mainlined last month). The other components usually reside on the SoC itself; in the case of the Librem5 and its devkit, an i.MX8MQ. These components are:

  • The MIPI D-PHY, that interfaces with the panel–in the i.MX8MQ, the IP core comes from Mixel.
  • The MIPI DSI host controller driver, an IP core from Northwest Logic; it outputs to the D-PHY.
  • The display controller, that feeds the display data to the DSI host controller. i.MX8MQ has two of them: the Display Controller Subsystem (DCSS)–which can also handle DisplayPort and HDMI–and the simpler eLCDIF.

From the above components, only the eLCDIF had a mainline driver (called mxsfb) and so, in order to get the LCD going, we contributed the Mixel D-PHY driver for 5.3:

Which leaves us only with the MIPI DSI host controller driver (currently under review) and some i.MX8MQ patches (specific to mxsfb) to get a picture on the LCD with a mainline kernel. Many thanks to Robert Chiras, Fabio Estevam, Sam Ravnborg and Kishon Vijay Abraham I for reviewing, testing and merging this driver! Robert is also the author of the D-PHY driver in NXPs BSP, on which we based this driver.

The above is not enough for 3D acceleration, though; we need the etnaviv kernel driver for the Vivante GPU, but the necessary changes will be the topic of another blog post.

Mainlining the DCSS driver will also be a huge effort… but NXP wants to look at it, so hopefully we will get both display port and HDMI support in mainline Linux in a not too distant future.

More hardware support

We added support for the BroadMobi BM818 M.2 card, one of the possible modems for the Librem 5:

We fixed a typo in the docs:

And added irqsteer to the i.MQ8MQ device tree, a component needed for DCSS (see above):

 We also contributed two reviews to published patches.

Again, many thanks to all the reviewers so far! And stay tuned, for there is more coming soon concerning the Linux 5.4 kernel.

Recent Posts

Related Content