| Common properties |
| |
| The Devicetree Specification does not define any properties related to hardware |
| byteswapping, but endianness issues show up frequently in porting Linux to |
| different machine types. This document attempts to provide a consistent |
| way of handling byteswapping across drivers. |
| |
| Optional properties: |
| - big-endian: Boolean; force big endian register accesses |
| unconditionally (e.g. ioread32be/iowrite32be). Use this if you |
| know the peripheral always needs to be accessed in BE mode. |
| - little-endian: Boolean; force little endian register accesses |
| unconditionally (e.g. readl/writel). Use this if you know the |
| peripheral always needs to be accessed in LE mode. |
| - native-endian: Boolean; always use register accesses matched to the |
| endianness of the kernel binary (e.g. LE vmlinux -> readl/writel, |
| BE vmlinux -> ioread32be/iowrite32be). In this case no byteswaps |
| will ever be performed. Use this if the hardware "self-adjusts" |
| register endianness based on the CPU's configured endianness. |
| |
| If a binding supports these properties, then the binding should also |
| specify the default behavior if none of these properties are present. |
| In such cases, little-endian is the preferred default, but it is not |
| a requirement. The of_device_is_big_endian() and of_fdt_is_big_endian() |
| helper functions do assume that little-endian is the default, because |
| most existing (PCI-based) drivers implicitly default to LE by using |
| readl/writel for MMIO accesses. |
| |
| Examples: |
| Scenario 1 : CPU in LE mode & device in LE mode. |
| dev: dev@40031000 { |
| compatible = "name"; |
| reg = <0x40031000 0x1000>; |
| ... |
| native-endian; |
| }; |
| |
| Scenario 2 : CPU in LE mode & device in BE mode. |
| dev: dev@40031000 { |
| compatible = "name"; |
| reg = <0x40031000 0x1000>; |
| ... |
| big-endian; |
| }; |
| |
| Scenario 3 : CPU in BE mode & device in BE mode. |
| dev: dev@40031000 { |
| compatible = "name"; |
| reg = <0x40031000 0x1000>; |
| ... |
| native-endian; |
| }; |
| |
| Scenario 4 : CPU in BE mode & device in LE mode. |
| dev: dev@40031000 { |
| compatible = "name"; |
| reg = <0x40031000 0x1000>; |
| ... |
| little-endian; |
| }; |