Top Banner
Unified Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center February 19, 2015 Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 1 / 24
24

Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Aug 23, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unified Device Properties Interface for ACPI andDevice Trees

Rafael J. Wysocki

Intel Open Source Technology Center

February 19, 2015

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 1 / 24

Page 2: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Outline

1 IntroductionOrigins of ACPIMotivation for Device Trees

2 ACPI vs Device TreesDifferences and AnalogiesPutting It All Together

3 Unification of API for Device DriversWay to GoUnified Device Properties API

4 Resources

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 2 / 24

Page 3: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

PC Monoculture (Hardware Compatibility Everywhere)

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 3 / 24

Page 4: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

Differences Appear (Slightly Incompatible Hardware)

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 4 / 24

Page 5: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

Substantial Differences (Not Really Compatible Any More)

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 5 / 24

Page 6: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

Solution: Platform Description Protocol

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 6 / 24

Page 7: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

ACPI: Advanced Configuration and Power Interface

Platform description + high-level interface for driving platform hardware.

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 7 / 24

Page 8: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Origins of ACPI

ACPI Complexity

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 8 / 24

Page 9: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Motivation for Device Trees

ARM: Same Architecture, Different Platforms

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 9 / 24

Page 10: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Motivation for Device Trees

ARM: Lessons Learned

1 Code duplication avoidance is a priority.

2 Custom per-platform kernel builds are a bad idea.

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 10 / 24

Page 11: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Introduction Motivation for Device Trees

Solution: Platform Description Protocol

LionCheetah

Cougar

Jaguar

BobcatSnow Leopard

Sumatran Tiger Amur Leopard

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 11 / 24

Page 12: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

ACPI vs Device Trees Differences and Analogies

ACPI and DT Side-by-Side

ASL (ACPI Source Language)

AML (ACPI Machine Language)

ACPI Tables

ACPI Definition Blocks

ACPI Namespace

ACPI Objects

Device Description Data

DTS (Device Tree Source)

DTB (Device Tree Blob)

Device Tree

Device Nodes

Device Description Data

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 12 / 24

Page 13: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

ACPI vs Device Trees Differences and Analogies

DT, ACPI and Device Drivers

Tipping point (ca. 2012)

x86 processors become SoCs (and include ARMish IP blocks).

Server vendors want to use ACPI with ARM64.

Problems

Some drivers have grown dependencies on DT (or ACPI).

Until recently ACPI was missing a way to operate properties.

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 13 / 24

Page 14: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

ACPI vs Device Trees Putting It All Together

Flattened Device Tree

/ {

node1 {

a-string-property = "A string";

a-string-list-property = "first string", "second string";

a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */

child-node1 {

first-child-property;

second-child-property = <1>;

a-string-property = "Hello, world";

};

child-node2 {

};

};

node2 {

an-empty-property;

a-byte-data-property = [0x01 0x23 0x34 0x56];

child-node1 {

};

};

};

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 14 / 24

Page 15: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

ACPI vs Device Trees Putting It All Together

The Missing Link

DSD (Device Specific Data) introduced in ACPI 5.1Name (_DSD, Package () {

ToUUID("<UUID string>"), // Format identifier

Package () {

... // Device data in the given format

}

...

}

Device Properties UUID: daffd814-6eba-4d8c-8a91-bc9bbf4aa301Name (_DSD, Package () {

ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),

Package () {

Package {"a-string-property", "A string"},

Package {"a-string-list-property", Package {"first string", "second string"}};

Package {"a-cell-property", Package {1, 2, 3, 4}};

}

}

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 15 / 24

Page 16: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unification of API for Device Drivers Way to Go

Driver Adaptation: Simple Case

- if (of_property_read_u32(np, "size", &val) == 0 ||

- of_property_read_u32(np, "at25,byte-len", &val) == 0) {

+ if (device_property_read_u32(dev, "size", &val) == 0 ||

+ device_property_read_u32(dev, "at25,byte-len", &val) == 0) {

chip->byte_len = val;

} else {

dev_err(dev, "Error: missing \"size\" property\n");

return -ENODEV;

}

- if (of_property_read_u32(np, "pagesize", &val) == 0 ||

- of_property_read_u32(np, "at25,page-size", &val) == 0) {

+ if (device_property_read_u32(dev, "pagesize", &val) == 0 ||

+ device_property_read_u32(dev, "at25,page-size", &val) == 0) {

chip->page_size = (u16)val;

} else {

dev_err(dev, "Error: missing \"pagesize\" property\n");

return -ENODEV;

}

- if (of_property_read_u32(np, "at25,addr-mode", &val) == 0) {

+ if (device_property_read_u32(dev, "at25,addr-mode", &val) == 0) {

chip->flags = (u16)val;

} else {

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 16 / 24

Page 17: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unification of API for Device Drivers Way to Go

Problem: Abstract Device Objects

Device objects (in the firmware) without struct device representation.

enum fwnode_type {

FWNODE_INVALID = 0,

FWNODE_OF,

FWNODE_ACPI,

};

struct fwnode_handle {

enum fwnode_type type;

};

bool is_of_node(struct fwnode_handle *fwnode);

struct device_node *of_node(struct fwnode_handle *fwnode);

bool is_acpi_node(struct fwnode_handle *fwnode);

struct acpi_device *acpi_node(struct fwnode_handle *fwnode);

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 17 / 24

Page 18: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unification of API for Device Drivers Unified Device Properties API

API Overview

bool fwnode_property_present()

bool fwnode_property_read_bool()

int fwnode_property_read_u8()

int fwnode_property_read_u16()

int fwnode_property_read_u32()

int fwnode_property_read_u64()

int fwnode_property_read_string()

int fwnode_property_read_u8_array()

int fwnode_property_read_u16_array()

int fwnode_property_read_u32_array()

int fwnode_property_read_u64_array()

int fwnode_property_read_string_array()

struct fwnode_handle *device_get_next_child_node()

void fwnode_handle_put()

device_for_each_child_node(dev, child)

unsigned int device_get_child_node_count()

bool device_property_present()

bool device_property_read_bool()

int device_property_read_u8()

int device_property_read_u16()

int device_property_read_u32()

int device_property_read_u64()

int device_property_read_string()

int device_property_read_u8_array()

int device_property_read_u16_array()

int device_property_read_u32_array()

int device_property_read_u64_array()

int device_property_read_string_array()

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 18 / 24

Page 19: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unification of API for Device Drivers Unified Device Properties API

Binding Drivers to Devices

compatible = "name1", "name2"

Device 1

Device 3

Driver 1

Driver 2

.of_match_table{.compatible = "name2"}

.of_match_table{.compatible = "name1"}

compatible = "nameA", "nameB", "nameC"

Driver 3

.of_match_table{.compatible = "nameC"}

_HID("PRP0001")

_HID("PRP0001")

.of_match_table{.compatible = "nameC"}

.acpi_match_table{"ID 2"}_CID("ID 1", "ID 3")

Device 2

_HID("ID 2")

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 19 / 24

Page 20: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Unification of API for Device Drivers Unified Device Properties API

Conclusion

The unified device properties API is in the mainline (3.19).

New drivers should try to use it (instead of the plain DT API).

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 20 / 24

Page 21: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Resources

References

UEFI, Advanced Configuration and Power Interface Specification, Revision 5.1

(http://www.uefi.org/sites/default/files/resources/ACPI_5_1release.pdf).

UEFI, Device Properties UUID For DSD, Revision 1.0

(http://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf).

Device Tree Wiki, Device Tree Usage (http://www.devicetree.org/Device_Tree_Usage).

Thomas Petazzoni, Device Tree for Dummies

(http://events.linuxfoundation.org/sites/events/files/slides/petazzoni-device-tree-dummies.pdf).

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 21 / 24

Page 22: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Resources

Documentation And Source Code

Documentation/devicetree/

Documentation/acpi/

drivers/acpi/property.c

include/linux/property.h

drivers/acpi/

drivers/of/

drivers/leds/leds-gpio.c

drivers/input/keyboard/gpio keys polled.c

drivers/misc/eeprom/at25.c

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 22 / 24

Page 23: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Legal Information

Intel is a trademark of Intel Corporation in the U. S. and other countries.*Other names and brands may be claimed as the property of others.Copyright c© 2014 Intel Corporation, All rights reserved.

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 23 / 24

Page 24: Unified Device Properties Interface for ACPI and Device Trees · Uni ed Device Properties Interface for ACPI and Device Trees Rafael J. Wysocki Intel Open Source Technology Center

Thanks!

Thank you for attention!

Rafael J. Wysocki (Intel OTC) Unified Properties API February 19, 2015 24 / 24