resend-- RFC: representation of CPUs/threads in device trees
Yoder Stuart-B08248
B08248 at freescale.com
Wed Aug 25 00:50:04 EST 2010
There is no standard binding for how hardware threads
(which in most cases share an MMU) for the Power
architecture are represented in device trees.
The IBM SPAPR uses the ibm,ppc-interrupt-server#s.
property, which is an array with 1 element per thread. The
number is used in addressing by the interrupt controller.
The question of how/if a CPU or thread's PIR value is
represented is also relevant. Some CPUs have an unmodifiable
PIR number space that is distinct from the number space
addressed from the interrupt controller.
The proposal below outlines a general approach. If there
is consensus, this would eventually get written up in a
more formal form and added to the ePAPR.
Regards, Stuart Yoder
=============================================================
-CPUs and threads are numbered through a unified
number-space that should match as closely as possible
the interrupt controller's numbering of CPUs/threads
-What goes under a CPU node?
-generally, a CPU node represents a hardware
execution block that is sufficiently independent that
it is capable of running an operating system without
interfering with other CPUs possibly running other
operating systems.
-threads that share an MMU would generally be
represented under 1 CPU node
-If other more complex CPU topographies
are designed the CPU binding must describe the
topology (e.g. threads that don't share an MMU).
-If a CPU/thread can be the target of an external
interrupt the "reg" property value must contain a unique
CPU/thread id that is addressable by the interrupt
controller
-If a CPU/thread cannot be the target of an external
interrupt, then "reg" must be unique and out of bounds
of the range addressed by the interrupt controller
-If a CPU supports more than one thread (i.e. multiple
streams of execution) the "reg" property is an array with
1 element per thread
-The #address-cells property on the "cpus" container
specifies how many cells each element of the "reg"
property array takes
-Software can determine the number of threads by dividing
the size of "reg" by "#address-cells"
-If a CPU/thread's PIR is modifiable it should be modified
to match the "reg" property value. If PIR cannot be
modified and the PIR value is distinct from the interrupt
controller numberspace, the CPUs binding may define a
binding-specific representation of PIR values if desired.
-Regarding a standardized way to start secondary threads--
-The current spin table mechanism is not thread safe and
is insufficient for starting threads.
-Given the variety of implementations in IBM and
Freescale roadmaps, it is highly questionable whether
a common thread release mechanism can be defined for
all threaded CPUs. Specific release methods for
different processors most likely needs to be created
and defined in processor bindings.
More information about the devicetree-discuss
mailing list