52
Embedded Linux Conference 2016 Using DT overlays to support the C.H.I.P.’s capes Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 1/52

Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Embedded Linux Conference 2016

Using DT overlays to support the C.H.I.P.’scapes

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 1/52

Page 2: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Antoine Tenart

I [email protected] Embedded Linux engineer at Free Electrons.

I Embedded Linux specialists.I Development, consulting and training (materials freely available under a Creative

Commons license).I http://free-electrons.com

I ContributionsI Kernel support for the Marvell Berlin ARM SoCs.I Kernel support for the Annapurna Labs ARM64 Alpine v2 platform.

I Living in Toulouse, south west of France.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 2/52

Page 3: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Context

Overview

The 1-wire bus

Introduction to Device Tree OverlaysExample: the base treeExample: the overlayphandle resolution

Applying a Device Tree Overlay

The cape manager

Current status

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 3/52

Page 4: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

What is this talk about?

I Giving an overview of how to handle capes in the kernel, and describing therequirements.

I Describing the solution we went for.

I Digging into the different parts of our solution.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 4/52

Page 5: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Context

ContextAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 5/52

Page 6: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Context: the CHIP, the capes and us

I The CHIP: a 9$ board by NextThingCo. built around the Allwinner R8SoC (Cortex-A8).

I Funded thanks to a Kickstartercampaign in 2015.

I Free Electrons working on the CHIPkernel support.

I Was designed from the beginning tohave adapters:

I VGA adapter.I HDMI adapter.I Pocket CHIP.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 6/52

Page 7: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The CHIP expander

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 7/52

Page 8: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Cape definition & benefits

I An adapter to extend board functionalities.

I Some I/Os are muxable: different capes for different usages!

I Prototype development made easy.

I DIY projects.

I Everyone can design and sell his own capes.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 8/52

Page 9: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Requirements

I Capes can be changed.I Not a finite set of capes.

I The capes need to be auto-detected at boot time.

I Capes can be stacked.I The auto-detection mechanism should be able to enumerate the capes.

I This should work without the user intervention!

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 9/52

Page 10: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overview

OverviewAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 10/52

Page 11: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The header

I Used to organize the cape’s description.

I Needs a magic value to differentiate it from random data.

I Capes can have different versions or revisions.

I Allows each cape to store specific data.I This header is stored in an onboard EEPROM.

I Easy to read from / write to.I Cheap.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 11/52

Page 12: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The header format

struct cape_chip_header {

u32 magic; /* must be 0x43484950 "CHIP" */

u8 version; /* spec version */

u32 vendor_id;

u16 product_id;

u8 product_version;

char vendor_name[32];

char product_name[32];

u8 rsvd[36]; /* rsvd for future versions */

u8 data[16]; /* per-cape specific */

} __packed;

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 12/52

Page 13: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Cape identification

I Each pin used to communicate to the EEPROM cannot be reused:I We wanted a bus with the lowest number of lines.

I We did not need a high speed bus:I Only used to read the cape’s header.

I The bus must support enumeration, to connect more than one cape.

I We chose the 1-wire bus.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 13/52

Page 14: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Kernel hardware description

I The CHIP is based on an ARM Cortex-A8.

I The hardware description is now done with Device Trees in the upstream kernel,for ARM based boards.

I Describe the SoC IPs, and which ones to enable (and configure) for a given board.I The proper solution would be to modify this device tree.

I This can be done with device tree overlays!

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 14/52

Page 15: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The 1-wire bus

The 1-wire busAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 15/52

Page 16: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overview

I Single signal.

I Low-speed data and signaling.I Only two wires needed:

I Data.I Ground.

I Uses a capacitor to store charge and power the device when the data line is active.

I The capacitor needs to be charged!I We had weird side effects because of this in U-Boot � the line needs to be pulled

long enough firstly.

I Two speed modes: normal and overdrive (speed x10).

I Four operations: read, write 0, write 1 and reset.I Can be used over a GPIO.

I drivers/w1/master/w1-gpio.c

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 16/52

Page 17: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Read operation

1. Drive the bus low.

2. Wait 6µs.

3. Release the bus.

4. Wait 9µs.

5. Sample the bus to read the bit send bythe slave.

6. Wait 55µs.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 17/52

Page 18: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Write operation

I To write 0:

1. Drive the bus low.2. Wait 60µs.3. Release the bus.4. Wait 10µs.

I To write 1:

1. Drive the bus low.2. Wait 6µs.3. Release the bus.4. Wait 64µs.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 18/52

Page 19: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Reset operation

Reset the bus slave devices and ready them for a command.

1. Drive the bus low.

2. Wait 480µs.

3. Release the bus.

4. Wait for 70µs.

5. Sample the bus:I 0: one or more slave devices present.I 1: no slave device present.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 19/52

Page 20: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Slave devices numeration

I Each devices have a 64-bit unique identifier.

I Used to address them individually by the master.

I Binary tree search.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 20/52

Page 21: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Kernel support

I drivers/w1

I Not actively maintained.I No interface to the 1-wire framework.

I Slave drivers should be in drivers/w1/slavesI Difficult to use the bus from outside the subsystem.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 21/52

Page 22: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Introduction to Device Tree Overlays

Introduction to DeviceTree OverlaysAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 22/52

Page 23: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overview

I The device tree is a data structure.

I It’s organized as a tree: there are nodes.

I Not aimed to be generated dynamically.

I Loaded at boot time by the bootloader, or embedded in the kernel image.

I Nice for describing a SoC or a board. . . but not suitable for hot-pluggable stuff.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 23/52

Page 24: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Device Tree Overlays

I Allows modification of the device tree at runtime:I To add a node.I To modify a property.

I Not persistent across reboots.I Examples:

I Turn on or off an hardware block by updating a node status property.I Modifying the pinmux.I Adding a hardware controller description.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 24/52

Page 25: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Upstream status

I In-kernel support: CONFIG_OF_DYNAMIC.

I No U-Boot support (at the time of writing). . . but patches sent while in the planeon our way to ELC :-)

I DTC (device tree compiler) needs a patch to enable dynamic phandle resolution.I Required to use device tree overlays.I Still not available upstream.I This means the one used by the kernel build system cannot handle overlays!

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 25/52

Page 26: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overlay example: adding a new node

/dts-v1/;

/plugin/;

/ {

compatible = "nextthing,chip","allwinner,sun5i-r8";

fragment@0 {

target-path = "/soc@01c00000";

__overlay__ {

leds {

compatible = "gpio-leds";

pinctrl-names = "default";

pinctrl-0 = <&chip_test_led>;

led0 {

label = "Test led";

gpios = <&pio 3 4 0>; /* PD4 */

default-state = "on";

};

};

};

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 26/52

Page 27: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overlay example: modifying a property

/dts-v1/;

/plugin/;

/ {

compatible = "nextthing,chip","allwinner,sun5i-r8";

fragment@0 {

target = <&mmc0>;

__overlay__ {

status = "okay";

};

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 27/52

Page 28: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Targets

I To be applied a device tree overlay fragment needs a target.

I Describes where to apply the changes.I Two possibilities:

I target-path: the argument is a path.I target: the argument is a phandle.

I When using target, the phandle resolution should be dynamic.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 28/52

Page 29: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Compiling

I dtc -O dtb -o foo.dtb -@ foo.dts

I The -@ option comes from an out-of-tree patch.I It will generates extra nodes under the root node:

I __symbols__ in the base tree.I __symbols__, __fixups__ and __local_fixups__ in the overlay.I Contains metadata used for symbol resolution.

I /plugin/ marks device tree overlay.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 29/52

Page 30: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Introduction to Device Tree Overlays

Example: the base tree

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 30/52

Page 31: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Base tree

/dts-v1/;

/ {

compatible = "example";

foo = <&bar>;

bar: bar@0 {

compatible = "example,bar";

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 31/52

Page 32: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Device Tree object without dynamic symbols

/dts-v1/;

/ {

compatible = "example";

foo = <0x00000001>;

bar@0 {

compatible = "example,bar";

linux,phandle = <0x00000001>;

phandle = <0x00000001>;

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 32/52

Page 33: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Device Tree object with dynamic symbols

/dts-v1/;

/ {

compatible = "example";

foo = <0x00000001>;

bar@0 {

compatible = "example,bar";

linux,phandle = <0x00000001>;

phandle = <0x00000001>;

};

__symbols__ {

bar = "/bar@0";

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 33/52

Page 34: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Introduction to Device Tree Overlays

Example: the overlay

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 34/52

Page 35: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Device Tree Overlay

/dts-v1/;

/plugin/;

/ {

compatible = "example";

fragment@0 {

target-path = "/";

__overlay__ {

quux = <&qux>;

qux: qux@0 {

property = <&foo>;

};

};

};

};Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 35/52

Page 36: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Device Tree Overlay Object

/dts-v1/;

/ {

compatible = "example";

fragment@0 {

target-path = "/";

__overlay__ {

quux = <0x00000001>;

qux@0 {

property = <0xdeadbeef>;

linux,phandle = <0x00000001>;

phandle = <0x00000001>;

};

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 36/52

Page 37: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

__symbols__ {

qux = "/fragment@0/__overlay__/qux@0";

};

__local_fixups__ {

fragment@0 {

__overlay__ {

quux = <0x00000000>;

};

};

};

__fixups__ {

foo = "/fragment@0/__overlay__/qux@0:property:0";

};

};

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 37/52

Page 38: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Introduction to Device Tree Overlays

phandle resolution

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 38/52

Page 39: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

phandle resolution

1. Get the max base tree phandle value, and add 1.

2. Ajdust the overlay phandle values, then use the __local_fixups__ node to fixlocal references.

3. Use the __fixups__ node to resolve the overlay phandles referencing objects inthe base tree.

4. Update these references.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 39/52

Page 40: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Applying a Device Tree Overlay

Applying a Device TreeOverlayAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 40/52

Page 41: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Applying Device Tree Overlays 1/4

I request_firmware()

I Load a firmware into memory.

I The firmware is actually a Device Tree Overlay blob, stored in /lib/firmware/.I Takes the name of the firmware as an argument.

I It should be guessed from the cape’s header.I dip-<vendor_id>-<product_id>-<product_version>.dtboI If not found, fallback to: dip-<vendor_id>-<product_id>.dtbo

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 41/52

Page 42: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Applying Device Tree Overlays 2/4

I of_fdt_unflatten_tree()I Unflatten the overlay loaded previously.I Create a tree of device nodes from a blob: the live tree format.

I of_resolv_phandles()I Resolves the phandles against the live tree.I Dynamic resolution, using nodes added thanks to dtc’s -@ option.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 42/52

Page 43: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Applying Device Tree Overlays 3/4

I At this point, we can use the of_* helpers.

I Time to make some checks!

I Is the overlay compatible with the machine used?

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 43/52

Page 44: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Applying Device Tree Overlays 4/4

I of_overlay_create()

I Creates and applies an overlay.

I Keeps track of the overlay applied.I Can be reverted with of_overlay_destroy()

I When removing stacked overlays, this needs to be done in reverse order.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 44/52

Page 45: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The cape manager

The cape managerAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 45/52

Page 46: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Overview

I Responsible for detecting a cape, identifying it and applying the correspondingoverlay.

I Uses all components described before:I The 1-wire bus.I The EEPROM in which the cape’s header is stored.I The device tree overlay mechanism.

I Implemented in the kernel space.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 46/52

Page 47: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The cape manager 1/2

I We patched the 1-wire framework to add callbacks when a new device is detectedon the bus.

I Allows to read the header stored on the cape’s EEPROM as soon as the cape isdetected.

I The EEPROM driver for the DS2431 was available in drivers/w1/slaves/

I Cannot be used outside of the 1-wire framework!

I We redefined its read function in the cape manager.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 47/52

Page 48: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

The cape manager 2/2

I Works fine for most uses.

I Our first test was with a LED and a PWM.I This can’t work when adding / enabling devices handled by subsystems without

hotplug support.I Like DRM/KMS.

I Quick solution: add the overlay support in the bootloader.I Maxime Ripard patched U-Boot.I Not yet upstreamed.

I Would be better to patch directly DRM/KMS.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 48/52

Page 49: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Summary

1. A new salve device is detected on the 1-wire bus.

2. If the new device family is recognized by the cape manager, a callback is called.

3. The cape manager reads the header stored on the EEPROM.

4. The cape manager parses the header and decides which cape to load.

5. A DT overlay is loaded from userspace.

6. The overlay is applied on the live tree.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 49/52

Page 50: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Current status

Current statusAntoine Tenart

© Copyright 2004-2016, Free Electrons.Creative Commons BY-SA 3.0 license.Corrections, suggestions, contributions and translations are welcome!

Embedded LinuxDevelopers

Free Electrons

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 50/52

Page 51: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Status

I Implemented recently.

I Solution not fully upstreamed yet.

I The best thing would be to also support other boards with capes, like theBeaglebone family.

I DTC still needs to be patched.I We’re not sure what to do.

I We plan to send our patches to the Linux and U-Boot communities.

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 51/52

Page 52: Using DT overlays to support the C.H.I.P.'s capes · The header I Used to organize the cape’s description. I Needs a magic value to di erentiate it from random data. I Capes can

Thanks! Questions?

Slides under CC-BY-SA 3.0

free-electrons.com/pub/conferences/2016/elc/tenart-chip-overlays/

Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 52/52