If all of the responses to a
transaction have not been received within the time allotted (programmed by the
Timeout Value Register (Base Address + 0x14)) or if a transaction was never accepted
(Command Timeout) and placed on the timeout queue, then a transaction is considered
to have timed out. The interrupt indicates that the gasket is flushing the
transaction and that information has been logged about the transaction that timed
out in the following registers:
- Error Transaction
Valid/Dir/ID Register (Base Address + 0x38)
- Error Transaction
RouteID/OrderID Register (Base Address + 0x3C)
- Error Transaction Bytecnt
Register (Base Address + 0x40)
- Error Transaction Upper
Address Register (Base Address + 0x44)
- Error Transaction Lower
Address Register (Base Address + 0x48)
When servicing a Transaction Timeout Error, software should perform the following
steps:
- Read the Timeout Error Info Register (Base Address + 0x30) to determine how
many transaction timeouts have occurred since last serviced.
- Read the Error Transaction Valid/Dir/ID Register (Base Address + 0x38). If
the valid field is 0 or the type field is Unexpected Response, then these
registers do not contain any information about the timed out transaction,
skip to step 4.
- Read the information from the following registers:
- Error Transaction RouteID/OrderID Register (Base Address +
0x3C)
- Error Transaction Bytecnt Register (Base Address + 0x40)
- Error Transaction Upper Address Register (Base Address + 0x44)
- Error Transaction Lower Address Register (Base Address + 0x48)
- Error Transaction Lower Address Register (Base Address + 0x48)
- Write the number of timed out events serviced this ISR (read in step 1) to
the Timeout Error Info Register (Base Address + 0x30).
- Clear the interrupt by writing to the appropriate bit in the Error Interrupt
Enabled Status/Clear Register (Base Address + 0x24).
If the write in step 4 does not decrement the value to 0 (because a new transaction
has timed out), then the interrupt will re-issue after the write in step 5.
This section only describes how to service the interrupt. The system integrator must
decide what actions to take based on this information. Suggestions include:
- Log the information for debug purposes
- Determine the target that is
unresponsive and take appropriate action
- Reset target
- Reset main SoC
- Reset whole
device