Revision history   OpenPOWER Library

 11.1. AFU Descriptor Format

 The length of the AFU descriptor is implementation specific. All accesses to the AFU descriptor, including the AFU configuration record, must be either 32-bit or 64-bit operations. The AFU descriptor starts at the offset defined in the vendor-specific, extended configuration record from the start of the privileged 2 area.

 The AFU descriptor provides system software with information specific to the AFU. The AFU descriptor also provides a mechanism for assigning regions of the problem state area to system processes attached to the AFU. The assignment is based on the process handle or on the offset of the process element in the linked list. The region assigned to a process handle of x'0' corresponds to the beginning of the AFU per-process problem state area (that is, the area starting at the AFU_PSA_offset within the problem state area). The region assigned to a process handle of "n" corresponds to the problem state area starting at:

AFU_PSA_offset + (n × AFU_PSA_length × 4096); where 0 n (num_of_processes - 1).

 The AFU descriptor contains AFU configuration records that provide system software with the information that is typically provided by the PCIe configuration space if the AFU was a PCIe device. The format of the AFU configuration record can either be the standard 256-byte configuration space or the extended 4 KB configuration space defined by the PCIe specification. If multiple AFU configuration records exist, each record corresponds to a physical function of the AFU. The AFU configuration record space is defined in little-endian format to conform to the PCIe standard.

 Note: The length of each configuration record is selectable in 256-byte blocks. The AFU does not have to reserve a full 4 KB for the extended configuration space.

 The AFU descriptor also contains an AFU error buffer. The AFU error buffer is intended to be used by the AFU to report application-specific errors. This data can be collected by system software and combined with adapter error data for use in creating error logs or other problem determination.

 Note: Some operating systems have a base page size of 64 KB. To be compatible with a base page size of 64 KB, the AFU_PSA_offset should start on a 64 KB boundary and the AFU_PSA_length should also be a multiple of 64 KB. For implementation requirements on the alignment and size of the problem state area, refer to the design guides for the target operating system.

 Table 11.1, “AFU Descriptor” defines the format of the AFU descriptor for a CAIA-compliant device.

 

Table 11.1. AFU Descriptor

Register Offset

Field Name

Bits

Description

 x'0'

 num_ints_per_process

 0:15

 The power-on reset value of this field specifies the minimum number of interrupts required by the AFU for each process supported. This field is read-only.

 Implementation Note: This value does not include LISN0 used by the PSL for reporting translation faults. A value of zero in this field implies that the AFU does not require any interrupts.

 num_of_processes

 16:31

 This field specifies the maximum number of processes that can be supported by the AFU. This field can be written by system software to a number less than the power-on value. System software is required to read back the value to determine if the devices support reducing the number of processes supported.

 Implementation Note: If the value written to this field by system software is less than the minimum number of processes required to be supported, an implementation can return the minimum number of processes or the power-on value.

For a dedicated process, this field must be set to x'0001'.

 num_of_afu_CRs

 32:47

 This field specifies the number of configuration records contained in the configuration record area. A length of x'0' indicates that an AFU configuration record does not exist. This is a read-only field.

 req_prog_model

 48:63

 This field specifies the programming model supported by the AFU. This is a read-only field.

Bit

Description

48:58

Reserved (set to '0').

59

Dedicated process (read-only).

0

The AFU does not support dedicated processes.

1

The AFU does support dedicated processes.

60

Reserved (set to '0').

61

AMBAR

0

The AFU does not support AFU-directed virtualization.

1

The AFU does support AFU-directed virtualization.

62

Reserved (set to '0').

63

Shared, time-sliced support (read-only).

0

The AFU does not support shared, time-sliced virtualization.

1

The AFU does support shared, time-sliced virtualization.

 x'8' - x'18'

 Reserved

 0:63

 Reserved (set to x'0').

 x'20'

 Reserved

 0:7

 Reserved (set to x'0').

 AFU_CR_len

 8:63

 This field specifies the length of each AFU configuration record in multiples of 256 bytes. If more than one configuration record is present, the total length of the configuration record area is (num_of_CRs × AFU_CR_len × 256). A length of x'0' indicates that an AFU configuration record does not exist. This is a read-only field.

 x'28'

 AFU_CR_offset

 0:63

 This field specifies the 256-byte aligned offset of the AFU configuration record from the start of the AFU descriptor. This field contains a 64-bit pointer to the start of the AFU configuration records. The lower 8 bits of the pointer are always '0' (256 byte aligned). This is a read-only field.

 x'30'

 PerProcessPSA_control

 0:7

Bit

Description

0:5

Reserved (set to '0').

6

Per-process problem state area required (read-only).

0

A per-process problem state area is not required.

1

A per-process problem state area is required. The per-process problem state area is a subset of the overall problem state area. The problem state area required bit must also be set if this bit is set.

7

Problem state area required (read-only).

0

A problem state area is not required.

Only the necessary area for the AFU descriptor, configuration records, and error buffers area are mapped into the system address space.

1

A problem state area is required.

 PerProcessPSA_length

 8:63

 If the per-process problem state area required bit is set, this field specifies the length of each per-process problem state area, in multiples of 4 KB. The size of per-process problem state area required is determined by:

  PerProcess_area = PerProcessPSA_length × 4K × num_of_processes

 If the per-process problem state area required bit is not set, this field is reserved and returns x'0'.

 This is a read-only field.

 Implementation Note: Operating systems using a base page size of 64 KB might require the problem state area to be a multiple of 64 KB. To assign different regions of the problem state area to each process (PerProcessPSA_control[6] = '1'), each region might be required to be a multiple of 64 KB. See the target operating system details for more information.

 x'38'

 PerProcessPSA_offset

 0:63

 This field specifies the 4 KB aligned offset of the per-process problem state area from the start of the problem state area. This field contains a 64-bit pointer to the start of the per-process problem state area. The lower 12-bits of the pointer are always '0' (4 KB aligned). This is a read-only field.

 Implementation Note: Operating systems using a base page size of 64 KB might require the problem state area to be aligned on a 64 KB boundary. To assign different regions of the problem state area to each process (PerProcessPSA_control[6] = '1'), each region might be required to be aligned on a 64 KB boundary. See the target operating system details for more information.

 x'40'

 Reserved

 0:7

 Reserved (set to x'0').

 AFU_EB_len

 8:63

 This field specifies the length of the AFU error buffer in multiples of 4 KB. A length of x'0' indicates that an AFU error buffer does not exist. This is a read-only field.

 x'48'

 AFU_EB_offset

 0:63

 This field specifies the 4 KB aligned offset of the AFU error buffer information from the start of the AFU descriptor. This field contains a 64-bit pointer to the start of the AFU error status information. The lower 12-bits of the pointer are always '0'. This is a read-only field.

 x'50'

 Paged Resolution

Handle

 0:63

Bit

Description

0

The AFU supports receiving paged resolution responses from the OS (read only)

0

The AFU ignores writes to x'50' and x'58'.

1

The AFU requires the OS to write x'50' and x'58' for the resolution of any data storage/segment interrupt where the OS responded with Continue (PSL_TFC_An[C] = '1').

1:15

Reserved.

16:31

Command Tag. The tag of the operation being resolved by the resolution MMIO sequence. The value written to this field is the value provided by the PSL_PEHandle_An[CMD_Tag].

Implementation Note: This field is implementation dependent and might not be supported by some implementations. See the implementation-specific documentation for more details.

32:47

Reserved.

48:63

Process Handle of the paged transaction that has been resolved.

 This is a read/write field.

 x'58'

 Paged Resolution EA

 0:63

Bit

Description

0:51

Effective address of the paged transaction that has been resolved.

52:55

Resolution.

x'0'

Page fault resolved

x'1'

Addressing error

x'2'

Protection fault on a read operation

x'3'

Protection fault on a write operation

56:57

Reserved.

58:63

Page Size Mask (the number of bits to ignore for EA compare).

x'0'

4 KB page

x'1'

8 KB page

x'2'

16 KB page

...

and so on.

 This is a write only field.



loading table of contents...