]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
arm64: document the choice of page attributes for pgprot_dmacoherent
authorChristoph Hellwig <hch@lst.de>
Sat, 3 Aug 2019 09:38:31 +0000 (12:38 +0300)
committerChristoph Hellwig <hch@lst.de>
Thu, 29 Aug 2019 14:43:33 +0000 (16:43 +0200)
Based on an email from Will Deacon.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Will Deacon <will@kernel.org>
Acked-by: Mark Rutland <mark.rutland@arm.com>
arch/arm64/include/asm/pgtable.h

index 6700371227d1d75e6d1d7251f2ab9ef7703eedae..fd40fb05eb5162507ecd5b23375225f11d43c44c 100644 (file)
@@ -435,6 +435,14 @@ static inline pmd_t pmd_mkdevmap(pmd_t pmd)
        __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN)
 #define pgprot_device(prot) \
        __pgprot_modify(prot, PTE_ATTRINDX_MASK, PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN)
+/*
+ * DMA allocations for non-coherent devices use what the Arm architecture calls
+ * "Normal non-cacheable" memory, which permits speculation, unaligned accesses
+ * and merging of writes.  This is different from "Device-nGnR[nE]" memory which
+ * is intended for MMIO and thus forbids speculation, preserves access size,
+ * requires strict alignment and can also force write responses to come from the
+ * endpoint.
+ */
 #define pgprot_dmacoherent(prot) \
        __pgprot_modify(prot, PTE_ATTRINDX_MASK, \
                        PTE_ATTRINDX(MT_NORMAL_NC) | PTE_PXN | PTE_UXN)