Pengutronix Contributions to Linux 5.0

Robert Schwebel | | Event

Linux 5.0 is out, and while Linus keeps on telling everyone that the number has no special meaning at all, we again contributed about 90 patches as part of our work on industrial projects.

Marco Felsch and Michael Grzeschik added a set of patches to improve support for the MT9M111 camera chip. Userspace code is now able to select several formats, framerates and the streaming status, while board support code is now able to configure the PCLK polarity. Another device Marco worked with was the TVP5150, a chip that converts analog video to digital video. He improved the probe code. In addition, he added support for the DLC1010GIG TFT panel.

Philipp Zabel worked on graphics and video topics. In one of the patches, he made the error handling more robust by avoiding false-positive bugs that happen if a userspace dies unexpectedly while the framebuffer is updated on a DRM plane. For the CODA video unit on i.MX6, the deblocking filters for H.264 have been fixed for negative offsets. The offset handling has been adapted in a way that can 1:1 reuse the information from the H.264 headers. Two other patches improve the debug output and the error output of the CODA driver. Several v4l2 test suite compliance fixes improves the error handling for the case that the application tries to modify a read-only target, limit the time per frame to useful values and allow enumeration of the frame interval. Another patch reduces the minimal video size from 176x144 to 48x16 pixel. A more complex patch models the prefetch mechanics of the CODA bitstream reader in a way that makes sure that there is always enough data in the bitstream ring buffer before the hardware runs, in order to avoid buffer-underruns and makes it possible that the driver is always able to switch between different contexts. Another patch series cares about position comparisms and does some cleanup. With a new patch, having more than 32 encoder or decoder instances will be possible. Last but not least, Philipp mainlined a series of 15 patches for the IPU (the graphics unit on i.MX6): with the series, it is now again possible to use the IPU scaler for frame sizes of more than 1024x1024 pixels; this case is error prone, as it is necessary to split the video into several tiles, with a bunch of hardware limitations for position and size. The series finds out optimal tile boundaries and scale factors for a minimal derivation from the theoretically-optimal bi-linear one-pass scaling.

Marc Kleine-Budde maintains the Linux CAN subsystem. He fixed several bugs and improved the overall code quality.

Lucas Stach continues to work on i.MX8M support for the mainline kernel. He cleaned up the IRQSTEER interrupt controller driver: the unit is used on all three different i.MX8 families (MX8M, MX8QM and MX8X), so this is an important contribution for MX8 base support. With another patch, the GPCv2 IRQ hierarchy can now be completely described. Several cleanup patches and performance micro optimizations have been added. With Linux 5.0, i.MX8MQ is finally supported in mainline, including the MX8M EVK eval board. Like with earlier i.MX SoCs, it is being maintained by NXP and by Pengutronix developers. As the MX8M has many peripherals that have been also available in older SoCs, special care was taken that older units can continue to be supported with minimal impact. A set of three patches adds GPCv2 power domain support to i.MX8M. Also a set of clock drivers has been submitted. On i.MX6, Lucas fixed an atomic update bug that led to only half the possible frame rate. A more complex series of patches allows to use an external clock as PCIe reference clock on i.MX6. With this change, it is possible to use an external clock generator that runs within the specs of PCIe Gen2 and makes it possible to run the PCIe link with double the bandwidth, taken that the hardware was designed the right way. A patch adds byte queue limits for the CODA driver. The bit streaming buffer for the decoder has a certain size, as it is large enough to hold bigger I-Frames. For well compressed streams, this leads to several minutes of videostream time in the ring buffer, which extremely delays resolution changes (i.e. with HLS). By limiting the queue to the minimal size of bytes that still allow successful decoding, the flush latency will be heavily improved. Some smaller patches for example fix misleading warnings on boot time, improve the interrupt latency for the CODA video encoder/decoder and make it possible to provide a board specific thermal policy from device tree. The eGalay touch driver was improved and does now also support devices with swapped axis. Lucas maintains the Etnaviv driver; he improved the raw hardware fences and cleaned up old functionality which is now realized by the modern GPU scheduler.

Michael Tretter worked on mainline support for the Zynq Ultrascale, a family of FPGAs with integrated ARM cores. Some initial patches made their way into the kernel, but the larger part of the current work will follow later.