mirror of https://gitee.com/openkylin/linux.git
249 lines
7.2 KiB
Plaintext
249 lines
7.2 KiB
Plaintext
*** NOTE ***
|
|
This document is copied from OPAL firmware
|
|
(skiboot/doc/device-tree/ibm,powerpc-cpu-features/binding.txt)
|
|
|
|
There is more complete overview and documentation of features in that
|
|
source tree. All patches and modifications should go there.
|
|
************
|
|
|
|
ibm,powerpc-cpu-features binding
|
|
================================
|
|
|
|
This device tree binding describes CPU features available to software, with
|
|
enablement, privilege, and compatibility metadata.
|
|
|
|
More general description of design and implementation of this binding is
|
|
found in design.txt, which also points to documentation of specific features.
|
|
|
|
|
|
/cpus/ibm,powerpc-cpu-features node binding
|
|
-------------------------------------------
|
|
|
|
Node: ibm,powerpc-cpu-features
|
|
|
|
Description: Container of CPU feature nodes.
|
|
|
|
The node name must be "ibm,powerpc-cpu-features".
|
|
|
|
It is implemented as a child of the node "/cpus", but this must not be
|
|
assumed by parsers.
|
|
|
|
The node is optional but should be provided by new OPAL firmware.
|
|
|
|
Properties:
|
|
|
|
- compatible
|
|
Usage: required
|
|
Value type: string
|
|
Definition: "ibm,powerpc-cpu-features"
|
|
|
|
This compatibility refers to backwards compatibility of the overall
|
|
design with parsers that behave according to these guidelines. This can
|
|
be extended in a backward compatible manner which would not warrant a
|
|
revision of the compatible property.
|
|
|
|
- isa
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition:
|
|
|
|
isa that the CPU is currently running in. This provides instruction set
|
|
compatibility, less the individual feature nodes. For example, an ISA v3.0
|
|
implementation that lacks the "transactional-memory" cpufeature node
|
|
should not use transactional memory facilities.
|
|
|
|
Value corresponds to the "Power ISA Version" multiplied by 1000.
|
|
For example, <3000> corresponds to Version 3.0, <2070> to Version 2.07.
|
|
The minor digit is available for revisions.
|
|
|
|
- display-name
|
|
Usage: optional
|
|
Value type: string
|
|
Definition:
|
|
|
|
A human readable name for the CPU.
|
|
|
|
/cpus/ibm,powerpc-cpu-features/example-feature node bindings
|
|
----------------------------------------------------------------
|
|
|
|
Each child node of cpu-features represents a CPU feature / capability.
|
|
|
|
Node: A string describing an architected CPU feature, e.g., "floating-point".
|
|
|
|
Description: A feature or capability supported by the CPUs.
|
|
|
|
The name of the node is a human readable string that forms the interface
|
|
used to describe features to software. Features are currently documented
|
|
in the code where they are implemented in skiboot/core/cpufeatures.c
|
|
|
|
Presence of the node indicates the feature is available.
|
|
|
|
Properties:
|
|
|
|
- isa
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition:
|
|
|
|
First level of the Power ISA that the feature appears in.
|
|
Software should filter out features when constraining the
|
|
environment to a particular ISA version.
|
|
|
|
Value is defined similarly to /cpus/features/isa
|
|
|
|
- usable-privilege
|
|
Usage: required
|
|
Value type: <u32> bit mask
|
|
Definition:
|
|
Bit numbers are LSB0
|
|
bit 0 - PR (problem state / user mode)
|
|
bit 1 - OS (privileged state)
|
|
bit 2 - HV (hypervisor state)
|
|
All other bits reserved and should be zero.
|
|
|
|
This property describes the privilege levels and/or software components
|
|
that can use the feature.
|
|
|
|
If bit 0 is set, then the hwcap-bit-nr property will exist.
|
|
|
|
|
|
- hv-support
|
|
Usage: optional
|
|
Value type: <u32> bit mask
|
|
Definition:
|
|
Bit numbers are LSB0
|
|
bit 0 - HFSCR
|
|
All other bits reserved and should be zero.
|
|
|
|
This property describes the HV privilege support required to enable the
|
|
feature to lesser privilege levels. If the property does not exist then no
|
|
support is required.
|
|
|
|
If no bits are set, the hypervisor must have explicit/custom support for
|
|
this feature.
|
|
|
|
If the HFSCR bit is set, then the hfscr-bit-nr property will exist and
|
|
the feature may be enabled by setting this bit in the HFSCR register.
|
|
|
|
|
|
- os-support
|
|
Usage: optional
|
|
Value type: <u32> bit mask
|
|
Definition:
|
|
Bit numbers are LSB0
|
|
bit 0 - FSCR
|
|
All other bits reserved and should be zero.
|
|
|
|
This property describes the OS privilege support required to enable the
|
|
feature to lesser privilege levels. If the property does not exist then no
|
|
support is required.
|
|
|
|
If no bits are set, the operating system must have explicit/custom support
|
|
for this feature.
|
|
|
|
If the FSCR bit is set, then the fscr-bit-nr property will exist and
|
|
the feature may be enabled by setting this bit in the FSCR register.
|
|
|
|
|
|
- hfscr-bit-nr
|
|
Usage: optional
|
|
Value type: <u32>
|
|
Definition: HFSCR bit position (LSB0)
|
|
|
|
This property exists when the hv-support property HFSCR bit is set. This
|
|
property describes the bit number in the HFSCR register that the
|
|
hypervisor must set in order to enable this feature.
|
|
|
|
This property also exists if an HFSCR bit corresponds with this feature.
|
|
This makes CPU feature parsing slightly simpler.
|
|
|
|
|
|
- fscr-bit-nr
|
|
Usage: optional
|
|
Value type: <u32>
|
|
Definition: FSCR bit position (LSB0)
|
|
|
|
This property exists when the os-support property FSCR bit is set. This
|
|
property describes the bit number in the FSCR register that the
|
|
operating system must set in order to enable this feature.
|
|
|
|
This property also exists if an FSCR bit corresponds with this feature.
|
|
This makes CPU feature parsing slightly simpler.
|
|
|
|
|
|
- hwcap-bit-nr
|
|
Usage: optional
|
|
Value type: <u32>
|
|
Definition: Linux ELF AUX vector bit position (LSB0)
|
|
|
|
This property may exist when the usable-privilege property value has PR bit set.
|
|
This property describes the bit number that should be set in the ELF AUX
|
|
hardware capability vectors in order to advertise this feature to userspace.
|
|
Bits 0-31 correspond to bits 0-31 in AT_HWCAP vector. Bits 32-63 correspond
|
|
to 0-31 in AT_HWCAP2 vector, and so on. Missing AT_HWCAPx vectors implies
|
|
that the feature is not enabled or can not be advertised. Operating systems
|
|
may provide a number of unassigned hardware capability bits to allow for new
|
|
features to be advertised.
|
|
|
|
Some properties representing features created before this binding are
|
|
advertised to userspace without a one-to-one hwcap bit number may not specify
|
|
this bit. Operating system will handle those bits specifically. All new
|
|
features usable by userspace will have a hwcap-bit-nr property.
|
|
|
|
|
|
- dependencies
|
|
Usage: optional
|
|
Value type: <prop-encoded-array>
|
|
Definition:
|
|
|
|
If this property exists then it is a list of phandles to cpu feature
|
|
nodes that must be enabled for this feature to be enabled.
|
|
|
|
|
|
Example
|
|
-------
|
|
|
|
/cpus/ibm,powerpc-cpu-features {
|
|
compatible = "ibm,powerpc-cpu-features";
|
|
|
|
isa = <3020>;
|
|
|
|
darn {
|
|
isa = <3000>;
|
|
usable-privilege = <1 | 2 | 4>;
|
|
hwcap-bit-nr = <xx>;
|
|
};
|
|
|
|
scv {
|
|
isa = <3000>;
|
|
usable-privilege = <1 | 2>;
|
|
os-support = <0>;
|
|
hwcap-bit-nr = <xx>;
|
|
};
|
|
|
|
stop {
|
|
isa = <3000>;
|
|
usable-privilege = <2 | 4>;
|
|
hv-support = <0>;
|
|
os-support = <0>;
|
|
};
|
|
|
|
vsx2 (hypothetical) {
|
|
isa = <3010>;
|
|
usable-privilege = <1 | 2 | 4>;
|
|
hv-support = <0>;
|
|
os-support = <0>;
|
|
hwcap-bit-nr = <xx>;
|
|
};
|
|
|
|
vsx2-newinsns {
|
|
isa = <3020>;
|
|
usable-privilege = <1 | 2 | 4>;
|
|
os-support = <1>;
|
|
fscr-bit-nr = <xx>;
|
|
hwcap-bit-nr = <xx>;
|
|
dependencies = <&vsx2>;
|
|
};
|
|
|
|
};
|