In the scenarios where ASIL-B endpoint
is hung, MSMC supports unwinding of this situation by auto responding/dropping
pending commands. Below is the description of how MSMC handles different command
types in FFI scenario. Note: For details on FFI sequence please refer Compute
Cluster Spec.
- CPU read/write: The CPU read/write requests to SRAM/EMIF and responses will be
killed at the interface when FFI is active for the corresponding CPU.
- SDMA and cache warm transactions from DRU: DRU (ASIL-B) can be reset if any of
the ASIL-B CPUs are in FFI, since SDMA/cwarm transactions are not tracked in
MSMC. The SDMA/cwarm requests and responses will be killed at the interface when
FFI is active.
- SDMA transactions from SoC ports: Traffic mastered by ASIL-D SoC ports and
targeted to any ASIL- B CPU is not tracked in MSMC. If the slave CPU is in FFI,
then the master SoC will not receive responses. In that case ASIL-D timeout
gaskets will initiate recovery of ASIL-D SoC master.
- Snoops: Snoop responses are faked in RMW queue so that the state machine is not
stuck waiting for snoop responses.
- DVM Sync-complete: DVM completes are faked in RMW queue so that the state
machine is not stuck waiting for DVM completes.
- CPU, SDMA,Snoop transactions: When in FFI, make sure local arb is free from
partial transactions by reverting the local arb state machines back to
reset/idle states when FFI is active.
- Timeout gaskets: Timeout gaskets in MSMC track master timeout as well as slave
far-side credit return timeout and generate timeout interrupts when either of
them times out.
Timeout gaskets are located at CPU and DRU interfaces.
timeout_val[2:0](binary encoding) |
timeout cycles (binary values) |
"000" |
"0000000000010000000000" |
"001" |
"0000000001000000000000" |
"010" |
"0000000100000000000000" |
"011" |
"0000010000000000000000" |
"100" |
"0001000000000000000000" |
"101" |
"0100000000000000000000" |
"110" |
"1000000000000000000000" |
"111" |
"1111111111111111111111" |