Revision history   OpenPOWER Library

 B.6. AFU Recovery Sequence Example

 A high-level description of the procedure that the hypervisor should follow when recovering an AFU when an operating system has terminated without releasing the AFU is as follows:

  1. Disable the AFU.

    1. Write the AFU_CNTL_An[RA] = '1'

    2. Wait for AFU_CNTL_An[RS] = '10'

  2. Purge the PSL.

    1. Write the PSL_SCNTL_An[Pc] = '1'

    2. Wait for PSL_SCNTL_An[Ps] = '11'

      While waiting for the purge to complete, the hypervisor must respond to all interrupts reported with the PSL_DSISR_An with either acknowledge or continue, depending on the interrupt type.

  3. Invalidate the TLBs.

    1. Write the PSL_LBISEL Register with the PID and LPID (optional depending on the value of PSL_TLBIA[IQ].

    2. EIEIO

    3. Write PSL_TLBIA[IQ] = '00' or '10' or '11' depending on how selective you want to be on TLB invalidates.

    4. Wait until the TLBs have been invalidated.

  4. Invalidate the SLBs.

    1. Write the PSL_LBISEL Register with the PID and LPID (optional depending on the value of PSL_SLBIA[IQ].

    2. EIEIO

    3. Write PSL_SLBIA[IH, IQ] depending on how selective you want to be on SLB invalidates.

    4. Wait until the SLBs have been invalidated.

  5. Set the PSL state to require a download of an AFU before allowing an AFU to be enabled.

    1. Write the PSL_SR_An[CR] both to '1'.

  6. Set the PSL to normal operation.

    1. Write the PSL_SCNTL_An[Ps, Pc] both to '0'.

    2. Wait until the PSL_SCNTL_An[Ss, Sc] fields are both '00'.


loading table of contents...