Processor Architecture BindingData Formats and RepresentationsThe cell size shall be 32 bits. Number ranges for
n,
u, and other cell-sized items are consistent with
32-bit, two's-complement number representation.The required alignment for items accessed with
a-addr addresses shall be four-byte aligned (i.e., a
multiple of 4).Each operation involving a
qaddr address shall be performed with a single 32-bit
access to the addressed location; similarly, each
waddr access shall be performed with a single 16-bit
access. This implies four-byte alignment for
qaddrs and two-byte alignment for
waddrs.Memory ManagementPA Address Translation ModelThis section describes the model that is used for co-existence of
OF and client programs (i.e., OSs) with respect to address
translation.The following overview of translation is provided so that the
issues relevant to OF for the PA can be discussed. Details that are not
relevant to OF issues (e.g., protection) are not described in detail;
, particularly Book III, should
be consulted for the details. For the scope of this section, terms will
be used as defined in
.Translation requirementsThe default access mode of storage for load and stores (i.e., with
translation disabled -- referred to as
Real-Mode) within the PA assumes that caches are
enabled (in copy-back mode). In order to perform access to I/O device
registers, the access mode must be set to Cache-Inhibited, Guarded by
establishing a translation with this mode and enabling translation. Thus,
even though most of a client program and/or OF can run with translation
disabled, it must be enabled when performing I/O.Segmented Address TranslationNote: The use of the term Virtual Address in this
section refers to the PA definition, while the rest of the document uses
the IEEE 1275 definition of virtual address.Note: The following description of PA address
translation is only one of several translation modes available and is
given for reference only. See
for complete details.An Effective Address (EA) of a PA processor is 64(32) bits wide.
Each EA is translated into an 80(52)-bit Virtual Address (VA) by
prepending a 52(24)-bit Virtual Segment Id (VSID) to the 28 LSbs of the
effective address. On 32-bit implementations, the VSID is obtained by
indexing into a set of 16 Segment Registers (SRs) using the 4 MSbs of the
EA. On 64-bit implementations, the VSID is looked up in a Segment Table
using the 36 MSbs of the EA. Finally, the virtual address is translated
into a Real Address (RA). This is done by mapping the Virtual Page-Number
(VPN) (bits 0-67(39) of the VA) into a Real Page Number (RPN) and
concatenating this RPN with the byte offset (12 LSbs of the VA). The
mapping of VPN to RPN involves a hashing algorithm within a Hashed Page
Table (HTAB) to locate a Page Table Entry (PTE) that matches the VPN and
using that entry’s RPN component. If a valid entry is not found, a
Data Storage Interrupt (DSI) or Instruction Storage Interrupt (ISI) is
signalled, depending upon the source of the access.This process is not performed for every translation! Processors
will typically have a Translation Look-aside Buffer (TLB) that caches the
most recent translations, thus exploiting the natural spatial locality of
programs to reduce the overhead of address translation. 64-bit
implementations may also implement a Segment Lookaside Buffer (SLB) for
the same reasons. On most PA processors, the TLB updates are performed in
hardware. However, the architecture allows an implementation to use a
software-assisted mechanism to perform the TLB updates. Such schemes must
not affect the architected state of the processor unless the translation
fails; i.e., the HTAB does not contain a valid PTE for the VA and a
DSI/ISI is signalled.Note: One unusual feature of this translation
mechanism is that valid translations might not be found in the HTAB; the
HTAB might be too small to contain all of the currently valid
translations. This introduces a level of complexity in the use of address
translation by OF, as discussed below.Block Address TranslationTo further reduce the translation overhead for contiguous regions
of virtual and real address spaces (e.g., a frame buffer, or all of real
memory), the Block Address Translation (BAT) mechanism is also supported
by the PA. The Block Address Translation involves the use of BAT entries
that contain a Block Effective Page Index (BEPI), a Block Length (BL)
specifier and a Block Real Page Number (BRPN); the architecture defines 4
BAT entries for data (DBAT entries) and 4 BAT entries for instruction
(IBAT entries)The 601 has a single set of BAT entries that are shared by both
instruction and data accesses.. BAT areas are restricted to a finite set of allowable
lengths, all of which are powers of 2. The smallest BAT area defined is
128 KB (217 bytes). The largest BAT area defined is 256 MB (228 bytes).
The starting address of a BAT area in both EA space and RA space must be
a multiple of the area's length.Block Address Translation is done my matching a number of upper
bits of the EA (specified by the BL value) against each of the BAT
entries. If a match is found, the corresponding BRPN bits replace the
matched bits in the EA to produce the RA.Block Address Translation takes precedence over Segmented Address
Translation; i.e., if a mapping for a storage location is present in both
a BAT entry and a Page Table Entry or HTAB, the Block Address Translation
will be used.Note: Block Address Translation is a deprecated
translation mode of the PA. This description is retained here for
historical reference. See
for details on all supported
addressing mechanisms.Open Firmware’s use of memoryOF shall use the memory resources within the space indicated by the
real-base, real-size, virt-base and
virt-size Configuration Variables defined for the PA.
As described in the applicable platform binding, a mechanism is defined
to enable OF to determine if its current configuration is consistent with
the requirements of the client.If the client program has specific requirements for physical memory
or address space usage, it may establish requirements for OF's physical
and/or virtual address space usage by means of its program header. When
OF loads the client program, it inspects the program header, and if its
current usage of physical memory or virtual address space conflicts with
that specified in the program header, OF shall set the
real-base,
real-size,
virt-base, and
virt-size to the configuration variables as specified
in the header and restart itself.
Real-base,
real-size,
virt-base, and
virt-size may be specified as -1, in which case the
firmware is permitted to choose appropriate values for the variables
specified as -1.If the values of the
real-size and/or
virt-size configuration variables do not provide
sufficient memory and/or virtual address space for the firmware's own
use, then the firmware shall not attempt to load a client program and the
condition should be reported to the user. The possibility of not being
able to comply with limitations on firmware's size should be tested as
the firmware is coming up in order to handle the possibility that a user
established an unworkable limitation on the size. Clients can minimize
this exposure by setting size to -1 and allowing OF to choose the
size.A PA OF binding shall support two different addressing models,
depending upon the setting of the
real-mode? Configuration Variable. This variable
indicates the OF addressing mode that a client program expects;
false (0) indicates Virtual-Mode,
true (-1) indicates Real-Mode; the default value of
real-mode? is implementation dependent.The management of
real-mode? is analogous to
little-endian?. OF determines its addressing mode
using the value of
real-mode?. If the current state of
real-mode? (and hence, the current state of OF) is
incorrect, it shall set
real-mode? appropriately and reset itself, possibly
by executing
reset-all.Memory that cannot be allocated for general purpose use, for
example physical memory on LoPAR systems used for interrupt vectors and
implementation specific areas, shall not appear in the “
available ” property of the
memory node. A Client Program that needs to use such
memory for its architected purpose must not claim that area prior to
use.In the following two sections, some of conventions in Real-Mode and
Virtual-Mode address translations are described. Remaining sections
describe the assumptions that OF makes about the state and control of the
system in regard to OF’s use of system resources for three OF
interfaces (e.g. Device, User and Client interfaces).Real-ModeIn Real-Mode (when
real-mode? is
true), the use of address translations by OF and its
client are independent. Either they do not use translation, or their
translations are private; they do not share any translations. All
interfaces between the two must pass the real address of the data. Any
data structure shared by OF and its client that refers to
virt addresses in
, or this binding, must be real
addresses.Note: In particular, that the address of the Client
interface handler, that is passed to the client, has to be a real
address.The Configuration Variables
real-base and
real-size should indicate the physical memory base
and size in which OF must locate itself. In Real-Mode, the Configuration
Variables
virt-base and
virt-size do not have meaning and should be set to
-1.Virtual-ModeWhen
real-mode? is
false, OF shall configure itself to run in
Virtual-Mode. In Virtual-Mode, OF and its client
will share a single virtual address space. This binding provides
interfaces to allow OF and its client to ensure that this single virtual
address model can be maintained.The Configuration Variables
virt-base and
virt-size should indicate the virtual address space
base address and size that OF should use. The Configuration Variables
real-base and
real-size should indicate the physical memory base
and size in which OF must locate itself.Device Interface (Real-Mode)While OF is performing system initialization and probing functions,
it establishes and maintains its own translations. In particular, it
maintains its own Page Tables (and/or BAT entries) and handles any
DSI/ISI interrupts itself.Note: In Real-Mode, all translations will be
virt=real; the primary reason for translation is to
allow appropriate I/O accesses.Device Interface (Virtual-Mode)OF will establish its own translation environment, handling DSI/ISI
interrupts as in the Real-Mode case. However, this environment will, in
general, contain translations in which virtual addresses do not equal
real addresses. The virtual address space used by OF must be compatible
with its client.Note: Since these virtual addresses will be used by
the Client and/or User Interfaces (e.g., for pointers to its code,
device-tree, etc.), their translations must be preserved until the client
OS decides that it no longer requires the services of OF.Client Interface (Real-Mode)In Real-Mode, addresses of client data are real.; the client must
ensure that all data areas referred to across the Client Interface are
valid real addresses. This may require moving data to meet any
requirements for contiguous storage areas (e.g., for
read/write calls). Translation shall be disabled
before the client interface call is made.OF will typically have to maintain its translations in order to
perform I/O. Since the client may be running with translation enabled
(except for the Client interface call), OF shall save the state of all
relevant translation resources (e.g., SDR1, BATs) and restore them before
returning to the client. Likewise, it
may take over interrupts for its own use (e.g., for
doing “lazy” allocation of BATs); it shall preserve the state
of any interrupt vectors for its client.Since the state of the address translation system is not
predictable to any interrupts, the client shall ensure that interrupts
are disabled before calling the Client Interface handler and call the
handler from only one CPU at a time. The client shall also ensure that
other processors do not generate translation exceptions for the duration
of the call.Client programs are not required to assume responsibility for
physical memory management. The client program must use the OF claim
client interface service to allocate physical memory while physical
memory is managed by OF. Physical memory shall remain managed by OF until
the client program defines the real-mode physical memory management
assist callbacks. Physical memory must be managed by the client program
once the client program defines the real-mode physical memory management
assist callbacks. OF shall use the client program's real-mode physical
memory management assist callbacks to allocate physical memory after the
client program has assumed physical memory management.In Real-Mode,
claim methods shall not allocate more pages than are
necessary to satisfy the request.Client Interface (Virtual-Mode)Client interface calls are essentially “subroutine”
calls to OF. Hence, the client interface executes in the environment of
its client, including any translations that the OS has established. E.g.,
addresses passed in to the client interface are assumed to be valid
virtual addresses within the scope of the OS. Any DSI/ISI interrupts are
either invalid addresses or caused by HTAB “spills”. In
either case, the OS has the responsibility for the handling of such
exceptions.Note: Addresses that the OF internal use will be
those that were established by the Device interface (or, by subsequent
actions of the Client or User interface). Thus, the client must preserve
these OF translations if it takes over the virtual memory management
function.In addition to using existing translations, the Client Interface
might require the establishment of new translations (e.g., due to
map-in calls during
open time), or the removal of old translations (e.g.,
during
map-out calls during
close time). Since this requires altering the
Client’s translation resources (e.g., Page Tables), possibly
handling spill conditions, OF cannot know how to perform these
updates.Hence, there shall be
callback services provided by the client for use by
OF for such actions; see
.In order to let clients (i.e., target OSs) know where OF lives in
the address space, the following rules shall be followed by an OF
implementation for the PA and by client programs.OF:OF shall maintain its “translations”
“mmu”-node property (see
)OF’s
claim methods shall not allocate more pages
than are necessary to satisfy the request.When a client executes
set-callback, OF shall attempt to invoke the
“translate” callback. If the translate callback is
implemented, OF shall cease use of address translation hardware, instead
using the client callbacks for changes to address translation.The
exit service must continue to work after a
set-callback that takes over address translation.
This implies that OF takes responsibility for address translation
hardware upon
exit and must maintain internal information about
translations that it requests of the client.Client Programs:Client programs that take control of the management of address
translation hardware and expect to be able to subsequently invoke OF
client services must provide callbacks to assist OF in address
translation (see
).A client program shall not directly manipulate any address
translation hardware before it either a) ceases to invoke OF client
services or b) issues a
set-callback to install the “translate”
callback.Note: The intended sequence is that a client program
will first issue a set-callback and then take control of address
translation hardware. Address translation hardware includes BAT entries,
page table, segment registers, Machine State Register and the interrupt
vectors relating to translation faults.User Interface (Real-Mode)In Real-Mode, OF regains total control of the system. As with the
Client interface in Real-Mode, it should save the state of the
translation resources (including interrupt vectors) upon entry and should
restore them upon exit.User Interface (Virtual-Mode)When the User interface is invoked, OF is responsible for managing
the machine. Therefore, it will take over control of any relevant
interrupt vectors for its own handling. In particular, it will take over
DSI/ISI handling in order to report errors to the user for bad addresses,
protection violations, etc. However, as described above, one source of
DSI/ISI may simply be HTAB spills. As with the case of
map-in and
map-out calls, the User interface cannot know how to
handle such spill conditions, itself, or even if this is, in fact, a
spill versus a bad address.Hence, this binding defines
callback services that the client provides for use by
OF; see
.PropertiesThis section describes the standard properties of a PA OF
implementation.CPU propertiesThe Device TreeOF requires that the multiple instances of any device that appears
more than once in the device tree must be distinguishable by means of
their
“reg” properties. The
“reg” property must express the address
of each node relative to its parent bus. Furthermore, the core
specification says that the root node of the device tree usually
represents the main physical bus of the system. Thus, if processors are
not directly addressable on the main physical bus, as is expected to be
the case on many/most PA-based systems, the CPU nodes on such systems may
not be children of the root node but must instead be children of a
pseudo-device node. In this case, the name of the pseudo-device node,
which will usually be a child of the root node, shall be
“cpus”.The “cpus” node shall have one child node of
device_type “cpu” for each processor.Physical Address Formats and Representations for CPU
NodesNumerical RepresentationThe numerical representation of a processor’s
“address” in a LoPAR system shall consist of one cell,
encoded as follows (Bit# 0 refers to the least significant bit)
:
Numerical Representation of a Processor’s
“address”Bit#3322222210987654222211113210987611111100543210980000000076543210phys.lo cell:000000000000000000000000pppppppp
where:
pppppppp is an 8-bit integer representing the
interprocessor interrupt identifier used by the platform.Text RepresentationThe text representation of a processor’s
“address” shall be an ASCII hexadecimal number in the range
0...FF.Conversion of the hexadecimal number from text representation to
numeric representation shall be case insensitive, and leading zeros shall
be permitted but not required.Conversion from numeric representation to text representation shall
use the lower case forms of the hexadecimal digits in the range
a..f, suppressing leading zeros.Unit Address RepresentationA processor’s “unit-number” (i.e. the first
component of its
“reg” value) is the interprocessor
interrupt destination identifier used by the platform. For a
uni-processor platform, the “unit-number” shall be
zero.CPUS Node PropertiesThe following properties shall be created within the
“cpus” node.“#address-cells”Standard property name to define the number of cells required
to represent the physical addresses for the “
cpu ” nodes (i.e., the children of the “
cpus ” node).prop-encoded-array: Integer constant 1, encoded as
with encode-int.The value of
“#address-cells” for the
“cpus” node shall be
1.“#size-cells”Standard
property name to define the number of cells necessary
to represent the length of a physical address range.prop-encoded-array: Integer constant 0, encoded as
with encode-int.The value of “
#size-cells ” for the “cpus”
pseudo-device node is 0 because the processors that are represented by
the cpu nodes do not consume any physical address space.CPU Node PropertiesFor each CPU in the system, a cpu-node shall be defined as a child
of
“cpus”. The following properties apply to
each of these nodes. The
cpus node shall not have “
reg ” or “
ranges ” properties. In general, properties in
a cpu-node that affect the software interface (for example properties
that convey the presence of instructions, presence of registers, or
location of resources) to the processor are preserved by the device tree
once presented upon boot. For a list of properties that may change before
a reboot, see
.“name”Standard property name. The value of this property
shall be of the form: “PowerPC,<name>”, where <name>
is the name of the processor chip which may be displayed to the user.
<name>
shall not contain underscores.“device_type”Standard property name. The value of this
property for CPU nodes shall be
“cpu”.“reg”Standard proper name to define a cpu node’s
unit-address.prop-encoded-array: an integer encoded as with
encode-int.For a cpu node, the first and only value of the
“reg” property shall be the number of the
per-processor interrupt line assigned to the processor represented by the
node. For a uni-processor platform, the value of the
“reg” property shall be zero.“status”Standard property name. The value of the is
property shall be one of the following string values:“okay” for a good processor.“fail” for a processor that fails during power-on testing.“fail-offline”
for a processor that has been automatically deconfigured because of previous
failures.“disabled”
for a processor that has been manually deconfigured.“cpu-version”property name: Represents the processor type.prop-encoded-value: The value, encoded as with
encode-int,
shall be either the value obtained by
reading the Processor Version Register of the processor described by this
node, or the logical processor version as given in
. The first byte of the logical
processor version value shall be 0x0F. The values of the “Logical
Processor Version” column of
indicate that the processor
provides the base support described by that version of the architecture.
The presence and value of all optional and implementation dependent
features and facilities are described by their corresponding
properties.
Logical Processor Version ValuesLogical Processor VersionProperty Value2.040x0F0000012.050x0F0000022.060x0F0000032.06 plus:URG field in DSCR (Bits 55-57)0x0F1000032.070x0F0000042.080x0F000005
“clock-frequency”Standard property name, encoded as with
encode-int, that represents
the internal processor speed (in hertz) of this node.“ibm,extended-clock-frequency”property name: Property that represents the internal
processor speed in hertz of this node. This property allows the encoding
of multi-giga-hertz quantities.prop-encoded-array: Consisting of the low order 32
bits of two cells (freq-hi, freq-lo) each encoded as with
encode-int, such that
their combined value is (the low order 32 bits of freq-hi || the low order
32 bits of freq-lo).“timebase-frequency”Standard property name, encoded as with
encode-int,
that represents the rate (in hertz) at
which the PA TimeBase and Decrementer registers are updated.Note: The 601 PowerPC
processor does not have a timebase frequency,
therefore on a 601 PowerPC processor the value reported in this property
shall be 1 billion (1 x 109) which represents the logical rate of the
real time clock.“ibm,extended-timebase-frequency”property name: Property that represents the rate in
hertz at which the PA TimeBase and Decrementer registers are updated.
This property allows the encoding of multi-giga-hertz quantities.prop-encoded-array: Consisting of the low order 32
bits of two cells (freq-hi, freq-lo) each encoded as with
encode-int, such that their combined
value is (the low order 32 bits of freq-hi || the low order 32 bits of freq-lo).Note: The
“ibm,extended-timebase-frequency”
property will be deprecated from the architecture due to the emergence of the
“ibm,nominal-tbf” property and the lack
of a need for a two cell version of the
“timebase-frequency” property.
Implementations should not provide the
“ibm,extended-timebase-frequency” property.“ibm,nominal-tbf”property name: Property, encoded as with
encode-int,
that represents the design nominal
timebase frequency (in hertz).“ibm,tbu40-offset”property name: that provides the value that, when
added (ignoring overflow) to the processor TimeBase, yields a value
consistent with other platform partitions that utilize their respective
values of the property. If the property is missing, the default value is
zero.prop-encoded-array: An eight byte, big endian,
unsigned, binary value.“64-bit”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node is a 64-bit implementation of the PA. The absence of
this property indicates that the microprocessor defined by this CPU node
is a 32 bit implementation of the PA“64-bit-virtual-address”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node supports the 64-bit virtual address subset of the 80-bit
virtual address as defined by the PA. The absence of this property
indicates that the PA processor defined by this CPU node supports the
full 80-bit virtual address defined by the PA. This property is only
valid for 64-bit implementations.Note: The
“64-bit-virtual-address”
will be
deprecated from the architecture. Implementations should not provide this
property.“603-translation”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node uses the PowerPC 603 processor defined mechanism to
update its Translation Lookaside Buffers (TLBs). The absence of this
property indicates that the PA processor defined by this CPU node does
not use the PowerPC 603 processor defined mechanism to update its
TLBs.“603-power-management”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements the PowerPC 603 processor defined power
management states. The absence of this property indicates that the PA
processor defined by this CPU node does not support the PowerPC 603
processor defined power management states.“bus-frequency”Standard property name, encoded as with
encode-int,
that represents the speed (in hertz) of
this processor’s bus.“ibm,extended-bus-frequency”property name: Property that represents the rate in
hertz of this processor’s bus. This property allows the encoding of
multi-giga-hertz quantities.prop-encoded-array: Consisting of the low order 32
bits of two cells (freq-hi, freq-lo) each encoded as with
encode-int,
such that their combined value is (the
low order 32 bits of freq-hi || the low order 32 bits of freq-lo).“32-64-bridge”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements the “Bridge Facilities and Instructions
for 64-bit Implementations” as described in an appendix of Book III
of
. The absence of this property
indicates that the PA processor defined by this CPU node does not support
these facilities and instructions.“external-control”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements the External Control Facility as described in
the “Optional Facilities and Instructions” appendix of Book
II of
. The absence of his property
indicates that the PA processor defined by this CPU node does not support
the External Control Facility.“general-purpose”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements the floating point instructions
fsqrt,
fsqrts and
stfiwx. The absence of this property indicates that
the PA processor defined by this CPU node does not support the floating
point instructions
fsqrt,
fsqrts and
stfiwx.“reservation-granule-size”Standard property, encoded as with
encode-int,
that represents the reservation granule
size (i.e., the minimum size of lock variables) supported by this
processor, in bytes.“graphics”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements floating point instructions
fres, frsqrte, and
fsel. The absence of this property indicates that
the PA processor defined by this CPU node does not support the floating
point instructions
fres, frsqrte, and
fsel.“performance-monitor”property name: Indicates that the processor described
by this node implements a performance monitor.prop-encoded-array: Consists of a pair of values,
each encoded as with
encode-int.
The first value of the pair shall be 0
indicating that the performance monitor functionality is implementation
specific. The second value of the pair represents the documentation
describing the performance monitor functionality implemented by the
processor described by this node. The documentation represented by the
second value is specified in
.
Documentation for Implementation Specific Performance
MonitorsSecond ValueDocumentation0Power 5+ Performance Monitor Programmer’s
Guide1Power 7 Performance Monitor Programmer’s
Guide
“ibm,vmx”property name that indicates that the processor
supports the POWER VMX architecture.prop-encoded-array: an integer encoded as with
encode-int,
that represents the level of the VMX
architecture supported. The first level supported is the value 1. The
value of 1 represents the level of support described by the
A Vector/SIMD Multimedia eXtension to the PowerPC Architecture,
Specification Revision 1.2.3, 7/18/97 specification. The value
of 2 represents the level of support provided by the VSX option of
level 2.06.“ibm,segment-page-sizes”property name: that indicates the segment base page
sizes and related encodings supported by the processor.prop-encoded-array: one or more
segment-page-size-descriptor(s).segment-page-size-descriptor: a
segment-page-size-header followed by a pte-lp-descriptor.segment-page-size-header: Consists of three cells
(X,Y,Z) encoded as with
encode-int.
The first cell represents the base page
size of the segment (the page size which determines the hash value used
to locate the segment's page table entries) as 2
X. The second cell contains the SLB encoding that,
ORed with the RS register value for use by a slbmte instruction, selects
this segment's base page size. Note, the low order bits of the cell Y are
aligned with the low order bits of RS and the RS's L and LP bits are zero
prior to the logical OR operation. The third cell contains the number of
pte-lp-encodings in the pte-lp-descriptor.pte-lp-descriptor: Consists of Z (from the
segment-page-size-header) pte-lp-encoding(s), one for each of the page
sizes supported for this base segment page size.pte-lp-encoding: Each pte-lp-encoding consists of
two cells (P,Q) encoded as with
encode-int.
The first cell represents the page size
of the encoding as 2
P (thus implying the number of low order RPN bits
that are available to page size encoding). The second cell, left shifted
12 bit positions, is the encoding to be entered into the available low
order RPN bits to represent this page size for this segment base page
size.Note: A
segment-page-size-descriptor applies to a segment
only if the size of the segment is greater than or equal to all of the
page sizes within the
pte-lp-encoding (s) contained within the
segment-page-size-descriptor.“ibm,processor-page-sizes”property name: Relates the number and sizes of the virtual memory
page sizes supported by the processor describe by this node.prop-encoded-array: One to N cells in ascending
value order, each encoded as with
encode-int, each cell represents the size of a
supported virtual memory page where the value of the cell is the power of
2 of the cell size. i.e. a 4 K page size is represented by the value 12
(4 K= 2
12) etc.“ibm,processor-radix-AP-encodings”property name: Relates the AP (Actual Page size) encodings
for the supported page sizes used by the TLB management instructions when the processor
is in Radix address translation mode.prop-encoded-array: One to N cells in ascending order of
Radix mode supported page size, each encoded as with
encode-int. The top 3 bits of the low order byte
contain the tlbie AP field associated with the corresponding Radix mode supported page size.“ibm,processor-segment-sizes”property name: Relates the number and sizes of the
virtual memory segment sizes supported by the processor described by this
node.prop-encoded-array: One to N cells in ascending
value order of the segment selector (SLBE B field), each encoded as with
encode-int, each positive value cell represents the
size of a supported virtual memory segment where the value of the cell is
the power of 2 of the segment size. That is, a 256Meg segment size is
represented by the value 28 (256Meg = 2
28) etc. (negative valued cells represent
unsupported encodings).“ibm,processor-storage-keys”property name indicating the number of virtual
storage keys supported by the processor described by this node.prop-encoded-array: Consists of two cells encoded as
with encode-int.
The first cell represents the number of
virtual storage keys supported for data accesses while the second cell
represents the number of virtual storage keys supported for instruction
accesses. The cell value of zero indicates that no storage keys are
supported for the access type.“ibm,processor-vadd-size”property name indicating the number of virtual
address bits that are supported by the processor described by this
node.prop-encode-array: An integer, encoded as with
encode-int, that represents the number of supported
virtual address bits.Note: A processor
described by this node implements
the least significant
“ibm,processor-vadd-size”
bits of the architected virtual address.“ibm,vrma-page-sizes”property-name: Maps the VRMASD field values
implemented by the processor described by this node to their page
sizes.prop-encoded-array: Array of one or more
VRMA page-size-descriptor (s) starting with the value
selected by the firmware when booting the partition, followed by the
other values supported by the platform.VRMA page-size-descriptor: A pair of cells encoded
as with
encode-int; The first cell is the log base 2 of the
page size. The second cell contains, in its low order bits, the VRMASD
field value to achieve that supported size. The high order bits of the
second cell are zero.“ibm,estimate-precision”property name: Relates PA estimate instruction
mnemonics to precisions supported by the processor described by this
node.prop-encoded-array: One or more
instruction-precision descriptor (s).instruction-precision descriptor: An
instruction descriptor followed by a
precision descriptor. An
instruction-precision descriptor relates one estimate
instruction mnemonic to the precision supported by the processor
described by this node for that estimate instruction mnemonic.instruction descriptor: Consists of one PA
instruction mnemonic encoded as with
encode-string.precision descriptor: Consists of an integer, encoded
as with
encode-int,
specifying the number of bits of
precision the processor described by this node supports for an
instruction mnemonic.“ibm,dfp”property name: Indicates that the processor described
by this node supports the Decimal Floating Point (DFP)
architecture.prop-encoded-value: an integer, encoded as with
encode-int,
that represents the level of DFP support
of the CPU described by this node. The absolute value of the integer
represents the level of the DFP architecture supported. The sign of the
integer indicates how the architecture level is supported. A positive
integer indicates native support while a negative integer indicates
emulation assisted support. The absolute values supported are as
follows:1: Represents the level of support defined by Version 2.05 of the
.2: Represents the level of support defined by Version 2.06 of the
.“ibm,purr”property name: Indicates that the processor
described by this node implements a Processor Utilization of Resources
Register (PURR).prop-encoded-value: an integer, encoded as with
encode-int,
that represents the level of PURR
architecture supported. The first level supported is the value 1 and is
defined by Section 6.5 “Processor Utilization of Resources
Register” of Book III of version 2.02 of the PA.“ibm,spurr”property name: Indicates that the processor
described by this node implements a Scaled Processor Utilization of
Resources Register (SPURR).prop-encoded-value: an integer, encoded as with
encode-int,
that represents the level of SPURR
architecture supported. The value of 1 represents the level of support
defined by Version 2.05 of the
.“ibm,pa-features”property name: Indicates level of support of several
extended features of the Processor Architecture.prop-encoded-array: One or more
attribute-descriptor (s).attribute-descriptor: Consists of an
attribute-header immediately followed by an
attribute-specifier.attribute-header: Consists of two bytes. The first
byte is an unsigned integer representing a value from 1 to 254. The first
byte specifies the number of bytes implemented by the platform of the
attribute-specifier. The second byte is an unsigned
integer specifying the
attribute-specifier-type.attribute-specifier: The
attribute-specifier is defined by the
attribute-specifier-type of the
attribute-header. The
attribute-specifier for the
attribute-specifier-type value of 0 is defined by
.
Definition for
attribute-specifierattribute-specifier-type value 0Byte NumberBit NumberAttribute NameDescription00Memory Management Unit (MMU)The value of 1 indicates MMU support; else not
supported.1Floating Point Unit (FPU)The value of 1 indicates FPU support; else not
supported.2Segment Lookaside Buffer (SLB).The value of 1 indicates SLB support; else not
supported.3RUN fieldThe value of 1 indicates support for the RUN field of the
Control Register (CTRL, SPR #152); else not supported.4ReservedReserved bits within defined bytes
shall be zero.5Data Address Breakpoint Register (DABR)The value of 1 indicates DABR support; else not
supported.6No Execute (N) bit in Page Table Entries.The value of 1 indicates No Execute (N) bit in Page Table
Entry support; else not supported.7Write Through Required (W) bitThe value of 1 indicates setting the W bit to 1 (write
through always) is supported; else attempting to set the W bit
to 1 has no effect10Memory Coherence Required (M) bitThe value of 1 indicates that setting the M bit to 0
(main storage not always coherent) is supported; else
attempting to set the M bit to 0 has no effect.1Data Storage Interrupt Status Register (DSISR) set on an
alignment interrupt.The value of 1 indicates that the DSISR is set on an
alignment interrupt as described by version 2.01 of PA; else
the DSISR is not set on alignment interrupt as described by
version 2.01 of PA.2I=1 (cache inhibited) Large PagesThe value of 1 indicates support for I=1 (cache
inhibited) large pages; else not supported.3Round to Integer (from floating point) group of
instructions.The value of 1 indicates support for the
frin, friz, frip, and
frim instructions; else these instructions
are not supported.4Data Address Breakpoint Register Extension (DABRX)The value of 1 indicates support for the DABRX
architecture as defined by version 2.02 of PA; else not
supported.5User Accessible SPRG3The value of 1 indicates support for accessing SPRG3 in
Problem State; else SPRG3 is not accessible in Problem
State.6Reading an invalid SLB entry returns zeros.The value of 1 indicates that reading an invalid SLB
entry always returns zeros; else non-zero values may be
returned.7Support for “110” value of the Page
Protection (PP) bits.The value of 1 indicates support for “110”
value of the Page Protection (PP) bits as described by version
2.04 of PA; else “110” is not supported.as
described by 2.04 of PA.20Virtualized Partition Memory (VPM)The value of 1 indicates support for Virtualized
Partition Memory (VPM) as described by version 2.04 of PA; else
not supported.12.05 Data Stream SupportThe value of 1 indicates that data streams as described
by version 2.05 of PA are supported; else not supported.2ReservedReserved bits within defined bytes
shall be zero.3Data Address Register (DAR) set on an alignment
interrupt.The value of 1 indicates that the DAR is set on an
alignment interrupt as described by version 2.01 of PA; else
the DAR is not set on alignment interrupt as described by
version 2.01 of PA.4ReservedReserved bits within defined bytes
shall be zero.5Program Priority Register (PPR)The value of 1 indicates that the PPR is implemented as
described by version 2.03 of PA; else the PPR is not
implemented as described by version 2.03 of PA.62.02 Data Stream SupportThe value of 1 indicates that data streams as described
by version 2.02 of PA are supported; else not supported.72.06 Data Stream SupportThe value of 1 indicates that data streams as described
by version 2.06 of PA are supported; else the 2.06 version data
streams are not supported.30LSD in DSCR(Bit 58)The value of 1indicates that “Load Stream
Disable” bit of the Data Stream Control Register is
implemented1URG in DSCR (Bits 55::57)The value of 1 indicates that the “Depth Attainment
Urgency” field of the Data Stream Control Register is
implemented.2-7ReservedReserved bits within defined bytes
shall be zero.4Storage Order OptionsByte bits define the availability of specific
options02.06 Strong Storage OrderThe value of 1 indicates that Strong Storage Order as
defined by version 2.06 of PA is supported; else not.1-7Reserved for future storage order optionsReserved bits within defined bytes
shall be zero.50Little EndianThe value of 1indicates support for Little Endian as
described by version 2.03 of PA; else not supported.1Come From Address Register (CFAR)The value of 1 indicates that the CFAR is implemented as
described by version 2.05 of PA; else the CFAR is not
implemented as described by version 2.05 of PA.2Elemental BarriersThe value of 1 indicates that elemental barriers are
supported; else elemental barriers are not supported.32.07 load/store quadwordThe value of 1 indicates that the load/store quadword
category as described by version 2.07 of POWER ISA is
supported; else the 2.07 version load/store quadword category
is not supported.4-7ReservedReserved bits within defined bytes
shall be zero.6-7Data Streaming Specifications02.07 Data Streaming SupportThe value of 1 indicates that data streams as described
by version 2.07 of POWER ISA are supported; else the 2.07
version data streams are not supported.1-7ReservedReserved bits within defined bytes
shall be zero.8-150-7Reserved Co-Processor OptionIndividual non-zero bits indicate available coprocessor
types per their architected ACOP bit locations. (the value
0x0000000000000000 indicates that moving to/from the ACOP SPR
or the ICSWX instruction should not be attempted)16-17Level of Vector Category Support02.07 Vector SupportThe value of 1 indicates that the vector category as
described by version 2.07 of POWER ISA is supported; else the
2.07 version vector category is not supported.1-7ReservedReserved bits within defined bytes
shall be zero.18-19Level of Vector Scalar Category Support02.07 Vector Scalar SupportThe value of 1 indicates that the vector scalar category
as described by version 2.07 of POWER ISA is supported; else
the 2.07 version vector scalar category is not
supported.1-7ReservedReserved bits within defined bytes
shall be zero.20-21Level of Vector.XOR Category Support02.07 Vector.CRYPTO SupportThe value of 1 indicates that the vector.crypto category as
described by version 2.07 of POWER ISA is supported; else the
2.07 version vector.crypto category is not supported.1-7ReservedReserved bits within defined bytes
shall be zero.22-23Level of Transactional Memory Category Support02.07 Transactional Memory SupportThe value of 1 indicates that the Transactional Memory
Category as described by version 2.07 of POWER ISA is
supported; else the 2.07 version Transactional Memory Category
is not supported.1-7ReservedReserved bits within defined bytes
shall be zero.24-2550-7UndefinedReaders
shall ignore undefined bytes if
present.
“ibm,pi-features”property name: Indicates level of support of
processor implementation specific options not described by the Processor
Architecture.prop-encoded-array: One or more
pi-attribute-descriptor (s).pi-attribute-descriptor: Consists of a
pi-attribute-header immediately followed by a
pi-attribute-specifier.pi-attribute-header: Consists of two bytes. The first
byte is an unsigned integer representing a value from 1 to 254. The first
byte specifies the number of bytes implemented by the platform of the
pi-attribute-specifier. The second byte is an
unsigned integer specifying the
pi-attribute-specifier-type.pi-attribute-specifier: The
pi-attribute-specifier is defined by the
pi-attribute-specifier-type of the
pi-attribute-header. The
pi-attribute-specifier for the
pi-attribute-specifier-type value of 0 is defined by
.
Definition for
‘pi-attribute-specifier-type value 0Byte NumberBit NumberAttribute NameDescription00P4 Data Address Register (DAR) setting on alignment
interrupt.The value of 1 indicates that the DAR is set on an
alignment interrupt as described by version 2.01 of PA except
for the case where the interrupt is caused by an unsupported
access to cache inhibited space. In this case, the DAR will be
set to the effective address of the first access into the cache
inhibited space. The value of 0 indicates that the processor
does not adhere to this behavior.1ReservedReserved bits within defined bytes
shall be zero.2Ordered Thread Activation/DeactivationThe value of 1 indicates that the
“ibm,ppc-interrupt-server-#s” property
conveys the order that threads need to be activated and
deactivated in to achieve optimal performance; else no need to
activate and deactivate threads in order.3-7ReservedReserved bits within defined bytes
shall be zero.1-2550-7ReservedReserved bits within defined bytes
shall be zero.
“ibm,negotiated-pa-features”property name: Indicates level
of support negotiated via the
ibm,client-architecture-support
method (See
) of several extended features
of the Processor Architecture.prop-encoded-array: One or more
negotiated-pa-attribute-descriptor (s).negotiated-pa-attribute-descriptor: Consists of a
negotiated-pa-attribute-header immediately followed
by a
negotiated-pa-attribute-specifier.negotiated-pa-attribute-header: Consists of two
bytes. The first byte is an unsigned integer representing a value from 1
to 254. The first byte specifies the number of bytes implemented by the
platform of the
negotiated-pa-attribute-specifier. The second byte
is an unsigned integer specifying the
negotiated-pa-attribute-specifier-type.negotiated-pa-attribute-specifier: The
negotiated-pa-attribute-specifier is defined by the
negotiated-pa-attribute-specifier-type of the
negotiated-pa-attribute-header. The
negotiated-pa-attribute-specifier for the
negotiated-pa-attribute-specifier-type value of 0 is
defined by
.
Definition for
negotiated-pa-attribute-specifiernegotiated-pa-attribute-specifier-type value
0Byte NumberBit NumberAttribute NameDescription00TC SetThe value of 1 indicates that the TC bit is implemented
as described by version 2.05 of PA and set to a value of 1;
else the TC bit is not implemented as described by version 2.05
of PA or not set to a value of 1.1-7ReservedReserved bits within defined bytes
shall be zero.1-2550-7ReservedReserved bits within defined bytes
shall be zero.
“ibm,raw-pi-features”property name: Indicates level of support of
processor implementation specific options not described by the Processor
Architecture and not supported on partitions that contain the
“ibm,migratable-partition” property.prop-encoded-array: One or more
raw-pi-attribute-descriptor (s).raw-pi-attribute-descriptor: Consists of a
raw-pi-attribute-header immediately followed by a
raw-pi-attribute-specifier.raw-pi-attribute-header: Consists of two bytes. The
first byte is an unsigned integer representing a value from 1 to 254. The
first byte specifies the number of bytes implemented by the platform of
the
raw-pi-attribute-specifier. The second byte is an
unsigned integer specifying the
raw-pi-attribute-specifier-type.raw-pi-attribute-specifier: The
raw-pi-attribute-specifier is defined by the
raw-pi-attribute-specifier-type of the
raw-pi-attribute-header. The
raw-pi-attribute-specifier for the
raw-pi-attribute-specifier-type value of 0 is defined
by
.
Definition for
raw-pi-attribute-specifierraw-pi-attribute-specifier-type value 0Byte NumberBit NumberAttribute NameDescription00FPR GPR Move InstructionsThe value of 1 indicates that the PA processor defined by
this CPU node implements the
mftgpr and
mffgpr instructions as described by IBM
POWER6® CEC Book IV Implementation
Features; else not supported.1-7ReservedReserved bits within defined bytes
shall be zero.1-2550-7ReservedReserved bits within defined bytes
shall be zero.
“ibm,pa-optimizations”property name: Indicates the level of support of
performance variabilities described by the Processor Architecture.prop-encoded-array: One or more
pa-optimization-attribute-descriptor (s).pa-optimization-attribute-descriptor: Consists of a
pa-optimization-attribute-header immediately followed
by a
pa-optimization-attribute-specifier.pa-optimization-attribute-header: Consists of two
bytes. The first byte is an unsigned integer representing a value from 1
to 254. The first byte specifies the number of bytes implemented by the
platform of the
pa-optimization-attribute-specifier. The second byte
is an unsigned integer specifying the
pa-optimization-attribute-specifier-type.pa-optimization-attribute-specifier: The
pa-optimization-attribute-specifier is defined by the
pa-optimization-attribute-specifier-type of the
pa-optimization-attribute-header. The
pa-optimization-attribute-specifier for the
pa-optimization-attribute-specifier-type value of 0
is defined by
.
Definition for
pa-optimization-attribute-specifierpa-optimization-attribute-specifier-type value
0Byte NumberBit NumberAttribute NameDescription00-7Stream IDsThe value is an unsigned quantity indicating the number
of data stream IDs supported. The value of this byte
shall be zero for processors that do not
support data streams.10-7Default Prefetch DepthThe value in the Default Prefetch Depth (DPFD) field of
the Logical Partitioning Control Register (LPCR) as described
by version 2.05 of PA. Unimplemented high order bits
shall be zero. This byte is valid only if
the “2.05 Data Stream Support” bit of
“ibm,pa-features” is set to
one; else this byte is undefined.2-2550-7ReservedReserved bits within defined bytes
shall be zero.
TLB propertiesSince the PA defines the MMU as being part of the processor, the
properties defined by Section 3.6.5 of
and the following MMU-related
properties shall be presented under “cpu” nodes.“tlb-size”Standard property name, encoded as with
encode-int, that represents
the total number of TLB entries.“tlb-sets”Standard property name, encoded as with
encode-int, that represents
the number of associativity sets of the TLB. A value of 1 indicates that the TLB is
fully-associative.“tlb-split”This property, if present, shall indicate that the TLB has a split
organization. The absence of this property shall indicate that the TLB
has a unified organization.“d-tlb-size”Standard property name, encoded as with
encode-int, that represents
the total number of d-TLB entries.“d-tlb-sets”Standard property name, encoded as with
encode-int, that represents
the number of associativity sets of the d-TLB. A value of 1 indicates that the
d-TLB is fully-associative.“i-tlb-size”Standard property name, encoded as with
encode-int, that
represents the total number of i-TLB entries.“i-tlb-sets”Standard property name, encoded as with
encode-int, that represents
the number of associativity sets of the i-TLB. A value of 1 indicates that the
i-TLB is fully-associative.“tlbia”prop-encoded-array: <none>This property, if present, indicates that the PA processor defined
by this CPU node implements thetlbia instruction. The absence
of this property indicates that the PA processor defined by this CPU node does
not support the tlbia instruction.Internal (L1) cache propertiesThe PA defines a Harvard-style cache architecture; however, unified
caches are an implementation option. All of the PA cache instructions act
upon a cache “block”. The coherence block size, if different
from the cache block size, is reported via the
“i-cache-line-size” and
“d-cache-line-size” properties. The
internal (also referred to as “L1”) caches of PA processors
are represented in the OF device tree by the following properties
contained under
“cpu” nodes.“cache-unified”This property, if present, indicates that the internal cache has a
physically unified organization. Absence of this property indicates that
the internal caches are implemented as separate instruction and data
caches. Unless otherwise noted, separate instruction and data caches
require the architected instruction sequence for instruction modification
so that data cache stores appear in the instruction cache.“i-cache-size”Standard property name, encoded as with
encode-int, that represents
the total size (in bytes) of the internal instruction cache.“i-cache-sets”Standard property name, encoded as with
encode-int, that represents
number of associativity sets of the internal instruction cache. A value of 1
signifies that the instruction cache is fully associative.“i-cache-block-size”Standard property name, encoded as with
encode-int, that represents
the internal instruction cache's block size, in bytes.“d-cache-size”Standard property name, encoded as with
encode-int, that represents
the total size (in bytes) of the internal data cache.“d-cache-sets”Standard property name, encoded as with
encode-int, that represents
number of associativity sets of the internal data cache. A value of 1 signifies
that the data cache is fully associative.“d-cache-block-size”Standard property name, encoded as with
encode-int, that represents
the internal (L1) data cache's block size, in bytes.“l2-cache”Standard property name, encoded as with
encode-int, that represents
the next level of cache in the memory hierarchy.Absence of this property indicates that no further levels of cache
are present. If present, its value is the
phandle of the device node that represents the next
level of cache.“i-cache-line-size”Standard property name, encoded as with
encode-int, that represents
the internal instruction cache's coherency block size (line size), in bytes,
if different than its cache block size.“d-cache-line-size”Standard property name, encoded as with
encode-int, that represents
the internal data cache's coherency block size (line size), in bytes, if different
than its cache block size.Note: If this is a unified cache, the
corresponding i- and d- sizes must be equal.Memory Management Unit propertiesTo aid a client in “taking over” the translation
mechanism and still interact with OF (via the client interface), the
client needs to know what translations have been established by OF. The
following standard property shall exist within the package to which the
“mmu” property of the /chosen package refers.“translations”This property, consisting of sets of translations, defines the
currently active translations that have been established by OF (e.g.,
using map). Each set has the following format:Each value is encoded as with
encode-int.SLB propertiesSince the PA defines the MMU as being part of the processor, the
properties defined by Section 3.6.5 of
and the following MMU-related
properties as appropriate to the specific processor implementation shall
be presented under “cpu” nodes.“slb-size”Standard property name, encoded as with
encode-int, that
represents the total number of SLB entries.Note:requires that the SLB be
fully-associative, and appear to be a unified organization. Therefore,
properties to report SLB sets, split, and sizes and sets of i and d SLBs
are not defined.Ancillary (L2,L3...) cache node propertiesSome systems might include secondary (L2) or tertiary (L3), etc.
cache(s). As with the L1 caches, they can be implemented as either
Harvard-style or unified. Unlike the L1 properties, that are contained
within the
“cpu” nodes, the properties of ancillary
caches are contained within other device tree nodes.The following properties define the characteristics of such
ancillary caches. These properties shall be contained within a child node
of one of the CPU nodes or, for platforms that support dynamic
reconfiguration of cpus, the CPUS node; this is to allow path-name access
to the node. These properties shall always be contained within a child
node of the CPUS node. All
“cpu” nodes that share the same ancillary
cache (including the cpu node under which the ancillary cache node is
contained) shall contain an
“l2-cache” property whose value is the
phandle of that ancillary cache node.Note: The
“l2-cache” property shall be used in one
level of the cache hierarchy to represent the next level. The device node
for a subsequent level shall appear as a child of one of the caches in
the hierarchy to allow path-name traversal. The preceding sentence does
not apply to platforms that support dynamic reconfiguration of cpus or
platforms designed after 07/2005.“device_type”Standard property name; the device_type of ancillary cache
nodes shall be
“cache”.“cache-unified”This property, if present, indicates that the cache at this node
has a physically unified organization. Absence of this property indicates
that the caches at this node are implemented as separate instruction and
data caches. Unless otherwise noted, separate instruction and data caches
require the architected instruction sequence for instruction modification
so that data cache stores appear in the instruction cache.“i-cache-size”Standard property name, encoded as with
encode-int, that represents the total size (in
bytes) of the instruction cache at this node.“i-cache-sets”Standard property name, encoded as with
encode-int, that represents number of associativity
sets of the instruction cache at this node. A value of 1 signifies that
the instruction cache is fully associative.“d-cache-size”Standard property name, encoded as with
encode-int, that represents the total size (in
bytes) of the data cache at this node.“d-cache-sets”Standard property name, encoded as with
encode-int, that represents number of associativity
sets of the instruction cache at this node. A value of 1 signifies that
the instruction cache is fully associative.“l2-cache”Standard property name, encoded as with
encode-int, that represents the next level of cache
in the memory hierarchy.Absence of this property indicates that no further levels of cache
are present. If present, its value is the
phandle of the device node that represents the cache
at the next level.“i-cache-line-size”Standard property name, encoded as with
encode-int, that represents the internal instruction
cache's line size, in bytes, if different than its block size.“d-cache-line-size”Standard property name, encoded as with
encode-int, that represents the internal data
cache's line size, in bytes, if different than its block size.Note: If this is a unified cache, the corresponding
i- and d- sizes must be equal.MethodsThis section describes the additional standard methods required of a
PA OF implementation.MMU related methodsThe MMU methods defined by section 3.6.5. of
shall be implemented by CPU
nodes. The value of the
mode parameter for the relevant methods (e.g.,
map) shall be the value that is contained within
PTEs that control Write-through, Cache-Inhibit, Memory-coherent, Guarded
and the 2 protection bits; thus, its format is:
WIMGxPP, where x is a reserved bit that shall be 0.
In order for I/O accesses to be properly performed in a LoPAR system,
address ranges that are mapped by
map-in shall be marked as Cache-Inhibited,
Guarded.The default mode (i.e., the mode specified when the value of the
mode argument is -1) for the
map-in and
modify MMU methods of CPU nodes is defined as
follows:If the beginning of the physical address range affected by the
operation refers to system memory, the values for
WIMGxPP shall be W=0, I=0, M=0, G=1, PP=10.If the beginning of the physical address range affected by the
operation refers to an I/O address, the values for WIMGxPP shall be W=1,
I=1, M=0, G=1, PP=10.Client Interface RequirementsA PA OF implementation shall implement a client interface (as defined
in chapter 6 of
) according to the specifications
contained within this section.Calling ConventionsTo invoke a client interface service, a
client program constructs a client interface
argument array as specified in the core OF document,
places its address in
r3 and transfers to the
client interface handler, with the return address in
lr. (A typical way of accomplishing this is to copy
the
client interface handler's address into
ctr and executing a
bctrl.)The term “preserved” below shall mean that the register
has the same value when returning as it did when the call was
made.
Register usage conventionsRegister(s)Value -- real-modeValue -- virt-modeNotesIf either the FWNMI, or LPAR option is implementedIf neither the FWNMI or LPAR option is implementedIf either the FWNMI, or LPAR option is implementedIf neither the FWNMI or LPAR option is implementedmsrclient interface shall preserveclient interface shall preservesame as real-modeclient interface shall not modifycrclient interface shall preserveclient interface shall preservesame as real-modesame as real-mode1r1-r2client interface shall preserveclient interface shall preservesame as real-modesame as real-moder3argument array address on client interface entryargument array address on client interface entrysame as real-modesame as real-mode2result value (true or false) on client interface
returnresult value (true or false) on client interface
returnsame as real-modesame as real-mode2r13-r31client interface shall preserveclient interface shall preservesame as real-modesame as real-modesprg0, sprg1, and sprg3client interface shall preserveclient interface shall not modifysame as real-modesame as real-modefpscrclient interface shall preserveclient interface shall preservesame as real-modesame as real-modef0-f31client interface shall preserveclient interface shall preservesame as real-modesame as real-modelr,ctr,xerundefinedundefinedsame as real-modesame as real-modesr0-sr15client interface shall preserveclient interface shall preservesame as real-modeclient interface shall not modifyvr0-vr31client interface shall preserveclient interface shall preservesame as real-modesame as real modedecclient interface shall preserveclient interface shall not modifysame as real-modesame as real modeOther SPRsclient interface shall preserveclient interface shall preservesame as real-modesame as real-mode3
Notes:Only the non-volatile fields (
cr2-cr4) need to be preserved.As defined by section 6.3.1. of
.Other special purpose registersThe
client interface handler shall perform the service
specified by the contents of the argument array that begins at the
address in
r3, place the return value (indicating success or
failure of the attempt to invoke the client interface service) back into
r3, and return to the
client program. This is typically done by a Branch
to Link Register (
blr).The
client interface handler shall preserve the contents
of the Stack Pointer (r1), TOC Pointer (r2), Condition Register (
cr) all non-volatile registers (r13-r31) and all
special purpose registers except lr, ctr and xer.The preservation of r2 allows TOC-based client programs to function
correctly. OF shall
not depend upon whether its client is TOC-based or
not. If the client interface handler, itself, is TOC-based, it must
provide for the appropriate initialization of its
r2.Client Program RequirementsLoad AddressThe client’s load address is specified by the value of the
load-base Configuration Variable. The value of
load-base defines the default load address for
client programs when using the
load method.
Load-base shall be a real address in real mode or a
virtual address in virtual mode. Note that this address represents the
area into which the client program file will be read by
load; it does not correspond to the addresses at
which the program will be executed. All of physical memory from
load-base to either the start of OF physical memory
or the end of physical memory, whichever comes first, shall be available
for loading the client program.Initial Program StateThis section defines the “initial program state”, the
execution environment that exists when the first machine instruction of a
client program of the format specified above begins
execution. Many aspects of the “initial program state” are
established by
init-program, which sets the
saved program state so that subsequent execution of
go will begin execution of the
client program with the specified environment.Initial Register ValuesUpon entry to the client program, the following registers shall
contain the following values:
Initial Register ValuesRegister(s)ValueNotesmsrEE = 0, interrupts disabled1PR = 0, supervisor stateFP = 1, floating point enabledME = 1, machine checks enabledFE0, FE1 = 0, floating point exceptions disabledIP, see
IR,DR, see
SF=0, 32-bit modeILE,LE, little endian support2r1See
r203r3reserved for platform binding4r4reserved for platform binding4r5See
r6, r7See
Other user mode registers0
Notes:OF will typically require the use of external interrupts for its
user interface. However, when a
client program is invoked, external interrupts shall
be disabled. If a
client program causes the invocation of the user
interface, external interrupts
may be re-enabled.The 601 processor uses a different mechanism for controlling the
endian-mode of the processor. On the 601, the LE bit is contained in the
HID0 register; this bit controls the endian-mode of both program and
privileged states.OF does not make any assumptions about whether a client program
is TOC-based or not. It is the responsibility of the client program to
set
r2 to its TOC, if necessary.As defined in the relevant section of the platform
binding.Initial StackClient programs shall be invoked with a valid stack pointer (
r1) with at least 32 KB of memory available for
stack growth. The stack pointer shall be 16-byte aligned, reserving
sufficient room for a linkage area (32 bytes above the address in r1). If
the system is executing in Real-Mode, the value in r1 is a real address;
if in Virtual-Mode, the address in r1 is a mapped virtual address.Client Interface Handler AddressWhen client programs are invoked,
r5 shall contain the address of the entry point of
the
client interface handler. If the system is executing
in Real-Mode, the value in r5 is a real address; if in Virtual-Mode, the
address in r5 is a mapped virtual address.Note: This address points to the first instruction of
the
client interface handler, not to a procedure
descriptor.Client Program ArgumentsThe calling program
may pass to the client an array of bytes of arbitrary
content; if this array is present, its address and length shall be passed
in registers
r6 and
r7, respectively. For programs booted directly by
OF, the length of this array is zero. Secondary boot programs may use
this argument array to pass information to the programs that they
boot.Note: The OF standard makes no provision for
specifying such an array or its contents. Therefore, in the absence of
implementation-dependent extensions, a client program executed directly
from an OF implementation will not be passed such an array. However,
intermediate boot programs that simulate or propagate the OF client
interface to the programs that they load can provide such an array for
their clients.Note:boot command line arguments, typically consisting of
the name of a file to be loaded by a secondary boot program followed by
flags selecting various secondary boot and OS options, are provided to
client programs via the
“bootargs” and
“bootpath” properties of the
/chosen node.CachingThe caches of the processor shall be enabled when the client
program is called. The I-cache shall be consistent with the D-cache for
all memory areas occupied by the client program. Memory areas allocated
on behalf of the client program shall be marked as cacheable. Accesses to
“I/O” devices (especially, to devices across
“bridges”) shall be made with the register access words
(e.g.,
%rl@). All processors in a SMP system shall have the
same consistent view of all memory areas (for data references). No more
than one processor shall have a modified copy of the same data area in
its cache when the client program is called.Note: If firmware makes cacheable M=0 data references
from different processors on a SMP system, it may have to perform
additional cache management to meet this requirement.InterruptsOF requires that interrupts be “vectored” to its
handlers when it is in control of the processor; this will occur when the
User Interface is running. Client Interface calls are considered to
execute in the environment of the client, and hence, OF does not assume
ownership of interrupts.Note: There used to be a paragraph here that said an
area of memory was to be reserved by the client program for the exclusive
use of OF. This requirement has been removed, since the sharing of
interrupt vectors on these platforms has not been found to be
practical.OF shall save and restore the first location of each interrupt that
it wants to “take over”. I.e., whenever OF needs the use of
an interrupt, it shall save the current contents of the corresponding
entry point and replace that location with a branch to its entry point.
When OF returns control, it shall restore the RAM location to its
original contents.Client callbacksThis section defines the callback mechanism that allows OF to
access services exported to it by the client program. As described in
section 6.3.2 and the glossary entries for
callback and
$callback in
, the callback mechanism
follows the same rules as those of Client interface calls. I.e., an
argument array is constructed by OF and the address
of that array is passed (via
r3) to the client’s callback routine; the
address of the callback routine is supplied to OF by means of the
set-callback client call.If the system is running in Real-Mode, the address of the client
callback routine shall be a real address; if it is running in
Virtual-Mode, the client callback routine address shall be a mapped
virtual address.Real-Mode physical memory management assist
callbackOnce the control of physical memory is transferred to the client
program, OF which is running in real-mode shall use the callback service
provided by the client program to allocate physical memory. Client
programs which expect OF to operate in read-mode must implement the
following physical memory management client callback routines for
OF:alloc-real-memIN: [address] min_addr, [address] max_addr, size, modeOUT: error, [address] real_addrThis routine allocates a contiguous physical memory of
size bytes within the address range between
min_addr and
max_addr. The
mode parameter contains the WIMGxPP bits as defined
in
A non-zero error code shall be
returned if the mapping cannot be performed. If error code is zero (i.e.
allocation is succeeded) the routine returns the base address of the
physical memory allocated for OF.Virtual address translation assist callbacksAs mentioned in
, when OF is in Virtual-Mode,
client programs that take over control of the system’s memory
management must provide a set of callbacks that implement MMU functions.
This section defines the input arguments and return values for these
callbacks. The notation follows the style used in chapter 6 of the OF
specification
.mapIN: [address] phys, [address] virt, size, modeOUT: throw-code, errorThis routine creates system-specific translation information; this
will typically include the addition of PTEs to the HTAB. If the mapping
is successfully performed, a value of zero shall be placed in the
error cell of the argument array; a non-zero error
code shall be returned in
error if the mapping cannot be performed.unmapIN: [address] virt, sizeOUT: throw-codeThe system removes any data structures (e.g., PTEs) for the virtual
address range.translateIN: [address] virtOUT: throw-code, error, [address] real, modeThe system attempts to compute the real address (
real) to which the virtual address (
virt) is mapped. If the translation is successful, a
PTE shall be placed into the HTAB for this translation, the number of
return cells shall be four with the resulting real address returned in
real and
error shall be set to
false (0). If the translation is not successful, the
number of return cells shall be two and
error shall be set to a non-zero error code.This call shall be made when OF handles a DSI/ISI within the User
interface. A successful result of the translate call indicates that OF
can complete the interrupted access; a failure indicates that an access
was made to an invalid address.User Interface RequirementsAn implementation of OF for the PA shall conform to the core
requirements as specified in
and the following PA-specific
extensions.Machine Register AccessThe following
user interface commands represent PA registers within
the
saved program state. Executing the command returns
the saved value of the corresponding register. The saved value may be set
by preceding the command with
to; the actual registers are restored to the saved
values when
go is executed.The following command displays the PA processor's
saved program state..registersBranch Unit Registers%crAccess saved copy of Condition Register.%ctrAccess saved copy of Count Register.%lrAccess saved copy of Link Register.%msrAccess saved copy of the low order 16 bits of SRR1 register.%srr0 and
%srr1Access saved copy of Save/Restore Registers.%pcAn alias of “
%srr0 ”Fixed-Point Registers%r0 through
%r31Access saved copies of fixed-point registers.%xerAccess saved copy of XER register.%sprg0 through
%sprg3Access saved copies of SPRG registers.Floating-Point RegistersUnlike the other registers, the floating point unit registers are
not normally saved, since they are not used by OF. The following access
words, therefore, access the registers directly.%f0 through
%f31Access floating point registers.%fpscrAccess Floating Point Status and Control Register.Configuration VariablesIn addition to the standard Configuration Variables defined by the
core OF document
, the following Configuration
Variables shall be implemented for the PA:“little-endian?”This boolean variable controls the endian-mode of OF. If
true (-1), the endian-mode is Little-Endian; if
false (0), the endian-mode is Big-Endian. The default
value is implementation dependent.“real-mode?”This boolean variable controls the address translation mode of OF. If
true (-1), the addressing mode is Real-Mode; if
false (0), the addressing mode is Virtual-Mode. The
default value is implementation dependent.“real-base”This integer variable defines the starting physical address to be
used by OF.“real-size”This integer variable defines the size of the physical address space
which can be used by OF.“virt-base”This integer variable defines the starting virtual memory address
which can be used by OF.“virt-size”This integer variable defines the size of the virtual address space
which can be used by OF.“load-base”This integer variable defines the default load address for
client programs when using the
load method. The default value is implementation
dependent.MP ExtensionsThis section specifies the application of OF to PA multiprocessor
(MP) systems. An OF implementation for an MP PA system shall implement the
extensions described in this section as well as the requirements described
in previous sections of this binding.The Device TreeThis section defines an additional property under the
/chosen node for a MP extension. Refer to
for more details about the
device tree structure for a MP Configuration.Additional Properties/chosen Node Properties“cpu”property name, identifies the running CPU.prop-encode-array: An integer, encoded as with
encode-int, which contains the i-handle of the CPU
node that is associated with the “running” CPU.InitializationOF shall select one processor, using an algorithm of its choice, to
be the “master” processor, which performs the role of the
single processor on a uniprocessor system, either booting the client or
providing the user interface. OF shall place all the remaining processors
into stopped state, a state in which the processor does not perform OF or
client functions and does not interfere with the operation of the master
processor. A processor in stopped state remains in that state unless and
until an executing client starts it using the
start-cpu client service defined below.Client programs shall use the OF
start-cpu client interface service to start all
processors before it reclaims the OF memoryOn machines in which a machine check on one processor is broadcast
to all processors, the processors which are either in the idle or stopped
state shall not change their states due to a machine check on another
processor: OF shall not depend on the contents of the low vector (IP=0)
in the event of a machine check.depicts the relationship of the
Running, Stopped and Idle States to each other. The
Client Interface Service calls are shown as how to
move between the states.Note: OF's memory cannot be reclaimed by a client if
a CPU is in the “stopped” or “idle” state.Client Interface ServicesThe following client interface services are added for MP support on
PA systems. These interfaces make the client program responsible for any
Inter-CPU communication needed for these interfaces. The rationale for
this is to architecturally separate the Inter-CPU communication mechanism
of the firmware from the client program and vice versa.start-cpuIN: nodeid, pc, argOUT: noneThis client interface service starts the CPU. The
nodeid is the phandle of a node whose device_type is
“cpu”.Start-cpu arranges for the CPU identified by phandle
in nodeid to begin executing client code at the real
address given by the
pc input with an argument,
arg, passed in register r3. When it begins execution,
the started processor shall be in the endian mode of the client program,
and in real (not translated) addressing mode. The contents of registers
other than r3 are indeterminate.A client should not call
start-cpu for the processor on which it is running,
effectively restarting with a new pc and abandoning the only client
thread. A jump or branch instruction shall be used instead to achieve the
objective.start-cpu permits more than one processor to run at
the same time, enabling multi-threaded client execution. In general, an
OF client shall avoid multi-threaded operation within OF. Usually, this
means that client threads running on different CPUs must use mutual
exclusion to prevent more than one processor from making client service
requests at any one time. The exceptions are that a client thread may
invoke either the
stop-self or
idle-self client services defined below at any
time.Note: The results are undefined if the CPU identified
by *phandle* has already been started (e.g. it is already running and has
not exited) or *phandle* is not a valid package handle of a CPU device
node.stop-selfIN: noneOUT: noneOF places the processor on which the caller was running into the
“stopped” state. The client program is not-resumable.Note: When an MP client program exits, one CPU
invokes the
exit client interface service, the others invoke the
stop-self service.idle-selfIN: noneOUT: noneOF places the CPU on which this service was invoked into an 'idle'
state, saving the *current state* of the client program, so that the
client program may be resumed.A processor in idle state can be resumed using
resume-cpu service defined below or restarted using
start-cpu. If the processor is resumed, it executes
a normal return to the client, as if its call to
idle-self had just completed.Note: When a client program wants to enter the
firmware user interface, one CPU invokes the
enter client interface service, the others invoke the
idle-self service. The rational is that the user
interface may affect the machine state in any way that it desires,
therefore the client shall not depend on it.resume-cpuIN: nodeidOUT: noneThis client interface service is used to resume an *idled* CPU. The
nodeid is the phandle of a CPU node in idle
state.resume-cpu arranges for that CPU to restore the
CPU’s state as saved by
idle-self and begin return to the client, completing
the idle-self client service call that placed the CPU into idle state.
The results are undefined if the CPU identified by *phandle* is not in an
*idle* state by a previous call to the
idle-self client interface service.Note: When the client program is resumed via the GO
(or similar) user interface command, the client program is resumed on the
CPU which called the
enter service; the client program is responsible for
calling the
resume-cpu service to resume other idled CPU's, if
that is the desired client program behavior.BreakpointsIf the breakpoint is taken by the firmware, without the client
program's assistance, the other CPUs will continue to run in the client
program. The client program may field the breakpoint 'trap' or 'vector'
and idle the other CPUs before entering the PROM. The platform binding
document has to specify how this is done to avoid loss of state at
breakpoint time.SerializationThe firmware is a single threaded program, from the client
program's point of view. Only the
idle-self,
stop-self,
enter and
exit client interfaces may be invoked simultaneously
on different CPUs. Furthermore, only a single CPU may invoke the
enter or
exit client interface at any one time. The other CPUs
must use the
idle-self or
stop-self client interface service.Note: The results are undefined if the client program
invokes client interface services including breakpoint traps (other than
the
enter/exit stop-self/idle-self case listed above)
simultaneously on more than a single CPU.Note: Since locking mechanisms are subject to client
program policy, the client program is responsible for implementing any
necessary mechanism to insure that it adheres to this policy. Further,
the client program should disable any preemption mechanism before calling
a client interface service to avoid rescheduling a thread of execution in
the firmware on a different CPU if such a mechanism exists in the client
program.