86 lines
3.3 KiB
ReStructuredText
86 lines
3.3 KiB
ReStructuredText
.. _OPAL_PCI_SET_PHB_MEM_WINDOW:
|
|
|
|
OPAL_PCI_SET_PHB_MEM_WINDOW
|
|
===========================
|
|
|
|
.. code-block:: c
|
|
|
|
#define OPAL_PCI_SET_PHB_MEM_WINDOW 28
|
|
|
|
int64_t opal_pci_set_phb_mem_window(uint64_t phb_id,
|
|
uint16_t window_type,
|
|
uint16_t window_num,
|
|
uint64_t addr,
|
|
uint64_t pci_addr,
|
|
uint64_t size);
|
|
|
|
.. note:: Appears to be POWER7 p7ioc specific. Likely to be removed soon.
|
|
|
|
**WARNING:** following documentation is from old sources, and is possibly
|
|
not representative of OPALv3 as implemented by skiboot. This should be
|
|
used as a starting point for full documentation.
|
|
|
|
The host calls this function to set the PHB PCI memory window parameters for
|
|
PHBs. OPAL sets IO space for P7IOC and KVM cannot relocate this. KVM should
|
|
changes these windows only while all devices below the PHB are disabled for
|
|
PCI memory ops, and with the target window in disabled state (where supported
|
|
by PHB hardware).
|
|
|
|
``phb_id``
|
|
is the value from the PHB node ibm,opal-phbid property.
|
|
|
|
``window_type``
|
|
specifies 32-bit or 64-bit PCI memory
|
|
|
|
'0' selects IO space, and is not supported for relocation. OPAL
|
|
returns OPAL_UNSUPPORTED for this value.
|
|
|
|
'1' selects 32-bit PCI memory space
|
|
|
|
'2' selects 64 bit PCI memory space
|
|
|
|
``window_num``
|
|
is the MMIO window number within the specified PCI memory space
|
|
|
|
``starting_real_address``
|
|
specifies the location within sytsem (processor)real
|
|
address space this MMIO window starts. This must be a location within the
|
|
IO Hub or PHB node ibm,opal-mmio-real property.
|
|
|
|
``starting_pci_address``
|
|
specifies the location within PCI 32 or 64-bit
|
|
address space that this MMIO window starts. For 64-bit PCI memory, this
|
|
must be within the low order 60 bit (1 Exabyte) region of PCI memory.
|
|
Addresses above 1EB are reserved to IODA definitions.
|
|
|
|
``segment_size``
|
|
defines the segment size of this window, in the same format
|
|
as and a matching value from the ibm,opal-memwin32/64 <segment_size>
|
|
property. The window total size, in bytes, is the segment_size times the
|
|
ibm,opal-memwin32/64 <num_segments> property and must not extend beyond
|
|
the ibm,opal-mmio-real property range within system real address space.
|
|
The total MMIO window size is the segment_size times the num_segments
|
|
supported for the specifice window. The host must assure that the
|
|
cumulative address space for all enabled windows does not exceed the total
|
|
PHB 32-bit or 64-bit real address window space, or extend outside these
|
|
address ranges, and that no windows overlap each other in real or PCI
|
|
address space. OPAL does not validate those conditions.
|
|
|
|
A segment size of '0' indicates to disable this MMIO window. If the PHB
|
|
hardware does not support disabling a window, OPAL returns OPAL_UNSUPPORTED
|
|
status.
|
|
|
|
The size of the system real and PCI memory spaces are equal and defined by
|
|
segment_size times the number of segments within this MMIO window.
|
|
|
|
The host must set PHB memory windows to be within the system real address
|
|
ranges indicated in the PHB parent HDT hub node ibm,opal-mmio-real property.
|
|
|
|
Return value:
|
|
|
|
.. code-block:: c
|
|
|
|
if (!phb)
|
|
return OPAL_PARAMETER;
|
|
if (!phb->ops->set_phb_mem_window)
|
|
return OPAL_UNSUPPORTED;
|