Skip to content

AArch64 BlueFlame WQE posting uses ST4 — no 64B atomicity. Is this correct? #358

Description

@cool-ic

Hi,

After inspecting the source and disassembly, ib_write_lat’s BlueFlame path on AArch64 writes a 64B WQE into the device using function mmio_memcpy_x64, which is vst4q_u64() and is "ST4 instruction" in asm level.

On ARMv8-A, ST4 does not provide 64-byte atomic MMIO. Writes can be split into smaller beats, and arrival order at the device may not be strictly sequential.

Question:

Is using ST4 to post a 64B BlueFlame WQE on AArch64 correct by design? Does the BlueFlame hardware explicitly tolerate non-atomic, potentially out-of-order DWORD writes and reassemble based on DS, or is there any assumed CPU/RC guarantee?
If this is device-tolerant, could you confirm the exact contract the code relies on (and, if possible, point to the PRM section stating it)?

Thanks.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions