Free Electrons at Linux.conf.au, January 2017

Linux.conf.au, which takes place every year in January in Australia or New Zealand, is a major event of the Linux community. Free Electrons already participated to this event three years ago, and will participate again to this year’s edition, which will take place from January 16 to January 20 2017 in Hobart, Tasmania.

Linux Conf Australia 2017

This time, Free Electrons CTO Thomas Petazzoni will give a talk titled A tour of the ARM architecture and its Linux support, in which he will share with LCA attendees what is the ARM architecture, how its Linux support is working, what the numerous variants of ARM processors and boards mean, what is the Device Tree, the ARM specific bootloaders, and more.

Linux.conf.au also features a number of other kernel related talks, such as the Kernel Report from Jonathan Corbet, Linux Kernel memory ordering: help arrives at last from Paul E. McKenney. The list of conferences is very impressive, and the event also features a number of miniconfs, including one on the Linux kernel.

If some of our readers located in Australia, New Zealand or neighboring countries plan on attending the conference, do not hesitate to drop us a mail so that we can meet during the event!

Buildroot 2016.11 released, Free Electrons contributions

Buildroot LogoThe 2016.11 release of Buildroot has been published on November, 30th. The release announcement, by Buildroot maintainer Peter Korsgaard, gives numerous details about the new features and updates brought by this release. This new release provides support for using multiple BR2_EXTERNAL directories, gives some important updates to the toolchain support, adds default configurations for 9 new hardware platforms, and 38 new packages were added.

On a total of 1423 commits made for this release, Free Electrons contributed a total of 253 commits:

$ git shortlog -sn --author=free-electrons 2016.08..2016.11
   142  Gustavo Zacarias
   104  Thomas Petazzoni
     7  Romain Perier

Here are the most important contributions we did:

  • Romain Perier contributed a package for the AMD Catalyst proprietary driver. Such drivers are usually not trivial to integrate, so having a ready-to-use package in Buildroot will really make it easier for Buildroot users who use hardware with an AMD/ATI graphics controller. This package provides both the X.org driver and the OpenGL implementation. This work was sponsored by one of Free Electrons customer.
  • Gustavo Zacarias mainly contributed a large set of patches that do a small update to numerous packages, to make sure the proper environment variables are passed. This is a preparation change to bring top-level parallel build in Buildroot. This work was also sponsored by another Free Electrons customer.
  • Thomas Petazzoni did contributions in various areas:
    • Added a DEVELOPERS file to the tree, to reference which developers are interested by which architectures and packages. Not only it allows the developers to be Cc’ed when patches are sent on the mailing list (like the get_maintainers script does), but it also used by Buildroot autobuilder infrastructure: if a package fails to build, the corresponding developer is notified by e-mail.
    • Misc updates to the toolchain support: switch to gcc 5.x by default, addition of gcc patches needed to fix various issues, etc.
    • Numerous fixes for build issues detected by Buildroot autobuilders

In addition to contributing 104 commits, Thomas Petazzoni also merged 1095 patches from other developers during this cycle, in order to help Buildroot maintainer Peter Korsgaard.

Finally, Free Electrons also sponsored the Buildroot project, by funding the meeting location for the previous Buildroot Developers meeting, which took place in October in Berlin, after the Embedded Linux Conference. See the Buildroot sponsors page, and also the report from this meeting. The next Buildroot meeting will take place after the FOSDEM conference in Brussels.

Software architecture of Free Electrons’ lab

As stated in a previous blog post, we officially launched our lab on 2016, April 25th and it is contributing to KernelCI since then. In a series of blog post, we’d like to present in details how our lab is working.

We previously introduced the lab and its integration in KernelCI, and presented its hardware infrastructure. Now is time to explain how it actually works on the software side.

Continuous integration in Linux kernel

Because of Linux’s well-known ability to run on numerous platforms and the obvious impossibility for developers to test changes on all these platforms, continuous integration has a big role to play in Linux kernel development and maintenance.

More generally, continuous integration is made up of three different steps:

  • building the software which in our case is the Linux kernel,
  • testing the software,
  • reporting the tests results;
KernelCI complete process

KernelCI complete process

Linux 4.9 released, Free Electrons contributions

Linus Torvalds has released the 4.9 Linux kernel yesterday, as was expected. With 16214 non-merge commits, this is by far the busiest kernel development cycle ever, but in large part due to the merging of thousands of commits to add support for Greybus. LWN has very well summarized what’s new in this kernel release: 4.9 Merge window part 1, 4.9 Merge window part 2, The end of the 4.9 merge window.

As usual, we take this opportunity to look at the contributions Free Electrons made to this kernel release. In total, we contributed 116 non-merge commits. Our most significant contributions this time have been:

  • Free Electrons engineer Boris Brezillon, already a maintainer of the Linux kernel NAND subsystem, becomes a co-maintainer of the overall MTD subsystem.
  • Contribution of an input ADC resistor ladder driver, written by Alexandre Belloni. As explained in the commit log: common way of multiplexing buttons on a single input in cheap devices is to use a resistor ladder on an ADC. This driver supports that configuration by polling an ADC channel provided by IIO.
  • On Atmel platforms, improvements to clock handling, bug fix in the Atmel HLCDC display controller driver.
  • On Marvell EBU platforms
    • Addition of clock drivers for the Marvell Armada 3700 (Cortex-A53 based), by Grégory Clement
    • Several bug fixes and improvements to the Marvell CESA driver, for the crypto engine founds in most Marvell EBU processors. By Romain Perier and Thomas Petazzoni
    • Support for the PIC interrupt controller, used on the Marvell Armada 7K/8K SoCs, currently used for the PMU (Performance Monitoring Unit). By Thomas Petazzoni.
    • Enabling of Armada 8K devices, with support for the slave CP110 and the first Armada 8040 development board. By Thomas Petazzoni.
  • On Allwinner platforms
    • Addition of GPIO support to the AXP209 driver, which is used to control the PMIC used on most Allwinner designs. Done by Maxime Ripard.
    • Initial support for the Nextthing GR8 SoC. By Mylène Josserand and Maxime Ripard (pinctrl driver and Device Tree)
    • The improved sunxi-ng clock code, introduced in Linux 4.8, is now used for Allwinner A23 and A33. Done by Maxime Ripard.
    • Add support for the Allwinner A33 display controller, by re-using and extending the existing sun4i DRM/KMS driver. Done by Maxime Ripard.
    • Addition of bridge support in the sun4i DRM/KMS driver, as well as the code for a RGB to VGA bridge, used by the C.H.I.P VGA expansion board. By Maxime Ripard.
  • Numerous cleanups and improvements commits in the UBI subsystem, in preparation for merging the support for Multi-Level Cells NAND, from Boris Brezillon.
  • Improvements in the MTD subsystem, by Boris Brezillon:
    • Addition of mtd_pairing_scheme, a mechanism which allows to express the pairing of NAND pages in Multi-Level Cells NANDs.
    • Improvements in the selection of NAND timings.

In addition, a number of Free Electrons engineers are also maintainers in the Linux kernel, so they review and merge patches from other developers, and send pull requests to other maintainers to get those patches integrated. This lead to the following activity:

  • Maxime Ripard, as the Allwinner co-maintainer, merged 78 patches from other developers.
  • Grégory Clement, as the Marvell EBU co-maintainer, merged 43 patches from other developers.
  • Alexandre Belloni, as the RTC maintainer and Atmel co-maintainer, merged 26 patches from other developers.
  • Boris Brezillon, as the MTD NAND maintainer, merged 24 patches from other developers.

The complete list of our contributions to this kernel release:

  • Alexandre Belloni (16)
    • usb: gadget: udc: atmel: fix endpoint name
    • clk: at91: sckc: optimize boot time
    • clk: at91: Add sama5d4 sckc support
    • clk: at91: move slow clock controller clocks to sckc.c
    • clocksource/drivers/timer-atmel-pit: Simplify IRQ handler
    • clocksource/drivers/timer-atmel-pit: Remove uselesss WARN_ON_ONCE
    • clocksource/drivers/timer-atmel-pit: Drop at91sam926x_pit_common_init
    • rtc: asm9260: rework locking
    • rtc: asm9260: allow COMPILE_TEST
    • rtc: rx6110: remove owner assignment
    • Documentation: dt: Intersil isl12057 is not a trivial device
    • rtc: isl12057: remove driver
    • rtc: ds1307: add Intersil ISL12057 support
    • rtc: ds1307: fix century bit support
    • Documentation: mic: fix kernel version
    • Input: add ADC resistor ladder driver
  • Boris Brezillon (34)
    • m68k: Fix ndelay() macro
    • ubi: fastmap: Fix add_vol() return value test in ubi_attach_fastmap()
    • mtd: nand: Fix data interface configuration logic
    • MAINTAINERS: add more people to the MTD maintainer team
    • mfd: atmel-hlcdc: Do not sleep in atomic context
    • UBI: introduce the VID buffer concept
    • UBI: hide EBA internals
    • UBI: provide an helper to query LEB information
    • UBI: provide an helper to check whether a LEB is mapped or not
    • UBI: add an helper to check lnum validity
    • UBI: simplify LEB write and atomic LEB change code
    • UBI: simplify recover_peb() code
    • UBI: move the global ech and vidh variables into struct ubi_attach_info
    • UBI: provide helpers to allocate and free aeb elements
    • UBI: fastmap: use ubi_io_{read, write}_data() instead of ubi_io_{read, write}()
    • UBI: fastmap: use ubi_rb_for_each_entry() in unmap_peb()
    • UBI: factorize destroy_av() and ubi_remove_av() code
    • UBI: factorize code used to manipulate volumes at attach time
    • UBI: use vol->usable_leb_size instead of (ubi->leb_size – vol->data_pad)
    • UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header
    • UBI: fastmap: avoid multiple be32_to_cpu() when unneccesary
    • UBI: fix add_fastmap() to use the vid_hdr passed in argument
    • UBI: fastmap: use ubi_find_volume() instead of open coding it
    • mtd: Kill the OF_MTD Kconfig option
    • mtd: nand: mxc: Test CONFIG_OF instead of CONFIG_OF_MTD
    • mtd: nand: Fix nand_command_lp() for 8bits opcodes
    • mtd: nand: sunxi: Support ECC maximization
    • mtd: nand: Support maximizing ECC when using software BCH
    • mtd: nand: Add an option to maximize the ECC strength
    • mtd: nand: automate NAND timings selection
    • mtd: nand_bbt: Move BBT block selection logic out of write_bbt()
    • mtd: nand: timings: Reorder tRR_min def in mode 0
    • mtd: nand: timings: Fix tADL_min for ONFI 4.0 chips
    • mtd: introduce the mtd_pairing_scheme concept
  • Gregory Clement (11)
    • arm64: dts: marvell: Fix typo in label name on Armada 37xx
    • clk: mvebu: armada-37xx-periph: Fix the clock gate flag
    • clk: mvebu: armada-37xx-periph: Fix the clock provider registration
    • ARM: mvebu: Select corediv clk for all mvebu v7 SoC
    • arm64: configs: enable PCIe driver for Aardvark
    • clk: mvebu: Add the peripheral clock driver for Armada 3700
    • dt-bindings: clock: add DT binding for the peripheral clocks on Armada 3700
    • clk: mvebu Add the time base generator clocks for Armada 3700
    • dt-bindings: clock: add DT binding for the TBG clocks on Armada 3700
    • clk: mvebu: Add the xtal clock for Armada 3700 SoC
    • dt-bindings: clock: add DT binding for the Xtal clock on Armada 3700
  • Mylene Josserand (3)
    • ARM: dts: gr8: Add support for the GR8 evaluation board
    • ARM: dts: Add NextThing GR8 dtsi
    • pinctrl: sunxi: Add GR8 controller support
  • Romain Perier (5)
    • crypto: marvell – Don’t corrupt state of an STD req for re-stepped ahash
    • crypto: marvell – Don’t copy hash operation twice into the SRAM
    • crypto: marvell – Don’t hardcode block size in mv_cesa_ahash_cache_req
    • crypto: marvell – Don’t overwrite default creq->state during initialization
    • crypto: marvell – Update transformation context for each dequeued req
  • Thomas Petazzoni (14)
    • MAINTAINERS: Add maintainer for the PCIe Marvell Armada 8K driver
    • MAINTAINERS: Add DT binding to the Aardvark PCIe driver maintainer
    • arm64: dts: marvell: enable MSI for PCIe on Armada 7K/8K
    • arm64: dts: marvell: describe the PIC and PMU on Armada 7K/8K
    • arm64: marvell: enable the Marvell PIC driver
    • irqchip/mvebu-pic: New driver for Marvell Armada 7K/8K PIC
    • dt-bindings: interrupt-controller: add DT binding for Marvell 7K/8K PIC
    • crypto: marvell – make mv_cesa_ahash_cache_req() return bool
    • crypto: marvell – turn mv_cesa_ahash_init() into a function returning void
    • crypto: marvell – remove unused parameter in mv_cesa_ahash_dma_add_cache()
    • crypto: marvell – be explicit about destination in mv_cesa_dma_add_op()
    • arm64: dts: marvell: add description for the Armada 8040 dev board
    • arm64: dts: marvell: add description for the slave CP110 in Armada 8K
    • arm64: defconfig: enable xhci-platform
  • Maxime Ripard (32)
    • ARM: gr8: Rename the DTSI and relevant DTS
    • drm/sun4i: rgb: Remove the bridge enable/disable functions
    • drm/bridge: Add RGB to VGA bridge support
    • backlight: pwm_bl: Handle gpio that can sleep
    • mfd: axp20x: Add AXP209 GPIO support
    • gpio: axp209: Implement get_direction
    • drm/sun4i: Fix the high buffer address mask
    • drm/sun4i: tv: Check mode pointer
    • drm/sun4i: Fix formats usable by the primary plane
    • clk: sunxi-ng: Fix reset offset for the A23 and A33
    • ARM: sun8i: a23/a33: Add RGB666 pins
    • ARM: sun8i: a33: Add display pipeline
    • ARM: sun8i: Convert the A23 and A33 to the CCU
    • clk: sunxi-ng: Add A23 CCU
    • clk: sunxi-ng: Add A33 CCU support
    • clk: sunxi-ng: Add N-class clocks support
    • clk: sunxi-ng: mux: Add mux table macro
    • clk: sunxi-ng: div: Allow to set a maximum
    • clk: sunxi-ng: div: Add kerneldoc for the _ccu_div structure
    • clk: sunxi-ng: div: Add mux table macros
    • ARM: sunxi: Support the Nextthing GR8
    • drm/sun4i: Add a DRC driver
    • drm/sun4i: backend: Handle the SAT
    • drm/sun4i: support A33 tcon
    • drm/sun4i: support TCONs without channel 1
    • clk: sunxi-ng: mux: Rename mux macro to be consistent
    • drm/sun4i: Add bridge support
    • drm/sun4i: Move panel retrieval in RGB connector
    • drm/sun4i: Store TCON’s device structure pointer
    • ARM: sun5i: chip: Add status LED
    • ARM: dt: axp209: Add AXP209 GPIO driver
    • gpio: Add AXP209 GPIO driver
  • Quentin Schulz (1)
    • hwmon: (iio_hwmon) defer probe when no channel is found

Free Electrons at the Embedded Linux Conference 2017

The next Embedded Linux Conference will take place later this month in Portland (US), from February 21 to 23, with a great schedule of talks. As usual, a number of Free Electrons engineers will attend this event, and we will also be giving a few talks.

Embedded Linux Conference 2017

Free Electrons CEO Michael Opdenacker will deliver a talk on Embedded Linux size reduction techniques, while Free Electrons engineer Quentin Schulz will give a talk on
Power Management Integrated Circuits: Keep the Power in Your Hands. In addition, Free Electrons engineers Maxime Ripard, Antoine Ténart and Mylène Josserand will be attending the conference.

We once again look forward to meeting our fellow members of the embedded Linux and Linux kernel communities!

Free Electrons at FOSDEM and the Buildroot Developers Meeting

FOSDEM 2017Like every year, a number of Free Electrons engineers will be attending the FOSDEM conference next week-end, on February 4 and 5, in Brussels. This year, Mylène Josserand and Thomas Petazzoni are going to FOSDEM. Being the biggest European open-source conference, FOSDEM is a great opportunity to meet a large number of open-source developers and learn about new projects.

In addition, Free Electrons is sponsoring the participation of Thomas Petazzoni to the Buildroot Developers meeting, which takes place during two days right after the FOSDEM conference. During this event, the Buildroot developers community gathers to make progress on the project by having discussions on the current topics, and working on the patches that have been submitted and need to be reviewed and merged.

Video and slides from Linux Conf Australia

Linux Conf Australia took place two weeks ago in Hobart, Tasmania. For the second time, a Free Electrons engineer gave a talk at this conference: for this edition, Free Electrons CTO Thomas Petazzoni did a talk titled A tour of the ARM architecture and its Linux support. This talk was intended as an introduction-level talk to explain what is ARM, what is the concept behind the ARM architecture and ARM System-on-chip, bootloaders typically used on ARM and the Linux support for ARM with the concept of Device Tree.

The slides of the talk are available in PDF format, and the video is available on Youtube. We got some nice feedback afterwards, which is a good indication a number of attendees found it informative.

All the videos from the different talks are also available on Youtube.

We once again found LCA to be a really great event, and want to thank the LCA organization for accepting our talk proposal and funding the travel expenses. Next year LCA, in 2018, will take place in Sydney, in mainland Australia.

Power measurement with BayLibre’s ACME cape

When working on optimizing the power consumption of a board we need a way to measure its consumption. We recently bought an ACME from BayLibre to do that.

Overview of the ACME

The ACME is an extension board for the BeagleBone Black, providing multi-channel power and temperature measurements capabilities. The cape itself has eight probe connectors allowing to do multi-channel measurements. Probes for USB, Jack or HE10 can be bought separately depending on boards you want to monitor.

acme

Last but not least, the ACME is fully open source, from the hardware to the software.

First setup

Ready to use pre-built images are available and can be flashed on an SD card. There are two different images: one acting as a standalone device and one providing an IIO capture daemon. While the later can be used in automated farms, we chose the standalone image which provides user-space tools to control the probes and is more suited to power consumption development topics.

The standalone image userspace can also be built manually using Buildroot, a provided custom configuration and custom init scripts. The kernel should be built using a custom configuration and the device tree needs to be patched.

Using the ACME

To control the probes and get measured values the Sigrok software is used. There is currently no support to send data over the network. Because of this limitation we need to access the BeagleBone Black shell through SSH and run our commands there.

We can display information about the detected probe, by running:

# sigrok-cli --show --driver=baylibre-acme
Driver functions:
    Continuous sampling
    Sample limit
    Time limit
    Sample rate
baylibre-acme - BayLibre ACME with 3 channels: P1_ENRG_PWR P1_ENRG_CURR P1_ENRG_VOL
Channel groups:
    Probe_1: channels P1_ENRG_PWR P1_ENRG_CURR P1_ENRG_VOL
Supported configuration options across all channel groups:
    continuous: 
    limit_samples: 0 (current)
    limit_time: 0 (current)
    samplerate (1 Hz - 500 Hz in steps of 1 Hz)

The driver has four parameters (continuous sampling, sample limit, time limit and sample rate) and has one probe attached with three channels (PWR, CURR and VOL). The acquisition parameters help configuring data acquisition by giving sampling limits or rates. The rates are given in Hertz, and should be within the 1 and 500Hz range when using an ACME.

For example, to sample at 20Hz and display the power consumption measured by our probe P1:

# sigrok-cli --driver=baylibre-acme --channels=P1_ENRG_PWR \
      --continuous --config samplerate=20
FRAME-BEGIN
P1_ENRG_PWR: 1.000000 W
FRAME-END
FRAME-BEGIN
P1_ENRG_PWR: 1.210000 W
FRAME-END
FRAME-BEGIN
P1_ENRG_PWR: 1.210000 W
FRAME-END

Of course there are many more options as shown in the Sigrok CLI manual.

Beta image

A new image is being developed and will change the way to use the ACME. As it’s already available in beta we tested it (and didn’t come back to the stable image). This new version aims to only use IIO to provide the probes data, instead of having a custom Sigrok driver. The main advantage is many software are IIO aware, or will be, as it’s the standard way to use this kind of sensors with the Linux kernel. Last but not least, IIO provides ways to communicate over the network.

A new webpage is available to find information on how to use the beta image, on https://baylibre-acme.github.io. This image isn’t compatible with the current stable one, which we previously described.

The first nice thing to notice when using the beta image is the Bonjour support which helps us communicating with the board in an effortless way:

$ ping baylibre-acme.local

A new tool, acme-cli, is provided to control the probes to switch them on or off given the needs. To switch on or off the first probe:

$ ./acme-cli switch_on 1
$ ./acme-cli switch_off 1

We do not need any additional custom software to use the board, as the sensors data is available using the IIO interface. This means we should be able to use any IIO aware tool to gather the power consumption values:

  • Sigrok, on the laptop/machine this time as IIO is able to communicate over the network;
  • libiio/examples, which provides the iio-monitor tool;
  • iio-capture, which is a fork of iio-readdev designed by BayLibre for an integration into LAVA (automated tests);
  • and many more..

Conclusion

We didn’t use all the possibilities offered by the ACME cape yet but so far it helped us a lot when working on power consumption related topics. The ACME cape is simple to use and comes with a working pre-built image. The beta image offers the IIO support which improved the usability of the device, and even though it’s in a beta version we would recommend to use it.

Free Electrons and Raspberry Pi Linux kernel upstreaming

Raspberry Pi logoFor a few months, Free Electrons has been helping the Raspberry Pi Foundation upstream to the Linux kernel a number of display related features for the Rasperry Pi platform.

The main goal behind this upstreaming process is to get rid of the closed-source firmware that is used on non-upstream kernels every time you need to enable/access a specific hardware feature, and replace it by something that is both open-source and compliant with upstream Linux standards.

Eric Anholt has been working hard to upstream display related features. His biggest contribution has certainly been the open-source driver for the VC4 GPU, but he also worked on the display controller side, and we were contracted to help him with this task.

Our first objective was to add support for SDTV (composite) output, which appeared to be much easier than we imagined. As some of you might already know, the display controller of the Raspberry Pi already has a driver in the DRM subsystem. Our job was to add support for the SDTV encoder (also called VEC, for Video EnCoder). The driver has been submitted just before the 4.10 merge window and surprisingly made it into 4.10 (see also the patches). Eric Anholt explained on his blog:

The Raspberry Pi Foundation recently started contracting with Free Electrons to give me some support on the display side of the stack. Last week I got to review and release their first big piece of work: Boris Brezillon’s code for SDTV support. I had suggested that we use this as the first project because it should have been small and self contained. It ended up that we had some clock bugs Boris had to fix, and a bug in my core VC4 CRTC code, but he got a working patch series together shockingly quickly. He did one respin for a couple more fixes once I had tested it, and it’s now out on the list waiting for devicetree maintainer review. If nothing goes wrong, we should have composite out support in 4.11 (we’re probably a week late for 4.10).

Our second objective was to help Eric with HDMI audio support. The code has been submitted on the mailing list 2 weeks ago and will hopefully be queued for 4.12. This time on, we didn’t write much code, since Eric already did the bulk of the work. What we did though is debugging the implementation to make it work. Eric also explained on his blog:

Probably the biggest news of the last two weeks is that Boris’s native HDMI audio driver is now on the mailing list for review. I’m hoping that we can get this merged for 4.12 (4.10 is about to be released, so we’re too late for 4.11). We’ve tested stereo audio so far, no compresesd audio (though I think it should Just Work), and >2 channel audio should be relatively small amounts of work from here. The next step on HDMI audio is to write the alsalib configuration snippets necessary to hide the weird details of HDMI audio (stereo IEC958 frames required) so that sound playback works normally for all existing userspace, which Boris should have a bit of time to work on still.

On our side, it has been a great experience to work on such topics with Eric, and you should expect more contributions from Free Electrons for the Raspberry Pi platform in the next months, so stay tuned!

Linux 4.10, Free Electrons contributions

After 8 release candidates, Linus Torvalds released the final 4.10 Linux kernel last Sunday. A total of 13029 commits were made between 4.9 and 4.10. As usual, LWN had a very nice coverage of the major new features added during the 4.10 merge window: part 1, part 2 and part 3. The KernelNewbies Wiki has an updated page about 4.10 as well.

On the total of 13029 commits, 116 were made by Free Electrons engineers, which interestingly is exactly the same number of commits we made for the 4.9 kernel release!

Our main contributions for this release have been:

  • For Atmel platforms, Alexandre Belloni added support for the securam block of the SAMA5D2, which is needed to implement backup mode, a deep suspend-to-RAM state for which we will be pushing patches over the next kernel releases. Alexandre also fixed some bugs in the Atmel dmaengine and USB gadget drivers.
  • For Allwinner platforms
    • Antoine Ténart enabled the 1-wire controller on the CHIP platform
    • Boris Brezillon fixed an issue in the NAND controller driver, that prevented from using ECC chunks of 512 bytes.
    • Maxime Ripard added support for the CHIP Pro platform from NextThing, together with many addition of features to the underlying SoC, the GR8 from Nextthing.
    • Maxime Ripard implemented audio capture support in the sun4i-i2s driver, bringing capture support to Allwinner A10 platforms.
    • Maxime Ripard added clock support for the Allwinner A64 to the sunxi-ng clock subsystem, and implemented numerous improvements for this subsystem.
    • Maxime Ripard reworked the pin-muxing driver on Allwinner platforms to use a new generic Device Tree binding, and deprecated the old platform-specific Device Tree binding.
    • Quentin Schulz added a MFD driver for the Allwinner A10/A13/A31 hardware block that provides ADC, touchscreen and thermal sensor functionality.
  • For the RaspberryPi platform
    • Boris Brezillon added support for the Video Encoder IP, which provides composite output. See also our recent blog post about our RaspberryPi work.
    • Boris Brezillon made a number of improvements to clock support on the RaspberryPi, which were needed for the Video Encoder IP support.
  • For the Marvell ARM platform
    • Grégory Clement enabled networking support on the Marvell Armada 3700 SoC, a Cortex-A53 based processor.
    • Grégory Clement did a large number of cleanups in the Device Tree files of Marvell platforms, fixing DTC warnings, and using node labels where possible.
    • Romain Perier contributed a brand new driver for the SPI controller of the Marvell Armada 3700, and therefore enabled SPI support on this platform.
    • Romain Perier extended the existing i2c-pxa driver to support the Marvell Armada 3700 I2C controller, and enabled I2C support on this platform.
    • Romain Perier extended the existing hardware number generator driver for OMAP to also be usable for SafeXcel EIP76 from Inside Secure. This allows to use this driver on the Marvell Armada 7K/8K SoC.
    • Romain Perier contributed support for the Globalscale EspressoBin board, a low-cost development board based on the Marvell Armada 3700.
    • Romain Perier did a number of fixes to the CESA driver, used for the cryptographic engine found on 32-bit Marvell SoCs, such as Armada 370, XP or 38x.
    • Thomas Petazzoni fixed a bug in the mvpp2 network driver, currently only used on Marvell Armada 375, but in the process of being extended to be used on Marvell Armada 7K/8K as well.
  • As the maintainer of the MTD NAND subsystem, Boris Brezillon did a few cleanups in the Tango NAND controller driver, added support for the TC58NVG2S0H NAND chip, and improved the core NAND support to accommodate controllers that have some special timing requirements.
  • As the maintainer of the RTC subsystem, Alexandre Belloni did a number of small cleanups and improvements, especially to the jz4740

Here is the detailed list of our commits to the 4.10 release:

  • Alexandre Belloni (14)
    • rtc: jz4740: make the driver buildable as a module again
    • usb: gadget: udc: atmel: remove memory leak
    • dmaengine: at_xdmac: don’t restore unsaved status
    • rtc: fix typos in Kconfig
    • rtc: jz4740: make the driver builtin only
    • rtc: jz4740: remove unused EXPORT_SYMBOL
    • misc: sram: add Atmel securam support
    • misc: sram: document new compatible
    • ARM: at91: add secumod register definitions
    • Documentation: dt: atmel-at91: Document secumod bindings
    • ARM: dts: at91: sama5d2: Add securam node
    • ARM: dts: at91: sama5d2: Add secumod node
    • ARM: dts: at91: sama5d2: use correct sckc compatible
    • ARM: dts: at91: sama5d4: use proper sckc compatible
  • Antoine Tenart (1)
    • ARM: sun5i: chip: add a node for the w1 gpio controller
  • Boris Brezillon (15)
    • clk: bcm: Fix ‘maybe-uninitialized’ warning in bcm2835_clock_choose_div_and_prate()
    • drm/vc4: Document VEC DT binding
    • drm/vc4: Add support for the VEC (Video Encoder) IP
    • drm: Add TV connector states to drm_connector_state
    • drm: Turn DRM_MODE_SUBCONNECTOR_xx definitions into an enum
    • drm/vc4: Fix ->clock_select setting for the VEC encoder
    • clk: bcm: Allow rate change propagation to PLLH_AUX on VEC clock
    • clk: bcm: Support rate change propagation on bcm2835 clocks
    • clk: bcm2835: Avoid overwriting the div info when disabling a pll_div clk
    • clk: bcm2835: Fix ->fixed_divider of pllh_aux
    • mtd: nand: tango: Use nand_to_mtd() instead of directly accessing chip->mtd
    • mtd: nand: Wait tCCS after a column change
    • mtd: nand: Add a few more timings to nand_sdr_timings
    • mtd: nand: add support for the TC58NVG2S0H chip
    • mtd: nand: sunxi: fix support for 512bytes ECC chunks
  • Gregory Clement (29)
    • ARM64: dts: marvell: Add network support for Armada 3700
    • net: mvneta: Only disable mvneta_bm for 64-bits
    • net: mvneta: Use cacheable memory to store the rx buffer virtual address
    • net: mvneta: Do not allocate buffer in rxq init with HWBM
    • net: mvneta: Optimize rx path for small frame
    • ARM64: dts: marvell: Fixup memory DT warning for Armada 37xx
    • arm64: dts: marvell: Fixup config-space DT warning For Armada 7K/8K
    • arm64: dts: marvell: Fixup internal-regs DT warning for Armada 37xx
    • ARM: dts: armada-375: Fixup ethernet child DT warning
    • ARM: dts: armada-375: Fixup memory DT warning
    • ARM: dts: armada-375: Remove skeleton.dtsi
    • ARM: dts: armada-375: Fixup pinctrl DT warnings
    • ARM: dts: armada-375: Fixup pcie DT warnings
    • ARM: dts: armada-375: Fixup mdio DT warning
    • ARM: dts: armada-375: Use the node labels
    • ARM: dts: armada-375: Add node labels
    • ARM: dts: armada-370-xp: Fixup regulator DT warning
    • ARM: dts: armada-370-xp: Remove button address and fixup names
    • ARM: dts: armada-370-xp: Remove address from dsa unit name
    • ARM: dts: armada-370-xp: Fixup memory DT warning
    • ARM: dts: armada-370-xp: Fixup l2-cache DT warning
    • ARM: dts: armada-370-xp: Remove skeleton.dtsi
    • ARM: dts: armada-370: Fixup pcie DT warnings
    • ARM: dts: armada-xp: Fixup pcie DT warnings
    • ARM: dts: armada-370-xp: Fixup mdio DT warning
    • ARM: dts: armada-370-xp: Use the node labels
    • ARM: dts: armada-370-xp: add node labels
    • ARM: dts: armada-370-xp: move the cpurst node in the common file
    • ARM: dts: armada-xp-matrix: Fix the location of the pcie-controller node
  • Romain Perier (17)
    • crypto: marvell – Copy IVDIG before launching partial DMA ahash requests
    • spi: Add support for Armada 3700 SPI Controller
    • spi: armada-3700: Add documentation for the Armada 3700 SPI Controller
    • i2c: pxa: Add support for the I2C units found in Armada 3700
    • i2c: pxa: Add definition of fast and high speed modes via the regs layout
    • dt-bindings: i2c: pxa: Update the documentation for the Armada 3700
    • crypto: marvell – Don’t break chain for computable last ahash requests
    • crypto: marvell – Use an unique pool to copy results of requests
    • arm64: dts: marvell: add TRNG description for Armada 8K CP
    • hwrng: omap – Add device variant for SafeXcel IP-76 found in Armada 8K
    • hwrng: omap – Don’t prefix the probe message with OMAP
    • hwrng: omap – Add support for 128-bit output of data
    • hwrng: omap – Remove global definition of hwrng
    • hwrng: omap – Switch to non-obsolete read API implementation
    • dt-bindings: omap-rng: Document SafeXcel IP-76 device variant
    • dt-bindings: Add vendor prefix for INSIDE Secure
    • arm64: dts: marvell: Add definition for the Globalscale Marvell ESPRESSOBin Board
  • Thomas Petazzoni (1)
    • net: mvpp2: fix dma unmapping of TX buffers for fragments
  • Maxime Ripard (37)
    • pinctrl: sunxi: Don’t enforce bias disable (for now)
    • mmc: sunxi: Prevent against null dereference for vmmc
    • ARM: sunxi: Add the missing clocks to the pinctrl nodes
    • ARM: sun8i: sina33: Enable USB gadget
    • ARM: gr8: evb: Add i2s codec
    • ARM: gr8: evb: Enable SPDIF
    • ARM: sun5i: chip: Add optional buses
    • ARM: sun5i: Add RGB 565 LCD pins
    • ARM: sun5i: Add SPI2 pins
    • ARM: sun5i: Rename A10s pins
    • ARM: sun5i: chip: Enable Wi-Fi SDIO chip
    • ARM: gr8: Add CHIP Pro support
    • ARM: gr8: Add UART3 pins
    • ARM: gr8: Add UART2 pins
    • ARM: gr8: Add missing pwm channel 1 pin
    • ARM: gr8: Fix typo in the i2s mclk pin group
    • ARM: gr8: Add the UART3
    • ARM: sun5i: a13-olinuxino: Enable VGA bridge
    • pinctrl: sunxi: Add support for interrupt debouncing
    • ASoC: wm8978: Adjust clock indices so that simple card works
    • ASoC: sunxi: i2s: Implement set_sysclk
    • ASoC: sun4i-i2s: Implement capture support
    • clk: sunxi-ng: Add A64 clocks
    • drm/sun4i: Add a few formats
    • pinctrl: sunxi: Deal with configless pins
    • clk: sunxi-ng: Implement minimum for multipliers
    • clk: sunxi-ng: Add minimums for all the relevant structures and clocks
    • clk: sunxi-ng: Finish to convert to structures for arguments
    • clk: sunxi-ng: Remove the use of rational computations
    • pinctrl: sunxi: Deprecate sunxi pinctrl bindings
    • pinctrl: sunxi: Support generic binding
    • pinctrl: sunxi: Handle bias disable
    • pinctrl: sunxi: Use macros from bindings header file for DT parsing
    • pinctrl: sunxi: Rework the pin config building code
    • clk: sunxi-ng: Rename the internal structures
    • ARM: multi_v7: enable VGA bridge
    • ARM: sunxi: Enable VGA bridge
  • Quentin Schulz (2)
    • mfd: Add support for Allwinner SoCs ADC
    • gpio: axp209: use correct register for GPIO input status