Linux 3.17 released, Bootlin 14th contributing company

PenguinLinux 3.17 has been released a few days ago. One can read the coverage of the 3.17 merge window by LWN (part 1 and part 2) to get some details about the new features brought by this kernel release.

As usual, Bootlin has continued to contribute a significant number of patches to this kernel release, even though with 147 patches, our contribution has been less important than for the 3.16 release for which we contributed 388 patches. With 147 patches merged, Bootlin is the 14th contributing company by the number of patches, according to the statistics.

Our contributions remain mainly focused on support for various families of ARM processors:

  • For the Atmel processors
    • Switched to use the generic PWM framework instead of custom PWM drivers. This allowed to remove three obsolete drivers (a backlight driver, a LED driver and a misc driver). This work was done by Alexandre Belloni.
    • Continue the migration to the common clock framework, by adding clock information to a large number of Atmel boards. Done by Alexandre Belloni.
    • Migration of the interrupt controller driver from arch/arm/mach-at91 to drivers/irqchip. Done by Boris Brezillon.
  • For the Marvell EBU processors (Armada 370, 375, 38x, XP)
    • Addition of the mvpp2 network driver, which is used on the Armada 375 SoC. This work was done by Marcin Wojtas from Semihalf, with a lot of review, help and debugging done by Ezequiel Garcia.
    • Addition of cpuidle support for Armada 370 and Armada 38x. This work was done by Grégory Clement and Thomas Petazzoni.
    • Preparation work to enable cpufreq on Armada XP was merged. However the feature cannot be enabled yet due to missing features in the cpufreq-cpu0 driver. Done by Thomas Petazzoni.
  • For Marvell Berlin processors
    • SMP support has been added. Done by Antoine Ténart.
    • Description of the I2C controller has been added to the Device Tree. Done by Antoine Ténart.
    • Support for AHCI has been added. Also done by Antoine Ténart.
  • For Allwinner processors
    • New DMA controller driver for the DMA engine of the Allwinner A31 SoC. Done by Maxime Ripard.
    • A number of fixes and improvements to the pin-muxing driver for Allwinner platforms. Done by Maxime Ripard.
    • Support for the Merrii A31 Hummingbird board has been added. Done by Maxime Ripard.
  • Other changes
    • Addition of a helper function to convert an ONFI timing mode into the according NAND timings. Done by Boris Brezillon.
    • Addition of a driver for the Foxlink FL500WVR00-A0T panel. Done by Boris Brezillon.

The detailed list of our contributions:

Xenomai 2.6.4 released, with Atmel SAMA5D3 support

XenomaiAt the end of September, the Xenomai project has announced the release of version 2.6.4. For the record, Xenomai is a hard real-time extension to the Linux kernel.

Amongst a number of bug fixes and improvements, this new release brings an interesting new feature to which Bootlin contributed: the support for the Atmel SAMA5D3. This means that Xenomai can now be used on platforms such as the Xplained SAMA5D3 and any other SAMA5D3 based platform. This work was done by Xenomai ARM maintainer Gilles Chanteperdrix, thanks to the testing and insights of Bootlin engineer Maxime Ripard.

Mainly, the change needed was to support the AIC5 interrupt controller used in SAMA5D3, which is different from the interrupt controller used on earlier AT91 processors. This change should also provide compatibility with the recently released SAMA5D4, though we haven’t tested this at this time, and Xenomai only provides its patch up to kernel 3.14, while SAMA5D4 support was only recently added to the mainline kernel.

This 2.6.4 Xenomai release also brings support for the 3.14 kernel version, through the corresponding I-Pipe patch.

There are also some other interesting Xenomai news: in early October, they have released the first release candidate of Xenomai 3, the next generation Xenomai architecture. And they also have a brand new and more modern website at xenomai.org.

Bootlin at Kernel Recipes 2014

Kernel RecipesThe Kernel Recipes conference is holding its third edition next week in Paris, on September 25th and 26th. With speakers like Greg Kroah-Hartmann, Hans Peter Anvin, Martin Peres, Hans Verkuil or Jean Delvare and many others, it is going to be a very interesting kernel-oriented conference.

Bootlin will participate to this conference, as our engineer Maxime Ripard will give a talk about Supporting a new ARM platform: the Allwinner example, and Maxime will be attending the event on both days.

Also, Bootlin’sCEO Michael Opdenacker will be attending the conference as well.

A good opportunity to meet Bootlin folks, and discuss business or career opportunities! We are always interested in getting to know more engineers with embedded Linux or Linux kernel knowledge to join our engineering team, so do not hesitate to meet us during the conference, or contact us ahead of time to plan a discussion. If you don’t have a seat yet, unfortunately the conference is fully booked, but meeting in the area is possible too.

Slides from the LinuxCon North America 2014 conference

The LinuxCon North America conference was held a few days ago in Chicago.

LinuxCon North America 2014

A number of slides from the conference have been published. While the conference is a general purpose Linux conference, there were quite a few talks discussed kernel or low-level related topics that may be of interest to embedded Linux developers. Amongst them, we noted:

Not all the slides have been posted yet, so be sure to check the slides page regularly for updates!

Bootlin at the Embedded Linux Conference Europe

DüsseldorfThe Embedded Linux Conference Europe will take place on October 13-15 in Düsseldorf, Germany. As usual, a large part of the Bootlin engineering team will participate to the conference, with no less than 7 engineers: Alexandre Belloni, Boris Brezillon, Grégory Clement, Michael Opdenacker, Thomas Petazzoni, Maxime Ripard and Antoine Ténart.

Several of our talk proposals have been accepted, so we’ll be presenting about the following topics:

In addition to this participation to the Embedded Linux Conference Europe:

  • Many of us will also participate to the Linux Plumbers conference, on October 15-17. It’s another great opportunity to talk about topics around real-time, power management, storage, multimedia, and more.
  • Thomas Petazzoni will participate to the next Buildroot Developers Meeting.

As usual, we’re looking forward to this event! Do not hesitate to get in touch with us if you’re interested in meeting us during these events for specific discussions.

Embedded Linux training update: Atmel Xplained, and more!

Atmel SAMA5D3 Xplained boardWe are happy to announce that we have published a significant update of our Embedded Linux training course. As all our training materials, this update is freely available for everyone, under a Creative Commons (CC-BY-SA) license.

This update brings the following major improvements to the training session:

  • The hardware platform used for all the practical labs is the Atmel SAMA5D3 Xplained platform, a popular platform that features the ARMv7 compatible Atmel SAMA5D3 processor on a board with expansion headers compatible with Arduino shields. The fact that the platform is very well supported by the mainline Linux kernel, and the easy access to a wide range of Arduino shields makes it a very useful prototyping platform for many projects. Of course, as usual, participants to our public training sessions keep their board after the end of the course! Note we continue to support the IGEPv2 board from ISEE for customers who prefer this option.
  • The practical labs that consist in Cross-compiling third party libraries and applications and Working with Buildroot now use a USB audio device connected to the Xplained board on the hardware side, and various audio libraries/applications on the software side. This replaces our previous labs which were using DirectFB as an example of a graphical library used in a system emulated under QEMU. We indeed believe that practical labs on real hardware are much more interesting and exciting.
  • Many updates were made to various software components used in the training session: the toolchain components were all updated and we now use a hard float toolchain, more recent U-Boot and Linux kernel versions are used, etc.

The training materials are available as pre-compiled PDF (slides, labs, agenda), but their source code in also available in our Git repository.

If you are interested in this training session, see the dates of our public training sessions, or order one to be held at your location. Do not hesitate to contact us at training@bootlin.com for further details!

It is worth mentioning that for the purpose of the development of this training session, we did a few contributions to open-source projects:

Thanks a lot to our engineers Maxime Ripard and Alexandre Belloni, who worked on this major update of our training session.

Linux 3.16 released, Bootlin 7th contributing company

Linus Torvalds has released the 3.16 kernel a few weeks ago. Unfortunately, the KernelNewbies LinuxChanges page has not been updated, but LWN.net summaries of the merge window (part 1, part 2 and final part) give a good summary of the important changes available in Linux 3.16.

On Bootlin’sside, 3.16 has been our most active kernel cycle ever: we have merged 388 patches in this cycle, making Bootlin the 7th company contributing to the Linux kernel by number of patches according to the statistics. Bootlin is ranked right after Texas Instruments, and before Novell, Renesas or Google. (Note that the statistics rank Bootlin as 9th, but this includes the “Unknown” and “Hobbyists” categories which are not companies). This strong participation clearly shows Bootlin’sability to get code merged in the mainline Linux kernel, as we’ve progressively done since kernel 3.6 over the last two years.

We are therefore available to help companies willing to add support for their hardware (processor, system-on-chip, module, or board) to the mainline Linux kernel. Do not hesitate to contact to get the discussion started.

Our major contributions have again been focused on the support of various ARM processor families:

  • On the Atmel SoC family
    • Conversion of the SAM9RL processor to the Device Tree. Done by Alexandre Belloni.
    • Huge cleanup of ADC/touchscreen handling: improvements in the IIO at91_adc driver to support more SoC families, and conversions of several Atmel platforms to use this driver, and then finally removal of the old atmel_tsadcc driver. Done by Alexandre Belloni.
    • Numerous fixes to the clock handling on various SoCs, following their conversion to the Common Clock Framework. Done by Alexandre Belloni.
    • Conversion of the SAM9RL, SAM9x5 and SAM9n12 SoCs to the Common Clock Framework. Done by Boris Brezillon.
    • Boris Brezillon is now one of the official maintainers for AT91 clock support.
  • On the Allwinner SoC family
    • Addition of PWM support to sun4i and sun7i. Done by Alexandre Belloni.
    • Addition of SMBus support to the regmap subsystem. This was needed to support the P2WI bus of Allwinner A31. Done by Boris Brezillon.
    • New I2C driver for the P2WI bus of Allwinner A31, used to communicate with the PMIC. Done by Boris Brezillon.
    • Improvements to the Allwinner pinctrl driver needed to support the P2WI bus. Done by Boris Brezillon.
    • Addition of a driver for the PRCM (Power, Reset and Clock Management) unit of the Allwinner A31. Done by Boris Brezillon.
    • Numerous cleanups of the pinctrl driver for Allwinner. Done by Maxime Ripard.
    • Addition of the ARM PMU description in the Device Tree of Allwinner platforms. Done by Maxime Ripard.
    • Add USB support for Allwinner A31. Done by Maxime Ripard, with some help from Boris Brezillon.
    • Various improvements to Allwinner clock drivers. Done by Maxime Ripard.
  • On the Marvell Berlin SoC family
    • Addition of basic Device Tree descriptions for several Marvell Berlin processors and boards. Done by Antoine Ténart.
    • Addition of clock drivers and DT clock descriptions of the Marvell Berlin processors. Done by Alexandre Belloni.
    • Addition of the pinctrl drivers for the Marvell Berlin processors. Done by Antoine Ténart.
    • Enabling of SDHCI and GPIO support on Marvell Berlin. Done by Antoine Ténart.
  • On the Marvell EBU SoC family
    • Addition of watchdog support for Armada 375 and Armada 38x, which required some changes to the existing watchdog driver. Done by Ezequiel Garcia.
    • Addition of thermal support for Armada 375 and Armada 38x, which required some changes in the existing armada_thermal driver. Done by Ezequiel Garcia.
    • Improvements of the pxa3xx_nand driver used for NAND support on Armada 370/375/38x/XP to use the newly introduced ECC strength and step size Device Tree bindings, which allows from the Device Tree to override the ECC constraints described by ONFI, when needed to match the bootloader constraints. Done by Ezequiel Garcia.
    • Addition of a generic software TSO (TCP Segmentation Offload) layer, and the corresponding changes to enable this feature in the mv643xx_eth and mvneta network drivers. This gives a huge performance boost in transmit operations! Done by Ezequiel Garcia.
    • SMP support for Armada 375 and Armada 38x has been added. Done by Grégory Clement.
    • cpuidle support for Armada XP has been added. Done by Grégory Clement.
    • USB support (USB2 and USB3) for Armada 375 and Armada 38x has been added. Done by Grégory Clement.
    • Hardware I/O coherency support for Armada 375 and Armada 38x. Done by Thomas Petazzoni.
    • Enabling of the SDHCI and AHCI interfaces on Armada 38x. Done by Thomas Petazzoni.
    • Major clean-up of Marvell Orion5x support. This is an older ARMv5 family of processors from Marvell, having a lot of similarities with Kirkwood and more recent Armada. This cleanup include many Device Tree conversions, up to the point where a few Marvell Orion5x platforms can now be fully described using a Device Tree, with no board file. Done by Thomas Petazzoni.
    • Addition of a new Device Tree binding for fixed network links, i.e links that do not use a MDIO-controlled PHY. This involved both some generic PHY layer improvements, and corresponding changes in the Marvell-specific mvneta network driver. Done by Thomas Petazzoni.
    • Addition of a work-around for a relatively complex PCIe/L2 errata affecting Armada 375/38x, which fixes heavy PCIe traffic when the system is running with hardware I/O coherency enabled. Done by Thomas Petazzoni.

Here is the complete list of patches from Bootlin merged into the 3.16 kernel:

Marvell publishes the datasheet of the Armada XP processor

thumb-armada-xpA bit more than a month after publishing the datasheet of the Armada 370 processor, Marvell has now released a similar datasheet for the more powerful Armada XP processor. The datasheet is available as a PDF document, with no registration, at http://www.marvell.com/embedded-processors/armada-xp/assets/ARMADA-XP-Functional-SpecDatasheet.pdf, with a link to it clearly visible on the Armada XP product page.

As most of our readers probably know, Bootlin has been working and continues to work significantly on the Linux kernel support for Marvell processors. Thanks to this work done for more than two years now, the mainline Linux kernel has pretty good support for the Armada XP processor. This processor is a nice monster: up to 4 cores (PJ4B cores, which are roughly equivalent to Cortex-A9 but with LPAE support), up to 10 PCIe interfaces, multiple SATA interfaces, up to four Gigabit network interfaces, and many, many other things (XOR engine, cryptographic engine, etc.). Many of the processor features are already supported in mainline, and lately we’ve been focusing on power management features: cpuidle support for Armada XP will be part of 3.16, cpufreq support will either be part of 3.17 or 3.18, and suspend/resume should hopefully be part of 3.18.

The Armada XP processor is used in publicly available products:

At Bootlin, we are again really happy to see Marvell opening this datasheet, as it will allow all community developers to further improve support for this processor in the Linux kernel, but also in other open-source projects.

Linux 3.15 released, an overview of Bootlin contributions

The 3.15 of the Linux kernel was released just a few days ago by Linus Torvalds. As explained by LWN.net, the headline features in 3.15 include some significant memory management improvements, the renameat2() system call, file-private POSIX locks, a new device mapper target called dm-era, faster resume from suspend, and more. One can also read the coverage by LWN.net of the first part and the second part of the merge window to get more details about the major new features in this release.

As usual, Bootlin contributed to the Linux kernel during this 3.15 cycle, and with a total of 218 patches contributed, it’s a new record for Bootlin. According to the KPS statistics, Bootlin ranked #12 in the list of companies contributing to the Linux kernel for the 3.15 kernel (if you exclude the “Unknown” and “Hobbyists” categories, which aren’t really companies).

The main features contributed by Bootlin again centered around the support for ARM processors:

  • By far, the largest contribution this cycle was the initial support for the new Armada 375 and Armada 38x processors from Marvell. Gregory Clement, Ezequiel Garcia and Thomas Petazzoni have been working on the code to support these processors since a few months ago, and started pushing the patches to the public in February this year. For the Marvell Armada 38x processor, it means that the code was pushed in mainline even before the processor was announced publicly! The features supported in 3.15 for these processors are: interrupts, GPIO, clocks, pin-muxing, serial, I2C, SPI, timer, L2 cache, SDIO (only for 375), SATA (only 375), XOR, PCIe, MBus, networking (only for 38x), NOR and NAND support. Many other features such as SMP, I/O coherency and various other peripherals will be supported in 3.16.
  • Convert support for the Atmel AT91SAM9RL processor to the Device Tree, done by Alexandre Belloni.
  • Addition of iio-hwmon to the Freescale i.MX23 and i.MX28 processors, which allows to use the internal temperature sensor of the processor. Done by Alexandre Belloni.
  • Multiple fixes and improvements to the AT91 ADC support. Done by Alexandre Belloni.
  • Support for the watchdog in Armada 370 and Armada XP was added, done by Ezequiel Garcia.
  • A driver for the SPI controller found in Allwinner A31 SoC was added, as well as all the Device Tree information to describe this controller and related clocks. Done by Maxime Ripard.
  • Support for the I2C controller found in the Allwinner A31 SoC was added into the existing mv64xxx-i2c driver, as well as the necessary Device Tree information to use I2C on this SoC. Done by Maxime Ripard.
  • Audio support was enabled on the Armada 370 SoC, re-using existing code for Kirkwood, and therefore making audio work on the Armada 370 DB platform. Done by Thomas Petazzoni.
  • A number of issues in the PCIe support for Marvell processors have been fixed, thanks to the reports from a number of users. Done by Thomas Petazzoni, with help from these users.

We also contributed other things than just support for ARM processors:

  • The main contribution in this area is the addition of UBI block, a driver that allows to use read-only block filesystems such as squashfs on top of a UBI volume. The code was originally written by David Wagner who was an intern at Bootlin, and later taken by Ezequiel Garcia who did a lot of additional cleanup work and community discussion to get the driver merged. Some details about this feature can be found in the Linux-MTD documentation.
  • A generic Device Tree binding to express NAND ECC related information in the Device Tree was contributed by Ezequiel Garcia.
  • The quest to remove IRQF_DISABLED continued, by Michael Opdenacker.

In details, all our contributions are:

Marvell publishes the datasheet of the Armada 370 processor

thumb-armada-xpOver the last two years, Bootlin has contributed support for the Marvell Armada 370 and Marvell Armada XP processors to the mainline Linux kernel. These ARM processors are used mainly in Network Attached Storage devices but also in other devices such as printers. Until now the datasheet for these processors was only available for Marvell customers and partners under NDA, but last week, Marvell finally released the datasheet of the Armada 370 publicly, with no restriction, no registration, no NDA. The Armada 370 processor can already be found in several consumer grade products:

From now on, on the Marvell page (broken link removed) related to the Armada 3xx family, the Armada 370 Functional Specification (broken link removed) as well as the Armada 370 Hardware Specifications (broken link removed) can be found. While the Armada XP datasheet is not available at this time, it is worth mentioning that the vast majority of the peripherals are exactly the same between Armada 370 and Armada XP, so even Armada XP users will find useful information in this datasheet.

Bootlin is happy to see that Marvell is making more and more progress towards mainlining their kernel support and opening their datasheets publicly. We strongly believe that the openness of these datasheets will allow hobbyists and developers to improve the support for Armada 370 in the open-source ecosystem, be it in the Linux kernel, in bootloaders like U-Boot or Barebox or even in other projects.