123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555 |
- # -*- Mode: Python -*-
- # vim: filetype=python
- ##
- # = CXL devices
- ##
- ##
- # @CxlEventLog:
- #
- # CXL has a number of separate event logs for different types of
- # events. Each such event log is handled and signaled independently.
- #
- # @informational: Information Event Log
- #
- # @warning: Warning Event Log
- #
- # @failure: Failure Event Log
- #
- # @fatal: Fatal Event Log
- #
- # Since: 8.1
- ##
- { 'enum': 'CxlEventLog',
- 'data': ['informational',
- 'warning',
- 'failure',
- 'fatal']
- }
- ##
- # @cxl-inject-general-media-event:
- #
- # Inject an event record for a General Media Event (CXL r3.0
- # 8.2.9.2.1.1). This event type is reported via one of the event logs
- # specified via the log parameter.
- #
- # @path: CXL type 3 device canonical QOM path
- #
- # @log: event log to add the event to
- #
- # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event
- # Record Format, Event Record Flags for subfield definitions.
- #
- # @dpa: Device Physical Address (relative to @path device). Note
- # lower bits include some flags. See CXL r3.0 Table 8-43 General
- # Media Event Record, Physical Address.
- #
- # @descriptor: Memory Event Descriptor with additional memory event
- # information. See CXL r3.0 Table 8-43 General Media Event
- # Record, Memory Event Descriptor for bit definitions.
- #
- # @type: Type of memory event that occurred. See CXL r3.0 Table 8-43
- # General Media Event Record, Memory Event Type for possible
- # values.
- #
- # @transaction-type: Type of first transaction that caused the event
- # to occur. See CXL r3.0 Table 8-43 General Media Event Record,
- # Transaction Type for possible values.
- #
- # @channel: The channel of the memory event location. A channel is an
- # interface that can be independently accessed for a transaction.
- #
- # @rank: The rank of the memory event location. A rank is a set of
- # memory devices on a channel that together execute a transaction.
- #
- # @device: Bitmask that represents all devices in the rank associated
- # with the memory event location.
- #
- # @component-id: Device specific component identifier for the event.
- # May describe a field replaceable sub-component of the device.
- #
- # Since: 8.1
- ##
- { 'command': 'cxl-inject-general-media-event',
- 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8',
- 'dpa': 'uint64', 'descriptor': 'uint8',
- 'type': 'uint8', 'transaction-type': 'uint8',
- '*channel': 'uint8', '*rank': 'uint8',
- '*device': 'uint32', '*component-id': 'str' } }
- ##
- # @cxl-inject-dram-event:
- #
- # Inject an event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2).
- # This event type is reported via one of the event logs specified via
- # the log parameter.
- #
- # @path: CXL type 3 device canonical QOM path
- #
- # @log: Event log to add the event to
- #
- # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event
- # Record Format, Event Record Flags for subfield definitions.
- #
- # @dpa: Device Physical Address (relative to @path device). Note
- # lower bits include some flags. See CXL r3.0 Table 8-44 DRAM
- # Event Record, Physical Address.
- #
- # @descriptor: Memory Event Descriptor with additional memory event
- # information. See CXL r3.0 Table 8-44 DRAM Event Record, Memory
- # Event Descriptor for bit definitions.
- #
- # @type: Type of memory event that occurred. See CXL r3.0 Table 8-44
- # DRAM Event Record, Memory Event Type for possible values.
- #
- # @transaction-type: Type of first transaction that caused the event
- # to occur. See CXL r3.0 Table 8-44 DRAM Event Record,
- # Transaction Type for possible values.
- #
- # @channel: The channel of the memory event location. A channel is an
- # interface that can be independently accessed for a transaction.
- #
- # @rank: The rank of the memory event location. A rank is a set of
- # memory devices on a channel that together execute a transaction.
- #
- # @nibble-mask: Identifies one or more nibbles that the error affects
- #
- # @bank-group: Bank group of the memory event location, incorporating
- # a number of Banks.
- #
- # @bank: Bank of the memory event location. A single bank is accessed
- # per read or write of the memory.
- #
- # @row: Row address within the DRAM.
- #
- # @column: Column address within the DRAM.
- #
- # @correction-mask: Bits within each nibble. Used in order of bits
- # set in the nibble-mask. Up to 4 nibbles may be covered.
- #
- # Since: 8.1
- ##
- { 'command': 'cxl-inject-dram-event',
- 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8',
- 'dpa': 'uint64', 'descriptor': 'uint8',
- 'type': 'uint8', 'transaction-type': 'uint8',
- '*channel': 'uint8', '*rank': 'uint8', '*nibble-mask': 'uint32',
- '*bank-group': 'uint8', '*bank': 'uint8', '*row': 'uint32',
- '*column': 'uint16', '*correction-mask': [ 'uint64' ]
- }}
- ##
- # @cxl-inject-memory-module-event:
- #
- # Inject an event record for a Memory Module Event (CXL r3.0
- # 8.2.9.2.1.3). This event includes a copy of the Device Health info
- # at the time of the event.
- #
- # @path: CXL type 3 device canonical QOM path
- #
- # @log: Event Log to add the event to
- #
- # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event
- # Record Format, Event Record Flags for subfield definitions.
- #
- # @type: Device Event Type. See CXL r3.0 Table 8-45 Memory Module
- # Event Record for bit definitions for bit definiions.
- #
- # @health-status: Overall health summary bitmap. See CXL r3.0 Table
- # 8-100 Get Health Info Output Payload, Health Status for bit
- # definitions.
- #
- # @media-status: Overall media health summary. See CXL r3.0 Table
- # 8-100 Get Health Info Output Payload, Media Status for bit
- # definitions.
- #
- # @additional-status: See CXL r3.0 Table 8-100 Get Health Info Output
- # Payload, Additional Status for subfield definitions.
- #
- # @life-used: Percentage (0-100) of factory expected life span.
- #
- # @temperature: Device temperature in degrees Celsius.
- #
- # @dirty-shutdown-count: Number of times the device has been unable to
- # determine whether data loss may have occurred.
- #
- # @corrected-volatile-error-count: Total number of correctable errors
- # in volatile memory.
- #
- # @corrected-persistent-error-count: Total number of correctable
- # errors in persistent memory
- #
- # Since: 8.1
- ##
- { 'command': 'cxl-inject-memory-module-event',
- 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags' : 'uint8',
- 'type': 'uint8', 'health-status': 'uint8',
- 'media-status': 'uint8', 'additional-status': 'uint8',
- 'life-used': 'uint8', 'temperature' : 'int16',
- 'dirty-shutdown-count': 'uint32',
- 'corrected-volatile-error-count': 'uint32',
- 'corrected-persistent-error-count': 'uint32'
- }}
- ##
- # @cxl-inject-poison:
- #
- # Poison records indicate that a CXL memory device knows that a
- # particular memory region may be corrupted. This may be because of
- # locally detected errors (e.g. ECC failure) or poisoned writes
- # received from other components in the system. This injection
- # mechanism enables testing of the OS handling of poison records which
- # may be queried via the CXL mailbox.
- #
- # @path: CXL type 3 device canonical QOM path
- #
- # @start: Start address; must be 64 byte aligned.
- #
- # @length: Length of poison to inject; must be a multiple of 64 bytes.
- #
- # Since: 8.1
- ##
- { 'command': 'cxl-inject-poison',
- 'data': { 'path': 'str', 'start': 'uint64', 'length': 'size' }}
- ##
- # @CxlUncorErrorType:
- #
- # Type of uncorrectable CXL error to inject. These errors are
- # reported via an AER uncorrectable internal error with additional
- # information logged at the CXL device.
- #
- # @cache-data-parity: Data error such as data parity or data ECC error
- # CXL.cache
- #
- # @cache-address-parity: Address parity or other errors associated
- # with the address field on CXL.cache
- #
- # @cache-be-parity: Byte enable parity or other byte enable errors on
- # CXL.cache
- #
- # @cache-data-ecc: ECC error on CXL.cache
- #
- # @mem-data-parity: Data error such as data parity or data ECC error
- # on CXL.mem
- #
- # @mem-address-parity: Address parity or other errors associated with
- # the address field on CXL.mem
- #
- # @mem-be-parity: Byte enable parity or other byte enable errors on
- # CXL.mem.
- #
- # @mem-data-ecc: Data ECC error on CXL.mem.
- #
- # @reinit-threshold: REINIT threshold hit.
- #
- # @rsvd-encoding: Received unrecognized encoding.
- #
- # @poison-received: Received poison from the peer.
- #
- # @receiver-overflow: Buffer overflows (first 3 bits of header log
- # indicate which)
- #
- # @internal: Component specific error
- #
- # @cxl-ide-tx: Integrity and data encryption tx error.
- #
- # @cxl-ide-rx: Integrity and data encryption rx error.
- #
- # Since: 8.0
- ##
- { 'enum': 'CxlUncorErrorType',
- 'data': ['cache-data-parity',
- 'cache-address-parity',
- 'cache-be-parity',
- 'cache-data-ecc',
- 'mem-data-parity',
- 'mem-address-parity',
- 'mem-be-parity',
- 'mem-data-ecc',
- 'reinit-threshold',
- 'rsvd-encoding',
- 'poison-received',
- 'receiver-overflow',
- 'internal',
- 'cxl-ide-tx',
- 'cxl-ide-rx'
- ]
- }
- ##
- # @CXLUncorErrorRecord:
- #
- # Record of a single error including header log.
- #
- # @type: Type of error
- #
- # @header: 16 DWORD of header.
- #
- # Since: 8.0
- ##
- { 'struct': 'CXLUncorErrorRecord',
- 'data': {
- 'type': 'CxlUncorErrorType',
- 'header': [ 'uint32' ]
- }
- }
- ##
- # @cxl-inject-uncorrectable-errors:
- #
- # Command to allow injection of multiple errors in one go. This
- # allows testing of multiple header log handling in the OS.
- #
- # @path: CXL Type 3 device canonical QOM path
- #
- # @errors: Errors to inject
- #
- # Since: 8.0
- ##
- { 'command': 'cxl-inject-uncorrectable-errors',
- 'data': { 'path': 'str',
- 'errors': [ 'CXLUncorErrorRecord' ] }}
- ##
- # @CxlCorErrorType:
- #
- # Type of CXL correctable error to inject
- #
- # @cache-data-ecc: Data ECC error on CXL.cache
- #
- # @mem-data-ecc: Data ECC error on CXL.mem
- #
- # @crc-threshold: Component specific and applicable to 68 byte Flit
- # mode only.
- #
- # @retry-threshold: Retry threshold hit in the Local Retry State
- # Machine, 68B Flits only.
- #
- # @cache-poison-received: Received poison from a peer on CXL.cache.
- #
- # @mem-poison-received: Received poison from a peer on CXL.mem
- #
- # @physical: Received error indication from the physical layer.
- #
- # Since: 8.0
- ##
- { 'enum': 'CxlCorErrorType',
- 'data': ['cache-data-ecc',
- 'mem-data-ecc',
- 'crc-threshold',
- 'retry-threshold',
- 'cache-poison-received',
- 'mem-poison-received',
- 'physical']
- }
- ##
- # @cxl-inject-correctable-error:
- #
- # Command to inject a single correctable error. Multiple error
- # injection of this error type is not interesting as there is no
- # associated header log. These errors are reported via AER as a
- # correctable internal error, with additional detail available from
- # the CXL device.
- #
- # @path: CXL Type 3 device canonical QOM path
- #
- # @type: Type of error.
- #
- # Since: 8.0
- ##
- {'command': 'cxl-inject-correctable-error',
- 'data': {'path': 'str', 'type': 'CxlCorErrorType'}}
- ##
- # @CxlDynamicCapacityExtent:
- #
- # A single dynamic capacity extent. This is a contiguous allocation
- # of memory by Device Physical Address within a single Dynamic
- # Capacity Region on a CXL Type 3 Device.
- #
- # @offset: The offset (in bytes) to the start of the region where the
- # extent belongs to.
- #
- # @len: The length of the extent in bytes.
- #
- # Since: 9.1
- ##
- { 'struct': 'CxlDynamicCapacityExtent',
- 'data': {
- 'offset':'uint64',
- 'len': 'uint64'
- }
- }
- ##
- # @CxlExtentSelectionPolicy:
- #
- # The policy to use for selecting which extents comprise the added
- # capacity, as defined in Compute Express Link (CXL) Specification,
- # Revision 3.1, Table 7-70.
- #
- # @free: Device is responsible for allocating the requested memory
- # capacity and is free to do this using any combination of
- # supported extents.
- #
- # @contiguous: Device is responsible for allocating the requested
- # memory capacity but must do so as a single contiguous
- # extent.
- #
- # @prescriptive: The precise set of extents to be allocated is
- # specified by the command. Thus allocation is being managed
- # by the issuer of the allocation command, not the device.
- #
- # @enable-shared-access: Capacity has already been allocated to a
- # different host using free, contiguous or prescriptive policy
- # with a known tag. This policy then instructs the device to make
- # the capacity with the specified tag available to an additional
- # host. Capacity is implicit as it matches that already
- # associated with the tag. Note that the extent list (and hence
- # Device Physical Addresses) used are per host, so a device may
- # use different representations on each host. The ordering of the
- # extents provided to each host is indicated to the host using per
- # extent sequence numbers generated by the device. Has a similar
- # meaning for temporal sharing, but in that case there may be only
- # one host involved.
- #
- # Since: 9.1
- ##
- { 'enum': 'CxlExtentSelectionPolicy',
- 'data': ['free',
- 'contiguous',
- 'prescriptive',
- 'enable-shared-access']
- }
- ##
- # @cxl-add-dynamic-capacity:
- #
- # Initiate adding dynamic capacity extents to a host. This simulates
- # operations defined in Compute Express Link (CXL) Specification,
- # Revision 3.1, Section 7.6.7.6.5. Note that, currently, establishing
- # success or failure of the full Add Dynamic Capacity flow requires
- # out of band communication with the OS of the CXL host.
- #
- # @path: path to the CXL Dynamic Capacity Device in the QOM tree.
- #
- # @host-id: The "Host ID" field as defined in Compute Express Link
- # (CXL) Specification, Revision 3.1, Table 7-70.
- #
- # @selection-policy: The "Selection Policy" bits as defined in
- # Compute Express Link (CXL) Specification, Revision 3.1,
- # Table 7-70. It specifies the policy to use for selecting
- # which extents comprise the added capacity.
- #
- # @region: The "Region Number" field as defined in Compute Express
- # Link (CXL) Specification, Revision 3.1, Table 7-70. Valid
- # range is from 0-7.
- #
- # @tag: The "Tag" field as defined in Compute Express Link (CXL)
- # Specification, Revision 3.1, Table 7-70.
- #
- # @extents: The "Extent List" field as defined in Compute Express Link
- # (CXL) Specification, Revision 3.1, Table 7-70.
- #
- # Features:
- #
- # @unstable: For now this command is subject to change.
- #
- # Since: 9.1
- ##
- { 'command': 'cxl-add-dynamic-capacity',
- 'data': { 'path': 'str',
- 'host-id': 'uint16',
- 'selection-policy': 'CxlExtentSelectionPolicy',
- 'region': 'uint8',
- '*tag': 'str',
- 'extents': [ 'CxlDynamicCapacityExtent' ]
- },
- 'features': [ 'unstable' ]
- }
- ##
- # @CxlExtentRemovalPolicy:
- #
- # The policy to use for selecting which extents comprise the released
- # capacity, defined in the "Flags" field in Compute Express Link (CXL)
- # Specification, Revision 3.1, Table 7-71.
- #
- # @tag-based: Extents are selected by the device based on tag, with
- # no requirement for contiguous extents.
- #
- # @prescriptive: Extent list of capacity to release is included in
- # the request payload.
- #
- # Since: 9.1
- ##
- { 'enum': 'CxlExtentRemovalPolicy',
- 'data': ['tag-based',
- 'prescriptive']
- }
- ##
- # @cxl-release-dynamic-capacity:
- #
- # Initiate release of dynamic capacity extents from a host. This
- # simulates operations defined in Compute Express Link (CXL)
- # Specification, Revision 3.1, Section 7.6.7.6.6. Note that,
- # currently, success or failure of the full Release Dynamic Capacity
- # flow requires out of band communication with the OS of the CXL host.
- #
- # @path: path to the CXL Dynamic Capacity Device in the QOM tree.
- #
- # @host-id: The "Host ID" field as defined in Compute Express Link
- # (CXL) Specification, Revision 3.1, Table 7-71.
- #
- # @removal-policy: Bit[3:0] of the "Flags" field as defined in
- # Compute Express Link (CXL) Specification, Revision 3.1,
- # Table 7-71.
- #
- # @forced-removal: Bit[4] of the "Flags" field in Compute Express
- # Link (CXL) Specification, Revision 3.1, Table 7-71. When set,
- # the device does not wait for a Release Dynamic Capacity command
- # from the host. Instead, the host immediately looses access to
- # the released capacity.
- #
- # @sanitize-on-release: Bit[5] of the "Flags" field in Compute Express
- # Link (CXL) Specification, Revision 3.1, Table 7-71. When set,
- # the device should sanitize all released capacity as a result of
- # this request. This ensures that all user data and metadata is
- # made permanently unavailable by whatever means is appropriate
- # for the media type. Note that changing encryption keys is not
- # sufficient.
- #
- # @region: The "Region Number" field as defined in Compute Express
- # Link Specification, Revision 3.1, Table 7-71. Valid range
- # is from 0-7.
- #
- # @tag: The "Tag" field as defined in Compute Express Link (CXL)
- # Specification, Revision 3.1, Table 7-71.
- #
- # @extents: The "Extent List" field as defined in Compute Express
- # Link (CXL) Specification, Revision 3.1, Table 7-71.
- #
- # Features:
- #
- # @unstable: For now this command is subject to change.
- #
- # Since: 9.1
- ##
- { 'command': 'cxl-release-dynamic-capacity',
- 'data': { 'path': 'str',
- 'host-id': 'uint16',
- 'removal-policy': 'CxlExtentRemovalPolicy',
- '*forced-removal': 'bool',
- '*sanitize-on-release': 'bool',
- 'region': 'uint8',
- '*tag': 'str',
- 'extents': [ 'CxlDynamicCapacityExtent' ]
- },
- 'features': [ 'unstable' ]
- }
|