• Robin Murphy's avatar
    iommu/arm-smmu-v3: Document MMU-700 erratum 2812531 · 309a15cb
    Robin Murphy authored
    To work around MMU-700 erratum 2812531 we need to ensure that certain
    sequences of commands cannot be issued without an intervening sync. In
    practice this falls out of our current command-batching machinery
    anyway - each batch only contains a single type of invalidation command,
    and ends with a sync. The only exception is when a batch is sufficiently
    large to need issuing across multiple command queue slots, wherein the
    earlier slots will not contain a sync and thus may in theory interleave
    with another batch being issued in parallel to create an affected
    sequence across the slot boundary.
    
    Since MMU-700 supports range invalidate commands and thus we will prefer
    to use them (which also happens to avoid conditions for other errata),
    I'm not entirely sure it's even possible for a single high-level
    invalidate call to generate a batch of more than 63 commands, but for
    the sake of robustness and documentation, wire up an option to enforce
    that a sync is always inserted for every slot issued.
    
    The other aspect is that the relative order of DVM commands cannot be
    controlled, so DVM cannot be used. Again that is already the status quo,
    but since we have at least defined ARM_SMMU_FEAT_BTM, we can explicitly
    disable it for documentation purposes even if it's not wired up anywhere
    yet.
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Reviewed-by: default avatarNicolin Chen <nicolinc@nvidia.com>
    Link: https://lore.kernel.org/r/330221cdfd0003cd51b6c04e7ff3566741ad8374.1683731256.git.robin.murphy@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    309a15cb
arm-smmu-v3.h 21.4 KB