Power over Ethernet (PoE) support into the official Linux Kernel

Introduction

Power over Ethernet (PoE) is a technology that combines power and data transmission over a single Ethernet cable. It simplifies the installation of networked devices like cameras, phones, and wireless access points by eliminating the need for separate power cables. PoE standards define how power is delivered alongside data, ensuring compatibility across devices. Originally denoted as “Power via MDI” (Media Dependent Interface) in the 802.3 IEEE standard, it later evolved into the recognized term “PoE” in the 2022 version of the standard. PoE equipment consists of two key components: Power Sourcing Equipment (PSE) and Powered Devices (PD).

Linux support, DENT initiative

Up until recently, the upstream Linux kernel had absolutely no support for Power over Ethernet technologies. Due to that, every hardware vendor providing PoE hardware was delivering its own vendor-specific and non-standard solution, often centered around not so great user-space libraries, with dubious integration with the rest of the Linux ecosystem and networking stack, like is unfortunately still done quite often by hardware vendors.

The DENT project, which exists under the umbrella of the Linux Foundation, aims at using the Linux Kernel, Switchdev, and other Linux based projects as the basis for building a new standardized network operating system without abstractions or overhead. Among other things supported by DENT is dentOS, a SwitchDev based NOS built on top of Open Network Linux, which includes PoE support, but based on yet another non-standard fully user-space driven solution in the name of poed, where even the HW-specific drivers are implemented in user-space.

So DENT set as a goal to implement a fully upstream solution in the Linux kernel to properly support Power over Ethernet, and contracted Bootlin to perform this development and upstreaming effort.

Continue reading “Power over Ethernet (PoE) support into the official Linux Kernel”

Linux 6.9 released, Bootlin contributions inside!

Linux 6.9 was released last Sunday, and as usual we refer our readers to the excellent LWN.net coverage of the Linux 6.9 merge window (part 1 and part 2) to get a good overall picture of the improvements and new features brought by this release.

On our side, we contributed a total of 119 commits authored by Bootlin engineers, but we also merged a total of 95 patches from other contributors, as several Bootlin engineers as also maintainers of various drivers/subsystems in the Linux kernel.

Continue reading “Linux 6.9 released, Bootlin contributions inside!”

Linux 6.8 released, Bootlin contributions

The Linux 6.8 kernel has been released on March 10 by Linus Torvalds. As usual, we definitely recommend the coverage by LWN of the merge window for this release cycle to get a good grasp on the most important new features: first half and second half. Some work from Bootlin is briefly mentioned in those articles, such as the support for Lantiq PEF2256 (FALC56) framers, Lantiq PEF2256 (FALC56) pin controllers, and Techwell TW9900 video decoders.

With a total of 135 commits contributed by Bootlin engineers during this release cycle, we have been much more active than for the previous 6.7 release. This allows Bootlin to show in the recently published Development statistics for 6.8, as the 17th contributing company by number of commits, and 13th contributing company by number of changed lines.

Continue reading “Linux 6.8 released, Bootlin contributions”

Linux 6.6 released, Bootlin contributions

Linux 6.6 was released yesterday, so this is the time for our usual blog post about our contributions to this release. Before that, to get an overall idea of what went into Linux 6.6, we recommend reading the articles from LWN.net covering the Linux 6.6 merge window: part 1 and part 2. The KernelNewbies page is perhaps a little bit less rich than it used to be, but still relevant.

On our side, this time around we contributed 68 changes to this release:

  • Alexandre Belloni, as the RTC subsystem maintainer, submitted a few asorted patches touching various drivers in this subsystem
  • Alexis Lothoré pushed some patches extending the rzn1-a5psw Ethernet switch driver with VLAN support and port_bridge_flags support. These patches were initially written by Clément Léger but had not been accepted until now.
  • Hervé Codina got his audio-iio-aux driver merged, which allows the ASoC subsystem (for audio devices) to use IIO devices, such as a potentiometer. This came together with a number of fixes/improvements in the IIO subsystem. Hervé also fixed some reference counting issues in several I2C mux drivers.
  • Miquèl Raynal pushed to the finish line a patch written several years ago by Bootlin engineer Kamel Bouhara, who hadn’t been accepted until now. This patch adds a sysfs interface that allows to retrieve the reset reason on Microchip ARM platforms
  • Luca Ceresoli fixed some issues in two DRM panel drivers and also fixed a regression in the NVidia Tegra camera interface driver
  • Miquèl Raynal did a number of different, unrelated, contributions:
    • support for the EDT ET028013DMA display panel to the existing sitronix-st7789v driver, which required quite a few preparation changes
    • fix a clock polarity issue in the DRM driver for the display controller used in Microchip ARM platforms
    • improve many small aspects of the qcom NAND controller driver
    • improve the handling of nvmem layouts in the nvmem subsystem
    • fix an issue in the SJA1000 CAN controller driver that would cause the HW to stall after an overrun on some platforms
  • Paul Kocialkowski contributed a few small asorted fixes in the media subsystem documentation

Here are the complete details of our contributions:

Bootlin collaborates with DENT to upstream ONIE NVMEM support in Linux

DENT project logoThe DENT project is a project from the Linux Foundation which aims at utilizing the Linux Kernel, Switchdev, and other Linux based projects as the basis for building a new standardized network operating system without abstractions or overhead.

Recently, Bootlin collaborated with the DENT project to work on a specific topic: extending the Linux kernel NVMEM subsystem to be able to support the ONIE TLV storage format which is used on ONIE-compliant network equipment to store in an EEPROM various information about the device: serial number, model, MAC addresses, and more.

This work, lead by Bootlin engineer Miquèl Raynal has now landed in Linux 6.4 as the drivers/nvmem/layouts/onie-tlv.c driver, together with the underlying new NVMEM layout infrastructure, which Miquèl helped to upstream in collaboration with Michael Walle.

We have written and published a longer blog post on the DENT website to explain the motivation for this effort and the results.

Linux 6.4 released, Bootlin contributions inside

Linux 6.4 was released on June 25, just before the start of the Embedded Open Source Summit in Prague. As usual, lots of changes in Linux 6.4, and we recommend reading LWN coverage of the merge window (part 1, part 2). Sadly, the usual KernelNewbies page hasn’t received a lot of attention, contributions are probably welcome to revive this useful resource.

With 59 commits from Bootlin engineers, Bootlin is ranked as the #28 contributing company by number of commits for this 6.4 release, according to contribution statistics. Our main contributions have been:

  • Alexis Lothoré and Clément Léger contributed a few fixes to the Renesas RZ/N1 A5PSW Ethernet switch driver
  • Hervé Codina contributed a number of new drivers needed to support complex audio setups on some relatively old Freescale PowerPC 32-bit platforms: a driver for the Time Slot Assigner (TSA), a driver for the QUICC Multichannel Controller (QMC), and an ALSA driver that provides audio support over QMC. We have more contributions coming in this area, most notably to support HDLC network traffic over QMC.
  • Kamel Bouhara added support for the TI TAS5733 audio codec in the existing tas571x driver
  • Luca Ceresoli improved the fsl-ldb driver, used on NXP i.MX8MP and i.MX93 for the built-in DPI-to-LVDS encoder. Luca’s improvement allows to use LVDS channel 1 only, while the driver initially supported using either LVDS channel 0, or LVDS channel 0 and 1 combined.
  • Maxime Chevallier contributed an improvement to the regmap code, which allows upshifting register addresses before performing operations
  • Maxime Chevallier also contributed some small fixes to the phylink code related to previous work on QUSGMII support
  • Miquèl Raynal contributed the support for Real-While-Write in the MTD SPI-NOR subsystem. This allows to perform read operations while erase/program operations are on-going, which helps to reduce read latencies. This of course only works on SPI NOR chips that support this feature.
  • Miquèl Raynal contributed several improvements to the NVMEM subsystem. First, a brand new NVMEM driver capable of parsing the ONIE TLV information, as defined by the ONIE spec used on network equipment. Second, he contributed changes that allow NVMEM layout drivers to be compiled as kernel modules rather than being built-in

And the full details of our contributions:

Linux 6.2 released, Bootlin contributions inside

Linux 6.2 was released a few days ago, and as usual we point our readers to the LWN coverage of the merge window (part 1 and part 2), or the traditional KernelNewbies page or alternatively the embedded focused CNX Software coverage.

At Bootlin, we contributed a total of 122 patches to this release, making Bootlin the 21st contributing company by number of commits according to statistics. Also Bootlin engineer Paul Kocialkowski appears in the top developers by changed lines in the Linux 6.2 statistics.

Continue reading “Linux 6.2 released, Bootlin contributions inside”

Updated Buildroot support for STM32MP1 platforms, ST BSP v4.1

Back in December 2021, we announced the buildroot-external-st project, which is an extension of the Buildroot build system with ready-to-use configurations for the STMicroelectronics STM32MP1 platforms. Later on, in July 2022, we updated it to the lastest Buildroot LTS 2022.02 and version 4.0 of ST BSP version.

More specifically, this project is a BR2_EXTERNAL repository for Buildroot, with a number of defconfigs that allow to quickly build embedded Linux systems for the STM32MP1 Discovery Kit platforms. It’s a great way to get started with Buildroot on those platforms.

Today, we are happy to announce an updated version of this project, published under the branch st/2022.02.7 at https://github.com/bootlin/buildroot-external-st. This new version brings the following changes:

Continue reading “Updated Buildroot support for STM32MP1 platforms, ST BSP v4.1”

Linux 6.1 released, Bootlin contributions

Linux 6.1 has been released yesterday, a week later than expected. Head over to LWN (part 1, part 2) or KernelNewbies for an overview of the major features merged in this release.

For this release, Bootlin contributed a total of 38 patches, with the following highlights:

  • Maxime Chevallier added initial support for the QUSGMII PHY mode, together with supporting code in the lan966x MAC driver and lan966x PHY driver.
  • Maxime Chevallier added a new PCS driver for the Altera PSE
  • Maxime Chevallier converted the Altera TSE MAC driver to phylink
  • Paul Kocialkowski contributed many improvements to the Allwinner sun6i camera interface driver, which are preparation commits to introduce support for interacting with the Allwinner ISP

Continue reading “Linux 6.1 released, Bootlin contributions”

Linux 6.0 released, Bootlin contributions

Linux 6.0 has been released two weeks ago, and Linux 6.1-rc1 is already out of the door, but we didn’t get the chance to look at the contributions made by Bootlin to the Linux 6.0 release. Before we do that, let’s provide our usual must-read articles on Linux 6.0: the Linux 6.0 merge window part 1 and Linux 6.0 merge window part 2 LWN.net articles and the KernelNewbies.org article.

On Bootlin side, our significant contributions to this release have been:

  • Clément Léger contributed a new driver for the Ethernet switch found in the Renesas RZ/N1 processor, as well as a PCS driver for the MII converter of the same processor. Obviously, this came with the related Device Tree bindings and Device Tree changes, but also with a few small changes in the DSA subsystem.
  • Hervé Codina enabled support for the PCIe controller found in the same Renesas RZ/N1 processor, which in fact does not allow to use PCIe devices, but USB devices: this PCIe controller is only used to connect to an internal USB controller in the chip, which therefore allows to use USB devices.
  • Köry Maincent extended the existing mpc4922 DAC IIO driver to also support the mpc4921 variant, which has only one output channel instead of two.
  • Luca Ceresoli contributed several improvements to the I2C subsystem documentation.
  • Paul Kocialkowski contributed a new DRM driver for the logiCVC-ML display controller IP
  • Paul Kocialkowski contributed two new V4L drivers for the MIPI CSI-2 camera interfaces available in the Allwinner A31 family of processors (sun6i) and the Allwinner A83T family of processors (sun8i).

Here is the full details of our contributions, commit by commit: