The Embedded Open Source Summit 2024 took place on Apr 16-18 in Seattle, with many talks on a wide range of embedded Linux topics. 11 engineers from Bootlin participated to this conference and four of us gave talks, for which we are happy to publish the slides and videos in this blog post.
In the kernel trenches: Mastering Ethernet drivers in Linux, by Maxime Chevallier
An Ethernet Controller driver in linux is a complex piece of software, with many entrypoints and callbacks, even for a basic Ethernet Controller we can find in Embedded Systems. In this talk, we’ll take a tour of what’s inside a typical Ethernet driver. We’ll start with the base of what every network driver provides, even non-Ethernet ones, a net_device. We will discuss the various required steps to get a basic driver working, ranging from simple initialization, queue setup, DMA mappings, before diving into more advances topics such as the NAPI loop implementation, memory-management through the page-pool API and finally XDP, which is now getting implemented in more and more drivers. We’ll continue the tour through the ethernet-specific bits, such as the ethtool operations, and phylink support to interact with a potential Ethernet PHY, and discuss a little bit about the specifics of embedded Ethernet Controllers, where low-level configuration for a PCS or some Serdes lanes might be required. Finally, we’ll discuss about testing and debugging tools that can be useful to help you in your driver development, but also in debugging and optimizing existing drivers.
Maxime Chevallier is an Embedded Linux and Kernel engineer at Bootlin, where he has been working on Ethernet Controller drivers and PHY drivers for more than 6 years. He contributed to the Marvell PPv2 driver, and to various PHY, Switch and PCS drivers.
Introduction to DAPM, Linux Power Management for Embedded Audio Devices, by Luca Ceresoli
DAPM (Digital Audio Power Management) is the part of ASoC (Alsa for System-on-Chips) that dynamically turns on and off power to various parts of the audio hardware in embedded Linux systems. DAPM is very useful, but not very well known. After introducing the motivations for DAPM and how it models the hardware, Luca will describe how DAPM works, how to use DAPM in a driver and present some user space tools to understand how DAPM works at runtime. He will also mention some improvements to the DAPM tooling and documentation.
As an embedded Linux and kernel engineer at Bootlin, Luca is working on various kernel device drivers and other areas of the Linux ecosystem to support several customers. He contributed several improvements the Linux kernel and other open-source projects. During his career he has been hacking around bootloaders, kernel, device drivers, system programming, build system and FPGAs. He has been a speaker at ELC Europe and FOSDEM.
Unlocking the Potential of Suspend to RAM Using Linux in a Multi-Core, Multi-Firmware Automotive SoC, by Grégory Clement
Fast booting in modern, complex System-on-Chips (SoCs) demands innovative solutions. This talk delves into the intricacies of implementing Suspend to RAM (S2R) on a sophisticated SoC featuring diverse CPU cores—high-performance A72, real-time R5, and low-power M3—as well as multiple firmware components, including open-source ones like TF-A, U-Boot, and OP-TEE. We begin with a hardware overview of the TI DRA821 SoC from the Jacinto family, emphasizing the open-source firmware utilized in the boot process. The focus then shifts to presenting a practical approach for integrating S2R into this multifaceted platform. Notably, our implementation poses a unique challenge: the SoC is entirely powered off during S2R, adding an extra layer of complexity. Join us as we share insights into the hurdles encountered and resolved during the implementation, along with a discussion on the outstanding challenges for which we’ve devised viable solutions. This session offers a comprehensive exploration into the software, including bootloaders and the Linux kernel, as well as the hardware aspects, showcasing a real-world approach to bringing Suspend to RAM to life on a cutting-edge automotive SoC.
Gregory, an embedded Linux and kernel engineer at Bootlin since 2010, is a co-maintainer of mvebu ARM sub-architectures, contributing significantly to the Linux kernel. He has 20 years of on the field experience in porting and operating embedded Linux on many hardware architectures. He also worked on bootloaders such as U-Boot or Barebox.
Adding Support for Power Over Ethernet (PoE or IEEE Clause 33) to Linux Network Stack, by Köry Maincent
Power over Ethernet (PoE) is a technology that combines electrical power and data transmission over a single Ethernet cable. It eliminates the need for separate power sources, simplifying installations for devices like IP cameras, and VoIP phones. In this presentation, we’ll initially delve into Power over Ethernet (PoE), It debuted in IEEE Clause 33 without explicit reference to the PoE nomenclature. We will look at what currently exists in the Linux kernel and user space to support PoE. We’ll continue our discussion with some details of the Linux implementation currently in development and the PSE core changes brought by this new support. The PSE framework core and bindings happen to need modification as it was not prepared for the PoE specificities. In parallel to these extensions of the PSE framework, we developed Linux kernel drivers for two distinct PoE controllers: the Microchip PD692x0 and the Texas Instruments TPS23881. Finally, we will look into the mainline status, the things that still need to be merged and the future features that need development. This PoE Linux support is sponsored and funded by DENT Project.
Köry Maincent is an embedded Linux engineer who joined Bootlin in 2020 after working for a few years on embedded Linux systems in the transportation industry. He has developed and contributed the board extension manager support to the U-boot project. He designed several embedded Linux products for several industrial customers, mostly hacking around bootloader, kernel, device drivers, system programming, build systems.