Function-Level Reset (FLR)
FLR enables the user application to reset a specific function on the endpoint; the FLR only affects the targeted function. When a specific VF is reset, only that VF's resources are reset. When a PF is reset, all of the PF's resources, including those of its associated VFs, are reset. The link state is not affected by an FLR.
The following figure shows the handshake of FLR_DONE and
FLR_IN_PROGRESS in PF3, and is applicable to any
PFs/VFs undergoing FLR.
When the host sets the FLR bit in an endpoint function's device control register with a
CfgWr, the PCIe Controller first
responds with the completion. Then it initiates the FLR. The affected
function's configuration registers are reset as described in the PCIe
specification.
The PCIe Controller asserts the FLR_IN_PROGRESS and
VF_FLR_IN_PROGRESS outputs to the user application,
indicating the PFs and VFs that received a FLR.
When the PCIe Controller asserts FLR_IN_PROGRESS[n],
the user application must clear any pending transactions associated with the
function (PF/VF) being reset. Then, the user application must assert
FLR_DONE[n] and hold
FLR_DONE[n] high until the de-assertion of
FLR_IN_PROGRESS[n]. At the same time, the
associated PF/VF undergoes an internal re-programming and retrieves the
original user configurations. Upon the assertion of
FLR_DONE[n] from both ends (user and
internal reprogramming), the PCIe Controller de-asserts
FLR_IN_PROGRESS[n], at which time the user
application must de-assert FLR_DONE[n].
While the FLR_IN_PROGRESS and VF_FLR_IN_PROGRESS
outputs are high, any configuration or memory or I/O requests the function
receives are silently discarded as permitted by the PCIe specification.
Each function's Bus Master Enable bit in the Command Register is also reset upon FLR. The
client can only restart outbound traffic after the host sets the Bus Master
Enable bit through a CfgWr.
In the event of an FLR, requests on the AXI interface are handled as follows:
- In progress write requests complete normally. The client should not initiate any additional write requests from the function under FLR.
- Read requests from the affected function return
SLVERRonRRESP. - The AXI address translation registers are not affected by FLR for any function.